Next.js ๋งˆ์Šคํ„ฐ ํด๋ž˜์Šค: Part 2 - ํ’€์Šคํƒ ์•„ํ‚คํ…์ฒ˜์™€ ํ”„๋ ˆ์ž„์›Œํฌ ์‹ฌํ™” (Server Actions, ์บ์‹œ ํ˜๋ช…, ๊ณ ๊ธ‰ ๋ผ์šฐํŒ…)

๋‹จ์ˆœํžˆ ํ™”๋ฉด์„ ๊ทธ๋ ค๋‚ด๋Š” ๊ฒƒ์„ ๋„˜์–ด, '์ง„์งœ ์‹œ์Šคํ…œ'์„ ๊ณ ๋ฏผํ•ด ๋ณธ ์  ์žˆ์œผ์‹ ๊ฐ€์š”? ๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ณตํ†ต์œผ๋กœ ๋งˆ์ฃผํ•˜๋Š” ์ง„์งœ ๋ฌธ์ œ๋Š” ๋”ฐ๋กœ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒ‰๋ณด๊ธฐ์—” ๊ทธ๋Ÿด๋“ฏํ•œ๋ฐ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๋Š” ์ˆ˜์‹œ๋กœ ๊ผฌ์ด๊ณ , ์†๋„๋Š” ๋‹ต๋‹ตํ•˜๋ฉฐ, ๊ธฐ๋Šฅ์ด ์กฐ๊ธˆ๋งŒ ์ถ”๊ฐ€๋˜์–ด๋„ ์–ด๋””์„œ๋ถ€ํ„ฐ ์†์„ ๋Œˆ์ง€ ๋ชจ๋ฅด๊ฒŒ ๋˜๋Š” '๊ฐ€์งœ ํ’€์Šคํƒ'์˜ ํ•œ๊ณ„์ฃ . ์ด๊ฑด ๋‹จ์ˆœํžˆ Next.js์˜ ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜ ๋” ์™ธ์šด๋‹ค๊ณ  ํ•ด๊ฒฐ๋  ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ณธ ๊ฐ•์˜๋Š” ์ด ๋‹ต๋‹ตํ•จ์„ ๋ฟŒ๋ฆฌ๋ถ€ํ„ฐ ํ•ด๊ฒฐํ•ด ๋“œ๋ฆด๊ฒŒ์š”. ๊ธฐ๋Šฅ์„ ๋‚˜์—ดํ•˜๋Š” ๋ฐฑ๊ณผ์‚ฌ์ „์‹ ์ˆ˜์—…์€ ์ง€๋ฃจํ•˜์ž–์•„์š”? ๋Œ€์‹  ์ปดํ“จํ„ฐ ๊ณผํ•™(CS)์˜ ๊ทผ๋ณธ ์›๋ฆฌ์™€ Next.js์˜ ์‹ฌํ™” ์•„ํ‚คํ…์ฒ˜๋ฅผ ์•„์ฃผ ๋ˆ๋ˆํ•˜๊ฒŒ ๊ฒฐํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜๋ฐฑ๋งŒ ๋ช…์˜ ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ ค๋„ ์œ ์—ฐํ•˜๊ฒŒ ๋ฒ„ํ…จ๋‚ด๊ณ , ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์™„๋ฒฝํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์„ค๊ณ„ ๋Šฅ๋ ฅ์„ ์—ฌ๋Ÿฌ๋ถ„์˜ ์†๋์— ์ง์ ‘ ์ด์‹ํ•ด ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

(5.0) ์ˆ˜๊ฐ•ํ‰ 6๊ฐœ

์ˆ˜๊ฐ•์ƒ 133๋ช…

๋‚œ์ด๋„ ์ดˆ๊ธ‰

์ˆ˜๊ฐ•๊ธฐํ•œ ๋ฌด์ œํ•œ

์‹ค์Šต ์ค‘์‹ฌ
์‹ค์Šต ์ค‘์‹ฌ
์‹ค์Šต ์ค‘์‹ฌ
์‹ค์Šต ์ค‘์‹ฌ
์นด์นด์˜ค์—”ํ„ฐํ”„๋ผ์ด์ฆˆ
์ž‰์นด์ธํ„ฐ๋„ท
LG์ „์ž
GS๋ฆฌํ…Œ์ผ
๋ฑ…ํฌ์ƒ๋Ÿฌ๋“œ

๋ฑ…ํฌ์ƒ๋Ÿฌ๋“œ

์ž„์ง์›๋“ค๋„ ์ด ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์žˆ์–ด์š”!

์นด์นด์˜ค์—”ํ„ฐํ”„๋ผ์ด์ฆˆ
์ž‰์นด์ธํ„ฐ๋„ท
LG์ „์ž
GS๋ฆฌํ…Œ์ผ
๋ฑ…ํฌ์ƒ๋Ÿฌ๋“œ

๋ฑ…ํฌ์ƒ๋Ÿฌ๋“œ

์ž„์ง์›๋“ค๋„ ์ด ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์žˆ์–ด์š”!

๋จผ์ € ๊ฒฝํ—˜ํ•œ ์ˆ˜๊ฐ•์ƒ๋“ค์˜ ํ›„๊ธฐ

5.0

5.0

๋™ํ•ด๋ฐ”๋‹ค

84% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

์ด ๊ฐ•์˜ ์‹œ๋ฆฌ์ฆˆ๋Š” ์ „์ฒด์ ์œผ๋กœ ๊ธฐ์ดˆ ๊ฐœ๋…์„ ์ƒ๋‹นํžˆ ์นœ์ ˆํ•˜๊ณ  ๋ฐฐ๋ ค ์žˆ๊ฒŒ ์„ค๋ช…ํ•ด ์ค๋‹ˆ๋‹ค. ์ฒ˜์Œ ๋ณด๋Š” ๋‚ด์šฉ๋„ ๋ถ€๋‹ด ์—†์ด ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ์ฐจ๊ทผ์ฐจ๊ทผ ํ’€์–ด์ฃผ๋Š” ๋А๋‚Œ์ด๋ผ ์ข‹์•˜์Šต๋‹ˆ๋‹ค. ๋ชฉ์†Œ๋ฆฌ๋Š” AI์ธ ๊ฒƒ ๊ฐ™๊ธฐ๋„ ํ•œ๋ฐ ์˜คํžˆ๋ ค ๋“ฃ๊ธฐ์—๋Š” ํŽธ์•ˆํ•ฉ๋‹ˆ๋‹ค. ์•„๋‹ ์ˆ˜๋„ ์žˆ๊ณ ์š”. ๊ฐ•์˜๋„ ์ฃผ๋ง์— ์‹œ๊ฐ„ ๋‚ด์„œ ๋ชฐ์•„์„œ ๋“ฃ๊ธฐ ๋”ฑ ์ข‹์€ ๊ธธ์ด๋กœ ์ž˜ ๋‚˜๋‰˜์–ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ‹ˆ๋‚  ๋•Œ ๋ช‡ ๊ฐœ์”ฉ ๋ณด๊ธฐ์—๋„ ๋ถ€๋‹ด์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ฐ€๊ฒฉ์„ ๋†’๊ฒŒ ์žก์•„ ๋†“๊ณ  ํ• ์ธ์„ ํฌ๊ฒŒ ํ•˜๋Š” ์•ฝ๊ฐ„์˜ ๋‚š์‹œํ˜• ๊ฐ€๊ฒฉ ์ •์ฑ…๋งŒ ๋นผ๋ฉด ์ „๋ฐ˜์ ์œผ๋กœ ๋‹ค ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ €๋„ ๊ทธ๋ ‡๊ฒŒ ๋‚š์—ฌ์„œ ์šฐ์—ฐํžˆ ๊ตฌ๋งคํ•˜๊ฒŒ ๋œ ์ผ€์ด์Šค์ด๊ธด ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๋‚ด์šฉ์ด ๊ดœ์ฐฎ์•„์„œ ์ดํ›„์— ๋‚˜์˜จ ๊ฐ•์˜๋“ค๋„ ๋Œ€๋ถ€๋ถ„ ๊ตฌ๋งคํ•ด์„œ ๋“ฃ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

5.0

ํƒœํ˜•

100% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

๋‹จ์ˆœํžˆ Next.js ์‚ฌ์šฉ๋ฒ•์„ ์•Œ๋ ค์ฃผ๋Š” ๊ฐ•์˜๊ฐ€ ์•„๋‹ˆ๋ผ ์™œ ์ด๋ ‡๊ฒŒ ์„ค๊ณ„ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•„ํ‚คํ…์ฒ˜ ๊ด€์ ์—์„œ ์ดํ•ดํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฐ•์˜์ž…๋‹ˆ๋‹ค. ์บ์‹œ๋ฅผ ํ™œ์šฉํ•œ ์„ฑ๋Šฅ๊ณผ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜๊นŒ์ง€ ๊ณ ๋ คํ•œ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๋Œ€์— ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Part 1 ๋“ฃ๊ณ  ๋ฐ”๋กœ Part 2๊นŒ์ง€ ์™”๋Š”๋ฐ Part 2๋„ ์ •๋ง ๋งŒ์กฑํ–ˆ์Šต๋‹ˆ๋‹ค. Part 3๊นŒ์ง€ ๊ฐ€๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค~

5.0

icoon22

100% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

react ๊ฐ•์ขŒ๋ฅผ ๋ณด๊ณ  next js ๋ฅผ ํ˜ธ๊ธฐ์‹ฌ์— ์‹œ์ž‘ ํ–ˆ๋Š”๋ฐ part 2 ๊นŒ์ง€ ์™”๋„ค์š”. ์ฝ”๋”ฉ๋ณด๋‹ค๋Š” ์ฃผ์š” ๊ธฐ๋Šฅ๊ณผ ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ ๋ฐฐ๊ฒฝ์ง€์‹๊ณผ ์›๋ฆฌ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ณ  ํ•„์š”์— ์˜ํ•ด ๋งŒ๋“ค์–ด์กŒ๋‹ค๋Š” ๊ฑธ ์•Œ๊ณ  ๊ธฐ๋Šฅ๋“ค์„ ์ตํžˆ๋Š”๊ฒŒ ์ข‹์•˜์Šต๋‹ˆ๋‹ค. ํ‰์†Œ UI ๊ฐœ๋ฐœ์„ ํ•˜๋ฉฐ ๋ฐœ์ƒ ํ–ˆ๋˜ ๊ณ ๋ฏผ๊ณผ ๋ฌธ์ œ์ ๋“ค์ด ์บ์‹ฑ๊ณผ ๋ผ์šฐํŒ…์œผ๋กœ ๋งŽ์ด ํ•ด์†Œ ๋˜์—ˆ์–ด์š”.

์ˆ˜๊ฐ• ํ›„ ์ด๋Ÿฐ๊ฑธ ์–ป์„ ์ˆ˜ ์žˆ์–ด์š”

  • RESTful API ์•„ํ‚คํ…์ฒ˜: ์‹œ์Šคํ…œ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜ ๊ทœ๊ฒฉ์„ ์™„๋ฒฝํ•˜๊ฒŒ ์„ค๊ณ„ํ•˜๊ณ  ํ†ต์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Route Handlers ๋ฐฉ์–ด์„ : NextResponse๋ฅผ ํ™œ์šฉํ•ด ์™ธ๋ถ€์˜ ์ž˜๋ชป๋œ ์š”์ฒญ์„ ์›์ฒœ ์ฐจ๋‹จํ•˜๋Š” ๊ฒฌ๊ณ ํ•œ API ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

  • Server Actions ํ˜๋ช…: API Route ํด๋” ์—†์ด ์„œ๋ฒ„ ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” ํ˜„๋Œ€์ ์ธ RPC ํŒจํ„ด์„ ์ง€๋ฐฐํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฌผ๋ฆฌ์  ์ค‘๋ณต ํด๋ฆญ ์ฐจ๋‹จ: useFormStatus๋กœ ๋ Œ๋”๋ง ๋ณ‘๋ชฉ์„ ๋ง‰๊ณ  ๋ฐ์ดํ„ฐ ์˜ค์—ผ์„ ๋ฐฉ์–ดํ•˜๋Š” UI ๋ฝํ‚น ๊ธฐ์ˆ ์„ ์ตํž™๋‹ˆ๋‹ค.

  • ๋‹จ๋ฐฉํ–ฅ ์ƒํƒœ ๋ธŒ๋ฆฟ์ง€: useActionState์™€ prevState๋กœ ์„œ๋ฒ„์˜ ์‘๋‹ต์„ ํ™”๋ฉด ์ƒํƒœ์™€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

  • ์ฒด๊ฐ ์ง€์—ฐ 0ms ๊ตฌํ˜„: useOptimistic์„ ํ†ตํ•ด ๋„คํŠธ์›Œํฌ ์ง€์—ฐ ์‹œ๊ฐ„์„ ์‚ฌ์šฉ์ž๊ฐ€ ๋ˆˆ์น˜์ฑ„์ง€ ๋ชปํ•˜๊ฒŒ ์†์ด๋Š” ๊ณ ๋„์˜ ๊ฒฝํ—˜์„ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

  • ์ฒ ํ†ต ๋ณด์•ˆ ์ฟ ํ‚ค ์ œ์–ด: HttpOnly, Secure ๋“ฑ 5๋Œ€ ๋ณด์•ˆ ์†์„ฑ์„ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ์—์„œ ์ง์ ‘ ๊ตฌ์›Œ๋‚ด๋ฉฐ XSS ๊ณต๊ฒฉ์„ ๋ฌด๋ ฅํ™”ํ•ฉ๋‹ˆ๋‹ค.

  • ๋…ผ๋ธ”๋กœํ‚น UX ์„ค๊ณ„: useTransition์„ ํ™œ์šฉํ•ด ๋ฌด๊ฑฐ์šด ํ†ต์‹  ์ค‘์—๋„ ์Šคํฌ๋กค์ด๋‚˜ ํด๋ฆญ์ด ๋ฉˆ์ถ”์ง€ ์•Š๋Š” ์พŒ์ ํ•œ ํ™˜๊ฒฝ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  • Safe Redirection: NEXT_REDIRECT ์—๋Ÿฌ์˜ ๋ณธ์งˆ์„ ํŒŒ์•…ํ•ด try-catch ํ•จ์ •์„ ํšŒํ”ผํ•˜๋Š” ์™„๋ฒฝํ•œ ๋™์„  ์ œ์–ด๋ ฅ์„ ๊ฐ–์ถฅ๋‹ˆ๋‹ค.

  • ์ง€๋Šฅ์  ์บ์‹œ ํ†ต์ œ: force-cache์™€ no-store๋ฅผ ๋„˜๋‚˜๋“ค๋ฉฐ ์„ฑ๋Šฅ๊ณผ ์‹ ์„ ๋„ ์‚ฌ์ด์˜ ์ตœ์  ์ง€์ ์„ ์ฐพ์•„๋ƒ…๋‹ˆ๋‹ค.

  • SWR ํŒจํ„ด์˜ ์‹ค์ „ ์ ์šฉ: ๋‚ก์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ๋ณด์—ฌ์ฃผ๊ณ  ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์กฐ์šฉํžˆ ๊ฐฑ์‹ ํ•˜๋Š” ISR ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ง€ํœ˜ํ•ฉ๋‹ˆ๋‹ค.

  • ๋งˆ์ดํฌ๋กœ ์บ์‹ฑ ๊ธฐ์ˆ : 'use cache' ์ง€์‹œ์–ด๋กœ ํŽ˜์ด์ง€ ๋‹จ์œ„๊ฐ€ ์•„๋‹Œ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„์˜ ์ •๋ฐ€ํ•œ ๊ฒฐ๋น™ ์ „๋žต์„ ์„ธ์›๋‹ˆ๋‹ค.

  • ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ Œ๋”๋ง(PPR): ์ •์  ๊ป๋ฐ๊ธฐ๋ฅผ ๋จผ์ € ๋˜์ง€๊ณ  ๋™์  ๋ฐ์ดํ„ฐ๋ฅผ ์ŠคํŠธ๋ฆฌ๋ฐ์œผ๋กœ ์ฑ„์šฐ๋Š” ์ฐจ์„ธ๋Œ€ ๋ Œ๋”๋ง์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  • ์„œ๋กœ๊ฒŒ์ดํŠธ ํ‚ค ์ •๋ฐ€ ํƒ€๊ฒฉ: revalidateTag์™€ updateTag๋กœ ํ™”๋ฉด ์ „์—ญ์— ํฉ์–ด์ง„ ์บ์‹œ๋ฅผ ๋‹จ ํ•œ ๋ฒˆ์˜ ๋ช…๋ น์œผ๋กœ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

  • ์žฅ์•  ๊ฒฉ๋ฆฌ ์•„ํ‚คํ…์ฒ˜: ๋ณ‘๋ ฌ ๋ผ์šฐํŠธ(@folder)๋ฅผ ํ†ตํ•ด ํŠน์ • ๋ถ€ํ’ˆ์˜ ๊ณ ์žฅ์ด ์ „์ฒด ๋ถ•๊ดด๋กœ ์ด์–ด์ง€์ง€ ์•Š๊ฒŒ ๊ฒฉ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • ํžˆ์Šคํ† ๋ฆฌ ์Šคํƒ ๋งˆ์Šคํ„ฐ: ๋ธŒ๋ผ์šฐ์ € ๊ธฐ์–ต ์žฅ์น˜์˜ ์›๋ฆฌ๋ฅผ ์ด์šฉํ•ด ์ธ์Šคํƒ€๊ทธ๋žจ ์Šคํƒ€์ผ์˜ ์™„๋ฒฝํ•œ ํŒ์—… ๋ชจ๋‹ฌ์„ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค.


๐Ÿš€ Next.js ๋งˆ์Šคํ„ฐ ํด๋ž˜์Šค: Part 2 - ํ’€์Šคํƒ ์•„ํ‚คํ…์ฒ˜์™€ ํ”„๋ ˆ์ž„์›Œํฌ ์‹ฌํ™”

Next.js์˜ ๊ธฐ์ดˆ๋ฅผ ๋„˜์–ด์„  ๋‹จ๊ณ„๋Š” ๋‹จ์ˆœํžˆ ํ™”๋ฉด์„ '๊ทธ๋ฆฌ๋Š” ๊ฒƒ'์ด ์•„๋‹ˆ๋ผ, ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ๊ฐ€ ์ถฉ๋Œ ์—†์ด ๊ฒฐํ•ฉ๋˜๋Š” '์‹œ์Šคํ…œ์˜ ์‹ ๊ฒฝ๋ง'์„ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๊ฐ•์˜๋Š” Next.js 16์˜ ๋ณด๋‹›์„ ์—ด๊ณ , ์ตœ์ฒจ๋‹จ ์„œ๋ฒ„ ์บ์‹ฑ ์—”์ง„๊ณผ ๋ผ์šฐํŒ… ํŒŒ์ดํ”„๋ผ์ธ์„ ์ •๋ฐ€ํ•˜๊ฒŒ ํŠœ๋‹ํ•˜๋Š” ํ•˜์ด์—”๋“œ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ฑ๋Šฅ ์ €ํ•˜๋‚˜ ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ๋งˆ์ฃผํ•  ๋•Œ ์˜ต์…˜์„ ๊ป๋‹ค ์ผฐ๋‹ค ํ•˜๋ฉฐ ๋ง‰์—ฐํ•œ ์ถ”์ธก์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งœ์ง€๋งŒ, ์šฐ๋ฆฌ๋Š” "์™œ ์ด ์•„ํ‚คํ…์ฒ˜๊ฐ€ ํƒ„์ƒํ–ˆ๋Š”๊ฐ€"๋ผ๋Š” ์ปดํ“จํ„ฐ ๊ณผํ•™(CS)์˜ ๊ทผ๋ณธ์ ์ธ ์งˆ๋ฌธ์—์„œ ์ถœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

RESTful API์˜ ๋ณธ์งˆ โ†’ ์„œ๋ฒ„ ์•ก์…˜(RPC)์˜ ๋ถ€ํ™œ โ†’ ๋งˆ์ดํฌ๋กœ ์บ์‹ฑ(use cache) โ†’ ๋ถ€๋ถ„ ์‚ฌ์ „ ๋ Œ๋”๋ง(PPR) โ†’ ์„œ๋กœ๊ฒŒ์ดํŠธ ํ‚ค(Surrogate Keys) โ†’ ํžˆ์Šคํ† ๋ฆฌ ์Šคํƒ ์ œ์–ด๋กœ ์ด์–ด์ง€๋Š” ์ดˆ๊ณ ๋‚œ๋„ ํŒŒ์ดํ”„๋ผ์ธ์„ ์™„๋ฒฝํžˆ ์ •๋ณตํ•ฉ๋‹ˆ๋‹ค.

0.001์ดˆ์˜ ์‘๋‹ต ์†๋„๋ฅผ ๋ณด์žฅํ•˜๋Š” 'PPR ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์„ค๊ณ„'์™€ ์ธ์Šคํƒ€๊ทธ๋žจ ์ˆ˜์ค€์˜ ๋ณต์žกํ•œ '๋ณ‘๋ ฌ/๊ฐ€๋กœ์ฑ„๊ธฐ ๋ผ์šฐํŒ…'์„ 37๊ฐœ์˜ ์‹ฌํ™” ๊ฐ•์˜์™€ 18๊ฐœ์˜ ์‹ค๋ฌด ๋ฏธ์…˜์„ ํ†ตํ•ด ์†๋์œผ๋กœ ์ฒด๋“ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ '๊ธฐ๋Šฅ์ด ๋Œ์•„๊ฐ€๋Š”' ์ˆ˜์ค€์„ ๋„˜์–ด, ์ˆ˜๋ฐฑ๋งŒ ๋ช…์˜ ํŠธ๋ž˜ํ”ฝ์—๋„ ํ”๋“ค๋ฆฌ์ง€ ์•Š๋Š” ๋ฌด๊ฒฐ์  ์‹œ์Šคํ…œ์„ ์ง์ ‘ ์ง€ํœ˜ํ•˜๋Š” ์•„ํ‚คํ…ํŠธ์˜ ์•ˆ๋ชฉ์„ ์ด์‹ํ•ด ๋“œ๋ฆฝ๋‹ˆ๋‹ค.


๐Ÿงฑ ๊ฐ•์˜ ๊ตฌ์„ฑ์˜ ํ•ต์‹ฌ ์ฒ ํ•™ (Next.js Architect's Creed)

๐Ÿ“Œ โ€œ๋ฐ์ดํ„ฐ์˜ ๋ณ€์ด(Mutation)๋Š” ํ”„๋ก ํŠธ์—”๋“œ์˜ ์‚ฌ์ƒํ™œ์ด ์•„๋‹ˆ๋‹ค.โ€
โ†’ useState์™€ ํŒŒํŽธํ™”๋œ fetch ๋กœ์ง์€ ๋ณด์•ˆ๊ณผ ์ •ํ•ฉ์„ฑ์˜ ๋ฒ„๊ทธ๋ฅผ ํ‚ค์›๋‹ˆ๋‹ค. ์ด์ œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์€ '์„œ๋ฒ„ ์•ก์…˜(Server Actions)'์ด๋ผ๋Š” ์•ˆ์ „ํ•œ ๋ฐฑ์—”๋“œ ๊ณต๊ฐ„์—์„œ ์›์ž์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ์˜ ๊ฒฝ๊ณ„๋ฅผ ํ—ˆ๋ฌผ๊ณ , API ์ฃผ์†Œ ์—†์ด๋„ ๋กœ์ง ๊ทธ ์ž์ฒด๋กœ ๋ฌด๊ฒฐ์„ฑ์ด ์ฆ๋ช…๋˜๋Š” 'RPC(์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ)' ๊ธฐ๋ฐ˜์˜ ๋‹จ์ผ ์ง„์‹ค ๊ณต๊ธ‰์› ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ โ€œ์บ์‹œ ์ƒํƒœ๋ฅผ ์ง์ž‘ํ•˜์ง€ ๋ง๊ณ  '์—‘์Šค๋ ˆ์ด'๋กœ ์ฆ๋ช…ํ•˜๋ผ.โ€
โ†’ "๋ฐ˜์˜๋œ ๊ฒƒ ๊ฐ™๋‹ค"๋Š” ๋ง‰์—ฐํ•œ ์ถ”์ธก์€ ์‹ค๋ฌด์—์„œ ์น˜๋ช…์ ์ธ ์œ ๋ น ๋ฒ„๊ทธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. logging.fetches ์˜ต์…˜์„ ํ†ตํ•ด ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ผ์–ด๋‚˜๋Š” HIT, MISS, SET์˜ ํ๋ฆ„์„ ํˆฌ๋ช…ํ•˜๊ฒŒ ๊ด€์ฐฐํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์šฐ๋“œ ์š”๊ธˆ ํญํƒ„์„ ๋ง‰๊ธฐ ์œ„ํ•ด '๋„คํŠธ์›Œํฌ ์—‘์Šค๋ ˆ์ด'๋ฅผ ๊ฐ€๋™ํ•˜๊ณ , ๋ฐ์ดํ„ฐ ์‹ ์„ ๋„์™€ ์„ฑ๋Šฅ ์‚ฌ์ด์˜ ์ตœ์  ์ง€์ ์„ ๋ฐ€๋ฆฌ์ดˆ(ms) ๋‹จ์œ„์˜ ์ง€ํ‘œ๋กœ ๊ฒ€๊ฑฐํ•˜๋Š” ์ˆ˜์ˆ ์  ์ตœ์ ํ™”๋ฅผ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ โ€œ์žฅ์•  ๊ฒฉ๋ฆฌ(Fault Isolation)๊ฐ€ ์ตœ์ ํ™” ํ›…๋ณด๋‹ค ๊ฐ•๋ ฅํ•˜๋‹ค.โ€
โ†’ ๋ฌด๋ถ„๋ณ„ํ•œ ์บ์‹œ ์˜ต์…˜์€ ์˜คํžˆ๋ ค ์‹œ์Šคํ…œ์„ ๊ฒฝ์ง์‹œํ‚ต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” '๋ณ‘๋ ฌ ๋ผ์šฐํŠธ(@folder)'๋ฅผ ํ†ตํ•ด ํ™”๋ฉด์„ ๋…๋ฆฝ๋œ ์Šฌ๋กฏ์œผ๋กœ ์ชผ๊ฐœ์–ด, ํŠน์ • ๋ถ€ํ’ˆ์˜ ์ง€์—ฐ์ด๋‚˜ ์—๋Ÿฌ๊ฐ€ ์ „์ฒด ์‹œ์Šคํ…œ์˜ ๋ถ•๊ดด๋กœ ์ด์–ด์ง€์ง€ ์•Š๊ฒŒ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๊ฒฉ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ๊ฒฐ๋น™ ์ „๋žต์„ ์„ธ์šฐ๋Š” '๋งˆ์ดํฌ๋กœ ์บ์‹ฑ(use cache)'์„ ํ†ตํ•ด, ํ›… ์—†์ด๋„ ์‹œ์Šคํ…œ ์ „์ฒด๊ฐ€ ์œ ๊ธฐ์ ์œผ๋กœ ์‚ด์•„ ์›€์ง์ด๋Š” ์ฒด์งˆ ๊ฐœ์„ ์„ ๊ฒฝํ—˜ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ โ€œ๋ฉˆ์ถ”์ง€ ์•Š๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜, ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜.โ€
โ†’ ์‚ฌ์šฉ์ž๋ฅผ ๋ฐฑ์ง€ ํ™”๋ฉด(White Screen)์— ๋ฐฉ์น˜ํ•˜๋Š” ๊ฒƒ์€ ์•„ํ‚คํ…ํŠธ์˜ ์ˆ˜์น˜์ž…๋‹ˆ๋‹ค. '๋ถ€๋ถ„ ์‚ฌ์ „ ๋ Œ๋”๋ง(PPR)'์„ ํ†ตํ•ด 0.001์ดˆ ๋งŒ์— ์ •์  ๊ป๋ฐ๊ธฐ๋ฅผ ๋จผ์ € ๋˜์ง€๊ณ , ๋ฌด๊ฑฐ์šด ๋ฐ์ดํ„ฐ๋Š” ๊ตฌ๋ฉ(Hole) ์†์œผ๋กœ ๋ฌผ ํ๋ฅด๋“ฏ ์ฑ„์›Œ ๋„ฃ์Šต๋‹ˆ๋‹ค. '์šฐ์„ ์ˆœ์œ„ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜'์„ ํ†ตํ•ด ์–ด๋–ค ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์ค‘์—๋„ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์–ผ์–ด๋ถ™์ง€ ์•Š๋Š” ํ•˜์ด์—”๋“œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ โ€œ0.1์ดˆ์˜ ์ง€์—ฐ์ด ๋ธŒ๋žœ๋“œ์˜ ๊ธ‰์„ ๊ฒฐ์ •ํ•œ๋‹ค.โ€
โ†’ ๋กœ์ง์€ ๋งž์ง€๋งŒ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” '๋ฉˆ์ถค'์€ ์‚ฌ์šฉ์ž ์‹ ๋ขฐ๋ฅผ ํ•ด์นฉ๋‹ˆ๋‹ค. '๋‚™๊ด€์  ์—…๋ฐ์ดํŠธ(useOptimistic)'๋กœ ์ธ์ง€์  ์ง€์—ฐ ์‹œ๊ฐ„์„ 0์ดˆ๋กœ ๋งŒ๋“ค๊ณ , '๋…ผ๋ธ”๋กœํ‚น UX(useTransition)' ์ „๋žต์„ ํ†ตํ•ด ๋ฌด๊ฑฐ์šด ํ†ต์‹  ์ค‘์—๋„ ์Šคํฌ๋กค๊ณผ ํด๋ฆญ์ด ์‚ด์•„์žˆ๋Š” ์™„๋ฒฝํ•œ ์‹œ๊ฐ์  ์—ฐ์†์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์‹คํŒจ ์‹œ ์ฆ‰๊ฐ์ ์œผ๋กœ ์ƒํƒœ๋ฅผ ๋ณต๊ตฌํ•˜๋Š” '์ž๋™ ๋กค๋ฐฑ(Rollback)' ์—”์ง„์œผ๋กœ ์‹œ์Šคํ…œ์˜ ๊ธ‰์„ ๋†’์ž…๋‹ˆ๋‹ค.

๐Ÿ“Œ โ€œURL์€ ์‹œ์Šคํ…œ์˜ ๋งฅ๋ฝ์„ ์ฆ๋ช…ํ•˜๋Š” ์ ˆ๋Œ€์  ์‹ ๋ถ„์ฆ์ด๋‹ค.โ€
โ†’ ์ƒˆ๋กœ๊ณ ์นจํ•˜๋ฉด ์‚ฌ๋ผ์ง€๋Š” ๋ฉ”๋ชจ๋ฆฌ ์† ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹Œ, ๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ์ฐฝ์— ๋ฐ•์ œ๋œ 'URL ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜'๋ฅผ ์ง€ํ–ฅํ•ฉ๋‹ˆ๋‹ค. '์ธํ„ฐ์…‰ํŒ… ๋ผ์šฐํŠธ((..)folder)'๋ฅผ ํ™œ์šฉํ•ด ๊ธฐ์กด ๋งฅ๋ฝ์„ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ์ฃผ์†Œ๋ฅผ ๋™๊ธฐํ™”ํ•˜๋Š” ์ธ์Šคํƒ€๊ทธ๋žจ ์ˆ˜์ค€์˜ ๋ชจ๋‹ฌ ๊ตฌ์กฐ๋ฅผ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค. 'ํžˆ์Šคํ† ๋ฆฌ ์Šคํƒ'์˜ ๋ณธ์งˆ์„ ํ†ต์ œํ•˜์—ฌ ์ƒˆ๋กœ๊ณ ์นจ์ด๋‚˜ ๋’ค๋กœ ๊ฐ€๊ธฐ์—๋„ ๋ถ•๊ดด ์—†๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ๋‚ด๋น„๊ฒŒ์ด์…˜์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.


โœจ ์ด ๊ฐ•์˜์˜ ํŠน์ง• (Architect's Masterclass Features)

๋ฐ์ดํ„ฐ์™€ ํ™”๋ฉด์˜ '๊ฒฐ๋น™๊ณผ ํ•ด๋…'์„ ์™„๋ฒฝํžˆ ํ†ต์ œํ•˜๋Š” ํ•˜์ด์—”๋“œ ํด๋ž˜์Šค
โ†’ force-cache์™€ no-store๋ฅผ ๋„˜๋‚˜๋“ค๋ฉฐ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ฐ•์ œ ๊ฒฐ๋น™(SSG) ์ •์ฑ…์„ ํŒŒํ›ผํ•˜๊ณ , 0.001์ดˆ์˜ ์‘๋‹ต ์†๋„์™€ 100% ๋ฐ์ดํ„ฐ ์‹ ์„ ๋„ ์‚ฌ์ด์˜ ์™„๋ฒฝํ•œ ์Šค์œ„ํŠธ์ŠคํŒŸ์„ ์‚ฌ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒํŽธํ™”๋œ ํ†ต์‹  ๋กœ์ง์„ '์„œ๋ฒ„ ์•ก์…˜(Server Actions)'์œผ๋กœ ํ†ตํ•ฉ
โ†’ ๋ณต์žกํ•œ API ์ฃผ์†Œ์™€ fetch ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์•ˆ์ „ํ•œ ๋ฐฑ์—”๋“œ ๊ณต๊ฐ„์— ์บก์Аํ™”ํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์šด RPC(์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ) ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

HTTP ๋ฌด์ƒํƒœ์„ฑ(Stateless)๊ณผ ์‹ ๋ถ„์ฆ(Cookie)์˜ ๋ณธ์งˆ ์ •๋ณต
โ†’ ์„œ๋ฒ„๊ฐ€ ์™œ ๊ธฐ์–ต์ƒ์‹ค์ฆ์— ๊ฑธ๋ ธ๋Š”์ง€ ์ปดํ“จํ„ฐ ๊ณผํ•™์˜ ๊ทผ๋ณธ ์›๋ฆฌ๋ฅผ ํŒŒํ—ค์ณ, HttpOnly 5๋Œ€ ๋ณด์•ˆ ์†์„ฑ์„ ํ™œ์šฉํ•œ ์ฒ ํ†ต๊ฐ™์€ ์ธ์ฆ ์‹œ์Šคํ…œ๊ณผ ์„ธ์…˜ ๊ด€๋ฆฌ ์ „๋žต์„ ๋งˆ์Šคํ„ฐํ•ฉ๋‹ˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„ '๋งˆ์ดํฌ๋กœ ์บ์‹ฑ'๊ณผ PPR ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์ „๋žต
โ†’ ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ์–ผ๋ฆฌ๋˜ ํˆฌ๋ฐ•ํ•œ ๋ฐฉ์‹์—์„œ ๋ฒ—์–ด๋‚˜, 'use cache'์™€ cacheLife๋กœ ๋ถ€ํ’ˆ๋ณ„ ์ˆ˜๋ช…์„ ์„ค๊ณ„ํ•˜๊ณ , ์ •์  ๊ป๋ฐ๊ธฐ ์•ˆ์— ๋™์  ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ˜๋ ค๋ณด๋‚ด๋Š” ์ฐจ์„ธ๋Œ€ ๋ Œ๋”๋ง์„ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

๋ฆฌ์•กํŠธ 19 ๋™์‹œ์„ฑ ์—”์ง„ ๊ธฐ๋ฐ˜์˜ ๋…ผ๋ธ”๋กœํ‚น(Non-blocking) UX
โ†’ useTransition๊ณผ useOptimistic์„ ์‹ค์ „์— ์ ์šฉํ•˜์—ฌ, ๋ฌด๊ฑฐ์šด ๋ฐ์ดํ„ฐ ํ†ต์‹  ์ค‘์—๋„ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ๊ณผ ์Šคํฌ๋กค์ด ๋‹จ 1ms๋„ ์–ผ์–ด๋ถ™์ง€ ์•Š๋Š” ํ•˜์ด์—”๋“œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€๊ทœ๋ชจ CDN ๊ธ‰์˜ '์„œ๋กœ๊ฒŒ์ดํŠธ ํ‚ค(Surrogate Keys)' ์ •๋ฐ€ ํƒ€๊ฒฉ
โ†’ revalidateTag์™€ updateTag๋ฅผ ํ™œ์šฉํ•˜์—ฌ, ํ™”๋ฉด ์ „์—ญ์— ํฉ์–ด์ง„ ์ˆ˜๋งŒ ๊ฐœ์˜ ์บ์‹œ ์กฐ๊ฐ์„ ๋‹จ ํ•œ ๋ฒˆ์˜ ๋ช…๋ น์œผ๋กœ ์—ฐ์‡„ ๋™๊ธฐํ™”์‹œํ‚ค๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๊ธฐ์ˆ ์„ ์Šต๋“ํ•ฉ๋‹ˆ๋‹ค.

๋ณ‘๋ ฌ ๋ฐ ๊ฐ€๋กœ์ฑ„๊ธฐ ๋ผ์šฐํŒ… ๊ธฐ๋ฐ˜์˜ ์ธ์Šคํƒ€๊ทธ๋žจ ์Šคํƒ€์ผ ๋ชจ๋‹ฌ
โ†’ Parallel Routes(@)์™€ Intercepting Routes((..))๋ฅผ ๊ฒฐํ•ฉํ•˜๊ณ , ๋ธŒ๋ผ์šฐ์ € ํžˆ์Šคํ† ๋ฆฌ ์Šคํƒ์˜ ํ›„์ž…์„ ์ถœ(LIFO) ์›๋ฆฌ๋ฅผ ํ†ต์ œํ•˜์—ฌ ์ƒˆ๋กœ๊ณ ์นจ์ด๋‚˜ ๋’ค๋กœ ๊ฐ€๊ธฐ์—๋„ ๋ฌด๋„ˆ์ง€์ง€ ์•Š๋Š” ์™„๋ฒฝํ•œ ๋‚ด๋น„๊ฒŒ์ด์…˜์„ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค.

18๊ฐœ์˜ ๊ณ ๋‚œ๋„ ํ’€์Šคํƒ ์‹ค๋ฌด ๋ฏธ์…˜ ์—ฐ๊ณ„
โ†’ ์‹ค์‹œ๊ฐ„ ํด๋ผ์šฐ๋“œ ๋ชจ๋‹ˆํ„ฐ๋ง, ์™ธ๋ถ€ ์›นํ›… ์ˆ˜์‹ ์†Œ, 1๊ธ‰ ๋ณด์•ˆ ์ธ๊ฐ€ ๋ฐœ๊ธ‰, E-commerce ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋“ฑ ์‹ค์ œ ํ˜„์žฅ์˜ ๋ณต์žกํ•œ ๋‚œ์ œ๋“ค์„ ์•„ํ‚คํ…ํŠธ์˜ ๋…ผ๋ฆฌ๋กœ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.


1๏ธโƒฃ ์„œ๋ฒ„ ์•ก์…˜(Server Actions) ์„ค๊ณ„: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์•ˆ์ „ํ•œ 'use server' ๋ฒ™์ปค์— ๊ฒฉ๋ฆฌํ•˜์—ฌ ํ”„๋ก ํŠธ-๋ฐฑ์—”๋“œ์˜ ๊ฒฝ๊ณ„๋ฅผ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉํ•˜๋Š” RPC ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

2๏ธโƒฃ ๋ฐ์ดํ„ฐ ํ†ต์ œ ์„ผํ„ฐ(Route Handlers): ์ˆœ์ˆ˜ํ•œ JSON ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐœํ–‰ํ•˜๋Š” ๋…๋ฆฝ API ์„œ๋ฒ„๋ฅผ Next.js ๋‚ด๋ถ€์— ๊ฐ€๋™ํ•˜๊ณ , ์™ธ๋ถ€์˜ ๋ถ€์ ์ ˆํ•œ ์š”์ฒญ์„ ์ฐจ๋‹จํ•˜๋Š” ๊ฒฌ๊ณ ํ•œ ๋ฐฉ์–ด์„ ์„ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

3๏ธโƒฃ ์ฒ ํ†ต ๋ณด์•ˆ ์ธ์ฆ ๋ฐ ์ธ๊ฐ€: HttpOnly ๋ณด์•ˆ ์ฟ ํ‚ค์™€ ์„œ๋ฒ„ ์•ก์…˜์„ ๊ฒฐํ•ฉํ•ด, ํด๋ผ์ด์–ธํŠธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋„˜๋ณผ ์ˆ˜ ์—†๋Š” 1๊ธ‰ ๋ณด์•ˆ ์„ธ์…˜ ํšŒ๋กœ๋ฅผ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค.

5๏ธโƒฃ ์˜จ๋””๋งจ๋“œ ์บ์‹œ ๋ฌดํšจํ™”: ์„œ๋กœ๊ฒŒ์ดํŠธ ํ‚ค(Surrogate Keys) ํƒœ๊ทธ ์‹œ์Šคํ…œ์„ ํ™œ์šฉํ•ด, ์ „ ์„ธ๊ณ„์— ํฉ์–ด์ง„ ์บ์‹œ ์กฐ๊ฐ์„ ๋‹จ ํ•œ ๋ฒˆ์˜ ๋ช…๋ น์œผ๋กœ ์—ฐ์‡„ ๋™๊ธฐํ™”์‹œํ‚ค๋Š” ์ •๋ฐ€ ํƒ€๊ฒฉ ๊ธฐ์ˆ ์„ ์Šต๋“ํ•ฉ๋‹ˆ๋‹ค.

4๏ธโƒฃ ์„œ๋ฒ„ ์บ์‹œ์™€ ๋ฉ”๋ชจ์ด์ œ์ด์…˜: ์ค‘๋ณต ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ์•”์‚ดํ•˜๋Š” '๋„คํŠธ์›Œํฌ ์—‘์Šค๋ ˆ์ด' ๊ธฐ๋ฒ•๊ณผ ์„œ๋ฒ„ ๋ถ€ํ•˜๋ฅผ 0์œผ๋กœ ๋งŒ๋“œ๋Š” force-cache ๊ธฐ์ˆ ๋กœ ์ธํ”„๋ผ ๋น„์šฉ์„ ๊ทนํ•œ์œผ๋กœ ์ ˆ๊ฐํ•ฉ๋‹ˆ๋‹ค.

6๏ธโƒฃ ๋งˆ์ดํฌ๋กœ ์บ์‹ฑ(Micro Caching): ํŽ˜์ด์ง€ ๋‹จ์œ„์˜ ๋‘”ํƒํ•œ ๊ฒฐ๋น™์„ ๋ฒ„๋ฆฌ๊ณ  'use cache'์™€ cacheLife๋กœ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„์˜ ์ •๋ฐ€ํ•œ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ํ•€์…‹ ์ตœ์ ํ™”๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

7๏ธโƒฃ ์ธ์ง€์  ์ง€์—ฐ 0ms์˜ ์ •์ : useOptimistic์œผ๋กœ ์„œ๋ฒ„ ์‘๋‹ต ์ „ UI๋ฅผ ์ฆ‰๊ฐ ๋ณ€๊ฒฝํ•˜๊ณ , ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ์‹œ์Šคํ…œ ์Šค์Šค๋กœ ์ƒํƒœ๋ฅผ ๋ณต๊ตฌํ•˜๋Š” '์ž๋™ ๋กค๋ฐฑ ์—”์ง„'์„ ์ด์‹ํ•ฉ๋‹ˆ๋‹ค.

8๏ธโƒฃ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ PPR ์•„ํ‚คํ…์ฒ˜: ์ •์  ๊ป๋ฐ๊ธฐ๋ฅผ 0์ดˆ ๋งŒ์— ๋˜์ง€๊ณ  ๋™์  ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ๋ฉ(Hole) ์†์œผ๋กœ ๋ฌผ ํ๋ฅด๋“ฏ ์ฑ„์›Œ ๋„ฃ๋Š” ๋ถ€๋ถ„ ์‚ฌ์ „ ๋ Œ๋”๋ง(PPR) ์ŠคํŠธ๋ฆผ์„ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค.


9๏ธโƒฃ ๋…ผ๋ธ”๋กœํ‚น(Non-blocking) UX: useTransition์œผ๋กœ ๋ฌด๊ฑฐ์šด ์„œ๋ฒ„ ์ž‘์—…์„ ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„๋กœ ๋ฐ€์–ด๋‚ด์–ด, ๋ฐ์ดํ„ฐ ํ†ต์‹  ์ค‘์—๋„ ์‚ฌ์šฉ์ž์˜ ์Šคํฌ๋กค๊ณผ ํด๋ฆญ์ด ์–ผ์–ด๋ถ™์ง€ ์•Š๋Š” ํ•˜์ด์—”๋“œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”Ÿ ๊ณ ์ฐจ์› ๋ผ์šฐํŒ…๊ณผ ํžˆ์Šคํ† ๋ฆฌ ์Šคํƒ:
๋ณ‘๋ ฌ(@) ๋ฐ ๊ฐ€๋กœ์ฑ„๊ธฐ((..)) ๋ผ์šฐํŠธ๋ฅผ ์œตํ•ฉํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ € ๊ธฐ์–ต ์žฅ์น˜์˜ ์›๋ฆฌ๋ฅผ ํ†ต์ œํ•˜์—ฌ, ์ธ์Šคํƒ€๊ทธ๋žจ ์ˆ˜์ค€์˜ ์™„๋ฒฝํ•œ ํŒ์—… ๋ชจ๋‹ฌ ๊ตฌ์กฐ๋ฅผ ์ •๋ณตํ•ฉ๋‹ˆ๋‹ค.

์„ฑ๋Šฅ ๋ถ„์„:
๋‹จ์ˆœํ•œ ์†๋„ ์ธก์ •์„ ๋„˜์–ด '๋„คํŠธ์›Œํฌ ์—‘์Šค๋ ˆ์ด'๋กœ ์บ์‹œ ์ ์ค‘๋ฅ ๊ณผ ์›Œํ„ฐํด ํ˜„์ƒ์„ ๊ณตํ•™์ ์œผ๋กœ ๋ถ„์„ํ•˜๊ณ  ์‹ถ์€ ๋ถ„.

์ตœ์‹  ๊ธฐ์ˆ :
PPR(๋ถ€๋ถ„ ์‚ฌ์ „ ๋ Œ๋”๋ง)๊ณผ ์„œ๋ฒ„ ์•ก์…˜ ๋“ฑ Next.js 15/16์˜ ํŒŒ๊ดด์  ๋ณ€ํ™”๋ฅผ ์‹ค๋ฌด์— ์ฆ‰์‹œ ํˆฌ์ž…ํ•˜๊ณ  ์‹ถ์€ ๋ถ„.

๊ตฌ์กฐ ์„ค๊ณ„:
๊ฐ€๋กœ์ฑ„๊ธฐ ๋ผ์šฐํŠธ ๋“ฑ ๋ณต์žกํ•œ App Router ๊ตฌ์กฐ ์†์—์„œ๋„ ๊ธธ์„ ์žƒ์ง€ ์•Š๋Š” 'ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์„ค๊ณ„'๋ฅผ ๋ฐฐ์šฐ๊ณ  ์‹ถ์€ ๋ถ„.

์ƒํƒœ ์„ค๊ณ„:
๋ณต์žกํ•œ ์ „์—ญ ์ƒํƒœ ๋„๊ตฌ ๋Œ€์‹  'URL'๊ณผ '์„œ๋ฒ„ ์„ธ์…˜'์„ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ผ ์ง„์‹ค ๊ณต๊ธ‰์›์œผ๋กœ ํ™œ์šฉํ•˜๊ณ  ์‹ถ์€ ๋ถ„.

ํŒŒ์ดํ”„๋ผ์ธ:
๋ธŒ๋ผ์šฐ์ € ํŽ˜์ธํŒ…์„ ๋„˜์–ด ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ ์‹œ์ž‘๋ถ€ํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ๊ณผ ํ•˜์ด๋“œ๋ ˆ์ด์…˜๊นŒ์ง€ ์ „ ๊ณผ์ •์„ ํ†ต์ œํ•˜๊ณ  ์‹ถ์€ ๋ถ„.

UX ์™„์„ฑ๋„:
useOptimistic๊ณผ ์„œ๋ฒ„ ์ฟ ํ‚ค ์ œ์–ด๋กœ ์ธ์ง€์  ์ง€์—ฐ๊ณผ ๋ฒˆ์ฉ์ž„(FOUC)์ด ์ „ํ˜€ ์—†๋Š” ํ•˜์ด์—”๋“œ UI๋ฅผ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ๋ถ„.

์บ์‹œ ์ •๋ณต:
ํด๋ผ์ด์–ธํŠธ ์ตœ์ ํ™”์˜ ํ•œ๊ณ„๋ฅผ ๋„˜์–ด 'use cache'์™€ 'force-cache'์˜ ์„œ๋ฒ„ ๊ฒฐ๋น™ ์›๋ฆฌ๋ฅผ ๋ช…ํ™•ํžˆ ์ •๋ณตํ•˜๊ณ  ์‹ถ์€ ๋ถ„.

์žฅ์•  ๊ฒฉ๋ฆฌ:
ํŠน์ • ์ปดํฌ๋„ŒํŠธ์˜ ์ง€์—ฐ์ด ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ๋ฉˆ์ถ”์ง€ ์•Š๋„๋ก '๋ณ‘๋ ฌ ๋ผ์šฐํŠธ'๋กœ ์Šฌ๋กฏ ๋‹จ์œ„ ๋…๋ฆฝ์„ฑ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์€ ๋ถ„.

์•„ํ‚คํ…ํŠธ ๋„์•ฝ:
๋‹จ์ˆœ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ๋„˜์–ด ํ’€์Šคํƒ ํŒŒ์ดํ”„๋ผ์ธ ์ „์ฒด๋ฅผ ์ง€ํœ˜ํ•˜๋Š” ์‹œ์Šคํ…œ ์•„ํ‚คํ…ํŠธ๋กœ ๋„์•ฝํ•˜๊ณ  ์‹ถ์€ ๊ฐœ๋ฐœ์ž.

๐Ÿ‘ฅ ์ด๋Ÿฐ ๋ถ„๋“ค์—๊ฒŒ ๊ฐ•๋ ฅํžˆ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค

  • ์„ฑ๋Šฅ ๋ถ„์„: ๋‹จ์ˆœํ•œ ์†๋„ ์ธก์ •์„ ๋„˜์–ด ๋„คํŠธ์›Œํฌ ์—‘์Šค๋ ˆ์ด๋กœ ์บ์‹œ ์ ์ค‘๋ฅ ๊ณผ ์›Œํ„ฐํด ํ˜„์ƒ์„ ๊ณตํ•™์ ์œผ๋กœ ๋ถ„์„ํ•˜๊ณ  ์ˆ˜์ˆ ํ•˜๊ณ  ์‹ถ์€ ๋ถ„.

  • ๋กœ์ง ๋ถ„๋ฆฌ: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์•ˆ์ „ํ•œ ์„œ๋ฒ„ ์•ก์…˜(Server Actions) ๋ฒ™์ปค๋กœ ๊ฒฉ๋ฆฌํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ๋ฒˆ๋“ค์„ ํš๊ธฐ์ ์œผ๋กœ ๊ฒฝ๋Ÿ‰ํ™”ํ•˜๊ณ  ์‹ถ์€ ๋ถ„.

  • ์บ์‹œ ํ†ต์ œ: ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ฐ์ดํ„ฐ ๊ฒฐ๋น™ ์›๋ฆฌ๋ฅผ ํŒŒํ—ค์ณ ๋ถˆํ•„์š”ํ•œ DB ํƒ€๊ฒฉ๊ณผ ์ค‘๋ณต ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ์›์ฒœ ์ฐจ๋‹จํ•˜๊ณ  ์‹ถ์€ ๋ถ„.

  • ์ŠคํŠธ๋ฆฌ๋ฐ UI: ๋ฌด๊ฑฐ์šด ์—ฐ์‚ฐ ์ค‘์—๋„ ์‚ฌ์šฉ์ž์˜ ์Šคํฌ๋กค๊ณผ ์ž…๋ ฅ์ด ์ ˆ๋Œ€ ์–ผ์–ด๋ถ™์ง€ ์•Š๋Š” PPR ๊ธฐ๋ฐ˜์˜ ๋…ผ๋ธ”๋กœํ‚น ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•˜๊ณ  ์‹ถ์€ ๋ถ„.

  • ์‹œ๊ฐ์  ๋ฌด๊ฒฐ์„ฑ: ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ์ฟ ํ‚ค๋กœ ํ†ตํ•ฉํ•˜์—ฌ ํฐํŠธ ํА(FOUC)์ด๋‚˜ ํ™”๋ฉด ๋ฒˆ์ฉ์ž„์„ 0ms๋กœ ํ•ด๊ฒฐํ•˜๊ณ  ์‹ถ์€ ๋ถ„.

  • ๋ฉ€ํ‹ฐ ์ œ์–ด ์‹œ์Šคํ…œ: ์ธ์ฆ ๋ณด์•ˆ๊ณผ ํ™˜๊ฒฝ ์„ค์ •์„ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ์—์„œ ๊ณ„์ธต์ ์œผ๋กœ ํ†ต์ œํ•˜๋Š” ์œ ๋‹ˆ๋ฒ„์„ค ์ œ์–ด ์„ผํ„ฐ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์‹ถ์€ ๋ถ„.

  • ํ‘œ์ค€ ์ง€ํ–ฅ ์„ค๊ณ„: ํด๋ผ์ด์–ธํŠธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  HTML ํ‘œ์ค€ ํผ๊ณผ ๋ฐ”์ธ๋”ฉ(Bind)์œผ๋กœ ๊ฒฌ๊ณ ํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก๋ง์„ ๊ตฌ์ถ•ํ•˜๊ณ  ์‹ถ์€ ๋ถ„.

  • ํŒŒ์ดํ”„๋ผ์ธ ์ง€ํœ˜: ๋‹จ์ˆœ ์ฝ”๋”ฉ์„ ๋„˜์–ด ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ ์‹œ์ž‘๋ถ€ํ„ฐ ๋ธŒ๋ผ์šฐ์ € ํŽ˜์ธํŒ…๊นŒ์ง€ ์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ์„ ์„ค๊ณ„ํ•˜๋Š” ์•„ํ‚คํ…ํŠธ๊ฐ€ ๋˜๊ณ  ์‹ถ์€ ๋ถ„.

  • ์ดˆ๊ณ ์† ์ „ํ™˜: ์ •์  ๊ป๋ฐ๊ธฐ์™€ ๋งˆ์ดํฌ๋กœ ์บ์‹ฑ์„ ๊ฒฐํ•ฉํ•ด ๋กœ๋”ฉ ์Šคํ”ผ๋„ˆ ์—†๋Š” 0์ดˆ๋Œ€ ํ™”๋ฉด ์ „ํ™˜์„ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์€ ๋ถ„.

  • ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ: ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„์˜ ๊ฒฐ๋น™(use cache) ๊ธฐ์ˆ ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ์˜ค๋ฅ˜์˜ ๊ทผ๋ณธ ์›์ธ์„ ํŒŒํ—ค์น  ๋ถ„.

  • ์žฌ๊ฒ€์ฆ ๊ธฐ์ค€: force-cache์™€ no-store, ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ์žฌ๊ฒ€์ฆ์„ ์–ธ์ œ ์ ์šฉํ• ์ง€ ๋ช…ํ™•ํ•œ ๊ณตํ•™์  ๊ธฐ์ค€์„ ์„ธ์šฐ๊ณ  ์‹ถ์€ ๋ถ„.

  • ํ•˜์ด๋“œ๋ ˆ์ด์…˜ ๋ฐฉ์–ด: ์„œ๋ฒ„์—์„œ ๋ฏธ๋ฆฌ ์ฟ ํ‚ค๋ฅผ ํŒŒ์‹ฑํ•ด ์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ ๊ฒฐ์ •ํ•จ์œผ๋กœ์จ SSR ํ™˜๊ฒฝ์˜ ํ•˜์ด๋“œ๋ ˆ์ด์…˜ ์—๋Ÿฌ๋ฅผ ์™„๋ฒฝํžˆ ์ฐจ๋‹จํ•˜๊ณ  ์‹ถ์€ ๋ถ„.

  • ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์˜ˆ์™ธ: NEXT_REDIRECT ์—๋Ÿฌ์˜ ๋ณธ์งˆ์„ ์ดํ•ดํ•˜๊ณ  try-catch ํ•จ์ •์—์„œ ์„œ๋ฒ„ ์•ก์…˜์„ ์•ˆ์ „ํ•˜๊ฒŒ ๊ตฌ์ถœํ•˜๊ณ  ์‹ถ์€ ๋ถ„.

  • ๊ตฌ์กฐ์  ๊ฒฉ๋ฆฌ: ์บ์‹œ ์˜ต์…˜ ์ด์ „์— ๋ณ‘๋ ฌ ๋ผ์šฐํŠธ(@)๋กœ ์žฅ์•  ๊ตฌ์—ญ์„ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๊ฒฉ๋ฆฌํ•˜์—ฌ ์•ฑ์˜ ์ฒด์งˆ์„ ๊ฐœ์„ ํ•˜๊ณ  ์‹ถ์€ ๋ถ„.

  • ์•„ํ‚คํ…ํŠธ์˜ ์‹œ์•ผ: ์‹œ๋‹ˆ์–ด์˜ ์„ค๊ณ„ ์ฒ ํ•™์„ ๋ฐฐ์šฐ๊ณ  ํŒ€์›๋“ค์—๊ฒŒ ์„œ๋กœ๊ฒŒ์ดํŠธ ํ‚ค๋‚˜ PRG ํŒจํ„ด ๊ฐ™์€ ๊ณตํ•™์  ๊ทผ๊ฑฐ๋กœ ๋Œ€์•ˆ์„ ์ œ์‹œํ•˜๊ณ  ์‹ถ์€ ๋ถ„.


๐ŸŽ“ ์ˆ˜๊ฐ• ํ›„์—๋Š”

  • ๊ณตํ•™์  ๋ถ„์„: "๋‚ด ์•ฑ์ด ์™œ ๋А๋ฆฐ์ง€" ๋„คํŠธ์›Œํฌ ์—‘์Šค๋ ˆ์ด๋ฅผ ๊ทผ๊ฑฐ๋กœ ์บ์‹œ ์ ์ค‘๋ฅ ๊ณผ ์›Œํ„ฐํด ํ˜„์ƒ์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ถ„์„ํ•˜๊ณ  ์ˆ˜์ˆ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ: ์„œ๋ฒ„ ์•ก์…˜๊ณผ useActionState๋ฅผ ํ†ตํ•ด ํ”„๋ก ํŠธ์™€ ๋ฐฑ์—”๋“œ๊ฐ€ ํ•œ ๋ชธ์ฒ˜๋Ÿผ ์›€์ง์ด๋Š” ๋ฌด๊ฒฐ์  ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

  • ์ •๋ฐ€ ์บ์‹ฑ: use cache์™€ ์„œ๋กœ๊ฒŒ์ดํŠธ ํ‚ค๋ฅผ ์ด์šฉํ•ด ๋Œ€๊ทœ๋ชจ ์„œ๋น„์Šค์—์„œ๋„ DB ํƒ€๊ฒฉ์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ํ•„์š”ํ•œ ์กฐ๊ฐ๋งŒ ์ •๋ฐ€ํ•˜๊ฒŒ ๊ฐฑ์‹ ์‹œํ‚ต๋‹ˆ๋‹ค.

  • ๋…ผ๋ธ”๋กœํ‚น UX: useTransition์„ ํ™œ์šฉํ•ด ๋ฌด๊ฑฐ์šด ์„œ๋ฒ„ ํ†ต์‹  ์ค‘์—๋„ ์‚ฌ์šฉ์ž์˜ ํด๋ฆญ๊ณผ ์Šคํฌ๋กค์„ 0.1์ดˆ ์•ˆ์— ์ฆ‰๊ฐ ์‘๋‹ต์‹œํ‚ต๋‹ˆ๋‹ค.

  • ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ Œ๋”๋ง: PPR(๋ถ€๋ถ„ ์‚ฌ์ „ ๋ Œ๋”๋ง)์„ ํ™œ์šฉํ•ด ํŽ˜์ด์ง€ ์ง„์ž… ์ฆ‰์‹œ ๊ป๋ฐ๊ธฐ๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ŠคํŠธ๋ฆฌ๋ฐ์œผ๋กœ ์ฑ„์›Œ ๋„ฃ๋Š” ํ•˜์ด์—”๋“œ UX๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  • ์žฅ์•  ๊ฒฉ๋ฆฌ ์„ค๊ณ„: ๋ณ‘๋ ฌ ๋ผ์šฐํŠธ(@)๋ฅผ ํ†ตํ•ด ํŠน์ • ์Šฌ๋กฏ์˜ ์žฅ์• ๊ฐ€ ์•ฑ ์ „์ฒด๋กœ ๋ฒˆ์ง€๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ์™„๋ฒฝํ•œ ๋…๋ฆฝ์  ์‹œ์Šคํ…œ ์„ค๊ณ„๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

  • ์‹œ๊ฐ์  ๋ฌด๊ฒฐ์„ฑ: ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ์ฟ ํ‚ค ๋™๊ธฐํ™” ์ „๋žต์„ ํ†ตํ•ด ํฐํŠธ๊ฐ€ ํŠ€๊ฑฐ๋‚˜ ํ™”๋ฉด์ด ๋ฒˆ์ฉ์ด๋Š” FOUC ํ˜„์ƒ์„ 0ms๋กœ ์™„๋ฒฝํžˆ ์‚ฌ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

  • ์ธ์ง€์  ์ง€์—ฐ ์ œ๊ฑฐ: useOptimistic์œผ๋กœ ์„œ๋ฒ„ ์‘๋‹ต ์ „ UI๋ฅผ ์ฆ‰๊ฐ ๋ณ€๊ฒฝํ•˜๊ณ , ์—๋Ÿฌ ์‹œ ์Šค์Šค๋กœ ๋ณต๊ตฌํ•˜๋Š” ์ž๋™ ๋กค๋ฐฑ ์—”์ง„์„ ์†Œ์œ ํ•ฉ๋‹ˆ๋‹ค.

  • ์ •๋ฐ€ ์บ์‹œ ํƒ€๊ฒฉ: revalidateTag์™€ updateTag๋ฅผ ์ ์šฉํ•ด ์Ÿ์•„์ง€๋Š” ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์†์—์„œ๋„ ์„œ๋ฒ„ ์บ์‹œ๋ฅผ ์ „๋žต์ ์œผ๋กœ ํŒŒ๊ดดํ•˜๊ณ  ์žฌ๊ฑดํ•ฉ๋‹ˆ๋‹ค.

  • ๋ณด์•ˆ ์„ธ์…˜ ๋งˆ์Šคํ„ฐ: HttpOnly ๋ณด์•ˆ ์ฟ ํ‚ค์™€ ๋น„๋™๊ธฐ ๋Ÿฐํƒ€์ž„์„ ๋งˆ์Šคํ„ฐํ•˜์—ฌ ํ•ด์ปค๊ฐ€ ํ‹ˆ๋‚ผ ๊ณณ ์—†๋Š” ์ฒ ํ†ต๊ฐ™์€ ์ธ์ฆ ํšŒ๋กœ๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

  • ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ตฌ์กฐ: ์ธํ„ฐ์…‰ํŒ… ๋ผ์šฐํŠธ((..))๋ฅผ ํ†ตํ•ด ํ”ผ๋“œ ๋งฅ๋ฝ์„ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ URL์„ ๋™๊ธฐํ™”ํ•˜๋Š” ์ธ์Šคํƒ€๊ทธ๋žจ ์ˆ˜์ค€์˜ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์†Œ์œ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ: bind ํ•จ์ˆ˜์™€ ์„œ๋ฒ„ ๊ฒ€์ฆ ๋กœ์ง์„ ํ†ตํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๊บผ์ง„ ํ™˜๊ฒฝ์—์„œ๋„ ์•ˆ์ „ํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š” ๊ฒฌ๊ณ ํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก๋ง์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

  • ์ปดํŒŒ์ผ๋Ÿฌ ํ†ต์ œ: ๋ผ์šฐํŠธ ์„ธ๊ทธ๋จผํŠธ ์„ค์ •์„ ํ†ตํ•ด ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ฐ•์ œ ๊ฒฐ๋น™ ์ •์ฑ…์„ ํŒŒํ›ผํ•˜๊ณ , ์ตœ์ ์˜ ๋ Œ๋”๋ง ๋ฐฉ์‹์„ ์Šค์Šค๋กœ ๊ฒฐ์ •ํ•˜๋Š” ์„ค๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ํ’€์Šคํƒ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜: ๊ณ ๋‚œ๋„ 18๊ฐ€์ง€ ์‹ค๋ฌด ๋ฏธ์…˜์„ ์ ์žฌ์ ์†Œ์— ํ†ต๊ณผํ•˜๋ฉฐ ์–ด๋–ค ๋ณต์žกํ•œ ์š”๊ตฌ์‚ฌํ•ญ๋„ ๋„ฅ์ŠคํŠธ๋‹ต๊ฒŒ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

  • ์‹œ์Šคํ…œ ์•„ํ‚คํ…ํŠธ: "๋‹จ์ˆœ ์ฝ”๋”"์˜ ํ•œ๊ณ„๋ฅผ ๋„˜์–ด, ์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ ๋ขฐ์˜ ๋„๊ตฌ๋กœ ์‚ฌ์šฉํ•˜๋Š” "๋„ฅ์ŠคํŠธ ์‹œ์Šคํ…œ ์•„ํ‚คํ…ํŠธ"๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๐ŸŽฏ Next.js Part 2 โ€“ 18๊ฐœ ํ•ต์‹ฌ ๋ฏธ์…˜ ์•„ํ‚คํ…์ฒ˜ ์ •๋ฆฌํ‘œ

๐ŸŸฆ AI ์—์ด์ „ํŠธ ํ†ต์ œ ์„ผํ„ฐ (NextResponse)

โ€” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๊ฐ•์ œํ•˜๋Š” 3๋Œ€ ๊ทœ์น™(route.ts, ๋Œ€๋ฌธ์ž ํ•จ์ˆ˜๋ช…, ๋…์  ๊ทœ์น™)์„ ์ค€์ˆ˜ํ•˜๋ฉฐ, ์™ธ๋ถ€ ์š”์ฒญ์„ ์ฐจ๋‹จํ•˜๋Š” ๊ฒฌ๊ณ ํ•œ 1์ฐจ ๋ฐฉ์–ด์„ (Validation)์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.


๐ŸŸฉ ์ธ์Šคํ„ด์Šค ๋ชจ๋‹ˆํ„ฐ๋ง (Dynamic Route)

โ€” [id] ๋™์  ๊ฒฝ๋กœ์™€ no-store ์˜ต์…˜์„ ๊ฒฐํ•ฉํ•ด, ๋‚ก์€ ์บ์‹œ๋ฅผ ๊ฑฐ๋ถ€ํ•˜๊ณ  100% ์‹ค์‹œ๊ฐ„ ์ตœ์‹  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์•„๋‚ด๋Š” ํ’€์Šคํƒ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ฐœํ†ตํ•ฉ๋‹ˆ๋‹ค.


๐ŸŸจ ๋„คํŠธ์›Œํฌ ์—‘์Šค๋ ˆ์ด (Request Memoization)

โ€” logging.fetches ์˜ต์…˜์„ ํ†ตํ•ด ์„œ๋ฒ„ ๋‚ด๋ถ€์˜ ์ค‘๋ณต ์š”์ฒญ์ด ์–ด๋–ป๊ฒŒ ๋‹จ 1ํšŒ์˜ ํ†ต์‹ ์œผ๋กœ ์••์ถ•๋˜๋Š”์ง€(HIT/MISS) ๋ˆˆ์œผ๋กœ ์ง์ ‘ ์ฆ๋ช…ํ•˜๊ณ  ํ†ต์ œํ•ฉ๋‹ˆ๋‹ค.


๐ŸŸง ์ˆ˜๊ฐ•ํ‰ ์›นํ›… ์ˆ˜์‹ ์†Œ (Webhook Bridge)

โ€” ์™ธ๋ถ€ ํ”Œ๋žซํผ์˜ POST ์‹ ํ˜ธ๋ฅผ ๊ฐ€๋กœ์ฑ„๋Š” ์—ญ๋ฐฉํ–ฅ ํ†ต์‹  ์ฐฝ๊ตฌ๋ฅผ ๊ฐœ์„คํ•˜๊ณ , ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ(Queue)๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ ์ธ๋ฉ”๋ชจ๋ฆฌ ์ €์žฅ์†Œ์˜ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์–ดํ•ฉ๋‹ˆ๋‹ค.


๐ŸŸฅ ํ”„๋กฌํ”„ํŠธ ์ง€์‹ ๋ณด๊ด€์†Œ (Full CRUD)

โ€” ์‹ฑ๊ธ€ํ†ค(Singleton) DB ๋ชจ๋“ˆ๊ณผ RESTful API๋ฅผ ์„ค๊ณ„ํ•˜๊ณ , 'use client' ๊ฒฝ๊ณ„์—์„œ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋Œ€์‹œ๋ณด๋“œ์˜ ์ •์„์„ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”’ ๋ณด์•ˆ ๊ธฐ๊ธฐ ๋“ฑ๋ก ์‹œ์Šคํ…œ (useFormStatus)

โ€” ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•˜๊ธฐ ์ „๊นŒ์ง€ ์ถ”๊ฐ€ ํด๋ฆญ์„ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ด‰์‡„ํ•˜๋Š” '๋ณด์•ˆ UI ๋ฝํ‚น'์„ ๊ตฌ์ถ•ํ•˜์—ฌ ์ค‘๋ณต ๋“ฑ๋ก์œผ๋กœ ์ธํ•œ ๋ฐ์ดํ„ฐ ์˜ค์—ผ์„ ์›์ฒœ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ›ก๏ธ ์ธ๊ฐ€ ์ฝ”๋“œ ๋ฐœ๊ธ‰ ์„ผํ„ฐ (useActionState)

โ€” ํด๋ผ์ด์–ธํŠธ์˜ useState ์—†์ด ์„œ๋ฒ„๊ฐ€ ์ง์ ‘ ์ œ์ถœ ์‹œ๋„๋ฅผ ๊ธฐ์–ต(prevState)ํ•˜๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ๋‚ด๋ฆฌ๋Š” ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ”Œ๋กœ์šฐ๋ฅผ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ’ฃ ๋ฉ˜ํ† ๋ง ๋Œ€๊ธฐ์—ด (Mutation Pipeline)

โ€” ๋นŒ๋“œ ์‹œ์ ์— ์–ผ์–ด๋ถ™์€ ์ •์  ์Šค๋ƒ…์ƒท์„ revalidatePath๋กœ ์‚ฐ์‚ฐ์กฐ๊ฐ ๋‚ด๊ณ , redirect๋กœ ์‚ฌ์šฉ์ž์˜ ๋™์„ ์„ ๊ฐ•์ œ ์ด๋™์‹œํ‚ค๋Š” ํŒŒ๊ดด์™€ ์žฌ๊ฑด์„ ์‹ค์Šตํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ›’ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋™๊ธฐํ™” (useOptimistic)

โ€” 0.001์ดˆ ๋งŒ์— ์ˆ˜๋Ÿ‰์„ ๋ณ€๊ฒฝํ•˜๊ณ , ์žฌ๊ณ  ๋ถ€์กฑ ์‹œ ์„œ๋ฒ„ ์—๋Ÿฌ๋ฅผ ๊ฐ์ง€ํ•ด ์ฆ‰๊ฐ ์›๋ž˜ ์ƒํƒœ๋กœ ๋ณต๊ตฌ(Rollback)ํ•˜๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ํŠธ๋žœ์žญ์…˜ ์—”์ง„์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“– ํ•™์Šต ํ™˜๊ฒฝ ์ œ์–ด์†Œ (Secure Cookie)

โ€” ํ•ด์ปค๊ฐ€ ๋„˜๋ณผ ์ˆ˜ ์—†๋Š” HttpOnly ๋ณด์•ˆ ์ฟ ํ‚ค๋ฅผ ์›๊ฒฉ ํ†ต์ œํ•˜๊ณ , useTransition์œผ๋กœ ๋ฌด๊ฑฐ์šด ํ†ต์‹  ์ค‘์—๋„ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋ฉˆ์ถ”์ง€ ์•Š๋Š” ๋…ผ๋ธ”๋กœํ‚น UX๋ฅผ ๋‹ฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ ์–ด๋“œ๋ฏผ ๊ฒŒ์ดํŠธ์›จ์ด (Safe Redirection)

โ€” NEXT_REDIRECT ์—๋Ÿฌ์˜ ๋ณธ์งˆ์„ ํŒŒํ—ค์ณ try-catch ํ•จ์ •์—์„œ ์„œ๋ฒ„ ์•ก์…˜์„ ๊ตฌ์ถœํ•˜๊ณ , ์ธ๊ฐ€๋œ ์‚ฌ์šฉ์ž๋งŒ ํ†ต๊ณผ์‹œํ‚ค๋Š” ํ”Œ๋ž˜๊ทธ ํŒจํ„ด์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.


๐ŸŒŠ ์ธ์‚ฌ์ดํŠธ ์‹ค์‹œ๊ฐ„ ์„ผํ„ฐ (Opt-out Caching)

โ€” ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ฐ•์ œ ๊ฒฐ๋น™(SSG) ์ •์ฑ…์„ no-store๋กœ ํŒŒํ›ผํ•˜์—ฌ 100% ์‹ ์„ ๋„๋ฅผ ์Ÿ์ทจํ•˜๊ณ , ๋ฐ˜๋Œ€๋กœ force-cache๋กœ ๋น„์šฉ์„ 0์œผ๋กœ ๋งŒ๋“œ๋Š” ์„ฑ๋Šฅ ๊ทน๋Œ€ํ™”๋ฅผ ๊ฒฝํ—˜ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ’ฑ ๊ธ€๋กœ๋ฒŒ ํ™˜์œจ ์ง€ํ‘œ (ISR & SWR)

โ€” ํŠน์ • ๋ฐ์ดํ„ฐ์— 10์ดˆ์˜ ์ƒ๋ช…์ฃผ๊ธฐ(TTL)๋ฅผ ๋ถ€์—ฌํ•˜๊ณ , ๋‚ก์€ ์บ์‹œ(Stale)๋ฅผ ๋จผ์ € ์ฃผ๋ฉฐ ๋’ค์—์„œ ๋ชฐ๋ž˜ ๊ฐฑ์‹ ํ•˜๋Š” ์ฒœ์žฌ์ ์ธ SWR ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ง€๋ฐฐํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“ˆ ๊ธ€๋กœ๋ฒŒ ์„ฑ๊ณผ ๋Œ€์‹œ๋ณด๋“œ (PPR & cacheLife)

โ€” ์ •์  ๊ป๋ฐ๊ธฐ๋ฅผ 0์ดˆ ๋งŒ์— ๋˜์ง€๊ณ  ๋™์  ๋ฐ์ดํ„ฐ ๊ตฌ๋ฉ(Hole)์„ ์ŠคํŠธ๋ฆฌ๋ฐ์œผ๋กœ ์ฑ„์šฐ๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์•„ํ‚คํ…์ฒ˜(โ—)์™€ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„ ๊ฒฐ๋น™์„ ์ •๋ณตํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ—‘๏ธ ์ต๋ช… ๊ฑด์˜ํ•จ (On-demand Revalidation)

โ€” ์•…์„ฑ ์ŠคํŒธ์„ ์‚ญ์ œํ•˜๋Š” ์ฆ‰์‹œ ํŠน์ • URL์˜ ์บ์‹œ๋ฅผ ์ฒ ํ‡ด(revalidatePath)๋กœ ์ •๋ฐ€ ํƒ€๊ฒฉํ•˜์—ฌ, ๊ฒฐ๋น™๋œ ์‹œ์Šคํ…œ์„ ์ฆ‰๊ฐ ํ•ด๋™์‹œํ‚ค๋Š” ํ†ต์ œ๋ ฅ์„ ๊ฐ–์ถฅ๋‹ˆ๋‹ค.


โšก ์ˆ˜๊ฐ•ํ‰ ์ •๋ฐ€ ํƒ€๊ฒฉ (revalidateTag)

โ€” ์„œ๋กœ๊ฒŒ์ดํŠธ ํ‚ค(cacheTag)๋ฅผ ํ™œ์šฉํ•ด ์ „ ์„ธ๊ณ„์— ํฉ์–ด์ง„ ์บ์‹œ ์กฐ๊ฐ์„ ๋‹จ ํ•œ ๋ฒˆ์˜ ๋ช…๋ น์œผ๋กœ ์—ฐ์‡„ ๋™๊ธฐํ™”์‹œํ‚ค๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ๋ฌดํšจํ™” ์ „๋žต์„ ์ˆ˜๋ฆฝํ•ฉ๋‹ˆ๋‹ค.


๐Ÿข ์ˆ˜๊ฐ•์ƒ ํ†ตํ•ฉ ํฌํ„ธ (Parallel Routes)

โ€” @folder ์Šฌ๋กฏ ์„ค๊ณ„์™€ default.tsx ํ”Œ๋žœ B๋ฅผ ํ†ตํ•ด ํŠน์ • ์Šฌ๋กฏ์˜ ์žฅ์• ๊ฐ€ ์ „์ฒด๋กœ ๋ฒˆ์ง€๋Š” ๊ฒƒ์„ ๋ง‰๋Š” '์žฅ์•  ๊ฒฉ๋ฆฌ(Fault Isolation)'๋ฅผ ์‹คํ˜„ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ” ๋ฉ˜ํ†  ํ”„๋กœํ•„ ํ”ผ๋“œ (Intercepting Routes)

โ€” ๋งฅ๋ฝ์„ ์œ ์ง€ํ•˜๋ฉฐ URL์„ ๊ฐ€๋กœ์ฑ„๋Š” ํ•จ์ •((..))์„ ์„ค๊ณ„ํ•˜์—ฌ, Soft/Hard Navigation์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ ์–ผ๊ตด์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ณ ์ฐจ์› ๋ผ์šฐํŒ…์„ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ’ป ์ˆ˜๊ฐ• ์ „ ์ฐธ๊ณ  ์‚ฌํ•ญ

  • ๐Ÿ’ป Node.js (v20 ์ด์ƒ): Next.js 15 ์‹ค์Šต์„ ์œ„ํ•œ ํ•„์ˆ˜ ๊ถŒ์žฅ ์‚ฌ์–‘

  • ๐ŸŒ ์˜จ๋ผ์ธ ์—๋””ํ„ฐ: ๋ธŒ๋ผ์šฐ์ €(StackBlitz ๋“ฑ)๋งŒ์œผ๋กœ๋„ ์ฆ‰์‹œ ์‹ค์Šต ๊ฐ€๋Šฅ

  • ๐Ÿชถ ์‚ฌ์ „ ์ง€์‹: ๊ธฐ์ดˆ์ ์ธ HTMLยทCSSยทJS์™€ React ๊ธฐ๋ณธ ๊ฐœ๋…๋งŒ ์•Œ๋ฉด ์ถฉ๋ถ„

  • ๐Ÿงฉ ์ฒด๊ณ„์  ๊ตฌ์„ฑ: โ€œ๊ฐœ๋… โ†’ ์‹œ๊ฐํ™” โ†’ ์‹ค์Šต โ†’ ๋ฏธ์…˜โ€์œผ๋กœ ์ด์–ด์ง€๋Š” 4๋‹จ๊ณ„ ํ•™์Šต

  • ๐Ÿงฐ ์ตœ์‹  ์Šคํƒ: VS Code์™€ Next.js 15 App Router ๊ธฐ์ค€์˜ ์ตœ์‹  ์˜ˆ์ œ

  • โšก ๋ณธ์งˆ ์ค‘์‹ฌ: ๋‹จ์ˆœ ๋ฌธ๋ฒ• ์•”๊ธฐ๊ฐ€ ์•„๋‹Œ โ€œ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ์œ ๊ธฐ์  ํ๋ฆ„โ€ ์ดํ•ด

์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜
์ถ”์ฒœ๋“œ๋ ค์š”

ํ•™์Šต ๋Œ€์ƒ์€
๋ˆ„๊ตฌ์ผ๊นŒ์š”?

  • ์บ์‹œ ์ข€๋น„: ๋ฐ์ดํ„ฐ๊ฐ€ ์•ˆ ๋ฐ”๋€Œ์–ด ๋ฐค์ƒˆ ์ƒˆ๋กœ๊ณ ์นจ๋งŒ ๋ˆ„๋ฅด๋ฉฐ ์›์ธ ๋ชจ๋ฅผ ๋ฒ„๊ทธ์™€ ์‹ธ์šฐ๋Š” ๋ถ„.

  • ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ํ˜์˜ค์ž: ๋ฐ˜๋ณต๋˜๋Š” fetch ์ฝ”๋“œ์™€ ๋ณต์žกํ•œ API ์ฃผ์†Œ ๊ด€๋ฆฌ์— ์ง€์ณ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๊ณ  ์‹ถ์€ ๋ถ„.

  • UX ์™„๋ฒฝ์ฃผ์˜์ž: ์ฐฐ๋‚˜์˜ ๋กœ๋”ฉ ํ™”๋ฉด์ด๋‚˜ ํฐ์ƒ‰ ๊นœ๋นก์ž„์กฐ์ฐจ ์šฉ๋‚ฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฐ๋ฒฝ์ฆ ๊ฐœ๋ฐœ์ž.

  • ๋ผ์šฐํŒ… ๋ฏธ์•„: ๋ณต์žกํ•œ ๋ชจ๋‹ฌ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๋‹ค ๋’ค๋กœ ๊ฐ€๊ธฐ๋‚˜ ์ƒˆ๋กœ๊ณ ์นจ ์‹œ ํ™”๋ฉด์ด ๊นจ์ ธ ์ขŒ์ ˆํ•ด ๋ณธ ๋ถ„.

  • ๋ณด์•ˆ ๋ถˆ์•ˆ์ž: ํด๋ผ์ด์–ธํŠธ ์ธก ๋ฐ์ดํ„ฐ ๋…ธ์ถœ์ด ๋‘๋ ค์›Œ ๋ฐฑ์—”๋“œ ์ค‘์‹ฌ์˜ ์•ˆ์ „ํ•œ ์„ค๊ณ„๋ฅผ ๊ฟˆ๊พธ๋Š” ๋ถ„.

  • ์„ฑ๋Šฅ ๊ฐˆ์ฆ ํ•ด์†Œ์ž: ๋Œ€๊ทœ๋ชจ ์„œ๋น„์Šค ์ตœ์ ํ™” ๊ธฐ๋ฒ•(PPR, Streaming, Micro-caching)์ด ์ ˆ์‹คํ•œ ๋ถ„.

  • ํ’€์Šคํƒ ์ง€๋ง์ƒ: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž์˜ ๋„์›€ ์—†์ด ํ˜ผ์ž์„œ ๊ฒฌ๊ณ ํ•œ ์ƒ์šฉ ์„œ๋น„์Šค๋ฅผ ๋Ÿฐ์นญํ•˜๊ณ  ์‹ถ์€ ๋ถ„.

  • ์ตœ์‹  ๊ธฐ์ˆ  ์ถ”์ ์ž: Next.js 15, 16์˜ ํŒŒ๊ดด์  ๋ณ€ํ™”๋ฅผ ๋‹จ์ˆœํžˆ ์•„๋Š” ์ˆ˜์ค€์„ ๋„˜์–ด ์‹ค๋ฌด์— ์ฆ‰์‹œ ์ ์šฉํ•˜๊ณ  ์‹ถ์€ ๋ถ„.

  • ์ทจ์—…/์ด์ง ์ค€๋น„์ƒ: ์ด๋ ฅ์„œ์— '๊ธฐ๋Šฅ ๊ตฌํ˜„ ๊ฐ€๋Šฅ'์„ ๋„˜์–ด '์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๊ฐ€๋Šฅ'์„ ์ฆ๋ช…ํ•˜๊ณ  ์‹ถ์€ ๋ถ„.

  • AI ์‹œ๋Œ€ ์ƒ์กด์ž: AI๊ฐ€ ๋Œ€์‹  ์งœ์ฃผ๋Š” ์ฝ”๋“œ์˜ ์˜๋„๋ฅผ ํŒŒ์•…ํ•˜๊ณ , ์ „์ฒด ๊ตฌ์กฐ์˜ ์ ํ•ฉ์„ฑ์„ ํŒ๋‹จํ•  ์•ˆ๋ชฉ์„ ๊ธฐ๋ฅด๊ณ  ์‹ถ์€ ๋ถ„.

  • ์ƒํƒœ ๊ด€๋ฆฌ ํ”ผ๋กœ์ž: ๋ฌด๋ถ„๋ณ„ํ•œ useState ๋Œ€์‹  URL๊ณผ ์„œ๋ฒ„ ์ƒํƒœ๋ฅผ ๊ฒฐํ•ฉํ•ด ๋ณต์žก๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์‹ถ์€ ๋ถ„.

  • ๋™์ž‘ ์›๋ฆฌ ํƒ๊ตฌ์ž: "๊ทธ๋ƒฅ ๋˜๋‹ˆ๊นŒ ์“ด๋‹ค"๊ฐ€ ์•„๋‹ˆ๋ผ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋ธŒ๋ผ์šฐ์ € ์—”์ง„์˜ ์‹ฌ์—ฐ์„ ๋“ค์—ฌ๋‹ค๋ณด๊ณ  ์‹ถ์€ ๋ถ„.

  • ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์ˆ˜ํ˜ธ์ž: ์‚ฌ์šฉ์ž์˜ ๋ฌด๋ถ„๋ณ„ํ•œ ๊ด‘ํด๋กœ๋ถ€ํ„ฐ DB์˜ ์•ˆ์ „์„ ํ™•์‹คํ•˜๊ฒŒ ์ง€์ผœ๋‚ด๊ณ  ์‹ถ์€ ๋ถ„.

  • ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์„ค๊ณ„์ž: ํŒ€ ๋‹จ์œ„ ํ˜‘์—… ์‹œ ์ฝ”๋“œ ์ถฉ๋Œ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ชจ๋“ˆ๋Ÿฌ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋„์ž…ํ•˜๊ณ  ์‹ถ์€ ๋ถ„.

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

์„ ์ˆ˜ ์ง€์‹,
ํ•„์š”ํ• ๊นŒ์š”?

  • HTML/CSS, JS(ES6+/๋น„๋™๊ธฐ)

  • React ๊ธฐ๋ณธ(Props, State) TypeScript์˜ ์•„์ฃผ ๊ธฐ์ดˆ์ ์ธ ๋ฌธ๋ฒ• ์ดํ•ด

  • (๊ถŒ์žฅ) Next.js ๋งˆ์Šคํ„ฐ ํด๋ž˜์Šค: Part 1 ๋ฏธ์…˜์œผ๋กœ ๋ฐฐ์šฐ๋Š” App Router์˜ ๋ณธ์งˆ๊ณผ ๋ Œ๋”๋ง ์„ค๊ณ„ ์ˆ˜๊ฐ•

์•ˆ๋…•ํ•˜์„ธ์š”
nhcodingstudio์ž…๋‹ˆ๋‹ค.

1,679

๋ช…

์ˆ˜๊ฐ•์ƒ

105

๊ฐœ

์ˆ˜๊ฐ•ํ‰

42

๊ฐœ

๋‹ต๋ณ€

4.8

์ 

๊ฐ•์˜ ํ‰์ 

18

๊ฐœ

๊ฐ•์˜

์•ˆ๋…•ํ•˜์„ธ์š”, ์šฐ๋ฆฌ๋™๋„ค์ฝ”๋”ฉ ์ŠคํŠœ๋””์˜ค์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค!

์šฐ๋ฆฌ๋™๋„ค์ฝ”๋”ฉ ์ŠคํŠœ๋””์˜ค๋Š” ์นด๋„ค๊ธฐ ๋ฉœ๋ก , ์›Œ์‹ฑํ„ด, ํ† ๋ก ํ† , ์›Œํ„ฐ๋ฃจ ๋“ฑ ๋ถ๋ฏธ์˜ ์ฃผ์š” ๋Œ€ํ•™์—์„œ ์ปดํ“จํ„ฐ๊ณตํ•™์„ ์ „๊ณตํ•˜๊ณ , Google, Microsoft, Meta ๋“ฑ ๊ธ€๋กœ๋ฒŒ IT ๊ธฐ์—…์—์„œ ์‹ค๋ฌด ๊ฒฝํ—˜์„ ์Œ“์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ํ•จ๊ป˜ ๋งŒ๋“  ๊ต์œก ๊ทธ๋ฃน์ž…๋‹ˆ๋‹ค.

์ฒ˜์Œ์—๋Š” ๋ฏธ๊ตญ๊ณผ ์บ๋‚˜๋‹ค์˜ ์ปดํ“จํ„ฐ๊ณตํ•™ ์ „๊ณต์ž๋“ค๋ผ๋ฆฌ ํ•จ๊ป˜ ๊ณต๋ถ€ํ•˜๋ฉฐ ์„ฑ์žฅํ•˜๊ณ ์ž ๋งŒ๋“  ์Šคํ„ฐ๋”” ๋ชจ์ž„์—์„œ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋Œ€ํ•™, ๋‹ค๋ฅธ ์‹œ๊ฐ„๋Œ€์— ์žˆ์—ˆ์ง€๋งŒ ํ•จ๊ป˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์„œ๋กœ์—๊ฒŒ ๋ฐฐ์šด ๊ทธ ์‹œ๊ฐ„์€ ๋งค์šฐ ํŠน๋ณ„ํ–ˆ๊ณ , ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ด๋Ÿฐ ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

โ€œ์šฐ๋ฆฌ๊ฐ€ ๊ณต๋ถ€ํ•˜๋˜ ์ด ๋ฐฉ์‹, ๊ทธ๋Œ€๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ๋„ ์ „ํ•˜๋ฉด ์–ด๋–จ๊นŒ?โ€

๊ทธ ๋ฌผ์Œ์ด ๋ฐ”๋กœ ์šฐ๋ฆฌ๋™๋„ค์ฝ”๋”ฉ ์ŠคํŠœ๋””์˜ค์˜ ์ถœ๋ฐœ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ๋Š” ์•ฝ 30๋ช…์˜ ํ˜„์ง ๊ฐœ๋ฐœ์ž์™€ ์ปดํ“จํ„ฐ๊ณตํ•™ ์ „๊ณต ๋Œ€ํ•™์ƒ๋“ค์ด ๊ฐ์ž์˜ ์ „๋ฌธ ๋ถ„์•ผ๋ฅผ ๋งก์•„, ์ž…๋ฌธ๋ถ€ํ„ฐ ์‹ค์ „๊นŒ์ง€ ์•„์šฐ๋ฅด๋Š” ์ปค๋ฆฌํ˜๋Ÿผ์„ ์ง์ ‘ ์„ค๊ณ„ํ•˜๊ณ  ๊ฐ•์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•œ ์ง€์‹ ์ „๋‹ฌ์„ ๋„˜์–ด, ์ง„์งœ ๊ฐœ๋ฐœ์ž์˜ ์‹œ์„ ์œผ๋กœ ๋ฐฐ์šฐ๊ณ  ํ•จ๊ป˜ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

โ€œ์ง„์งœ ๊ฐœ๋ฐœ์ž๋Š”, ์ง„์งœ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ฐฐ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค.โ€

์ €ํฌ๋Š” ์›น ๊ฐœ๋ฐœ์˜ ์ „ ๊ณผ์ •์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ฒด๊ณ„์ ์œผ๋กœ ๋‹ค๋ฃจ๋˜, ์ด๋ก ์— ๋จธ๋ฌด๋ฅด์ง€ ์•Š๊ณ  ์‹ค์Šต๊ณผ ์‹ค์ „ ์ค‘์‹ฌ์˜ ํ”ผ๋“œ๋ฐฑ์„ ํ†ตํ•ด ์‹ค๋ ฅ์„ ํ‚ค์›Œ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
์ˆ˜๊ฐ•์ƒ ํ•œ ์‚ฌ๋žŒ, ํ•œ ์‚ฌ๋žŒ์˜ ์„ฑ์žฅ์„ ํ•จ๊ป˜ ๊ณ ๋ฏผํ•˜๊ณ  ์ด๋Œ์–ด๊ฐ€๋Š” ๊ฒƒ์ด ์šฐ๋ฆฌ์˜ ์ฒ ํ•™์ž…๋‹ˆ๋‹ค.

๐ŸŽฏ ์šฐ๋ฆฌ์˜ ์ฒ ํ•™์€ ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.
"์ง„์ •ํ•œ ๋ฐฐ์›€์€ ์‹ค์ฒœ์—์„œ ์˜ค๊ณ , ์„ฑ์žฅ์€ ํ•จ๊ป˜ํ•  ๋•Œ ์™„์„ฑ๋œ๋‹ค."

๊ฐœ๋ฐœ์„ ์ฒ˜์Œ ์‹œ์ž‘ํ•˜๋Š” ์ž…๋ฌธ์ž๋ถ€ํ„ฐ, ์‹ค๋ฌด ๋Šฅ๋ ฅ์„ ํ‚ค์šฐ๊ณ  ์‹ถ์€ ์ทจ์—… ์ค€๋น„์ƒ, ์ง„๋กœ๋ฅผ ํƒ์ƒ‰ ์ค‘์ธ ์ฒญ์†Œ๋…„๊นŒ์ง€.
์šฐ๋ฆฌ๋™๋„ค์ฝ”๋”ฉ ์ŠคํŠœ๋””์˜ค๋Š” ๋ชจ๋‘์˜ ์ถœ๋ฐœ์ ์ด์ž, ํ•จ๊ป˜ ๊ฑท๋Š” ๋“ ๋“ ํ•œ ๋™๋ฐ˜์ž๊ฐ€ ๋˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ, ํ˜ผ์ž ๊ณ ๋ฏผํ•˜์ง€ ๋งˆ์„ธ์š”.
์šฐ๋ฆฌ๋™๋„ค์ฝ”๋”ฉ ์ŠคํŠœ๋””์˜ค๊ฐ€ ์—ฌ๋Ÿฌ๋ถ„์˜ ์„ฑ์žฅ์„ ํ•จ๊ป˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


Welcome to Neighborhood Coding Studio!

Neighborhood Coding Studio was founded by a team of developers who studied computer science at top North American universities such as Carnegie Mellon, the University of Washington, the University of Toronto, and the University of Waterloo, and went on to gain hands-on experience at global tech companies like Google, Microsoft, and Meta.

It all began as a study group formed by computer science students across the U.S. and Canada, created to grow together by sharing knowledge, solving problems, and learning from one another.
Though we were attending different schools in different time zones, the experience was so meaningful that it led us to one simple thought:

โ€œWhat if we shared this way of learning with others?โ€

That thought became the foundation of Neighborhood Coding Studio.

Today, we are a team of around 30 active developers and computer science students, each taking responsibility for their area of expertiseโ€”designing and delivering a curriculum that spans from foundational knowledge to real-world development.
Weโ€™re not just here to teachโ€”weโ€™re here to help you see through the lens of real developers and grow together.

โ€œTo become a real developer, you must learn from real developers.โ€

Our courses take you through the entire web development journeyโ€”from start to finishโ€”focused on hands-on practice, real-world projects, and practical feedback.
We care deeply about each learnerโ€™s growth and are committed to supporting your path every step of the way.

๐ŸŽฏ Our philosophy is simple but powerful:
"True learning comes from doing, and true growth happens together."

Whether you're just getting started, preparing for your first job, or exploring your future in tech,
Neighborhood Coding Studio is here to be your launchpadโ€”and your trusted companion on the journey.

You donโ€™t have to do it alone.
Let Neighborhood Coding Studio walk with you toward your future in development.

๋”๋ณด๊ธฐ

์ปค๋ฆฌํ˜๋Ÿผ

์ „์ฒด

94๊ฐœ โˆ™ (4์‹œ๊ฐ„ 5๋ถ„)

ํ•ด๋‹น ๊ฐ•์˜์—์„œ ์ œ๊ณต:

์ˆ˜์—…์ž๋ฃŒ
๊ฐ•์˜ ๊ฒŒ์‹œ์ผ: 
๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ์ผ: 

์ˆ˜๊ฐ•ํ‰

์ „์ฒด

6๊ฐœ

5.0

6๊ฐœ์˜ ์ˆ˜๊ฐ•ํ‰

  • ์•Œ๋žญ๋“ค๋กฑ๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    ์•Œ๋žญ๋“ค๋กฑ

    ์ˆ˜๊ฐ•ํ‰ 2

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    5

    60% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

    ๊ฐ•์˜์ˆ˜์ค€์€ ํ™•์‹คํžˆ ๋†’๋‹ค. ํ•ด๋‹น ๋‚ด์šฉ์—๋Œ€ํ•œ ์ง€์‹์ด ์žˆ๋Š” ์‚ฌ๋žŒ๋“คํ•œํ…Œ๋Š” ์œ ์šฉํ•œํŽธ. ์ดˆ๊ธ‰์ž์—๊ฒŒ๋Š” ๋‚œ์ด๋„๊ฐ€ ์žˆ๋Š” ํŽธ์ด๋‹ค. ํ™•์‹คํžˆ

    • nhcodingstudio
      ์ง€์‹๊ณต์œ ์ž

      ์•ˆ๋…•ํ•˜์„ธ์š”, ์•Œ๋žญ๋“ค๋กฑ๋‹˜! ์ง€์‹๊ณต์œ ์ž nhcodingstudio์ž…๋‹ˆ๋‹ค. ๋จผ์ € ์ €ํฌ ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•ด ์ฃผ์‹œ๊ณ , ๊ฐ•์˜ ์ˆ˜์ค€์— ๋Œ€ํ•œ ์†”์งํ•˜๊ณ  ์†Œ์ค‘ํ•œ ์˜๊ฒฌ ๋‚จ๊ฒจ์ฃผ์…”์„œ ์ง„์‹ฌ์œผ๋กœ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋ง์”€ํ•˜์‹  ๊ฒƒ์ฒ˜๋Ÿผ ์ด๋ฒˆ ๊ฐ•์˜๋Š” ์‹ค๋ฌด์—์„œ ๋งˆ์ฃผํ•˜๋Š” ๊นŠ์ด ์žˆ๋Š” ๊ณ ๋ฏผ๋“ค์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์ดˆ์ ์„ ๋งž์ถ”๋‹ค ๋ณด๋‹ˆ, ๊ธฐ์ดˆ ์ง€๋ฌด๊ฐ€ ์žˆ๋Š” ๋ถ„๋“ค๊ป˜๋Š” "๊ฐ€์žฅ ํ™•์‹คํ•œ ๋ฌด๊ธฐ"๊ฐ€ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ดˆ๊ธ‰์ž๋ถ„๋“ค๊ป˜๋Š” ๋‹ค์†Œ ๋‚œ์ด๋„๊ฐ€ ๋†’๊ฒŒ ๋А๊ปด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋ ค์šด ๋‚ด์šฉ์ž„์—๋„ ํ•™์Šต์˜ ๋ˆ์„ ๋†“์ง€ ์•Š๊ณ  ๋”ฐ๋ผ์™€ ์ฃผ์‹œ๋Š” ์ ์— ๊นŠ์€ ๊ฐ์‚ฌ๋ฅผ ํ‘œํ•ฉ๋‹ˆ๋‹ค. ๋ณด๋‚ด์ฃผ์‹  ์˜๊ฒฌ์„ ๋ฐ‘๊ฑฐ๋ฆ„ ์‚ผ์•„, ์•ž์œผ๋กœ๋Š” ๋‚œ์ด๋„ ๋†’์€ ๊ฐœ๋…๋„ ๋”์šฑ ๋ช…์พŒํ•˜๊ณ  ๊นŠ์ด ์žˆ๊ฒŒ ์ „๋‹ฌํ•ด ๋“œ๋ฆด ์ˆ˜ ์žˆ๋„๋ก ์ตœ์„ ์„ ๋‹คํ•ด ์ •์ง„ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•™์Šตํ•˜์‹œ๋ฉด์„œ ๋А๋ผ์‹  ์—ด์ •์— ๋ณด๋‹ตํ•˜๊ณ ์ž ์ž‘์€ ํ˜œํƒ์„ ๋“œ๋ฆฌ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์–ธ๊ธ‰ํ•˜์‹  Next.js Part 3๋‚˜ React ์‹œ๋ฆฌ์ฆˆ ๋“ฑ ์ €ํฌ ๊ต์œก ๊ณผ์ • ์ค‘ ์ถ”๊ฐ€๋กœ ์ˆ˜๊ฐ•์„ ํฌ๋งํ•˜์‹œ๋Š” ๊ฐ•์˜๊ฐ€ ์žˆ๋‹ค๋ฉด ์•„๋ž˜ ์ด๋ฉ”์ผ๋กœ ํŽธํ•˜๊ฒŒ ์—ฐ๋ฝํ•ด ์ฃผ์„ธ์š”. ํ™•์ธ ํ›„ ์ฆ‰์‹œ ํ• ์ธ ์ฟ ํฐ์„ ๋ณด๋‚ด๋“œ๋ฆฌ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. * ๋ฌธ์˜ ์ด๋ฉ”์ผ: jeony0535@naver.com ์•Œ๋žญ๋“ค๋กฑ๋‹˜์ด ์ด๋ฒˆ ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ์‹ค์ „ ๊ฐ๊ฐ์„ ํ•œ์ธต ๋” ๋‚ ์นด๋กญ๊ฒŒ ๋‹ค๋“ฌ์œผ์‹ค ์ˆ˜ ์žˆ๋„๋ก ์ € ๋˜ํ•œ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ์‘์›ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ท€ํ•œ ๋ง์”€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! :D

  • ๋™ํ•ด๋ฐ”๋‹ค๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    ๋™ํ•ด๋ฐ”๋‹ค

    ์ˆ˜๊ฐ•ํ‰ 17

    โˆ™

    ํ‰๊ท  ํ‰์  4.9

    ์ˆ˜์ •๋จ

    5

    84% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

    ์ด ๊ฐ•์˜ ์‹œ๋ฆฌ์ฆˆ๋Š” ์ „์ฒด์ ์œผ๋กœ ๊ธฐ์ดˆ ๊ฐœ๋…์„ ์ƒ๋‹นํžˆ ์นœ์ ˆํ•˜๊ณ  ๋ฐฐ๋ ค ์žˆ๊ฒŒ ์„ค๋ช…ํ•ด ์ค๋‹ˆ๋‹ค. ์ฒ˜์Œ ๋ณด๋Š” ๋‚ด์šฉ๋„ ๋ถ€๋‹ด ์—†์ด ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ์ฐจ๊ทผ์ฐจ๊ทผ ํ’€์–ด์ฃผ๋Š” ๋А๋‚Œ์ด๋ผ ์ข‹์•˜์Šต๋‹ˆ๋‹ค. ๋ชฉ์†Œ๋ฆฌ๋Š” AI์ธ ๊ฒƒ ๊ฐ™๊ธฐ๋„ ํ•œ๋ฐ ์˜คํžˆ๋ ค ๋“ฃ๊ธฐ์—๋Š” ํŽธ์•ˆํ•ฉ๋‹ˆ๋‹ค. ์•„๋‹ ์ˆ˜๋„ ์žˆ๊ณ ์š”. ๊ฐ•์˜๋„ ์ฃผ๋ง์— ์‹œ๊ฐ„ ๋‚ด์„œ ๋ชฐ์•„์„œ ๋“ฃ๊ธฐ ๋”ฑ ์ข‹์€ ๊ธธ์ด๋กœ ์ž˜ ๋‚˜๋‰˜์–ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ‹ˆ๋‚  ๋•Œ ๋ช‡ ๊ฐœ์”ฉ ๋ณด๊ธฐ์—๋„ ๋ถ€๋‹ด์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ฐ€๊ฒฉ์„ ๋†’๊ฒŒ ์žก์•„ ๋†“๊ณ  ํ• ์ธ์„ ํฌ๊ฒŒ ํ•˜๋Š” ์•ฝ๊ฐ„์˜ ๋‚š์‹œํ˜• ๊ฐ€๊ฒฉ ์ •์ฑ…๋งŒ ๋นผ๋ฉด ์ „๋ฐ˜์ ์œผ๋กœ ๋‹ค ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ €๋„ ๊ทธ๋ ‡๊ฒŒ ๋‚š์—ฌ์„œ ์šฐ์—ฐํžˆ ๊ตฌ๋งคํ•˜๊ฒŒ ๋œ ์ผ€์ด์Šค์ด๊ธด ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๋‚ด์šฉ์ด ๊ดœ์ฐฎ์•„์„œ ์ดํ›„์— ๋‚˜์˜จ ๊ฐ•์˜๋“ค๋„ ๋Œ€๋ถ€๋ถ„ ๊ตฌ๋งคํ•ด์„œ ๋“ฃ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

    • nhcodingstudio
      ์ง€์‹๊ณต์œ ์ž

      ์•ˆ๋…•ํ•˜์„ธ์š”, ๋™ํ•ด๋ฐ”๋‹ค๋‹˜! ์ง€์‹๊ณต์œ ์ž์ž…๋‹ˆ๋‹ค :D ๋จผ์ € ์ €ํฌ ๊ฐ•์˜ ์‹œ๋ฆฌ์ฆˆ๋ฅผ ๊พธ์ค€ํžˆ ๋ฏฟ๊ณ  ์ˆ˜๊ฐ•ํ•ด ์ฃผ์‹ค ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์ด๋ ‡๊ฒŒ ์ •์„ฑ ๊ฐ€๋“ํ•œ ๊ท€ํ•œ ์˜๊ฒฌ ๋‚จ๊ฒจ์ฃผ์…”์„œ ์ง„์‹ฌ์œผ๋กœ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋™ํ•ด๋ฐ”๋‹ค๋‹˜์ฒ˜๋Ÿผ ์ €ํฌ ์ฝ˜ํ…์ธ ๋ฅผ ๊นŠ์ด ์žˆ๊ฒŒ ์ง€์ผœ๋ด ์ฃผ์‹œ๊ณ  ์ง„์‹ฌ ์–ด๋ฆฐ ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ์‹œ๋Š” ๋ถ„๋“ค์€ ์ €์—๊ฒŒ ๋ฌด์—‡๋ณด๋‹ค ํฐ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค. ์šฐ์„ , ์–ธ๊ธ‰ํ•ด ์ฃผ์‹  ๊ฐ€๊ฒฉ ์ •์ฑ…๊ณผ ๊ด€๋ จํ•˜์—ฌ ์ด์šฉ์— ํ˜ผ์„ ์„ ๋“œ๋ฆฌ๊ณ  ๋งˆ์Œ ์“ฐ์ด๊ฒŒ ํ•ด๋“œ๋ฆฐ ์  ์ง„์‹ฌ์œผ๋กœ ์‚ฌ๊ณผ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๊ฐ•์˜ ์ถœ์‹œ ์ดˆ๊ธฐ, ๋” ๋งŽ์€ ๋ถ„๊ป˜ ํ˜œํƒ์„ ๋“œ๋ฆฌ๊ณ ์ž ์–ผ๋ฆฌ๋ฒ„๋“œ ๊ธฐ๊ฐ„์— ๋†’์€ ํ• ์ธ์œจ์„ ์ ์šฉํ•˜๋Š” ๊ณผ์ •์—์„œ ์ •๊ฐ€ ์„ค์ •์— ์ผ๋ถ€ ๋ณ€๋™์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋žซํผ์˜ ํ• ์ธ์œจ ์ œํ•œ ์ •์ฑ… ๋‚ด์—์„œ ์ตœ๋Œ€ํ•œ์˜ ํ˜œํƒ์„ ๋งž์ถ”๋ ค๋‹ค ๋ณด๋‹ˆ ์˜๋„์น˜ ์•Š๊ฒŒ ๋™ํ•ด๋ฐ”๋‹ค๋‹˜๊ป˜ ๋ถˆํŽธํ•œ ์ธ์ƒ์„ ๋‚จ๊ฒจ๋“œ๋ฆฐ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ์  ๋„ˆ๊ทธ๋Ÿฝ๊ฒŒ ์–‘ํ•ดํ•ด ์ฃผ์‹ ๋‹ค๋ฉด ์ •๋ง ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๊ฐ•์˜์˜ ์„ค๋ช… ๋ฐฉ์‹์ด๋‚˜ ๊ตฌ์„ฑ, ๋ชฉ์†Œ๋ฆฌ ํ†ค๊นŒ์ง€ ์„ธ์‹ฌํ•˜๊ฒŒ ์‚ดํŽด๋ด ์ฃผ์‹œ๊ณ  '์ „๋ฐ˜์ ์œผ๋กœ ๋‹ค ๋งˆ์Œ์— ๋“ ๋‹ค'๊ณ  ๋ง์”€ํ•ด ์ฃผ์…”์„œ ์ •๋ง ๊ฐ๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋ฐ”์œ ์ฃผ๋ง ์‹œ๊ฐ„์„ ๋‚ด์–ด ์™„๋…ํ•ด ์ฃผ์‹œ๊ณ , ์ดํ›„ ์ถœ์‹œ๋œ ๊ฐ•์˜๋“ค๊นŒ์ง€ ๋ฏฟ๊ณ  ์„ ํƒํ•ด ์ฃผ์…จ๋‹ค๋Š” ๋ง์”€์— ์ง€์‹๊ณต์œ ์ž๋กœ์„œ ๊นŠ์€ ์ฑ…์ž„๊ฐ๊ณผ ๋ณด๋žŒ์„ ๋А๋‚๋‹ˆ๋‹ค. ๋™ํ•ด๋ฐ”๋‹ค๋‹˜๊ป˜ ๊ผญ ๋ณด๋‹ตํ•˜๊ณ  ์‹ถ์€ ๋งˆ์Œ์ž…๋‹ˆ๋‹ค. ์‹ค๋ก€๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์•„๋ž˜ ์ด๋ฉ”์ผ๋กœ ๊ฐ„๋‹จํžˆ ๋ฉ”์ผ ํ•œ ํ†ต ๋‚จ๊ฒจ์ฃผ์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”? ๋ฌธ์˜ ์ด๋ฉ”์ผ: jeony0535@naver.com ๋™ํ•ด๋ฐ”๋‹ค๋‹˜์„ ๊ผญ ๊ธฐ์–ตํ•ด ๋‘์—ˆ๋‹ค๊ฐ€, ํ–ฅํ›„ ์‹ ๊ทœ ๊ฐ•์˜๊ฐ€ ์ถœ์‹œ๋  ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ์ตœ์„ ์˜ ํ˜œํƒ์„ ๋‹ด์€ ์ฟ ํฐ์„ ์ง์ ‘ ์ „๋‹ฌํ•ด ๋“œ๋ฆฌ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ง„์‹ฌ์„ ๋‹ด์•„ ์จ์ฃผ์‹  ์ˆ˜๊ฐ•ํ‰ ๋•๋ถ„์— ์ € ๋˜ํ•œ ์ง€์‹๊ณต์œ ์ž๋กœ์„œ ํ•œ ๋‹จ๊ณ„ ๋” ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํฐ ๋™๋ ฅ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ๋„ ๋™ํ•ด๋ฐ”๋‹ค๋‹˜์˜ ํ•™์Šต ์—ฌ์ •์— ์‹ค์งˆ์ ์ธ ๋„์›€์ด ๋˜๋Š” ์–‘์งˆ์˜ ์ฝ˜ํ…์ธ ๋กœ ๋ณด๋‹ตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐ์‚ฌ๋“œ๋ฆฌ๋ฉฐ, ๋™ํ•ด๋ฐ”๋‹ค๋‹˜์˜ ์„ฑ์žฅ์„ ์ง„์‹ฌ์œผ๋กœ ์‘์›ํ•ฉ๋‹ˆ๋‹ค! :D

  • icoon22๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    icoon22

    ์ˆ˜๊ฐ•ํ‰ 9

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    5

    100% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

    react ๊ฐ•์ขŒ๋ฅผ ๋ณด๊ณ  next js ๋ฅผ ํ˜ธ๊ธฐ์‹ฌ์— ์‹œ์ž‘ ํ–ˆ๋Š”๋ฐ part 2 ๊นŒ์ง€ ์™”๋„ค์š”. ์ฝ”๋”ฉ๋ณด๋‹ค๋Š” ์ฃผ์š” ๊ธฐ๋Šฅ๊ณผ ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ ๋ฐฐ๊ฒฝ์ง€์‹๊ณผ ์›๋ฆฌ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ณ  ํ•„์š”์— ์˜ํ•ด ๋งŒ๋“ค์–ด์กŒ๋‹ค๋Š” ๊ฑธ ์•Œ๊ณ  ๊ธฐ๋Šฅ๋“ค์„ ์ตํžˆ๋Š”๊ฒŒ ์ข‹์•˜์Šต๋‹ˆ๋‹ค. ํ‰์†Œ UI ๊ฐœ๋ฐœ์„ ํ•˜๋ฉฐ ๋ฐœ์ƒ ํ–ˆ๋˜ ๊ณ ๋ฏผ๊ณผ ๋ฌธ์ œ์ ๋“ค์ด ์บ์‹ฑ๊ณผ ๋ผ์šฐํŒ…์œผ๋กœ ๋งŽ์ด ํ•ด์†Œ ๋˜์—ˆ์–ด์š”.

    • nhcodingstudio
      ์ง€์‹๊ณต์œ ์ž

      ์•ˆ๋…•ํ•˜์„ธ์š”, icoon22 ๋‹˜! ์ง€์‹๊ณต์œ ์ž mike(nhcodingstudio)์ž…๋‹ˆ๋‹ค. React์—์„œ ์‹œ์ž‘ํ•ด Next.js์˜ ์„ธ๊ณ„๋กœ, ๊ทธ๋ฆฌ๊ณ  Part 2๊นŒ์ง€ ์™„๊ฐ•ํ•˜์‹œ๋А๋ผ ์ •๋ง ๊ณ ์ƒ ๋งŽ์œผ์…จ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์ €ํฌ nhcodingstudio์˜ ์—ฌ๋Ÿฌ ๊ฐ•์˜๋ฅผ ๊พธ์ค€ํžˆ ์ฐพ์•„์ฃผ์‹œ๊ณ  ๋Š˜ ๊ด€์‹ฌ์„ ๊ฐ€์ ธ์ฃผ์…”์„œ ์ง„์‹ฌ์œผ๋กœ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ •์„ฑ์Šค๋Ÿฝ๊ฒŒ ๋‚จ๊ฒจ์ฃผ์‹  ๋ฆฌ๋ทฐ๋Š” ์ €์—๊ฒŒ ๋ฌด์—‡๋ณด๋‹ค ํฐ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์˜ ๋‹จ์ˆœํ•œ ๊ธฐ๋Šฅ์„ ๋‚˜์—ดํ•˜๊ธฐ๋ณด๋‹ค '๋ฐฐ๊ฒฝ์ง€์‹'๊ณผ '์›๋ฆฌ'๋ฅผ ํ†ตํ•ด ์™œ ์ด ๊ธฐ๋Šฅ์ด ํƒ„์ƒํ–ˆ๋Š”์ง€๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ง„์งœ ์‹ค๋ ฅ์„ ๋งŒ๋“œ๋Š” ๊ธธ์ด๋ผ๊ณ  ๋ฏฟ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ง„์‹ฌ์„ ์•Œ์•„์ฃผ์‹œ๊ณ , ํ‰์†Œ UI ๊ฐœ๋ฐœ์„ ํ•˜๋ฉฐ ๋А๋ผ์…จ๋˜ ๊ณ ๋ฏผ๋“ค์ด ํ•ด์†Œ๋˜์—ˆ๋‹ค๊ณ  ๋ง์”€ํ•ด ์ฃผ์‹œ๋‹ˆ ์ œ๊ฐ€ ๋” ๋ฟŒ๋“ฏํ•˜๊ณ  ๊ธฐ์ฉ๋‹ˆ๋‹ค. ๊ณต๋ถ€ํ•˜์‹œ๋‹ค๊ฐ€ ๋ง‰ํžˆ๋Š” ๋ถ€๋ถ„์ด๋‚˜ ๋” ๊นŠ์ด ์•Œ๊ณ  ์‹ถ์€ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ์–ธ์ œ๋“  ํŽธํ•˜๊ฒŒ ์งˆ๋ฌธํ•ด ์ฃผ์„ธ์š”. icoon22 ๋‹˜์˜ ์„ฑ์žฅ์„ ๋๊นŒ์ง€ ์‘์›ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋Š˜ ์ €ํฌ ๊ฐ•์˜๋ฅผ ๋ฏฟ๊ณ  ํ•จ๊ป˜ํ•ด์ฃผ์‹œ๋Š” ๋งˆ์Œ์— ๋ณด๋‹ตํ•˜๊ณ ์ž, nhcodingstudio ๊ฐ•์˜ ์ค‘ ์–ด๋–ค ๊ฐ•์˜๋“  ์ˆ˜๊ฐ•์„ ํฌ๋งํ•˜์‹œ๋Š” ๊ฐ•์˜๊ฐ€ ์žˆ์œผ์‹œ๋ฉด ์ฟ ํฐ์„ ์ „๋‹ฌํ•ด ๋“œ๋ฆฌ๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. jeony0535@naver.com์œผ๋กœ ํŽธํ•˜๊ฒŒ ์—ฐ๋ฝํ•ด ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ๋„ ๋” ์ข‹์€ ์ฝ˜ํ…์ธ ๋กœ ๋ณด๋‹ตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ง„์‹ฌ์œผ๋กœ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :D

  • ํƒœํ˜•๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    ํƒœํ˜•

    ์ˆ˜๊ฐ•ํ‰ 2

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    ์ˆ˜์ •๋จ

    5

    100% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

    ๋‹จ์ˆœํžˆ Next.js ์‚ฌ์šฉ๋ฒ•์„ ์•Œ๋ ค์ฃผ๋Š” ๊ฐ•์˜๊ฐ€ ์•„๋‹ˆ๋ผ ์™œ ์ด๋ ‡๊ฒŒ ์„ค๊ณ„ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•„ํ‚คํ…์ฒ˜ ๊ด€์ ์—์„œ ์ดํ•ดํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฐ•์˜์ž…๋‹ˆ๋‹ค. ์บ์‹œ๋ฅผ ํ™œ์šฉํ•œ ์„ฑ๋Šฅ๊ณผ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜๊นŒ์ง€ ๊ณ ๋ คํ•œ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๋Œ€์— ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Part 1 ๋“ฃ๊ณ  ๋ฐ”๋กœ Part 2๊นŒ์ง€ ์™”๋Š”๋ฐ Part 2๋„ ์ •๋ง ๋งŒ์กฑํ–ˆ์Šต๋‹ˆ๋‹ค. Part 3๊นŒ์ง€ ๊ฐ€๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค~

    • nhcodingstudio
      ์ง€์‹๊ณต์œ ์ž

      ์•ˆ๋…•ํ•˜์„ธ์š”, ํƒœํ˜• ๋‹˜! ์ง€์‹๊ณต์œ ์ž mike(nhcodingstudio)์ž…๋‹ˆ๋‹ค. ๋จผ์ € Part 1์— ์ด์–ด Part 2๊นŒ์ง€ ๋ฏฟ๊ณ  ๋”ฐ๋ผ์™€ ์ฃผ์‹œ๊ณ , ์ด๋ ‡๊ฒŒ ํž˜์ด ๋˜๋Š” ๋ฆฌ๋ทฐ๋ฅผ ๋‚จ๊ฒจ์ฃผ์…”์„œ ์ง„์‹ฌ์œผ๋กœ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ํƒœํ˜• ๋‹˜์˜ ์ •์„ฑ ์–ด๋ฆฐ ์ˆ˜๊ฐ•ํ‰์€ ์ œ๊ฐ€ ๊ฐ•์˜๋ฅผ ์ œ์ž‘ํ•˜๋Š” ๋ฐ ์žˆ์–ด ์ •๋ง ํฐ ๋™๊ธฐ๋ถ€์—ฌ์™€ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ์‚ฌ์šฉ๋ฒ•์„ ์ตํžˆ๋Š” ๊ฒƒ์„ ๋„˜์–ด '์™œ ์ด๋ ‡๊ฒŒ ์„ค๊ณ„ํ•ด์•ผ ํ•˜๋Š”๊ฐ€'๋ผ๋Š” ์•„ํ‚คํ…์ฒ˜ ๊ด€์ ์—์„œ์˜ ๊ณ ๋ฏผ์— ์ œ ๊ฐ•์˜๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‹ค๋‹ˆ ์ง€์‹๊ณต์œ ์ž๋กœ์„œ ํฐ ๋ณด๋žŒ์„ ๋А๋‚๋‹ˆ๋‹ค. ํŠนํžˆ ์„ฑ๋Šฅ๊ณผ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฒฐ์ •์ง“๋Š” ํ•ต์‹ฌ์ธ ์บ์‹œ ๊ตฌ์กฐ๋ฅผ ๊นŠ์ด ์žˆ๊ฒŒ ํŒŒ๊ณ ๋“ค์–ด ์ฃผ์‹  ์ ์ด ๋ฌด์ฒ™ ์ธ์ƒ ๊นŠ์Šต๋‹ˆ๋‹ค. ํƒœํ˜• ๋‹˜์˜ ์‘์›์— ํž˜์ž…์–ด ๋‹ค์Œ ํŒŒํŠธ์—์„œ๋„ ์‹ค๋ฌด์—์„œ ์ฆ‰์‹œ ์ ์šฉ ๊ฐ€๋Šฅํ•œ ๊นŠ์ด ์žˆ๋Š” ์ธ์‚ฌ์ดํŠธ๋ฅผ ์ „๋‹ฌํ•ด ๋“œ๋ฆด ์ˆ˜ ์žˆ๋„๋ก ์ตœ์„ ์„ ๋‹คํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•™์Šตํ•˜์‹œ๋‹ค๊ฐ€ ์–ธ์ œ๋“  ๊ถ๊ธˆํ•˜์‹  ์ ์ด ์ƒ๊ธฐ๋ฉด ์ฃผ์ €ํ•˜์ง€ ๋ง๊ณ  ํŽธํ•˜๊ฒŒ ์งˆ๋ฌธ ๋‚จ๊ฒจ์ฃผ์„ธ์š”! ๋”๋ถˆ์–ด ๊ฐ์‚ฌํ•œ ๋งˆ์Œ์„ ๋‹ด์•„, nhcodingstudio ๊ฐ•์˜ ์ค‘ ์ˆ˜๊ฐ•์„ ํฌ๋งํ•˜์‹œ๋Š” ๊ฐ•์˜๊ฐ€ ์žˆ์œผ์‹œ๋‹ค๋ฉด ์ฟ ํฐ์„ ์ „๋‹ฌํ•ด ๋“œ๋ฆฌ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. jeony0535@naver.com์œผ๋กœ ๋ฉ”์ผ ์ฃผ์‹œ๋ฉด ๋ฐ”๋กœ ๋ณด๋‚ด๋“œ๋ฆฌ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Part 3์—์„œ๋„ ์ฆ๊ฑฐ์šด ํ•™์Šต ๋˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :D

  • ์‹ฌ์žฌํ™”๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    ์‹ฌ์žฌํ™”

    ์ˆ˜๊ฐ•ํ‰ 21

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    5

    31% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

    ๊ฐ•์˜๊ฐ€ ๋งค์šฐ ์ƒ์„ธํ•˜๊ณ  ์ฒด๊ณ„์ ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ๊ธฐ๋ณธ ๊ฐœ๋… ๋ฐฐ์šฐ๋Š”๋ฐ ํฐ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชฉ์†Œ๋ฆฌ๋„ ์ผ์ •ํ•œ ํ†ค์œผ๋กœ ์•ˆ์ •๊ฐ ์žˆ๊ฒŒ ์ด์–ด์ ธ ์ง‘์ค‘ํ•˜๊ธฐ ๋”์šฑ ์ข‹์•˜์Šต๋‹ˆ๋‹ค.

    • nhcodingstudio
      ์ง€์‹๊ณต์œ ์ž

      ์•ˆ๋…•ํ•˜์„ธ์š”, ์‹ฌ์žฌํ™”๋‹˜! ์ง€์‹๊ณต์œ ์ž์ž…๋‹ˆ๋‹ค :D ๋จผ์ € <Next.js ๋งˆ์Šคํ„ฐ ํด๋ž˜์Šค: Part 1 - ๋ฏธ์…˜์œผ๋กœ ๋ฐฐ์šฐ๋Š” App Router์˜ ๋ณธ์งˆ๊ณผ ๋ Œ๋”๋ง ์„ค๊ณ„> ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•ด ์ฃผ์‹œ๊ณ , "์ƒ์„ธํ•˜๊ณ  ์ฒด๊ณ„์ ์ธ ๊ตฌ์„ฑ"๊ณผ "์•ˆ์ •๊ฐ ์žˆ๋Š” ๋ชฉ์†Œ๋ฆฌ ํ†ค"์— ๋Œ€ํ•œ ๋”ฐ๋œปํ•œ ์ˆ˜๊ฐ•ํ‰๊นŒ์ง€ ๋‚จ๊ฒจ์ฃผ์…”์„œ ์ง„์‹ฌ์œผ๋กœ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์‹ฌ์žฌํ™”๋‹˜๊ป˜์„œ ๋‚จ๊ฒจ์ฃผ์‹  ํ”ผ๋“œ๋ฐฑ์€ ์ €์—๊ฒŒ ์ •๋ง ํฐ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค. ๊ฐ•์˜์˜ ์„ค๋ช…๊ณผ ๋ชฉ์†Œ๋ฆฌ๊ฐ€ ํ•™์Šต์— ๋ชฐ์ž…ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์—ˆ๋‹ค๋‹ˆ ์ •๋ง ๋‹คํ–‰์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ํ•™์Šตํ•˜์‹  App Router์˜ ๋ณธ์งˆ๊ณผ ๋ Œ๋”๋ง ์„ค๊ณ„ ๋ฐฉ์‹๋“ค์ด ์‹ฌ์žฌํ™”๋‹˜์˜ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ์—ญ๋Ÿ‰์„ ํ•œ ๋‹จ๊ณ„ ๋” ๋†’์ด๋Š” ๋ฐ ์‹ค์งˆ์ ์ธ ๋„์›€์ด ๋˜์—ˆ๊ธฐ๋ฅผ ์ง„์‹ฌ์œผ๋กœ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์—ด์ •์ ์œผ๋กœ ํ•™์Šตํ•ด์ฃผ์‹  ๊ฒƒ์— ๊ฐ์‚ฌํ•˜๋Š” ๋งˆ์Œ์„ ๋‹ด์•„ ์ž‘์€ ํ˜œํƒ์„ ๋“œ๋ฆฌ๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ํ˜น์‹œ ์ €ํฌ ๊ต์œก ๊ณผ์ • ์ค‘ ์ถ”๊ฐ€์ ์œผ๋กœ ์ˆ˜๊ฐ•์„ ํฌ๋งํ•˜์‹œ๋Š” ๊ฐ•์˜๊ฐ€ ์žˆ์œผ์‹œ๋‹ค๋ฉด, ์•„๋ž˜ ์ด๋ฉ”์ผ๋กœ ํŽธํ•˜๊ฒŒ ์—ฐ๋ฝํ•ด ์ฃผ์‹ญ์‹œ์˜ค. ํ™•์ธ ํ›„ ์ฆ‰์‹œ ํ• ์ธ ์ฟ ํฐ์„ ์ „๋‹ฌํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฌธ์˜ ์ด๋ฉ”์ผ: jeony0535@naver.com ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ท€ํ•œ ์‹œ๊ฐ„ ๋‚ด์–ด ๋”ฐ๋œปํ•œ ๋ง์”€ ๋‚จ๊ฒจ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์‹ฌ์žฌํ™”๋‹˜์˜ ์„ฑ์žฅ์„ ์ง„์‹ฌ์œผ๋กœ ์‘์›ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! :D

nhcodingstudio๋‹˜์˜ ๋‹ค๋ฅธ ๊ฐ•์˜

์ง€์‹๊ณต์œ ์ž๋‹˜์˜ ๋‹ค๋ฅธ ๊ฐ•์˜๋ฅผ ๋งŒ๋‚˜๋ณด์„ธ์š”!

๋น„์Šทํ•œ ๊ฐ•์˜

๊ฐ™์€ ๋ถ„์•ผ์˜ ๋‹ค๋ฅธ ๊ฐ•์˜๋ฅผ ๋งŒ๋‚˜๋ณด์„ธ์š”!

โ‚ฉ29,700