/named

Don't pay for Develop.

Primary LanguageSvelte

Dev Log

Sveltekit TailwindCSS Prisma PlanetScale Redis Hooks


๊ธฐํš

  • ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ณตํ†ต์ ์œผ๋กœ ๊ฒช๋Š” ๋ฌธ์ œ๊ฐ€ ์ž์ฃผ ๋ณด์ž„( ๋ถ€ํŠธ์บ ํ”„ ์ฐธ์—ฌ ์œ ๋ฌด, ์‚ฌ์ˆ˜ ๋ถ€์žฌ๋“ฑ )

  • ๊ฐœ์ธ์ ์œผ๋กœ ๊นจ๋‹ฌ์€ ์ ์€ ๋ณธ์งˆ์ ์ธ ๋ฌธ์ œ๋Š” ๋‚ด ์ž์‹ ์—๊ฒŒ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉํ–ฅ์„ฑ(๊ฒฝํ—˜ ๊ณต์œ , ๋™๊ธฐ ๋ถ€์—ฌ)์„ ํ˜„์ง์ž๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์ด๋ฅผ ์กฐ๊ธˆ ๋” ํ˜ผ์ž์˜ ํž˜์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ?

  • ๋ถ€ํŠธ์บ ํ”„๋ฅผ ๋‚˜์™”๋‹ค๊ณ  ์ทจ์—…ํ•˜๋Š” ๊ฒƒ๋„์•„๋‹ˆ๋ฉฐ ์ข‹์€ ์‚ฌ์ˆ˜๊ฐ€ ์žˆ๋‹ค๊ณ ํ•ด์„œ ์ข‹์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

  • ๋ถ€ํŠธ์บ ํ”„์— ์ฐธ์—ฌํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ, ์—ฌ๋ ฅ์ด ์•ˆ๋˜๋Š” ์‚ฌ๋žŒ์—๊ฒŒ๋„ ์–‘์งˆ์˜ ์ •๋ณด๋ฅผ ์ฐพ์•„ ์ค„ ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค.

  • ๋ฆฌ๋”๊ธ‰์— ๊ฐœ๋ฐœ์ž ์กฐ์–ธ์„ ๋“ค์„ ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์ด ์žˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค.

  • ๋ˆ์„ ํˆฌ์ž ํ•˜์ง€์•Š๋”๋ผ๋„ ๋‹ˆ์ฝœ๋ผ์Šค์ฒ˜๋Ÿผ, ์—˜๋ฆฌ์ฒ˜๋Ÿผ, ํ…Œ์˜ค์ฒ˜๋Ÿผ ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค.

  • ์„œ๋กœ์—๊ฒŒ ์„ ํ•œ ์˜ํ–ฅ๋ ฅ์„ ์ฃผ์–ด ๋Œ€ํ•œ๋ฏผ๊ตญ ๊ฐœ๋ฐœ์ž ๋ชจ๋‘๊ฐ€ ํ•จ๊ป˜ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด๋ณด์ž!



๋ชฉํ‘œ

  • A - Z ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ

  • ์„ ํ•œ ์˜ํ–ฅ๋ ฅ์„ ์ฃผ๋Š” ์‚ฌ๋žŒ์ด ๋˜๊ณ  ์‹ถ๋‹ค๋Š” ๊ฐœ์ธ์  ๋ฐ”๋žจ ์„ฑ์ทจ

  • ์ž๊ธฐ ์ฃผ๋„, ์žฅ์ธ ์ •์‹ , ๋ฌธ์ œ ํ•ด๊ฒฐ๋ ฅ์„ ๊ฐ–์ถ˜ ์ฐธ๋œ ๊ฐœ๋ฐœ์ž๋กœ ๋„์•ฝ

  • ์‹œ๋‹ˆ์–ด, ์ค‘๊ธ‰๊ฐœ๋ฐœ์ž๋“ค์˜ ์ฐธ์—ฌ๋ฅผ ๋†’์—ฌ ํ›Œ๋ฅญํ•œ ๊ฐœ๋ฐœ ์‚ฐ์—… ๋ฌธํ™” ์กฐ์„ฑ



Svelte

  • ์ „์ฒด ์ฝ”๋“œ๋ผ์ธ ์ ˆ๊ฐ, index๊ธฐ์ค€ 22์ค„(.vue) -> 4์ค„(.svelte)
๊ธฐ์กด์—๋Š” ๊ธฐ์ˆ ์„ ๋”ฐ๋ผ๊ฐ€๊ธฐ๋งŒ ํ–ˆ๋Š”๋ฐ ์ด์ œ๋Š” ์•ž์„œ๋‚˜๊ฐ€๋Š” ์œ„์น˜์— ์„œ๊ณ  ์‹ถ์€ ์š•์‹ฌ.
ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ์„œ ์ƒˆ๋กœ์šด ํŠธ๋ Œ๋“œ์— ๋Œ€ํ•œ ํฅ๋ถ„
๋„์ „ ์ •์‹ ๊ณผ ๋”๋ถˆ์–ด ๋‚ด๊ฐ€ ์ข‹์•„ํ•˜๋Š” ๊ตญ/๋‚ด์™ธ ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ทน์ฐฌํ•˜๋Š” ์ด์œ ๊ฐ€ ๊ถ๊ธˆํ–ˆ๊ณ  ๋ชธ์†Œ ์ฒด๊ฐํ•˜๊ธฐ ์œ„ํ•ด
๊ธฐ์กด์— vue2๋ฅผ ์‚ฌ์šฉํ–ˆ๋˜ ๋‚ด๊ฒŒ ์ง„์ž…์žฅ๋ฒฝ์ด ์ƒ๋‹นํžˆ ๋‚ฎ๋‹ค.
๊ณต์‹ ๋ฌธ์„œ๊ฐ€ ์ƒ๋‹นํžˆ ํ›Œ๋ฅญํ•˜๋‹ค.
rich haris์˜ ๋งˆ์ธ๋“œ์™€ ๊ทธ์˜ ํ™œ๋™์ด ๋„ˆ๋ฌด ์ธ์ƒ ๊นŠ์—ˆ๋‹ค.



NestJs

  • Authentication & Authorizaion ๊ตฌํ˜„
๊ฒฐ์ฝ” ๋‚ฎ์ง€ ์•Š์€ ๋Ÿฌ๋‹ ์ปค๋ธŒ(TypeScript, GraphQL) ์ž๊ธฐ์ธ์ง€์™€ ๊ฒฐ๋‹จ ํ•„์š”.
์ฒด๊ณ„ํ™”๋œ ๋ฐฑ์—”๋“œ๊ฐ€ ๊ตฌ์ถ• ๊ฐ€๋Šฅํ–ˆ์ง€๋งŒ ํ•ด๋‹น ์Šคํƒ์ด ํ˜„์žฌ ์ƒํ™ฉ์—์„œ ์ตœ์„ ์ฑ…์ธ์ง€ ๊ณ ๋ฏผ



NestJs -> firebase vs supabase -> SveltKit

  • LightHouse SEO score 100

  • API ์„ค๊ณ„(/routes/api)

  • Silent endpoints๋กœ load script ์ƒ๋žตํ•˜์—ฌ server-side ์ฝ”๋“œ ๋ผ์ธ ์ ˆ๊ฐ.

  • action method / Ajax ๊ต์ฐจ ์š”์ฒญ (์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋”๋ผ๋„ form ์š”์ฒญ๊ฐ€๋Šฅ)

ํ˜„์žฌ ์ƒํ™ฉ์—์„œ๋Š” ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•˜๋Š”๋ฐ ๋งŽ์€ ๋น„์šฉ์„ ๋“ค์ด๊ณ  ์‹ถ์ง€ ์•Š์•˜์Œ.
์‚ฌ์‹ค ์—ฌ๊ธฐ์—๋Š” ๋ชจ์ˆœ์ด ์žˆ์Œ, ์‹œ๊ฐ„์„ ๋“ค์—ฌ ์ž˜ ์„ค๊ณ„๋œ ํ”„๋กœ๊ทธ๋žจ์€ ์‹œ๊ฐ„์ด ์ง€๋‚  ์ˆ˜๋ก ๊ฐœ๋ฐœ ๋น„์šฉ์ด ์ ์–ด์ง
ํ•˜์ง€๋งŒ, ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์ด๋‹ˆ ๋งŒํผ ๋‚ด๊ฐ€ ์ข‹์•„ํ•˜๋Š” ๊ฒƒ์„ ํ•ด์•ผ ๊พธ์ค€ํžˆ ํ•  ์ˆ˜ ์žˆ๊ธฐ์— ๋‹น์žฅ์€ ์„ ํƒ๊ณผ ์ง‘์ค‘์ด ํ•„์š”
sveltekit route๋กœ ์„œ๋ฒ„๋กœ์ง์„ ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์„œ ๋ฐฑ์—”๋“œ ์ง€์‹๊ณผ SSR, SSG์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ์™€ ์ดํ•ด๋„๋ฅผ ๋†’์ด๊ณ  ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋กœ์šฐ๋ ˆ๋ฒจ ์ง€์‹์„ ์Œ“์„ ์ˆ˜ ์žˆ์Œ.



Gitpod

  • ์‹œ๊ฐ„๊ณผ ์žฅ์†Œ์˜ ์ œ์•ฝ ์—†์ด ์ผ๊ด€๋œ ํ”„๋กœ์ ํŠธ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์…‹ํŒ…

  • ํด๋ผ์šฐ๋“œ Postgres ์ด๋ฏธ์ง€๋ฅผ ํ†ตํ•ด DB ์—ฐ๊ฒฐ

 ๊ฐœ์ธ ํ™œ์šฉ๋„๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ๋–จ์–ด์ง, ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ ์ž‘์—…ํ•  ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ์—†๋‹ค๋Š” ์ .
 ์ œํ•œ๋œ ์ž‘์—… ์‹œ๊ฐ„, ํ•œ๋‹ฌ 50์‹œ๊ฐ„
 ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ(ํ”ผ์‹œ๋ฐฉ์—์„œ๋„ ์ฝ”๋”ฉ, ์‹œ๊ณจ์ง‘์—์„œ๋„ ์ฝ”๋”ฉ)๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๊ตณ์ด Gitpod์˜ ๋ฉ”๋ฆฌํŠธ๋Š” ์ง€๊ธˆ ๋‹น์žฅ ์ฐพ๊ธฐ ์–ด๋ ต๋‹ค.
 ํŒ€๋‹จ์œ„์˜ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณผ ๋•Œ๋„ ๊ฐœ๋ฐœ์ž๋Š” ๊ฐœ๊ฐœ์ธ์ด ์„ ํ˜ธํ•˜๋Š” ๊ฐœ๋ฐœํ™˜๊ฒฝ์—์„œ ์ž‘์—…ํ•  ๋•Œ ์ƒ์‚ฐ์ ์ธ ์ธก๋ฉด์—์„œ๋„ ์ข‹์€๋ฐ 
 ๊ตณ์ด ํ”„๋กœ์ ํŠธ๋‹จ์˜ ํ™˜๊ฒฝ์„ ํ†ต์ผํ•˜์—ฌ ๊ฐ•์ œํ•  ํ•„์š”์„ฑ์ด ์žˆ๋Š” ๊ฒƒ์ธ๊ฐ€ํ•˜๋Š” ์˜๋ฌธ.



Gitpod -> Docker-compose

  • ๋ชจ๋“  ๋กœ์ปฌ์— postgressDB ํ™˜๊ฒฝ ์„ค์ •.
 Gitpod์„ ๊ฒฝํ—˜ํ•œ ์ด๋ž˜๋กœ ๋กœ์ปฌ ์ปดํ“จํ„ฐ ์˜์กด๋„, ์†Œํ”„ํŠธ์›จ์–ด ์„ค์น˜ ๋น„์šฉ์„ ์ œ๊ฑฐํ•˜๊ณ  ์‹ถ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ฌ



Docker-compose -> Prisma/Railway

  • ํด๋ผ์šฐ๋“œ DB ํ™˜๊ฒฝ ์…‹ํŒ…

  • ์ฒซ ์ฟผ๋ฆฌ, ์‘๋‹ต์†๋„ 2500ms, ํ‰๊ท  ์‘๋‹ต 900ms

  • LightHouse Performance Score 86

 ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ๊ฐœ๋ฐœ๋ถ€ํ„ฐ ๋ฐฐํฌ๊นŒ์ง€ ์ผ๊ด€๋œ DBํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ๋งŒ์กฑ.
 ํ•˜์ง€๋งŒ ๋ฌด๊ฑฐ์šด ์š”์ฒญ์ด ์•„๋‹˜์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋„ˆ๋ฌด ๋Š๋ฆผ( railway์˜ ๋„คํŠธ์›Œํฌ ์†๋„ ๋ฌธ์ œ์ผ๊ฑฐ๋ผ ์ถ”์ธก. )



Prisma/Railway -> Prisma/PlanetScale

  • ์ฒซ ์ฟผ๋ฆฌ, ์‘๋‹ต์†๋„ 2500ms -> 900ms, ํ‰๊ท  ์‘๋‹ต 900ms -> 200ms ์„ฑ๋Šฅ ๊ฐœ์„ 
 SSR ๋ฐ˜์‘์†๋„๊ฐ€ ์ƒ๋‹นํžˆ ์ข‹์•„์ง
 ๊ทธ๋ ‡๋‹คํ•  ๋ณ€๊ฒฝ์ด ์•„๋‹ˆ์˜€์Œ์—๋„ Railway ๋•์— ํฌ์—ด์„ ๋Š๋‚€ ํ›„(?), ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ์œ„ํ•œ ๊ณ ๋ฏผ์„ ๋” ๋งŽ์ด ํ•˜๊ฒŒ ๋จ
 ๋‚ด ํ”„๋กœ์ ํŠธ์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ถˆํŽธํ•จ์„ ๋Š๋ผ๋ฉด, ๊ทธ ๋ˆ„๊ตฌ๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™๋‹ค.



Radis

  • ๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ์„ ํ†ตํ•ด ์„œ๋ฒ„ ์ž‘์—…์–‘ ๊ฐ์†Œ

  • production, Light house performance score 100

 ์„ฑ๋Šฅ์ ์ธ ์ธก๋ฉด์„ ๊ณ ๋ คํ•˜๋‹ค๋ณด๋‹ˆ ์•„๋ฌด๋ ‡์ง€ ์•Š๊ฒŒ ์ž์ฃผ ๋ฐฉ๋ฌธํ•˜๋˜ ์›น์‚ฌ์ดํŠธ๋„ ๋ฉด๋ฐ€ํžˆ ์‚ดํ”ผ๊ฒŒ ๋จ. 
 ์ตœ๋Œ€ํ•œ ํ”„๋ฆฌํ‹ฐ์–ด๋“ฑ๊ธ‰์—์„œ ์•„๊ปด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ์ฐพ๋‹ค ๋ณด๋‹ˆ ์ด๋Š” ๊ณง ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ๋‚ฎ์ถ”๋Š” ๊ฒฐ๊ณผ๋กœ ์ด์–ด ์งˆ ์ˆ˜ ์žˆ์—ˆ์Œ. 
 ์ƒํ™ฉ ๋˜๋Š” ํ•„์š”์„ฑ์— ๋”ฐ๋ผ ์บ์‰ฌ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด์•ผํ•จ. ( ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์šฉ๋Ÿ‰์„ ์ปค๋ฒ„ ๋ถˆ๊ฐ€ )
 ์ž˜๋ชป๋œ ๋ฉ”๋ชจ๋ฆฌ์‚ฌ์šฉ์€ ๋น„์šฉ์˜ ์ฆ๊ฐ€๋กœ ์งˆ ์ˆ˜ ์žˆ์–ด ๋ฌด์—‡์„ ๋‹ด์„์ง€ ์‹ ์ค‘ํ•˜๊ฒŒ ์ƒ๊ฐํ•ด๋ด์•ผ ํ•  ๊ฒƒ



๋ฌดํ•œ ์Šคํฌ๋กค

  • Intersection Observer๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐ์ดํ„ฐ fetching( Replow, Repaint ์ตœ์†Œํ™” )

  • Skeleton Card(์Šคํƒœํ‹ฑ ์™€์ด์–ดํ”„๋ ˆ์ž„)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถˆํŽธํ•  ์ˆ˜ ์žˆ๋Š” ๋กœ๋”ฉ์‹œ๊ฐ„์„ ๋Œ€์ฒดํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๊ฐœ์„