๐ŸŽจ 1๋‹จ๊ณ„ : ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ์ˆ  ์Šคํƒ ์„ค๊ณ„ - 100-hours-a-week/7-team-ddb-wiki GitHub Wiki

๋ฌธ์„œ ๊ด€๋ฆฌ

์ž‘์„ฑ์ผ 2024-04-20
๋ฒ„์ „ 1.0
์ž‘์„ฑ์ž suzy.kang (๊ฐ•์ˆ˜์ง€)
๊ฒ€ํ† ์ž kevin
์ƒํƒœ ์ดˆ์•ˆ

๋ณ€๊ฒฝ ์ด๋ ฅ

๋ฒ„์ „ ๋‚ ์งœ ์ž‘์„ฑ์ž ๊ฒ€ํ† ์ž ๋ณ€๊ฒฝ๋‚ด์šฉ
1.1 2025-04-21 suzy.kang (๊ฐ•์ˆ˜์ง€) kevin 1. Typescript ๋ฒ„์ „ ๋ณ€๊ฒฝ (5.8.3 โ†’ 5.4.5) 2. use() + TanStack Query ํ˜ผํ•ฉํ•ด์„œ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ

1. ๊ฐœ์š”

1.1 ๋ชฉ์ 

๋ณธ ๋ฌธ์„œ๋Š” ํ”„๋กœ์ ํŠธ์˜ ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ์ˆ  ์Šคํƒ ์„ ์ • ๊ธฐ์ค€๊ณผ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๋ฐฉํ–ฅ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

1.2 ๋ฒ”์œ„

  • ํ•ต์‹ฌ ๊ธฐ์ˆ  ์Šคํƒ ์„ ์ •
  • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์„ฑ
  • ํ’ˆ์งˆ ๊ด€๋ฆฌ ๋ฐฉ์•ˆ
  • ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค ์ •์˜

1.3 ๊ธฐ์ˆ  ์„ ์ • ๊ธฐ์ค€

  • ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ ์ ํ•ฉ์„ฑ: ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ์™€ ๋ณต์žก๋„์— ์ ํ•ฉํ•œ ๊ธฐ์ˆ 
  • ํŒ€ ์ˆ™๋ จ๋„: ํŒ€ ๊ตฌ์„ฑ์›์˜ ๊ธฐ์ˆ  ์ดํ•ด๋„์™€ ํ•™์Šต ๊ณก์„ 
  • ์ปค๋ฎค๋‹ˆํ‹ฐ ํ™œ์„ฑ๋„: ์ง€์†์ ์ธ ์—…๋ฐ์ดํŠธ์™€ ๋ฌธ์ œ ํ•ด๊ฒฐ ์šฉ์ด์„ฑ
  • ์„ฑ๋Šฅ๊ณผ ๋ฒˆ๋“ค ํฌ๊ธฐ: ์ดˆ๊ธฐ ๋กœ๋”ฉ ์‹œ๊ฐ„๊ณผ ์‹คํ–‰ ์„ฑ๋Šฅ
  • ์œ ์ง€๋ณด์ˆ˜์„ฑ: ์ฝ”๋“œ ํ’ˆ์งˆ๊ณผ ๋ฌธ์„œํ™” ์ˆ˜์ค€
  • ๋ผ์ด์„ ์Šค: ์ƒ์—…์  ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์—ฌ๋ถ€

2. ํ•ต์‹ฌ ๊ธฐ์ˆ  ์Šคํƒ

2.1 ์–ธ์–ด Typescript (5.4.5)

image (2)

2.1.1 ์„ ์ • ์ด์œ 

  • ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋Š”, ํ”„๋ก ํŠธ์—”๋“œ๊ฐ€ ํ˜ผ์ž์„œ ๊ฐœ๋ฐœํ•จ. ๋ณต์žกํ•œ ๋กœ์ง์„ ์ž‘์„ฑํ•  ๋•Œ ์˜๋„ํ•œ ๋Œ€๋กœ ๋™์ž‘ ํ•˜๋Š”์ง€ ์ฆ‰์‹œ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๊ณ  ์‹ค์ˆ˜๋ฅผ ์˜ˆ๋ฐฉ ํ•  ์ˆ˜ ์žˆ์Œ
  • ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž์˜ ๊ธฐ์กด ๊ฒฝํ—˜์œผ๋กœ ๋Ÿฌ๋‹์ปค๋ธŒ ์—†์ด ์ง„ํ–‰ ๊ฐ€๋Šฅ, ์ƒ์‚ฐ์„ฑ์ด ํ–ฅ์ƒ
  • ํŠน๋ณ„ํ•˜๊ฒŒ 5.4 ๋ฒ„์ „์„ ์„ ์ •ํ•œ ์ด์œ 
    • nextjs๊ฐ€ ์š”๊ตฌํ•˜๋Š” ๋ฒ„์ „์— ์ ํ•ฉ (5+)
    • 5.5+ ๋ฒ„์ „์€ ์ผ๋ถ€ ESLint/Prettier ํ˜ธํ™˜์„ฑ ์ด์œ ๊ฐ€ ์žˆ๋Š” ์ƒํƒœ, ๋ฆด๋ฆฌ์ฆˆ ๋ฒ„์ „์˜ ์•ˆ์ „์„ฑ๊ณผ๋Š” ๋ณ„๊ฐœ
    • 5.4 ๋ฒ„์ „์€ ์•„๋ž˜ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ ์—†์Œ.
    • ์ƒˆ๋กœ์šด TS ๊ธฐ๋Šฅ์„ ์ ๊ทน์ ์œผ๋กœ ์“ฐ์ง€ ์•Š๋Š” ์ด์ƒ, ๊ฒ€์ฆ๋œ ์•ˆ์ •์„ฑ๊ณผ ํ˜ธํ™˜์„ฑ์ด ๋” ์ค‘์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จ.
    • 5.4 ๋ฒ„์ „์€ ์ฃผ์š” ํˆด์ด ๋‹ค ๋Œ€์‘๋œ ์•ˆ์ •๋œ ๋ฒ„์ „์—์„œ 5.3๋ณด๋‹ค ์†๋„ + ํƒ€์ž… ์ถ”๋ก  ์ •ํ™•๋„๊ฐ€ ์ฆ๊ฐ€.

2.1.2 ๊ณ ๋ ค์‚ฌํ•ญ

  • tsconfig.json ์„ค์ •
  • strict ์‚ฌ์šฉ ์—ฌ๋ถ€
  • ํƒ€์ž… ์ •์˜ ์œ„์น˜
  • ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜
  • any ์‚ฌ์šฉ ์ •์ฑ…

2.1.3 ๋น„๊ต

ํ‰๊ฐ€ ๊ธฐ์ค€ TypeScript JavaScript
์ฃผ์š” ํŠน์ง• โ€ข ์ •์  ํƒ€์ž… ์‹œ์Šคํ…œ โ€ข ์ธํ„ฐํŽ˜์ด์Šค/์ œ๋„ค๋ฆญ โ€ข ํƒ€์ž… ์ถ”๋ก  โ€ข ์ปดํŒŒ์ผ ์‹œ์  ์˜ค๋ฅ˜ ๊ฐ์ง€ โ€ข IDE ์ง€์› ์šฐ์ˆ˜ โ€ข ๋™์  ํƒ€์ž… โ€ข ์œ ์—ฐํ•œ ๋ฌธ๋ฒ• โ€ข ๋น ๋ฅธ ํ”„๋กœํ† ํƒ€์ดํ•‘ โ€ข ์ฆ‰์‹œ ์‹คํ–‰ โ€ข ๋‚ฎ์€ ์ง„์ž… ์žฅ๋ฒฝ
ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ ์ ํ•ฉ์„ฑ โญโญโญโญโญ โ€ข ํŒ€ ํ˜‘์—…์— ์ ํ•ฉ โญโญโญ โ€ข ๋น ๋ฅธ ๊ฐœ๋ฐœ ํ•„์š” ์‹œ ์ ํ•ฉ
ํŒ€ ์ˆ™๋ จ๋„ โญโญโญโญ โ€ข TS ๊ฐœ๋ฐœ ๊ฒฝํ—˜ ์žˆ์Œ โญโญโญโญ โ€ข JS ๊ฐœ๋ฐœ ๊ฒฝํ—˜ ์žˆ์Œ
๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ โญโญโญโญ โ€ข ์ดˆ๊ธฐ ์„ค์ • ํ•„์š” โ€ข ํƒ€์ž… ์ •์˜ ์‹œ๊ฐ„ ํ•„์š” โ€ข ์žฅ๊ธฐ์ ์œผ๋กœ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ โญโญโญโญโญ โ€ข ๋น ๋ฅธ ์‹œ์ž‘ โ€ข ์ ์€ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ โ€ข ๋‹จ๊ธฐ ์ƒ์‚ฐ์„ฑ ๋†’์Œ
์œ ์ง€๋ณด์ˆ˜์„ฑ โญโญโญโญโญ โ€ข ํƒ€์ž… ์•ˆ์ •์„ฑ โ€ข ๋ฆฌํŒฉํ† ๋ง ์šฉ์ด โ€ข ์ž๋™์™„์„ฑ ์ง€์› โ€ข ๋ฌธ์„œํ™” ํšจ๊ณผ โญโญ โ€ข ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜ ์œ„ํ—˜ โ€ข ๋ฆฌํŒฉํ† ๋ง ์–ด๋ ค์›€ โ€ข ๋ฌธ์„œํ™” ์ถ”๊ฐ€ ํ•„์š”
๋””๋ฒ„๊น… ์šฉ์ด์„ฑ โญโญโญโญโญ โ€ข ์ปดํŒŒ์ผ ์‹œ์  ์˜ค๋ฅ˜ ๊ฐ์ง€ โ€ข IDE ์ง€์› ์šฐ์ˆ˜ โญโญโญ โ€ข ๋Ÿฐํƒ€์ž„ ์‹œ์  ์˜ค๋ฅ˜ ๋ฐœ๊ฒฌ โ€ข ๋””๋ฒ„๊น… ์‹œ๊ฐ„ ์ฆ๊ฐ€

2.2 ํ”„๋ ˆ์ž„์›Œํฌ Next.js (15.3.0)

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2025-04-16 แ„‹แ…ฉแ„’แ…ฎ 3 42 41

2.2.1 ์„ ์ • ์ด์œ 

  • ๋Ÿฌ๋‹ ์ปค๋ธŒ ๊ฑฐ์˜ ์—†์Œ

    โ†’ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž์˜ ๊ธฐ์กด ๊ฒฝํ—˜ ์กด์žฌ

    โ†’ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ ๊ฐ€๋Šฅ

  • SSR/SSG ์ง€์›์œผ๋กœ SEO ์ตœ์ ํ™” ๊ฐ€๋Šฅ

    โ†’ ๋Œํ•€ ์„œ๋น„์Šค์—์„œ ์žฅ์†Œ์— ๋Œ€ํ•ด ๊ฒ€์ƒ‰ ํ–ˆ์„ ๋•Œ, ๊ฒ€์ƒ‰์—”์ง„์— ๋…ธ์ถœ์ด ๋˜๋ฉด ์œ ์ € ํ™•๋ณด์— ๋„์›€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ.

    โ†’ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋„ SSR/SSG๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ์ถ”๊ฐ€ ํˆด์ด ํ•„์š”ํ•˜๊ณ  ์„ค์ •์ด ๋ณต์žกํ•ด์„œ ๋Ÿฌ๋‹์ปค๋ธŒ ๋ฐœ์ƒ

  • nextjs typescript ์ง€์›

    โ†’ ๋Œํ•€ ์„œ๋น„์Šค๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉ, ํ˜ธํ™˜์„ฑ์ด ์ข‹์Œ.

  • ์ด๋ฏธ์ง€ ์ตœ์ ํ™”

    โ†’ ๋Œํ•€ ์„œ๋น„์Šค๋Š” ์žฅ์†Œ ์ด๋ฏธ์ง€๋„ ๋ณด์—ฌ์ฃผ๊ณ , ๊ธฐ๋ก์„ ๊ถŒ๊ณ ํ•˜๋Š” ์„œ๋น„์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฏธ์ง€๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•  ๊ฒƒ ์ž„.

    โ†’ fetch ๋กœ ๋ฐ›์€ ์ด๋ฏธ์ง€ url์„ ๋ฐ”๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์ตœ์ ํ™”๊ฐ€ ์•ˆ๋˜์ง€๋งŒ, ์ด๋ฏธ์ง€ ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ตœ์ ํ™” ์˜ˆ์ •.

    โ†’ nextjs ์—์„œ๋Š” ์ˆ˜๋™์œผ๋กœ ์ด๋ฏธ์ง€ ์ตœ์ ํ™”๋ฅผ ํ•ด์•ผํ•˜๋Š” ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋‹ค๋ฅด๊ฒŒ ์ž๋™์œผ๋กœ ์ด๋ฏธ์ง€ ์ตœ์ ํ™”๋ฅผ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ

  • ํŠน๋ณ„ํ•˜๊ฒŒ 15.3.0 ๋ฒ„์ „์„ ์„ ์ •ํ•œ ์ด์œ 

    • ํ–ฅํ›„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋น„์šฉ ์ ˆ๊ฐ์„ ์œ„ํ•ด ์ตœ์‹  ๋ฒ„์ „ ์‚ฌ์šฉ
    • 13+ ๋ฒ„์ „๋ถ€ํ„ฐ ์‚ฌ์šฉ๋˜๋Š” App Router ๋ฐฉ์‹ ์‚ฌ์šฉ ๊ฒฝํ—˜ ์žˆ์–ด์„œ ๋Ÿฌ๋‹์ปค๋ธŒ ์—†์ด ์ง„ํ–‰
    • ๋ฆฌ์•กํŠธ 19 ๋ฒ„์ „์„ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›ํ•จ. ๋Œํ•€ ์„œ๋น„์Šค์—์„  19 ๋ฒ„์ „์— ์ƒˆ๋กœ ์ƒ๊ธด ๋ฆฌ์•กํŠธ ๋‚ด์žฅ ํ›… use() ์„ ์ด์šฉํ•ด์„œ supense, ์—๋Ÿฌ ๊ฒฝ๊ณ„, ๋ฐ์ดํ„ฐ ํŒจ์นญ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉ ํ•  ๊ฒƒ์ž„.
    • ๋Œํ•€ ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” LLM์€ ์‘๋‹ต ์‹œ๊ฐ„์ด ์ผ๋ฐ˜ ์„œ๋ฒ„ ์‘๋‹ต๋ณด๋‹ค ๊ธด ํŽธ์ด๊ธฐ ๋•Œ๋ฌธ์— supense ๋ฅผ ์ด์šฉํ•ด์„œ lazy loading ์„ ๊ตฌํ˜„
    • ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋„ lazy loading ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์™ธ๋ถ€ ์˜์กด์„ฑ์ด ์ปค์ง€๊ณ  ๋ฒˆ๋“ค์˜ ํฌ๊ธฐ๊ฐ€ ๋‚ด์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ณด๋‹ค ์ปค์งˆ ์ˆ˜ ์žˆ์Œ. ๋Œํ•€ ์„œ๋น„์Šค์—์„œ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์€ suspense ๋กœ ์ถฉ๋ถ„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์™ธ๋ถ€๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ.
    • react hook form ๊ฐ™์€ ์™ธ๋ถ€๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ์„œ๋ฒ„์—์„œ ์ง์ ‘ formData๋ฅผ ์ฒ˜๋ฆฌ.

2.2.2 ๊ณ ๋ ค์‚ฌํ•ญ

  • ๋ Œ๋”๋ง ์ „๋žต ์„ ํƒ
  • ๋ผ์šฐํŒ… ๊ตฌ์กฐ
  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์„ค์ •

2.2.3 ๊ทธ ์™ธ ํ”„๋ ˆ์ž„์›Œํฌ ๊ตฌ์„ฑ์š”์†Œ ๋ฒ„์ „

  • Node.js : 23.7.0
  • React: 19.1.0
  • React DOM : 19.1.0

2.2.4 ๋น„๊ต

ํ‰๊ฐ€ ๊ธฐ์ค€ Next.js Vite + React Angular Vue.js
์ฃผ์š” ํŠน์ง• โ€ข SSR/SSG ์ง€์›
โ€ข ํŒŒ์ผ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…
โ€ข TypeScript ์ง€์›
โ€ข API ๋ผ์šฐํŠธ
โ€ข ์ด๋ฏธ์ง€ ์ตœ์ ํ™”
โ€ข ๋น ๋ฅธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ
โ€ข ๊ฐ„๋‹จํ•œ ์„ค์ •
โ€ข HMR ์ง€์›
โ€ข ์œ ์—ฐํ•œ ๊ตฌ์กฐ
โ€ข ์™„์ „ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ
โ€ข CLI ๋„๊ตฌ
โ€ข ์˜์กด์„ฑ ์ฃผ์ž…
โ€ข RxJS ํ†ตํ•ฉ
โ€ข ์ ์ง„์  ํ”„๋ ˆ์ž„์›Œํฌ
โ€ข ๋ฐ˜์‘ํ˜• ์‹œ์Šคํ…œ
โ€ข ์ปดํฌ์ง€์…˜ API
โ€ข SFC ์ง€์›
ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ โญโญโญโญโญ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ
SEO ์ค‘์š” ์„œ๋น„์Šค
โญโญโญโญ ์ค‘์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ
๋น ๋ฅธ ํ”„๋กœํ† ํƒ€์ž…
โญโญโญโญโญ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ โญโญโญโญ ์ค‘์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ
ํŒ€ ์ˆ™๋ จ๋„ โญโญโญโญ ๊ฒฝํ—˜ ์žˆ์Œ โญโญโญโญ ๊ฒฝํ—˜ ์žˆ์Œ โญ ๋Ÿฌ๋‹์ปค๋ธŒ ์กด์žฌ โญโญ ์ง๊ด€์  API
์ปค๋ฎค๋‹ˆํ‹ฐ ํ™œ์„ฑ๋„ โญโญโญโญโญ ์ƒํƒœ๊ณ„ ํ™œ์„ฑํ™”
๋ ˆํผ๋Ÿฐ์Šค ํ’๋ถ€
โญโญโญโญโญ React ์ƒํƒœ๊ณ„
Vite ์„ฑ์žฅ ์ค‘
โญโญโญโญ ์•ˆ์ •์  ์ƒํƒœ๊ณ„
๊ธฐ์—… ์ง€์›
โญโญโญโญ Vue ์ƒํƒœ๊ณ„
๋ ˆํผ๋Ÿฐ์Šค ๋‹ค์ˆ˜
์„ฑ๋Šฅ/๋ฒˆ๋“ค ํฌ๊ธฐ โญโญโญโญ ์ž๋™ ์ตœ์ ํ™”
์ค‘๊ฐ„ ๋ฒˆ๋“ค ํฌ๊ธฐ
โญโญโญโญโญ ๋งค์šฐ ๋น ๋ฅธ ๋นŒ๋“œ
ํšจ์œจ์  ๋ฒˆ๋“ค๋ง
โญโญโญ ์ตœ์ ํ™” ๋„๊ตฌ ์ œ๊ณต
์ดˆ๊ธฐ ๋ฒˆ๋“ค ํผ
โญโญโญโญ ๋น ๋ฅธ ๋Ÿฐํƒ€์ž„
์ž‘์€ ๋ฒˆ๋“ค ํฌ๊ธฐ
์œ ์ง€๋ณด์ˆ˜์„ฑ โญโญโญโญโญ ํƒ€์ž… ์•ˆ์ •์„ฑ
๋ช…ํ™•ํ•œ ๊ตฌ์กฐ
โญโญโญโญ ์„ค์ • ํ•„์š”
์ž์œ ๋กœ์šด ๊ตฌ์กฐ
โญโญโญโญโญ ์—„๊ฒฉํ•œ ๊ตฌ์กฐ
๋†’์€ ์ผ๊ด€์„ฑ
โญโญโญโญ ์‰ฌ์šด ์œ ์ง€๋ณด์ˆ˜
์œ ์—ฐํ•œ ๊ตฌ์กฐ
๋ผ์ด์„ ์Šค MIT MIT MIT MIT

2.3 ์ƒํƒœ ๊ด€๋ฆฌ zustand (5.0.3)

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2025-04-17 แ„‹แ…ฉแ„’แ…ฎ 3 42 41

2.3.1 ์„ ์ •์ด์œ 

  • ๋Ÿฌ๋‹ ์ปค๋ธŒ๊ฐ€ ๊ฑฐ์˜ ์—†์Œ

    โ†’ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋Š” context ์‚ฌ์šฉ ๊ฒฝํ—˜๋งŒ ์กด์žฌ

    โ†’ ํ•™์Šต ๊ณก์„ ์ด ์ ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•จ

    โ†’ zustand ๋Š” ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋ณด์•˜์„ ๋•Œ, ์ง๊ด€์ ์œผ๋กœ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์ด ์™€๋‹ฟ์•˜์Œ.

  • ๋ฒˆ๋“ค ์‚ฌ์ด์ฆˆ๊ฐ€ ์ž‘์Œ

    โ†’ ๋Œํ•€ ์„œ๋น„์Šค๋Š” ์ฃผ๋กœ ๋ชจ๋ฐ”์ผ ์›น ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ ๋˜๋Š” ์„œ๋น„์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž‘์€ ๋ฒˆ๋“ค ์‚ฌ์ด์ฆˆ๊ฐ€ ์ค‘์š”ํ•จ

    โ†’ zustand ๋Š” ๋‹ค๋ฅธ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ, ๋ฒˆ๋“ค ์‚ฌ์ด์ฆˆ๊ฐ€ ๊ฐ€์žฅ ์ž‘์Œ.

  • ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ ํ˜ธํ™˜์„ฑ ์ข‹์Œ

    โ†’ React 19, App Router ๊ธฐ๋ฐ˜์—์„œ๋„ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

    โ†’ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์—์„  ์ƒํƒœ ์ ‘๊ทผ์€ ์ œํ•œ๋˜์ง€๋งŒ ๊ตฌ์กฐ ์„ค๊ณ„๋กœ ๋ถ„๋ฆฌ ๊ฐ€๋Šฅํ•˜๊ณ  ๊ฐ€์ด๋“œ๋„ ์ œ๊ณตํ•ด์ฃผ๊ณ  ์žˆ์Œ.

  • ํŠน๋ณ„ํ•˜๊ฒŒ 5.0.3 ๋ฒ„์ „์„ ์„ ์ •ํ•œ ์ด์œ 

    โ†’ named export ๋งŒ ์ง€์›๋˜๋„๋ก ๋ณ€๊ฒฝ ๋˜์—ˆ๋Š”๋ฐ, named export ๋Š” ๋Œํ•€์˜ ํ”„๋ก ํŠธ์—”๋“œ ํŒ€ export ์ปจ๋ฒค์…˜๊ณผ ์ ํ•ฉํ•จ.

    โ†’ React 18 ์ด์ƒ, Typescript 4.5 ๋ฒ„์ „์—์„œ๋งŒ ๋™์ž‘ํ•˜๋Š”๋ฐ, ๋Œํ•€ ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” React, Typescirpt ์™€ ์š”๊ตฌ์‚ฌํ•ญ์— ์ ํ•ฉํ•จ

    โ†’ replace ๊ธฐ๋Šฅ์„ ์“ธ ๋•Œ, v4 ๋•Œ๋Š” ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ํ•˜์ง€ ์•Š์•„์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์‹ค ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์—ˆ๋Š”๋ฐ v5 ์—์„œ๋Š” ํƒ€์ž…์„ ์ •ํ™•ํฌ ์ •์˜ํ•ด์ค˜์•ผ ์˜ค๋ฅ˜๊ฐ€ ์•ˆ๋‚˜๋„๋ก ์—…๋ฐ์ดํŠธ. ๋Œํ•€ ์„œ๋น„์Šค์—์„  ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž ํ˜ผ์ž ๊ฐœ๋ฐœํ•ด์„œ ๋ˆ„๊ตฐ๊ฐ€ ์‹ค์ˆ˜๋ฅผ ์ฐพ์•„์ฃผ๊ธฐ ์–ด๋ ค์šธ ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ํ•ด๋‹น ๊ธฐ๋Šฅ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์‹ค๋˜๋Š” ์‹ค์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

2.3.2 ๊ณ ๋ ค์‚ฌํ•ญ

  • ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์™€ ๋ถ„๋ฆฌ
  • ์ง์ ‘์ ์ธ ์ƒํƒœ ๊ณต์œ  ์ฃผ์˜
  • ์ƒํƒœ ์ดˆ๊ธฐํ™” ๊ด€๋ฆฌ ํ•„์š”
  • ํŒŒ์ผ ๊ตฌ์กฐ ๋ถ„๋ฆฌ ( useMapStore, useUserStort ๋“ฑ ์—ญํ•  ์ชผ๊ฐœ๊ธฐ)
  • persist ์‚ฌ์šฉ ์‹œ, ๋ฏผ๊ฐ ์ •๋ณด ์ €์žฅํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜

2.3.3 ๋น„๊ต

ํ‰๊ฐ€ ๊ธฐ์ค€ Zustand Redux Recoil Jotai MobX
์ฃผ์š” ํŠน์ง• โ€ข ๊ฐ„๋‹จํ•œ API
โ€ข ์ž‘์€ ๋ฒˆ๋“ค
โ€ข TypeScript ์นœํ™”์ 
โ€ข ์ค‘์•™ ์ €์žฅ์†Œ
โ€ข ๋ถˆ๋ณ€์„ฑ ๊ฐ•์กฐ
โ€ข ๋ฏธ๋“ค์›จ์–ด/DevTools
โ€ข ์›์ž ๋‹จ์œ„ ๊ด€๋ฆฌ
โ€ข ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ
โ€ข React ์ „์šฉ
โ€ข ์›์ž ๊ธฐ๋ฐ˜ ์„ค๊ณ„
โ€ข Suspense ์ง€์›
โ€ข ๋งค์šฐ ์ž‘์Œ
โ€ข ์ž๋™ ์ƒํƒœ ์ถ”์ 
โ€ข ๋ฐ˜์‘ํ˜•
โ€ข ๊ฐ์ฒด์ง€ํ–ฅ์ 
ํ•™์Šต ๊ณก์„  โญโญโญโญโญ ๋งค์šฐ ์‰ฌ์›€ โญโญ ๋ณต์žกํ•œ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ โญโญโญโญ ์ง๊ด€์  โญโญโญโญ ๋‹จ์ˆœํ•จ โญโญโญ ๊ด€์ฐฐ์ž ํŒจํ„ด ์ดํ•ด ํ•„์š”
์„ฑ๋Šฅ โญโญโญโญโญ ๋งค์šฐ ํšจ์œจ์  โญโญโญ ๋ฆฌ๋ Œ๋”๋ง ์ตœ์ ํ™” ํ•„์š” โญโญโญโญ ์ž๋™ ์ตœ์ ํ™” โญโญโญโญโญ ์›์ž ๋‹จ์œ„ ์—…๋ฐ์ดํŠธ โญโญโญโญ ์ž๋™ ์ตœ์ ํ™”
๋ฒˆ๋“ค ํฌ๊ธฐ โญโญโญโญโญ ~1KB ์ž‘์Œ โญโญ ~22KB ํผ โญโญโญ ~20KB ์ค‘๊ฐ„ โญโญโญโญโญ ~2KB ๋งค์šฐ ์ž‘์Œ โญโญโญ ~16KB ์ค‘๊ฐ„
๊ฐœ๋ฐœ์ž ๋„๊ตฌ โญโญโญโญ DevTools ํ˜ธํ™˜ โญโญโญโญโญ ๊ฐ•๋ ฅํ•œ Redux DevTools โญโญโญ ๊ธฐ๋ณธ ์ œ๊ณต โญโญโญ ๊ธฐ๋ณธ ์ œ๊ณต โญโญโญโญ MobX DevTools
TypeScript ์ง€์› โญโญโญโญโญ ์™„๋ฒฝ ์ง€์› โญโญโญโญ ๋งค์šฐ ์ž˜ ์ง€์› โญโญโญโญโญ ๊ธฐ๋ณธ TS ์ง€์› โญโญโญโญโญ ๊ธฐ๋ณธ TS ์ง€์› โญโญโญโญ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ๊ธฐ๋ฐ˜
์ปค๋ฎค๋‹ˆํ‹ฐ/์ƒํƒœ๊ณ„ โญโญโญโญ ํ™œ๋ฐœํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ โญโญโญโญโญ ๋งค์šฐ ํฐ ์ปค๋ฎค๋‹ˆํ‹ฐ โญโญโญโญ Meta ๊ธฐ๋ฐ˜ ์ปค๋ฎค๋‹ˆํ‹ฐ โญโญโญ ์„ฑ์žฅ ์ค‘ โญโญโญโญ ์•ˆ์ •์  ์ปค๋ฎค๋‹ˆํ‹ฐ
์ ํ•ฉํ•œ ํ”„๋กœ์ ํŠธ ๊ฐ„๋‹จํ•œ ์ƒํƒœ ๊ด€๋ฆฌ
๋น ๋ฅธ ๊ฐœ๋ฐœ ํ•„์š”
๋Œ€๊ทœ๋ชจ ๋ณต์žกํ•œ ์ƒํƒœ ๊ด€๋ฆฌ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋งŽ์€ React ์•ฑ ์ž‘์€ ๊ทœ๋ชจ React ์•ฑ ๋ฐ˜์‘ํ˜• ๋ณต์žกํ•œ ๋„๋ฉ”์ธ

2.4 ์Šคํƒ€์ผ๋ง ์†”๋ฃจ์…˜ Tailwind CSS (4.1)

image (4)

2.4.1 ์„ ์ • ์ด์œ 

  • ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ

    โ†’ ํด๋ž˜์Šค ๋‹จ์œ„๋กœ ์Šคํƒ€์ผ์„ ๋ฐ”๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ์–ด ๊ตฌํ˜„ ์†๋„๊ฐ€ ๋น ๋ฅด๊ณ , ๋ณ„๋„ css ํŒŒ์ผ ์—†์ด ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ์Šคํƒ€์ผ๋ง ๊ฐ€๋Šฅ

    โ†’ ๋Œํ•€ ์„œ๋น„์Šค์˜ MVP ๊ฐœ๋ฐœ์€ 1~2์ฃผ ๋‚ด์— ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœ์ด ๋˜์–ด์•ผ ํ•จ.

  • ์œ ํ‹ธ๋ฆฌํ‹ฐ ํผ์ŠคํŠธ ์ ‘๊ทผ

    โ†’ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋กœ ๋ฐ”๋กœ ์ ์šฉ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๊ฒŒ UI ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅ

  • ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ์šฉ์ด

    โ†’ ๋Œํ•€ ์„œ๋น„์Šค๋Š” ๋ธŒ๋žœ๋“œ ์ƒ‰์ƒ์ด ์ •ํ•ด์ ธ ์žˆ๊ณ , ํฐํŠธ๊ฐ€ ์ •ํ•ด์ ธ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ๋งˆ์ฒ˜๋Ÿผ ์‚ฌ์šฉ ์˜ˆ์ •

  • ์„ฑ๋Šฅ ์ตœ์ ํ™”

    โ†’ ์‹ค์ œ ์‚ฌ์šฉ๋œ ํด๋ž˜์Šค๋งŒ ์ตœ์ข… CSS ์— ํฌํ•จ๋˜๋ฏ€๋กœ ์žฅ์†Œ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๊ธธ์–ด์ง„๋‹ค ํ•˜๋”๋ผ๋„ css ์— ํฌ๊ฒŒ ๋ถ€ํ•˜๋ฅผ ์ฃผ์ง€ ์•Š์œผ ๊ฒƒ์ž„.

  • ํŠน๋ณ„ํ•˜๊ฒŒ 4.1 ๋ฒ„์ „์„ ์„ ์ •ํ•œ ์ด์œ 

    โ†’ v3 ์—์„œ v4 ๋กœ ๋„˜์–ด์˜ค๋ฉด์„œ ๋นŒ๋“œ๊ฐ€ 3.7๋ฐฐ ๋นจ๋ผ์ ธ์„œ ๋” ํšจ์œจ์ ์œผ๋กœ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ

2.4.2 ๊ณ ๋ ค์‚ฌํ•ญ

  • ํด๋ž˜์Šค๊ฐ€ ๊ธธ์–ด์ง€๋ฉด JSX๊ฐ€ ์ง€์ €๋ถ„ํ•ด์ ธ์„œ ๊ฐ€๋…์„ฑ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Œ
    • Headwind ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ์„ค์น˜ํ•˜๊ธฐ
    • ๊ณตํ†ต ์Šคํƒ€์ผ @apply ์‚ฌ์šฉํ•˜์—ฌ ๋ถ„๋ฆฌ

2.4.3 ๋น„๊ต

ํ‰๊ฐ€ ๊ธฐ์ค€ Tailwind CSS CSS-in-JS CSS Modules SCSS/SASS Vanilla CSS
์ฃผ์š” ํŠน์ง• โ€ข ์œ ํ‹ธ๋ฆฌํ‹ฐ ๊ธฐ๋ฐ˜
โ€ข ๋†’์€ ์ƒ์‚ฐ์„ฑ
โ€ข ๋น ๋ฅธ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•
โ€ข JS ํ†ตํ•ฉ
โ€ข ๋™์  ์Šคํƒ€์ผ๋ง
โ€ข ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜
โ€ข ์ง€์—ญ ์Šค์ฝ”ํ”„
โ€ข CSS ๋ฌธ๋ฒ• ์œ ์ง€
โ€ข ๋ณ€์ˆ˜/๋ฏน์Šค์ธ
โ€ข ์ค‘์ฒฉ ๋ฌธ๋ฒ•
โ€ข ์ „์ฒ˜๋ฆฌ๊ธฐ
โ€ข ์ˆœ์ˆ˜ CSS
โ€ข ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ณธ ์ง€์›
ํ•™์Šต ๊ณก์„  โญโญโญโญ ํด๋ž˜์Šค ์ด๋ฆ„ ์ต์ˆ™ํ•ด์ ธ์•ผ ํ•จ โญโญโญ JS/React ์ง€์‹ ํ•„์š” โญโญโญโญโญ ์ต์ˆ™ํ•œ CSS ๋ฌธ๋ฒ• โญโญโญ ์ „์ฒ˜๋ฆฌ๊ธฐ ๋ฌธ๋ฒ• ํ•„์š” โญโญโญโญโญ ๋งค์šฐ ์‰ฌ์›€
์„ฑ๋Šฅ โญโญโญโญโญ ์‚ฌ์šฉํ•œ ํด๋ž˜์Šค๋งŒ ํฌํ•จ โญโญโญ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ ์žˆ์Œ โญโญโญโญ ๋นŒ๋“œํƒ€์ž„ ์ตœ์ ํ™” โญโญโญโญ ์ปดํŒŒ์ผ ํ›„ ์„ฑ๋Šฅ ์ข‹์Œ โญโญโญโญโญ ์ตœ์ ํ™” ์—†์Œ
๊ฐœ๋ฐœ ๊ฒฝํ—˜ โญโญโญโญ ๋น ๋ฅธ UI ์ž‘์—… ๊ฐ€๋Šฅ โญโญโญโญโญ ์ปดํฌ๋„ŒํŠธ ์ค‘์‹ฌ โญโญโญโญ ๊ฐ„๋‹จํ•จ โญโญโญโญ ๊ตฌ์กฐํ™” ์šฉ์ด โญโญโญ ๋งค์šฐ ๊ธฐ๋ณธ์ 
์œ ์ง€๋ณด์ˆ˜ โญโญโญ ํด๋ž˜์Šค ๊ด€๋ฆฌ ํ•„์š” โญโญโญโญ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ๊น”๋”ํ•จ โญโญโญโญ ๋ชจ๋“ˆํ™” ์‰ฌ์›€ โญโญโญโญ ๋ช…ํ™•ํ•œ ๊ตฌ์กฐํ™” โญ ์ „์—ญ ์Šค์ฝ”ํ”„๋กœ ์ถฉ๋Œ ์œ„ํ—˜
๋ฒˆ๋“ค ํฌ๊ธฐ โญโญโญโญโญ ๋งค์šฐ ์ž‘์Œ โญโญโญ ๋น„๊ต์  ํผ โญโญโญโญโญ ์ตœ์†Œํ•œ์˜ CSS โญโญโญโญ ์ปดํŒŒ์ผ ํ›„ ์ค‘๊ฐ„ โญโญโญโญโญ ๊ฐ€์žฅ ์ž‘์Œ
์ ํ•ฉํ•œ ํ”„๋กœ์ ํŠธ ๋น ๋ฅธ ํ”„๋กœํ† ํƒ€์ž…
๋””์ž์ธ ์‹œ์Šคํ…œ ์ ์šฉ
React ๊ธฐ๋ฐ˜ ๋™์  ์Šคํƒ€์ผ๋ง ๊ฐ„๋‹จํ•œ ์ปดํฌ๋„ŒํŠธ ๋ณต์žกํ•œ ๋””์ž์ธ
์ค‘๊ทœ๋ชจ ์ด์ƒ
๊ฐ„๋‹จํ•œ ์›น์‚ฌ์ดํŠธ

2.5 UI ์ปดํฌ๋„ŒํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ shadcn/ui (๋ฒ„์ „ X)

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2025-04-17 แ„‹แ…ฉแ„’แ…ฎ 3 42 42

2.5.1 ์„ ์ • ์ด์œ 

  • Tailwind ์นœํ™”์ 

    โ†’์ด๋ฏธ ๋Œํ•€ ์„œ๋น„์Šค์—์„œ Tailwind ๋ฅผ ์“ฐ๊ธฐ๋กœ ํ•œ ์ƒํƒœ๋ผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ†ตํ•ฉ๋จ

  • ๋น ๋ฅธ MVP ๊ฐœ๋ฐœ

    โ†’ ๋Œํ•€ ์„œ๋น„์Šค์— ํ•„์š”ํ•œ ๋ฒ„ํŠผ, ์ž…๋ ฅ์ฐฝ, ๋“œ๋กญ๋‹ค์šด, ํ† ๊ธ€ ๋“ฑ ๋‹ค ๊ฐ–์ถฐ์ ธ ์žˆ์Œ.

  • ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ๊ฐ€์ ธ์˜ด

    โ†’ ์ „์ฒด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ  ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ๋งŒ ๋ณต์‚ฌํ•ด์„œ ์“ฐ๋Š” ๊ตฌ์กฐ

    โ†’ ์ฃผ๋กœ ๋ชจ๋ฐ”์ผ ์›น ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋Œํ•€ ์„œ๋น„์Šค๋Š” ๋ฒˆ๋“ค ํฌ๊ธฐ๊ฐ€ ์ค‘์š”ํ•œ๋ฐ ๋ฒˆ๋“ค ํฌ๊ธฐ ์ตœ์†Œํ™” ํ•  ์ˆ˜ ์žˆ์Œ

2.5.2 ๊ณ ๋ ค์‚ฌํ•ญ

  • ์ผ๋ถ€ ๋™์ž‘์€ Radix ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด์•ผํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด ์ž์œ ๋กœ์›Œ ์Šคํƒ€์ผ ์ผ๊ด€๋˜๋„๋ก ์‹ ๊ฒฝ ์จ์•ผ ํ•œ๋‹ค.

2.5.3 ๋น„๊ต

ํ‰๊ฐ€ ๊ธฐ์ค€ shadcn/ui MUI (Material UI) Chakra UI Radix UI
์Šคํƒ€์ผ๋ง ๋ฐฉ์‹ Tailwind ๊ธฐ๋ฐ˜ Emotion ๊ธฐ๋ฐ˜ Emotion ๊ธฐ๋ฐ˜ Headless (์Šคํƒ€์ผ ์—†์Œ)
๋””์ž์ธ ์ฒ ํ•™ โญโญโญโญ ์œ ์—ฐํ•˜๊ณ  ๋ฏธ๋‹ˆ๋ฉ€ํ•œ ๊ตฌ์„ฑ โญโญโญโญ ๊ตฌ๊ธ€ Material Design ์ค€์ˆ˜ โญโญโญ ์‰ฌ์šด ์ ‘๊ทผ์„ฑ๊ณผ ์ผ๊ด€์„ฑ ๊ฐ•์กฐ โญโญโญโญ ๊ธฐ๋Šฅ ์œ„์ฃผ ๊ตฌ์„ฑ ์š”์†Œ
์ ‘๊ทผ์„ฑ(a11y) โญโญโญโญ Radix ๊ธฐ๋ฐ˜์œผ๋กœ ์šฐ์ˆ˜ โญโญโญโญ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ ‘๊ทผ์„ฑ ์ค€์ˆ˜ โญโญโญโญ WAI-ARIA ์ค€์ˆ˜ โญโญโญโญโญ WCAG ๊ธฐ์ค€์— ๋งž์ถ˜ ์„ค๊ณ„
์ปดํฌ๋„ŒํŠธ ์ˆ˜ โญโญโญ ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ์ œ๊ณต โญโญโญโญโญ ๋งค์šฐ ๋‹ค์–‘ํ•œ ์ปดํฌ๋„ŒํŠธ โญโญโญโญ ์ผ๋ฐ˜์ ์ธ ๊ตฌ์„ฑ ์š”์†Œ ํฌํ•จ โญโญ ๊ธฐ๋ณธ์ ์ธ ์š”์†Œ ์œ„์ฃผ
์‚ฌ์šฉ ๋‚œ์ด๋„ โญโญโญโญ Tailwind์— ์ต์ˆ™ํ•˜๋ฉด ์‰ฌ์›€ โญโญโญ ๋น ๋ฅธ ์ ์šฉ ๊ฐ€๋Šฅ โญโญโญโญ ์ง๊ด€์ ์ธ ์‚ฌ์šฉ โญโญ ์ง์ ‘ ์Šคํƒ€์ผ๋ง ํ•„์š”
์ปค์Šคํ„ฐ๋งˆ์ด์ง• ์ž์œ ๋„ โญโญโญโญโญ ์™„์ „ ์ž์œ ๋กœ์šด ๊ตฌ์„ฑ โญโญโญ ํ…Œ๋งˆ ๊ธฐ๋ฐ˜ ์ œ์–ด โญโญโญโญ ์†์‰ฌ์šด ํ…Œ๋งˆ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• โญโญโญโญโญ ์™„์ „ Headless๋กœ ์œ ์—ฐํ•จ
ํ”„๋กœ์ ํŠธ ์ ํ•ฉ๋„ ๋””์ž์ธ ์‹œ์Šคํ…œ
์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•„์š”ํ•œ ๊ฒฝ์šฐ
๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ
ํ‘œ์ค€ํ™”๋œ ๋””์ž์ธ ํ•„์š”
๋น ๋ฅธ MVP ๋˜๋Š” ๋””์ž์ธ ๊ฐ„ํŽธํ•œ ์•ฑ ๊ธฐ๋Šฅ๋ณ„ UI ๊ตฌ์„ฑ
๋””์ž์ธ ์ž์œ ๋กญ๊ฒŒ ์„ค์ • ๊ฐ€๋Šฅ
์„ค์น˜ ์šฉ๋Ÿ‰ โญโญโญโญ ๊ฒฝ๋Ÿ‰ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ โญโญ ์ƒ๋Œ€์ ์œผ๋กœ ๋ฌด๊ฑฐ์›€ โญโญโญ ์ ๋‹นํ•œ ์„ค์น˜ ์šฉ๋Ÿ‰ โญโญโญโญ Headless๋ผ ๊ฐ€๋ฒผ์›€

3. ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ์ „๋žต

3.1 ๋ฐ์ดํ„ฐ ํŒจ์นญ React 19 API - use()

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2025-04-21 แ„‹แ…ฉแ„’แ…ฎ 9 39 01

3.1.1 ์„ ์ • ์ด์œ 

use()

โ†’ ์ตœ์‹  React 19์˜ use() ํ›…์„ ์ง€์›ํ•˜์—ฌ ๊ฐ„ํŽธํ•œ ๋ฐ์ดํ„ฐ ํŒจ์นญ ๊ฐ€๋Šฅ

โ†’ ๋Œํ•€ ์„œ๋น„์Šค๋Š” React 19 ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, use() ํ›… ํ™œ์šฉ

โ†’ suspense์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด ๋กœ๋”ฉ ์ฒ˜๋ฆฌ๋ฅผ ์‚ฌ์šฉ์ž ์นœํ™”์ ์œผ๋กœ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์žˆ์Œ

โ†’ error ๊ฐ์ฒด๋ฅผ throwํ•˜๋ฉด ์ž๋™์œผ๋กœ ์—๋Ÿฌ ๊ฒฝ๊ณ„ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

โ†’ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ ํ™˜๊ฒฝ์—์„œ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ โ†’ ๋Œํ•€ ์„œ๋น„์Šค์—์„œ ํ•„์š”ํ•œ SEO์™€ ์„ฑ๋Šฅ ๊ฐœ์„ 

โ†’ React ํŒ€ ๊ณต์‹ ์ง€์› โ†’ ์žฅ๊ธฐ์ ์œผ๋กœ ์œ ์ง€๋ณด์ˆ˜ ๋ฐ ๋ฐœ์ „ ๊ธฐ๋Œ€

โ†’ ๋Œํ•€ ์„œ๋น„์Šค์˜ ๋ฉ”์ธ ์ง€๋„ ๋กœ๋”ฉ๊ณผ ์žฅ์†Œ ๋ฆฌ์ŠคํŠธ์—์„œ ์‚ฌ์šฉ, ๋น ๋ฅธ ์ดˆ๊ธฐ ๋ Œ๋” SEO ๋Œ€์‘ ๊ฐ€๋Šฅ.

โ†’ TanStack Query ๋„ SEO ๋Œ€์‘์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, prefetch, dehydrate, hydrate ์ฒ˜๋ฆฌ๋กœ ์ธํ•ด ์ฝ”๋“œ ๋ณต์žก๋„๊ฐ€ ๋†’์•„์ง€๊ณ  Suspense ์—ฐ๋™๋„ ์ˆ˜์ •์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”๋กœ ํ•ด์„œ ๋น„์šฉ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ React ๋‚ด์žฅ ํ›… ํ™œ์šฉ

TanStack Query (v5)

โ†’ ํด๋ผ์ด์–ธํŠธ ์ฟผ๋ฆฌ์— ๊ฐ•๋ ฅํ•จ (mutation, revalidate, background update ์ฒ˜๋ฆฌ ๋“ฑ)

โ†’ ๋Œํ•€ ์„œ๋น„์Šค์—์„œ ๊ธฐ๋ก ์ž‘์„ฑ/์ˆ˜์ •, ๋ถ๋งˆํฌ, ์žฅ์†Œ ํ•„ํ„ฐ๋ง ๊ธฐ๋Šฅ์—์„œ ์‚ฌ์šฉ ์˜ˆ์ •.

โ†’ ๋Œํ•€ ์„œ๋น„์Šค๋Š” zod ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•ด ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ง„ํ–‰ํ•˜๋Š”๋ฐ, TanStack Query v5 ์™€ ํ†ตํ•ฉ์ด ์šฐ์ˆ˜ํ•จ

โ†’ React 18 ์ด์ƒ ์š”๊ตฌํ•˜๊ณ , ๊ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐ„ ์˜์กด์„ฑ ๋ฌธ์ œ ์—†์Œ.

3.1.2 ๊ณ ๋ ค์‚ฌํ•ญ

  • ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” use() ์‚ฌ์šฉ ๋ถˆ๊ฐ€

    โ†’ TanStack Query ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ํ•œ๊ณ„ ๊ทน๋ณต

  • Suspense์™€ Error Boundary๊ฐ€ ์ „์ œ๋˜์–ด์•ผ ํ•จ โ†’ ๊ตฌ์กฐ์  ์„ค๊ณ„ ํ•„์š”

  • streaming ๋ฐฉ์‹ ์‚ฌ์šฉ ์‹œ ์ฃผ์˜ ํ•„์š” (๋ฐ์ดํ„ฐ ํ๋ฆ„์— ๋”ฐ๋ฅธ ์ปดํฌ๋„ŒํŠธ ์œ„์น˜ ๊ณ ๋ ค

3.1.3 ์บ์‹ฑ ์ „๋žต

  • ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” fetch์— ๋‚ด์žฅ๋œ ์บ์‹ฑ ์ •์ฑ… ํ™œ์šฉ
    • ๊ธฐ๋ณธ๊ฐ’: force-cache
    • ํ•„์š” ์‹œ ์˜ต์…˜์œผ๋กœ no-store, force-cache, revalidate ์„ค์ • ๊ฐ€๋Šฅ
  • ์ •์  ์บ์‹ฑ: build-time์— ๋ฐ์ดํ„ฐ ์ƒ์„ฑ โ†’ SSG
  • ๋™์  ์บ์‹ฑ: runtime์— fetch, TTL ์„ค์ •์œผ๋กœ stale ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ
  • revalidate ํƒœ๊ทธ๋กœ ISR(Incremental Static Regeneration) ๊ตฌํ˜„ ๊ฐ€๋Šฅ
  • ํ•ด๋‹น ๋ถ€๋ถ„์€ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜ ์—†์Œ, ํ•™์Šต ํ•„์š”

3.1.4 ์—๋Ÿฌ ํ•ธ๋“ค๋ง

  • ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ๋Š” ์ž๋™์œผ๋กœ Error Boundary์— ์ „๋‹ฌ
  • Suspense์— ํ•จ๊ป˜ ํฌํ•จ๋˜๋Š” ๊ตฌ์กฐ์—์„œ ์˜ค๋ฅ˜ ๊ฒฝ๊ณ„์™€ ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ๋ช…ํ™•ํžˆ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Œ
  • ๋น„๋™๊ธฐ ํ•จ์ˆ˜์—์„œ throw๋กœ ์—๋Ÿฌ ๋ฐœ์ƒ โ†’ ์ „์—ญ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

3.1.5 ๋น„๊ต

ํ‰๊ฐ€ ๊ธฐ์ค€ React use() SWR React Query
์ฃผ์š” ์‚ฌ์šฉ ์œ„์น˜ โญโญโญโญ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ ์ „์šฉ โญโญโญโญ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ โญโญโญโญ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ
์„ค์น˜ ํ•„์š” ์—ฌ๋ถ€ โญโญโญโญโญ ๋‚ด์žฅ API โญโญโญ ๋ณ„๋„ ์„ค์น˜ ํ•„์š” โญโญโญ ๋ณ„๋„ ์„ค์น˜ ํ•„์š”
Suspense ์—ฐ๋™ โญโญโญโญโญ ์™„๋ฒฝ ์—ฐ๋™ โญโญโญ ์ผ๋ถ€ ์ง€์› โญ ์ง€์› ๋ถˆ์™„์ „
์บ์‹ฑ ์ „๋žต โญโญโญโญโญ ์ž๋™ ์บ์‹ฑ โญโญโญโญโญ Stale-While-Revalidate โญโญโญโญโญ ์บ์‹ฑ ์ „๋žต ์œ ์—ฐ
ํƒ€์ž… ์•ˆ์ •์„ฑ โญโญโญโญ TypeScript ์ง€์› โญโญโญโญ TypeScript ์ง€์› โญโญโญโญโญ TS + Zod ํ†ตํ•ฉ ์šฐ์ˆ˜
์—๋Ÿฌ ํ•ธ๋“ค๋ง โญโญโญโญโญ Error Boundary ์ž๋™ ์—ฐ๋™ โญโญโญโญ ์ˆ˜๋™ ์—๋Ÿฌ ํ•ธ๋“ค๋ง ํ•„์š” โญโญโญโญ ์ˆ˜๋™ ์„ค์ • ํ•„์š”
๋ฐ์ดํ„ฐ ๋ฆฌํŽ˜์น˜ โญ ๊ธฐ๋ณธ ์—†์Œ (์ˆ˜๋™ ๊ตฌํ˜„ ํ•„์š”) โญโญโญโญโญ focus/revalidate ์ž๋™ โญโญโญโญโญ ๋‹ค์–‘ํ•œ ๋ฆฌํŽ˜์น˜ ์˜ต์…˜ ์ง€์›
ํด๋ผ์ด์–ธํŠธ ์ ํ•ฉ์„ฑ โญ ์„œ๋ฒ„ ์ „์šฉ โญโญโญโญโญ ํด๋ผ์ด์–ธํŠธ ์ „์šฉ โญโญโญโญโญ ํด๋ผ์ด์–ธํŠธ ์ „์šฉ

3.2 ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ „๋žต Zod (3.24.3)

3.2.1 ์„ ์ • ์ด์œ 

  • ๋Ÿฌ๋‹ ์ปค๋ธŒ ๊ฑฐ์˜ ์—†์Œ

    โ†’ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ Zod ์‚ฌ์šฉ ๊ฒฝํ—˜ ์žˆ์Œ

    โ†’ ๋น ๋ฅด๊ฒŒ ๋„์ž… ๊ฐ€๋Šฅํ•˜๊ณ  ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ

  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์™€ ๋†’์€ ํ˜ธํ™˜์„ฑ

    โ†’ Zod๋Š” ๋Ÿฐํƒ€์ž„๊ณผ ํƒ€์ž… ๋ ˆ๋ฒจ์—์„œ ๋ชจ๋‘ ํƒ€์ž… ๊ฒ€์ฆ ๊ฐ€๋Šฅ

    โ†’ z.infer๋ฅผ ํ†ตํ•ด API ์‘๋‹ต, ํผ ๋ฐ์ดํ„ฐ ๋“ฑ์— ํƒ€์ž… ์•ˆ์ „์„ฑ ํ™•๋ณด ๊ฐ€๋Šฅ

  • ์ผ๊ด€๋œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ตฌ์กฐ

    โ†’ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋™์ผํ•œ ์Šคํ‚ค๋งˆ๋กœ ๊ฒ€์ฆ ๊ฐ€๋Šฅ

    โ†’ ์ค‘๋ณต ๋กœ์ง ์—†์ด ์œ ์ง€๋ณด์ˆ˜์— ์œ ๋ฆฌ

  • ๋‹ค์–‘ํ•œ ๋ฒ”์šฉ์„ฑ

    โ†’ form validation, API ์‘๋‹ต ์Šคํ‚ค๋งˆ ๊ฒ€์ฆ, query param validation ๋“ฑ

    โ†’ ์ „๋ฐ˜์ ์ธ ๋ฐ์ดํ„ฐ ํ๋ฆ„์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • Next.js App Router์™€์˜ ๋†’์€ ํ˜ธํ™˜์„ฑ

    โ†’ ๋Œํ•€ ์„œ๋น„์Šค์—์„œ ์„ ํƒํ•œ ์„œ๋ฒ„ ์•ก์…˜ / Route Handler์—์„œ ๋™์ผํ•œ ์Šคํ‚ค๋งˆ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • ํŠน๋ณ„ํ•˜๊ฒŒ 3.24.3 ๋ฒ„์ „์„ ์„ ์ •ํ•œ ์ด์œ 

    โ†’ ๊ฐ€์žฅ ์ตœ์‹ ์˜ ์•ˆ์ • ๋ฒ„์ „

    โ†’ 2 ๋ฒ„์ „์—๋Š” ์—†์—ˆ๋˜ z.custom() ์ƒ๊ธฐ๋ฉด์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•ด์ฃผ์ง€ ์•Š๋Š” ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋„ ์ปค์Šคํ…€ ๊ฐ€๋Šฅ.

    โ†’ ๋Œํ•€ ์„œ๋น„์Šค์—๋Š” ํŠน๋ณ„ํžˆ ์ปค์Šคํ…€ ํ•ด์•ผ ํ•  ์œ ํšจ์„ฑ ์ฒ˜๋ฆฌ๊ฐ€ ์—†์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๋‚˜, ํƒ€์ž… ์•ˆ์ •์„ฑ๋„ ๊ฐœ์„  ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— v2 ๋ฅผ ์‚ฌ์šฉ ํ•  ๋…ผ๋ฆฌ๊ฐ€ ๋” ๋ถ€์กฑํ•˜๋‹ค๊ณ  ํŒ๋‹จ.

3.2.2 ๊ณ ๋ ค์‚ฌํ•ญ

  • ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์Šคํ‚ค๋งˆ ๊ณต์œ  ์—ฌ๋ถ€

    โ†’ ์ž…๋ ฅ๊ฐ’ ์Šคํ‚ค๋งˆ๋ฅผ ๊ณตํ†ต์œผ๋กœ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด, zodSchemas ํด๋” ๋“ฑ์œผ๋กœ ๋ถ„๋ฆฌ

  • ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•

    โ†’ ๊ธฐ๋ณธ ๋ฉ”์‹œ์ง€ ์™ธ์— ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ๊ณ ๋ ค ํ•„์š”

  • ์„ฑ๊ณผ

    โ†’ ๋Ÿฐํƒ€์ž„ ๊ฒ€์ฆ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฒˆ๋“ค ํฌ๊ธฐ ๊ณ ๋ ค ํ•„์š” (ํ•˜์ง€๋งŒ Zod๋Š” ๋งค์šฐ ๊ฒฝ๋Ÿ‰)

3.2.3 ๋น„๊ต

ํ‰๊ฐ€ ๊ธฐ์ค€ Zod React Hook Form (RHF) Yup
ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํ˜ธํ™˜์„ฑ โญโญโญโญโญ ์ตœ๊ณ  ์ˆ˜์ค€ โญโญโญโญ ํƒ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์กฐํ•ฉ โญโญโญ ํƒ€์ž… ๋ณด์™„ ํ•„์š”
๋Ÿฌ๋‹ ์ปค๋ธŒ โญโญโญโญโญ ์ง๊ด€์  API โญโญโญโญ ์ดˆ๊ธฐ ํ•™์Šต ํ•„์š” โญโญโญ ์•ฝ๊ฐ„ ๋” ๋ณต์žก
ํด๋ผ์ด์–ธํŠธ ๊ฒ€์ฆ โญโญโญโญ โญโญโญโญโญ โญโญโญโญ
์„œ๋ฒ„/ํด๋ผ์ด์–ธํŠธ ์Šคํ‚ค๋งˆ ๊ณต์œ  โญโญโญโญโญ โญ๏ธ ๋ถˆ๊ฐ€ โญ๏ธ ๋ถˆ๊ฐ€
์ปค์Šคํ„ฐ๋งˆ์ด์ง• ์œ ์—ฐ์„ฑ โญโญโญโญ โญโญโญโญโญ โญโญโญโญ
์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• โญโญโญโญ โญโญโญโญ โญโญโญโญ
๋ฒˆ๋“ค ํฌ๊ธฐ ์˜ํ–ฅ โญ ์กฐ๊ธˆ ์žˆ์Œ โญ๏ธ ๊ฑฐ์˜ ์—†์Œ โญ๏ธ ๊ฒฐํ•ฉ์„ฑ (React Query ๋“ฑ)
๊ฒฐํ•ฉ์„ฑ (React Query ๋“ฑ) โญโญโญโญโญ โญ๏ธ โญ

4. ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

4.1 ์ง€๋„ ์„œ๋น„์Šค KaKao Map (2.7.5)

4.1.1 ์„ ์ • ์ด์œ 

  • ์นด์นด์˜ค๋ถ€ํŠธ์บ ํ”„์™€์˜ ์—ฐ๊ด€์„ฑ

    โ†’ ๋Œํ•€ ์„œ๋น„์Šค๋Š” ์นด์นด์˜ค ๋ถ€ํŠธ์บ ํ”„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ๋˜๋Š” ํ”„๋กœ์ ํŠธ์ด๋ฉฐ, ์นด์นด์˜ค์™€ ์—ฐ๊ด€์„ฑ์„ ๊ณ ๋ คํ•ด ์นด์นด์˜ค๋งต์„ ์šฐ์„ ์ ์œผ๋กœ ์„ ํƒ

  • ์‚ฌ์šฉ์ž ์นœํ™”์  ์ธํ„ฐํŽ˜์ด์Šค

    โ†’ ๊ตญ๋‚ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ต์ˆ™ํ•œ ์ง€๋„ UI ์ œ๊ณต

    โ†’ ์‹ค์‹œ๊ฐ„ ๊ธธ์ฐพ๊ธฐ, ์žฅ์†Œ ๊ฒ€์ƒ‰, ๋งˆ์ปค ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ ์ œ๊ณต

  • JavaScript SDK ๊ธฐ๋ฐ˜์˜ ํ”„๋ก ํŠธ์—”๋“œ ์นœํ™”์„ฑ

    โ†’ React ํ™˜๊ฒฝ์—์„œ ์‰ฝ๊ฒŒ ์—ฐ๋™ ๊ฐ€๋Šฅ (e.g., useEffect ๊ธฐ๋ฐ˜ ์ง€๋„ ์ดˆ๊ธฐํ™”)

    โ†’ ๋งˆ์ปค, ํด๋Ÿฌ์Šคํ„ฐ, ์ธํฌ์œˆ๋„์šฐ ๋“ฑ์˜ ์š”์†Œ๋ฅผ ์ฝ”๋“œ ๋ ˆ๋ฒจ์—์„œ ์ง์ ‘ ์ œ์–ด ๊ฐ€๋Šฅ

  • ๋น„์šฉ ์ธก๋ฉด ์œ ๋ฆฌ

    โ†’ ๊ธฐ๋ณธ ํ• ๋‹น๋Ÿ‰์ด ๋†’๊ณ , ๊ณผ๊ธˆ ์ •์ฑ…์ด ๋น„๊ต์  ์œ ์—ฐํ•จ

    โ†’ ๋ฌด๋ฃŒ๋กœ๋„ ์ถฉ๋ถ„ํžˆ MVP ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ

  • ํŠน๋ณ„ํ•˜๊ฒŒ 2.7.5 ๋ฒ„์ „์„ ์„ ์ •ํ•œ ์ด์œ 

    โ†’ ์—๋Ÿฌ ์ˆ˜์ •์ด๋‚˜ ๋‚ด๋ถ€ ์ฝ”๋“œ ๊ฐœ์„  ๋œ ์ด๋ ฅ ํ™•์ธ ํ›„ ์ตœ์‹  ๋ฒ„์ „ ์„ ํƒ

    โ†’ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํŠน๋ณ„์ ์„ ์ฐพ์„ ์ˆœ ์—†์—ˆ์Œ.

4.1.2 ๊ณ ๋ ค์‚ฌํ•ญ

  • ์ง€๋„ ๋กœ๋”ฉ ๋ฐฉ์‹
    • ์ดˆ๊ธฐ ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋น„๋™๊ธฐ ๋กœ๋”ฉ ๋ฐ ๋กœ๋”ฉ ์ƒํƒœ ์ฒ˜๋ฆฌ ํ•„์š”
    • Suspense ๋˜๋Š” Lazy load๋ฅผ ํ†ตํ•œ ์ง€์—ฐ ๋กœ๋”ฉ ๊ณ ๋ ค
  • ์ง€๋„ SDK ๋ฒ„์ „
    • ์นด์นด์˜ค๋งต์€ 2D/3D ๋ฒ„์ „์ด ์žˆ์œผ๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ์„œ๋น„์Šค๋Š” 2D SDK๋ฅผ ์‚ฌ์šฉ
  • ๋งˆ์ปค, ์˜ค๋ฒ„๋ ˆ์ด, ํด๋Ÿฌ์Šคํ„ฐ๋ง ๊ตฌํ˜„
    • ์ปค์Šคํ…€ ๋งˆ์ปค, ๋‹ค์ค‘ ์žฅ์†Œ ๋ Œ๋”๋ง ์‹œ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ณ ๋ ค
    • LLM ์‘๋‹ต์— ๋”ฐ๋ฅธ ๋งˆ์ปค ๋™์  ๊ฐฑ์‹  ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์˜ˆ์ •
  • API ์ œํ•œ ๋ฐ ์‚ฌ์šฉ๋Ÿ‰
    • ํ•˜๋ฃจ ํ˜ธ์ถœ ์ œํ•œ(๊ธฐ๋ณธ 30๋งŒ ๊ฑด) ์ดˆ๊ณผ ์‹œ ๋Œ€๋น„์ฑ… ํ•„์š”
    • ํ‚ค ๋ณด์•ˆ (๋„๋ฉ”์ธ ์ œํ•œ, ์„œ๋ฒ„์‚ฌ์ด๋“œ ํ”„๋ก์‹œ) ์ ์šฉ

4.1.3 ๋น„๊ต

ํ‰๊ฐ€ ๊ธฐ์ค€ Kakao Map Naver Map Google Map
๋กœ์ปฌํ™” โญโญโญโญโญ ํ•œ๊ตญ์— ์ตœ์ ํ™” โญโญโญโญ ํ•œ๊ตญ์— ์ตœ์ ํ™” โญโญโญ ๊ธ€๋กœ๋ฒŒ ์œ„์ฃผ
์ปค๋ฎค๋‹ˆํ‹ฐ/์ง€์› โญโญโญโญ ๋ถ€ํŠธ์บ ํ”„/๊ตญ๋‚ด ์ปค๋ฎค๋‹ˆํ‹ฐ โญโญโญ ๊ตญ๋‚ด ์ปค๋ฎค๋‹ˆํ‹ฐ โญโญโญโญโญ ๊ธ€๋กœ๋ฒŒ ๋ฌธ์„œ, ๋ ˆํผ๋Ÿฐ์Šค ํ’๋ถ€
๊ธฐ๋Šฅ ๋‹ค์–‘์„ฑ โญโญโญโญ ๋งˆ์ปค, ํด๋Ÿฌ์Šคํ„ฐ, ์žฅ์†Œ ๊ฒ€์ƒ‰ ๋“ฑ ํ’๋ถ€ โญโญโญโญ ๋น„์Šทํ•œ ์ˆ˜์ค€ โญโญโญโญโญ ํ’๋ถ€ํ•˜๋‚˜ ์œ ๋ฃŒ
ํ”„๋ก ํŠธ์—”๋“œ ์—ฐ๋™ ํŽธ์˜์„ฑ โญโญโญโญ JS SDK, ์ง์ ‘ ์ปจํŠธ๋กค ๊ฐ€๋Šฅ โญโญโญ JS SDK ์ œ๊ณต โญโญ SDK ๊ตฌ์กฐ ๋ณต์žก
๋น„์šฉ โญโญโญโญ ๊ธฐ๋ณธ ๋ฌด๋ฃŒ, ๊ณผ๊ธˆ ์œ ์—ฐ โญโญโญ ๊ธฐ๋ณธ ๋ฌด๋ฃŒ, ์‚ฌ์šฉ๋Ÿ‰ ์ œํ•œ โญ ์œ ๋ฃŒ ๊ธฐ๋ฐ˜, ๊ณผ๊ธˆ ํผ
์‚ฌ์šฉ์ž ๊ฒฝํ—˜ โญโญโญโญโญ ์นœ์ˆ™ํ•œ UI, ๊ตญ๋‚ด ์ตœ์ ํ™” โญโญโญโญโญ ์นœ์ˆ™ํ•œ UI, ๊ตญ๋‚ด ์ตœ์ ํ™” โญ UI ์ƒ์ด, ๋‚ฏ์„ค ์ˆ˜ ์žˆ์Œ
์ง€๋„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• โญโญโญโญ ๋งˆ์ปค, ์˜ค๋ฒ„๋ ˆ์ด ์ž์œ ๋„ ๋†’์Œ โญโญโญ ์ œ์•ฝ ์žˆ์Œ โญโญโญโญโญ ๋‹ค์–‘ํ•œ ์˜ต์…˜ ์ œ๊ณต

5. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ฐ ํ’ˆ์งˆ ๊ด€๋ฆฌ

5.1 ๋นŒ๋“œ ๋„๊ตฌ Turbopack (1.5.3)

5.1.1 ์„ ์ • ์ด์œ 

  • Next.js์— ์ข…์†์ ์ด์ง€๋งŒ, ๋Œํ•€ ์„œ๋น„์Šค๋Š” Next.js ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด์„œ ์ƒˆ๋กœ์šด ๋นŒ๋“œ ๋„๊ตฌ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•  ๋…ผ๋ฆฌ ๋ถ€์กฑ.

  • Webpack fallback ๊ธฐ๋Šฅ๋„ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋˜๊ธฐ ๋•Œ๋ฌธ์—, Turbopack์ด ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์€ Webpack์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

    โ†’ ์‹ค์šฉ์ ์ธ ์œ ์—ฐ์„ฑ ํ™•๋ณด

  • Next.js ํŒ€์—์„œ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋Š” ๋นŒ๋“œ ํˆด์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ตœ์‹  ๋ฒ„์ „์˜ ๊ธฐ๋Šฅ๊ณผ API๋“ค๊ณผ๋„ ๊ฐ€์žฅ ๋†’์€ ํ˜ธํ™˜์„ฑ์„ ๊ฐ€์ง.

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ๋ฒˆ๋“ค๋ง ์†๋„, ๋น ๋ฅธ HMR, ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๋“ฑ Rust ๊ธฐ๋ฐ˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์ด ์ ์šฉ๋จ.

  • ์ž๋™ ํŠธ๋ฆฌ์‰์ดํ‚น, ์ด๋ฏธ์ง€ ์ตœ์ ํ™”, ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…, ๋ฏธ๋“ค์›จ์–ด ๊ธฐ๋ฐ˜ SSR๊นŒ์ง€ ๋ชจ๋‘ ๊ธฐ๋ณธ ์ œ๊ณต๋˜์–ด ๋ณ„๋„ ์„ค์ •์ด ๊ฑฐ์˜ ํ•„์š” ์—†์Œ.

  • ํŠน๋ณ„ํ•˜๊ฒŒ 1.5.3 ๋ฒ„์ „์„ ์„ ์ •ํ•œ ์ด์œ 

    โ†’ Next.js 15.3.0์— ํ†ตํ•ฉ๋˜์–ด ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ๋‚ด๋ถ€ Turbopack ๋ฒ„์ „

    โ†’ 1.5.x๋Œ€๋Š” ์‹ค์ œ๋กœ ๋งŽ์€ ์‚ฌ์šฉ์ž๋“ค์ด ์‹ค์„œ๋น„์Šค์— ๋„์ž… ์ค‘์ธ ์•ˆ์ •์„ฑ ๋†’์€ ๋ฆด๋ฆฌ์ฆˆ์ด๋ฉฐ, ๋ฒ ํƒ€๋‚˜ ์•ŒํŒŒ ํƒœ๊ทธ๊ฐ€ ๋ถ™์€ ์‹คํ—˜ ๋ฒ„์ „์ด ์•„๋‹˜.

    โ†’ Next.js ํŒ€์—์„œ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋Š” ๋นŒ๋“œ ํˆด์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ตœ์‹  ๋ฒ„์ „์˜ ๊ธฐ๋Šฅ๊ณผ API๋“ค๊ณผ๋„ ๊ฐ€์žฅ ๋†’์€ ํ˜ธํ™˜์„ฑ์„ ๊ฐ€์ง.

5.1.2 ๊ณ ๋ ค์‚ฌํ•ญ

  • Turbopack์€ ์•„์ง ์™„์ „ํ•œ Webpack ๋Œ€์ฒด๋Š” ์•„๋‹˜. ์ผ๋ถ€ ์ปค์Šคํ…€ ์„ค์ •์ด๋‚˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์ œํ•œ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Œ.

5.1.3 ๋น„๊ต

ํ‰๊ฐ€ ๊ธฐ์ค€ Next.js 15.3.0 (Turbopack) Webpack Vite
์†๋„ โญโญโญโญ Rust ๊ธฐ๋ฐ˜ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ โญ ์„ค์ •์— ๋”ฐ๋ผ ๋‹ค๋ฆ„ โญโญโญโญ ESM + ์บ์‹œ ํ™œ์šฉ
์ตœ์ ํ™” ๊ธฐ๋Šฅ โญโญโญโญ ๊ธฐ๋ณธ ์ œ๊ณต โญ ์ง์ ‘ ์„ค์ • ํ•„์š” โญโญโญ ํ”Œ๋Ÿฌ๊ทธ์ธ ํ™œ์šฉ ํ•„์š”
์ปค์Šคํ„ฐ๋งˆ์ด์ง• โญ ์ œํ•œ์  โญโญโญโญ ์ž์œ ๋„ ๋†’์Œ โญโญโญโญ ๊ฐ„๋‹จํ•œ ์„ค์ •์œผ๋กœ ๊ฐ€๋Šฅ
์ƒํƒœ๊ณ„ โญโญโญ Next.js ์ค‘์‹ฌ โญโญโญโญ ๋ฒ”์šฉ โญโญโญโญ ๋ฒ”์šฉ + React ์นœํ™”์ 
ํ”„๋กœ์ ํŠธ์™€์˜ ํ˜ธํ™˜์„ฑ โญโญโญโญโญโญโญ Next.js ๊ธฐ๋ณธ ์ œ๊ณต โญ ์ถ”๊ฐ€ ์„ค์ • ํ•„์š” โญ Next.js์™€ ํ†ตํ•ฉ ๋ณต์žก๋„ ์žˆ์Œ
โš ๏ธ **GitHub.com Fallback** โš ๏ธ