์ฑ„๋„ํ†ก ์•„์ด์ฝ˜

Next.js ๋งˆ์Šคํ„ฐ ํด๋ž˜์Šค: Part 3 - ์‹ค์ „ ์•„ํ‚คํ…์ฒ˜ ์™„์„ฑ (์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ๋™๊ธฐํ™”, ๊ทนํ•œ์˜ ์ตœ์ ํ™”, ํ’€์Šคํƒ ๋ณด์•ˆ)

ใ€ŒNext.js ๋งˆ์Šคํ„ฐ ํด๋ž˜์Šค: Part 3 - ์‹ค์ „ ์•„ํ‚คํ…์ฒ˜ ์™„์„ฑใ€๋Š” ๋กœ์ปฌ์—์„œ๋งŒ ๋™์ž‘ํ•˜๋Š” ํŠœํ† ๋ฆฌ์–ผ ์ˆ˜์ค€์„ ๋„˜์–ด, ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์„ ๊ฒฌ๋””๋Š” '์ง„์งœ ์ƒ์šฉ ์„œ๋น„์Šค(Production)' ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ์ง€์นจ์„œ์ž…๋‹ˆ๋‹ค. TanStack Query์™€ Zustand๋ฅผ ๊ฒฐํ•ฉํ•œ ๋ฌด๊ฒฐ์  ์ƒํƒœ ๋™๊ธฐํ™”๋ถ€ํ„ฐ, Turbopack ๊ธฐ๋ฐ˜์˜ 100KB ๋ฏธ๋งŒ ๋ฒˆ๋“ค ์ตœ์ ํ™” ๋ฐ ๊ณ ๊ธ‰ SEO ์ฃผ์ž…, ๊ทธ๋ฆฌ๊ณ  ํ”„๋ก์‹œ(Proxy)์™€ JWT ์„ธ์…˜์„ ํ™œ์šฉํ•œ ์ฒ ํ†ต๊ฐ™์€ ํ’€์Šคํƒ ๋ณด์•ˆ๋ง ๊ตฌ์ถ•๊นŒ์ง€ ํ˜„์—…์˜ ํ•ต์‹ฌ ๊ธฐ์ˆ ์„ ๋ชจ๋‘ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์ง€๊ธ‹์ง€๊ธ‹ํ•œ Hydration ์—๋Ÿฌ์™€ CORS ์žฅ๋ฒฝ์„ ์Šค์Šค๋กœ ํ—ˆ๋ฌผ๊ณ , ๋‹จ์ˆœํ•œ ์ฝ”๋”๋ฅผ ๋„˜์–ด ํ”„๋ก ํŠธ์—”๋“œ ์‹œ์Šคํ…œ ์ „์ฒด๋ฅผ ์ง€๋ฐฐํ•˜๋Š” '์‹œ๋‹ˆ์–ด ์•„ํ‚คํ…ํŠธ'๋กœ ๋„์•ฝํ•˜๊ณ  ์‹ถ์€ ๋ถ„๋“ค๊ป˜ ์ด ๊ฐ•์˜๋ฅผ ๊ฐ•๋ ฅํžˆ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.

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

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

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

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

์›น์„ฑ๋Šฅ์ตœ์ ํ™”
์›น์„ฑ๋Šฅ์ตœ์ ํ™”
์•„ํ‚คํ…์ฒ˜์„ค๊ณ„
์•„ํ‚คํ…์ฒ˜์„ค๊ณ„
์›น๋ณด์•ˆ
์›น๋ณด์•ˆ
๋„ฅ์ŠคํŠธ์ œ์ด์—์Šค์‹ค๋ฌด
๋„ฅ์ŠคํŠธ์ œ์ด์—์Šค์‹ค๋ฌด
์›น์„ฑ๋Šฅ์ตœ์ ํ™”
์›น์„ฑ๋Šฅ์ตœ์ ํ™”
์•„ํ‚คํ…์ฒ˜์„ค๊ณ„
์•„ํ‚คํ…์ฒ˜์„ค๊ณ„
์›น๋ณด์•ˆ
์›น๋ณด์•ˆ
๋„ฅ์ŠคํŠธ์ œ์ด์—์Šค์‹ค๋ฌด
๋„ฅ์ŠคํŠธ์ œ์ด์—์Šค์‹ค๋ฌด

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

  • React 19 ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ˆ˜๋™ ๋ฉ”๋ชจ์ด์ œ์ด์…˜(useMemo, useCallback) ์—†์ด๋„ ์ตœ์ ํ™”๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๋Šฅ๋ ฅ

  • TanStack Query v5๋ฅผ ํ™œ์šฉํ•ด ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ์บ์‹ฑํ•˜๊ณ  ๋™๊ธฐํ™”ํ•˜๋Š” '์ค‘์•™ ์ฃผ๋ฐฉ ์‹œ์Šคํ…œ' ๊ตฌ์ถ• ์™„๋ฃŒ

  • staleTime๊ณผ gcTime์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ API ํ˜ธ์ถœ์„ ์™„์ „ํžˆ ์ฐจ๋‹จํ•˜๋Š” ๋„คํŠธ์›Œํฌ ์ตœ์ ํ™” ๋Šฅ๋ ฅ

  • Server Actions์™€ ๋‚™๊ด€์  ์—…๋ฐ์ดํŠธ(Optimistic UI)๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์ง€์—ฐ ์‹œ๊ฐ„ ์—†์ด ์ฆ‰๊ฐ ๋ฐ˜์‘ํ•˜๋Š” ํผ ์ œ์ถœ ๋กœ์ง ์™„์„ฑ

  • ์„œ๋ฒ„ ๋ Œ๋”๋ง(SSR) ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ์ž ๊ฐ„ ์ƒํƒœ ์˜ค์—ผ(State Leak)์„ ๋ง‰์•„๋‚ด๋Š” Zustand Provider ํŒจํ„ด ์„ค๊ณ„ ๋Šฅ๋ ฅ

  • Persist ๋ฏธ๋“ค์›จ์–ด๋ฅผ ํ™œ์šฉํ•ด ๋ธŒ๋ผ์šฐ์ € ์ƒˆ๋กœ๊ณ ์นจ์ด๋‚˜ ์ข…๋ฃŒ ํ›„์—๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚ ์•„๊ฐ€์ง€ ์•Š๋Š” ์˜๊ตฌ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์Šคํ† ์–ด ์™„์„ฑ

  • Next.js ๊ฐœ๋ฐœ์ž๋“ค์˜ ์ฃผ์ , Hydration Mismatch ์—๋Ÿฌ์˜ ์›์ธ์„ ์™„๋ฒฝํžˆ ํŒŒ์•…ํ•˜๊ณ  ์šฐ์•„ํ•˜๊ฒŒ ๋ฐฉ์–ดํ•˜๋Š” ๋กœ์ง ๊ตฌํ˜„ ๋Šฅ๋ ฅ

  • prefetchQuery์™€ Dehydration์„ ๊ฒฐํ•ฉํ•ด 0.1์ดˆ์˜ ๋กœ๋”ฉ ์Šคํ”ผ๋„ˆ๋„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ดˆ๊ณ ์† ์ดˆ๊ธฐ ๋ Œ๋”๋ง ์‹œ์Šคํ…œ ์™„์„ฑ

  • App Router์˜ ๋ณ‘๋ ฌ(Parallel) ๋ฐ ๊ฐ€๋กœ์ฑ„๊ธฐ(Intercepting) ๋ผ์šฐํŒ…์„ ํ™œ์šฉํ•œ ๋ชจ๋˜ ๋ชจ๋‹ฌ ์•„ํ‚คํ…์ฒ˜ ๊ตฌํ˜„

  • ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ํ”๋“ค๋ฆฌ์ง€ ์•Š๋Š” ์‹ค๋ฌด ํ‘œ์ค€ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ๋ฐ ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜ ์„ค๊ณ„ ๋Šฅ๋ ฅ

  • ๋ฒˆ๋“ค ๋ถ„์„๊ธฐ(experimental-analyze)๋ฅผ ํ™œ์šฉํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ดˆ๊ธฐ ๋กœ๋“œ ์šฉ๋Ÿ‰์„ 100KB ์ดํ•˜๋กœ ์œ ์ง€ํ•˜๋Š” ๋‹ค์ด์–ดํŠธ ๋Šฅ๋ ฅ

  • next/dynamic๊ณผ ํŒŒ์‚ฌ๋“œ(Facade) ํŒจํ„ด์„ ์ด์šฉํ•ด ๋ฌด๊ฑฐ์šด ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋น„๋™๊ธฐ ์ง€์—ฐ ๋กœ๋”ฉํ•˜๋Š” ์ตœ์ ํ™” ๊ธฐ์ˆ 

  • generateMetadata์™€ JSON-LD ๊ตฌ์กฐํ™” ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ์ž…ํ•˜์—ฌ ๊ฒ€์ƒ‰ ์—”์ง„ ์ƒ์œ„ ๋…ธ์ถœ(SEO)์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๋ฆฌ์น˜ ์Šค๋‹ˆํŽซ ์™„์„ฑ

  • ์ „์—ญ ํ”„๋ก์‹œ(proxy.ts)์™€ ๋‚ด๋ถ€ ํ”„๋ก์‹œ(route.ts)๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ CORS ์—๋Ÿฌ๋ฅผ ์šฐํšŒํ•˜๊ณ  API ํ‚ค๋ฅผ ์™„๋ฒฝํžˆ ์ˆจ๊ธฐ๋Š” ๋„คํŠธ์›Œํฌ ๊ฒฝ๊ณ„ ๊ตฌ์ถ•

  • JWT ์„ธ์…˜ ์•”ํ˜ธํ™”์™€ HTTP Security Headers๋ฅผ ์ง์ ‘ ์„ธํŒ…ํ•ด XSS ๋ฐ ํด๋ฆญ์žฌํ‚น์„ ๋ง‰์•„๋‚ด๋Š” ์ฒ ํ†ต ๋ณด์•ˆ ์‹œ์Šคํ…œ ์™„์„ฑ


๐ŸŽ“Next.js ๋งˆ์Šคํ„ฐ ํด๋ž˜์Šค: Part 3 - ์‹ค์ „ ์•„ํ‚คํ…์ฒ˜ ์™„์„ฑ (์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ๋™๊ธฐํ™”, ๊ทนํ•œ์˜ ์ตœ์ ํ™”, ํ’€์Šคํƒ ๋ณด์•ˆ)

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

์ด์–ด์ง€๋Š” ์„ฑ๋Šฅ ๊ณ ๋„ํ™” ๋‹จ๊ณ„์—์„œ๋Š” Turbopack๊ณผ ๋ฒˆ๋“ค ๋ถ„์„๊ธฐ๋ฅผ ๋„๊ตฌ ์‚ผ์•„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ดˆ๊ธฐ ๋กœ๋“œ ์šฉ๋Ÿ‰์„ 100KB ๋ฏธ๋งŒ์œผ๋กœ ๊นŽ์•„๋‚ด๋Š” ๊ทนํ•œ์˜ ๋‹ค์ด์–ดํŠธ๋ฅผ ๊ฐํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ฐจ์„ธ๋Œ€ ์ด๋ฏธ์ง€ ํฌ๋งท์ธ AVIF์™€ ํŒŒ์‚ฌ๋“œ ํŒจํ„ด์„ ํ™œ์šฉํ•œ ์„œ๋“œํŒŒํ‹ฐ ์Šคํฌ๋ฆฝํŠธ ์ œ์–ด, ๊ทธ๋ฆฌ๊ณ  ๊ตฌ๊ธ€ ๋กœ๋ด‡์—๊ฒŒ ์šฐ๋ฆฌ ์„œ๋น„์Šค์˜ ๋ณธ์งˆ์„ ์ •ํ™•ํžˆ ๋– ๋จน์—ฌ ์ฃผ๋Š” JSON-LD ๊ตฌ์กฐํ™” ๋ฐ์ดํ„ฐ ์ฃผ์ž…๊นŒ์ง€, ์›น์˜ ์†๋„์™€ ๋งˆ์ผ€ํŒ… ํšจ์œจ์„ ์ตœ์ƒ์œ„ ์‹œ๋‹ˆ์–ด ๋ ˆ๋ฒจ๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๊ธฐ์ˆ ์  ํ•ด๋ฒ•์„ ์ด๋™์›ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, ๋„คํŠธ์›Œํฌ ์ตœ์ „์„ ์— ๋ฏธ๋“ค์›จ์–ด์™€ ์ „์—ญ ํ”„๋ก์‹œ(Proxy) ๋ฐฉ์–ด์„ ์„ ์„ธ์›Œ ์ง€๊ธ‹์ง€๊ธ‹ํ•œ CORS ์—๋Ÿฌ์™€ API ํ‚ค ์œ ์ถœ์„ ์›์ฒœ ๋ด‰์‡„ํ•˜๋ฉฐ ๊ฐ•์˜์˜ ์ •์ ์— ๋„๋‹ฌํ•ฉ๋‹ˆ๋‹ค. 5์ค‘ ์ž๋ฌผ์‡  ์ฟ ํ‚ค์™€ JWT ์„ธ์…˜ ๊ด€๋ฆฌ, ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต(DAL)๊ณผ DTO ํŒจํ„ด์„ ํ†ตํ•ด ์„œ๋ฒ„ ๊นŠ์ˆ™ํ•œ ๊ณณ์˜ ๊ธˆ๊ณ ๋ฅผ ์ง€์ผœ๋‚ด๊ณ , ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ œ์–ด์™€ ํ•จ๊ป˜ ๋ฌด๊ฒฐ์  ๋ฐฐํฌ๋ฅผ ์ค€๋น„ํ•จ์œผ๋กœ์จ ์–ด๋–ค ๊ณต๊ฒฉ์—๋„ ํ”๋“ค๋ฆฌ์ง€ ์•Š๋Š” '์ง„ํ’ˆ ์ƒ์šฉ ์„œ๋น„์Šค'์˜ ๋งˆ์นจํ‘œ๋ฅผ ์ฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


๐Ÿงฑ ๊ฐ•์˜ ๊ตฌ์„ฑ์˜ ํ•ต์‹ฌ ์ฒ ํ•™ (The 6 Pillars)

๐Ÿ“Œ โ€œ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๊ฐœ์˜ ์ฃผ๋ฐฉ์ด๋‹ค.โ€
โ†’ useState๋กœ ํŒŒํŽธํ™”๋œ ๋กœ์ง์€ ๋ฒ„๊ทธ์˜ ์˜จ์ƒ์ด ๋ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์˜ ์บ์‹œ(TanStack Query)์™€ ํด๋ผ์ด์–ธํŠธ์˜ ์ „์—ญ ์ƒํƒœ(Zustand)๋ฅผ ์—„๊ฒฉํžˆ ๋ถ„๋ฆฌํ•˜๊ณ , ์ด ๋‘˜์„ ์œ ๊ธฐ์ ์œผ๋กœ ์—ฎ๋Š” '์ด์ค‘ ์บ์‹œ ๋™๊ธฐํ™”' ์ „๋žต์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์‹ฑํฌ๊ฐ€ 0.1์ดˆ์˜ ์˜ค์ฐจ๋„ ์—†์ด ๋งž๋ฌผ๋ ค ๋Œ์•„๊ฐ€๋Š” ๋ฌด๊ฒฐ์  ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ โ€œ๋ฒˆ๋“ค ์‚ฌ์ด์ฆˆ 100KB๋Š” ์„ฑ๋Šฅ์˜ ๋งˆ์ง€๋…ธ์„ ์ด๋‹ค.โ€
โ†’ "๋น ๋ฅธ ๊ฒƒ ๊ฐ™๋‹ค"๋Š” ์ฃผ๊ด€์ ์ธ ๋А๋‚Œ์„ ๋ฒ„๋ฆฌ๊ณ , ๋ฒˆ๋“ค ๋ถ„์„๊ธฐ๋ฅผ ํ†ตํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ฌด๊ฒŒ๋ฅผ ์‹œ๊ด€ํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋ฌด๊ฑฐ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„œ๋ฒ„๋กœ ๋ฐ€์–ด๋‚ด๊ฑฐ๋‚˜ ๋™์  ์ž„ํฌํŠธ๋กœ ๋„๋ ค๋‚ด๋Š” '์ˆ˜์ˆ ์  ์ตœ์ ํ™”'๋ฅผ ํ†ตํ•ด, ์–ด๋–ค ํ™˜๊ฒฝ์—์„œ๋„ 60fps์˜ ๋ถ€๋“œ๋Ÿฌ์›€์„ ์œ ์ง€ํ•˜๋Š” ํ•˜์ด์—”๋“œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ โ€œ๋ณด์•ˆ์€ ๋Œ€๋ฌธ(Edge)์—์„œ ์‹œ์ž‘ํ•ด ๊ธˆ๊ณ (DB)์—์„œ ๋๋‚œ๋‹ค.โ€
โ†’ ์ธ์ฆ์€ ๋‹จ์ˆœํžˆ ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ๊ฒฝ๊ณ„์ธ ๋ฏธ๋“ค์›จ์–ด์™€ ์ „์—ญ ํ”„๋ก์‹œ(proxy.ts)์—์„œ 1์ฐจ ๊ฒ€๋ฌธ์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ์„œ๋ฒ„ ๋‚ด๋ถ€์˜ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต(DAL)๊ณผ DTO ํŒจํ„ด์„ ํ†ตํ•ด ์ตœ์ข… ๋ฐ์ดํ„ฐ๋ฅผ ํฌ์žฅํ•˜๋Š” 3์ค‘ ์ฒ ๋ฒฝ ๋ฐฉ์–ด ์‹œ์Šคํ…œ์„ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค.

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

๐Ÿ“Œ โ€œ๊ฒ€์ƒ‰ ์—”์ง„์€ ์„œ๋น„์Šค์˜ ๊ฐ€์žฅ ๊นŒ๋‹ค๋กœ์šด ์ฒซ ๋ฒˆ์งธ ์†๋‹˜์ด๋‹ค.โ€
โ†’ SEO๋Š” ๋งˆ์ผ€ํŒ…์˜ ์˜์—ญ์ด ์•„๋‹Œ ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ง์˜ ์˜์—ญ์ž…๋‹ˆ๋‹ค. ๊ตฌ๊ธ€ ๋กœ๋ด‡์—๊ฒŒ ์šฐ๋ฆฌ ์„œ๋น„์Šค์˜ ๋ณธ์งˆ์„ ์ง์ ‘ ๋– ๋จน์—ฌ ์ฃผ๋Š” JSON-LD ๊ตฌ์กฐํ™” ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ์ž…ํ•˜๊ณ , ๋™์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ํ†ตํ•ด ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ(Rich Snippet)์˜ ํด๋ฆญ๋ฅ ์„ ํญ๋ฐœ์ ์œผ๋กœ ๋†’์ž…๋‹ˆ๋‹ค. ๋ณด์ด์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฒ•์ด ๊ณง ์„œ๋น„์Šค์˜ ๊ธ‰์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

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


โœจ ์ด ๊ฐ•์˜์˜ ํŠน์ง• 

  1. ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ๋ฅผ ๊ฒฐํ•ฉํ•œ โ€˜ํ†ตํ•ฉ ์ƒํƒœ ์—”์ง„โ€™ ์•„ํ‚คํ…์ฒ˜
    โ†’ TanStack Query v5์™€ Zustand๋ฅผ ์œ ๊ธฐ์ ์œผ๋กœ ๋™๊ธฐํ™”ํ•˜์—ฌ, ํ•˜์ด๋“œ๋ ˆ์ด์…˜ ์˜ค๋ฅ˜ ์—†์ด ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์— ์™„๋ฒฝํžˆ ์•ˆ์ฐฉ์‹œํ‚ต๋‹ˆ๋‹ค.


  2. ๋ฒˆ๋“ค ์‚ฌ์ด์ฆˆ 100KB์˜ ๋ฒฝ์„ ๋„˜๋Š” โ€˜๊ทนํ•œ์˜ ๋‹ค์ด์–ดํŠธโ€™
    โ†’ Turbopack๊ณผ ๋ฒˆ๋“ค ๋ถ„์„๊ธฐ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ดˆ๊ธฐ ๋กœ๋“œ ์šฉ๋Ÿ‰์„ ์ตœ์†Œํ™”ํ•˜์—ฌ, ์–ด๋–ค ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์—์„œ๋„ 0.1์ดˆ ๋งŒ์— ๋ฐ˜์‘ํ•˜๋Š” ์••๋„์  ์†๋„๋ฅผ ์‚ฌ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

  3. ๋„คํŠธ์›Œํฌ ์ตœ์ „์„ ์„ ์ง€ํ‚ค๋Š” โ€˜์ „์—ญ ํ”„๋ก์‹œ์™€ ๋ฏธ๋“ค์›จ์–ดโ€™
    โ†’ ์™ธ๋ถ€ API ํ†ต์‹ ์„ proxy.ts๋กœ ์ค‘์•™ ์ œ์–ดํ•˜์—ฌ ๋ฐฑ์—”๋“œ ์ˆ˜์ • ์—†์ด๋„ CORS ์—๋Ÿฌ๋ฅผ ์Šค์Šค๋กœ ํ•ด๊ฒฐํ•˜๊ณ , ๋ฏผ๊ฐํ•œ API ํ‚ค ๋…ธ์ถœ์„ ์›์ฒœ ๋ด‰์‡„ํ•ฉ๋‹ˆ๋‹ค.


  4. ์ƒ์šฉ ์„œ๋น„์Šค ์ˆ˜์ค€์˜ โ€˜3์ค‘ ์ฒ ๋ฒฝ ๋ณด์•ˆ ํŒŒ์ดํ”„๋ผ์ธโ€™ ๊ตฌ์ถ•
    โ†’ 5์ค‘ ์ž๋ฌผ์‡  ์ฟ ํ‚ค ๊ธฐ๋ฐ˜ JWT ์„ธ์…˜, ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต(DAL), DTO ํŒจํ„ด์„ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์˜ ์‹ค์ˆ˜๋กœ๋ถ€ํ„ฐ ์„œ๋ฒ„์˜ ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ ์ €ํžˆ ๊ฒฉ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.


  5. ๊ตฌ๊ธ€ ๋กœ๋ด‡์„ ๋งค๋ฃŒ์‹œํ‚ค๋Š” โ€˜๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ SEO ์—”์ง€๋‹ˆ์–ด๋งโ€™
    โ†’ ๋‹จ์ˆœ ๋ฉ”ํƒ€ํƒœ๊ทธ ์„ค์ •์„ ๋„˜์–ด JSON-LD ๊ตฌ์กฐํ™” ๋ฐ์ดํ„ฐ์™€ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์˜ ํด๋ฆญ๋ฅ (CTR)์„ ํญ๋ฐœ์ ์œผ๋กœ ๋†’์ด๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.


  6. ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง€๋ฐฐํ•˜๋Š” โ€˜์‹ค๋ฌด ํ‘œ์ค€ ํด๋” ์•„ํ‚คํ…์ฒ˜โ€™
    โ†’ FSD ์ง€ํ–ฅ ์„ค๊ณ„๋ฅผ ํ†ตํ•ด ์ˆ˜๋งŒ ์ค„์˜ ์ฝ”๋“œ ์†์—์„œ๋„ 1์ดˆ ๋งŒ์— ๋กœ์ง์„ ์ฐพ์•„๋‚ด๊ณ , ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฌผ๋ฆฌ์  ๊ฒฝ๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ํš์ •ํ•ฉ๋‹ˆ๋‹ค.


  7. ์ฐจ์„ธ๋Œ€ ๋ฏธ๋””์–ด ์ „๋žต๊ณผ โ€˜ํŒŒ์‚ฌ๋“œ(Facade) ํŒจํ„ดโ€™ ์ ์šฉ
    โ†’ AVIF ํฌ๋งท ์ตœ์ ํ™”์™€ ์„œ๋“œํŒŒํ‹ฐ ์Šคํฌ๋ฆฝํŠธ ์ง€์—ฐ ๋กœ๋”ฉ ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•ด ๋ฌด๊ฑฐ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ ์œ ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ฒ ์ €ํžˆ ํ†ต์ œํ•ฉ๋‹ˆ๋‹ค.


  8. ์ƒ์šฉ ์„œ๋น„์Šค ๋Ÿฐ์นญ์„ ์œ„ํ•œ โ€˜์•„ํ‚คํ…ํŠธ์˜ ์˜์‚ฌ๊ฒฐ์ •โ€™ ์ „์ˆ˜
    โ†’ 35๊ฐ•์˜ ์ง‘์•ฝ๋œ ์—ฌ์ •์„ ํ†ตํ•ด ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๋ฅผ ํƒ€์ดํ•‘ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ๋„˜์–ด, ์‹œ์Šคํ…œ ์ „์ฒด์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„๊ณผ ๋ณด์•ˆ, ๋ฐฐํฌ ํ™˜๊ฒฝ์„ ์„ค๊ณ„ํ•˜๋Š” ์‹œ๋‹ˆ์–ด์˜ ์‹œ์•ผ๋ฅผ ๊ฐ–์ถฅ๋‹ˆ๋‹ค.


1๏ธโƒฃ ์„œ๋ฒ„ ์ƒํƒœ ์—”์ง„ ๋งˆ์Šคํ„ฐ: TanStack Query v5์˜ ํ•˜์ด๋“œ๋ ˆ์ด์…˜ ์›๋ฆฌ๋ฅผ ํŒŒํ—ค์ณ ๋กœ๋”ฉ ์Šคํ”ผ๋„ˆ ์—†๋Š” ์ดˆ๊ธฐ ๋ Œ๋”๋ง์„ ๊ตฌํ˜„ํ•˜๊ณ  ์บ์‹œ ๋ฌดํšจํ™” ์ „๋žต์„ ์ •๋ณตํ•ฉ๋‹ˆ๋‹ค.

2๏ธโƒฃ ์ด์ค‘ ์บ์‹œ ๋™๊ธฐํ™” ์•„ํ‚คํ…์ฒ˜: Zustand์™€ ์„œ๋ฒ„ ์ƒํƒœ๋ฅผ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์ฒ˜๋Ÿผ ๋งž๋ฌผ๋ ค, ์„œ๋ฒ„์™€ ๋ธŒ๋ผ์šฐ์ € ์‚ฌ์ด์˜ ๋ฐ์ดํ„ฐ ๊ฒฉ์ฐจ๋ฅผ 0ms๋กœ ์ค„์ด๋Š” ํ†ตํ•ฉ ์ƒํƒœ ์—”์ง„์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

3๏ธโƒฃ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํด๋” ๊ตฌ์กฐ: ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ๊ธธ์„ ์žƒ์ง€ ์•Š๋Š” FSD ์ง€ํ–ฅํ˜• ์ปจ๋ฒค์…˜์„ ํ™•๋ฆฝํ•˜๊ณ , ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฌผ๋ฆฌ์  ๊ฒฝ๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

5๏ธโƒฃ ํ•˜์ด์—”๋“œ ๋ฏธ๋””์–ด ์ „๋žต: ์ฐจ์„ธ๋Œ€ ์ด๋ฏธ์ง€ ํฌ๋งท(AVIF)๊ณผ ํŒŒ์‚ฌ๋“œ(Facade) ํŒจํ„ด์„ ํ™œ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ๋Œ€์—ญํญ๊ณผ ๋ธŒ๋ผ์šฐ์ € CPU ์ž์›์„ ๊ทน๋„๋กœ ์•„๋ผ๋Š” ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

4๏ธโƒฃ ๊ทนํ•œ์˜ ๋ฒˆ๋“ค ์ตœ์ ํ™”: ๋ฒˆ๋“ค ๋ถ„์„๊ธฐ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ฌด๊ฒŒ๋ฅผ ์‹œ๊ฐํ™”ํ•˜๊ณ , ๋™์  ์ž„ํฌํŠธ์™€ ์ˆ˜์ˆ ์  ์ฝ”๋“œ ๋ถ„ํ• ์„ ํ†ตํ•ด ์ดˆ๊ธฐ ๋กœ๋“œ ์šฉ๋Ÿ‰ 100KB์˜ ๋ฒฝ์„ ๋„˜์Šต๋‹ˆ๋‹ค.

6๏ธโƒฃ ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ง SEO: ๊ตฌ๊ธ€ ๋กœ๋ด‡์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ๋– ๋จน์—ฌ ์ฃผ๋Š” JSON-LD ์ฃผ์ž…๊ณผ ๋ฆฌ์น˜ ์Šค๋‹ˆํŽซ ์ „๋žต์œผ๋กœ ๊ฒ€์ƒ‰ ์—”์ง„ ์ƒ๋‹จ ๋…ธ์ถœ์„ ์œ„ํ•œ ๋งˆ์ผ€ํŒ… ๊ธฐ์ˆ ์„ ์žฅ์•…ํ•ฉ๋‹ˆ๋‹ค.

7๏ธโƒฃ ๋„คํŠธ์›Œํฌ ๊ฒฝ๊ณ„ ๋ณด์•ˆ: ์ „์—ญ ํ”„๋ก์‹œ(proxy.ts)๋ฅผ ์„ค๊ณ„ํ•˜์—ฌ ์ง€๊ฒจ์šด CORS ์—๋Ÿฌ๋ฅผ ์Šค์Šค๋กœ ํ•ด๊ฒฐํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ์— API ํ‚ค๊ฐ€ ์œ ์ถœ๋˜๋Š” ์‚ฌ๊ณ ๋ฅผ ์›์ฒœ ๋ด‰์‡„ํ•ฉ๋‹ˆ๋‹ค.

8๏ธโƒฃ ์ฒ ๋ฒฝ ์ธ์ฆ ํŒŒ์ดํ”„๋ผ์ธ: 5์ค‘ ์ž๋ฌผ์‡  ๋ณด์•ˆ ์ฟ ํ‚ค์™€ JWT ์„ธ์…˜์„ ๊ฒฐํ•ฉํ•ด, ํ•ด์ปค๊ฐ€ ์ ˆ๋Œ€๋กœ ํ›”์น  ์ˆ˜ ์—†๋Š” ์ƒ์šฉ ์„œ๋น„์Šค ์ˆ˜์ค€์˜ ์•ˆ์ „ํ•œ ์ธ์ฆ ์‹œ์Šคํ…œ์„ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค.

9๏ธโƒฃ ๋ฐ์ดํ„ฐ ์€๋‹‰๊ณผ ์ธ๊ฐ€ ์‹œ์Šคํ…œ: ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต(DAL)๊ณผ DTO ํŒจํ„ด์„ ํ†ตํ•ด ์„œ๋ฒ„ ๋‚ด๋ถ€์˜ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ๊ธˆ๊ณ ์ฒ˜๋Ÿผ ๊ฒฉ๋ฆฌํ•˜๊ณ , ์‚ฌ์šฉ์ž ๊ถŒํ•œ์— ๋”ฐ๋ฅธ ์—„๊ฒฉํ•œ ์ธ๊ฐ€๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”Ÿ ํ™˜๊ฒฝ ์ œ์–ด์™€ ํ’€์Šคํƒ ๋ณด์•ˆ ๊ฒฝ๊ณ„: ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ฐ€๋ฅด๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜์˜ ๋ณด์•ˆ ์œ ๋ฆฌ๋ฒฝ ์›๋ฆฌ๋ฅผ ํŒŒํ—ค์น˜๊ณ , ๋ฏธ๋“ค์›จ์–ด๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ ์ „์ฒด์˜ ์ง„์ž…์ ๊ณผ ๊ถŒํ•œ์„ ์™„๋ฒฝํžˆ ํ†ต์ œํ•˜๋Š” ์ตœ์ข… ๋ฐฉ์–ด์„ ์„ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„(Query)์™€ ํด๋ผ์ด์–ธํŠธ(Zustand) ์ƒํƒœ๋ฅผ 0.1์ดˆ์˜ ์˜ค์ฐจ ์—†์ด ๋™๊ธฐํ™”ํ•˜๊ณ  ์‹ถ์€ ๋ถ„

๊ตฌ์กฐํ™” ๋ฐ์ดํ„ฐ(JSON-LD) ์ฃผ์ž…์œผ๋กœ ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ƒ๋‹จ ๋…ธ์ถœ์„ ์žฅ์•…ํ•˜๊ณ  ์‹ถ์€ ๋ถ„


๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์šด '์‹ค๋ฌด ํ‘œ์ค€ ํด๋” ๊ตฌ์กฐ'๋ฅผ ๋ฐฐ์šฐ๊ณ  ์‹ถ์€ ๋ถ„

์ง€๊ธ‹์ง€๊ธ‹ํ•œ ํ•˜์ด๋“œ๋ ˆ์ด์…˜ ์—๋Ÿฌ์˜ ์›์ธ์„ ํŒŒํ—ค์ณ ์™„๋ฒฝํ•˜๊ฒŒ ๋ฐฉ์–ดํ•˜๊ณ  ์‹ถ์€ ๋ถ„

์ง€๊ฒจ์šด CORS ์—๋Ÿฌ๋ฅผ ์ž์ฒด ํ”„๋ก์‹œ ์„œ๋ฒ„ ๊ตฌ์ถ•์œผ๋กœ ์Šค์Šค๋กœ ํ•ด๊ฒฐํ•˜๊ณ  ์‹ถ์€ ๋ถ„


์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์™€ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฌผ๋ฆฌ์  ๊ฒฝ๊ณ„๋ฅผ ์™„๋ฒฝํžˆ ํ†ต์ œํ•˜๊ณ  ์‹ถ์€ ๋ถ„

๋ฒˆ๋“ค ๋ถ„์„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทผ๊ฑฐ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์šฉ๋Ÿ‰์„ 100KB ๋ฏธ๋งŒ์œผ๋กœ ๊นŽ๊ณ  ์‹ถ์€ ๋ถ„


JWT์™€ ๋ณด์•ˆ ์ฟ ํ‚ค๋ฅผ ํ™œ์šฉํ•ด ํ•ด์ปค๊ฐ€ ๋šซ์„ ์ˆ˜ ์—†๋Š” ์ฒ ๋ฒฝ ์ธ์ฆ๋ง์„ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๋ถ„


"๋‹จ์ˆœ ์ฝ”๋”"์—์„œ "ํ’€์Šคํƒ ์•„ํ‚คํ…ํŠธ"๋กœ ํ•œ ๋‹จ๊ณ„ ๋” ๋„์•ฝํ•˜๊ณ  ์‹ถ์€ ๊ฐœ๋ฐœ์ž

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

  • ๋ฐ์ดํ„ฐ ์œ ์‹ค ๋ฐ ์ƒํƒœ ๋ถˆ์ผ์น˜: ์ƒˆ๋กœ๊ณ ์นจ๋งŒ ํ•˜๋ฉด ์‚ฌ๋ผ์ง€๋Š” ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ฐ์ดํ„ฐ์™€ ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ๋ฐ์ดํ„ฐ ์‹ฑํฌ ๋ฌธ์ œ๋กœ ๊ณ ํ†ต๋ฐ›๋Š” ๋ถ„


  • ํ•˜์ด๋“œ๋ ˆ์ด์…˜(Hydration) ์ •๋ณต: ์ง€๊ธ‹์ง€๊ธ‹ํ•œ ํ•˜์ด๋“œ๋ ˆ์ด์…˜ ์—๋Ÿฌ์˜ ๊ทผ๋ณธ ์›์ธ์„ ๋ชฐ๋ผ ๊ตฌ๊ธ€๋ง๊ณผ ์‚ฝ์งˆ์— ์ˆ˜ ์‹œ๊ฐ„์„ ํ—ˆ๋น„ํ•˜๊ณ  ๊ณ„์‹  ๋ถ„


  • ์ƒํƒœ ๊ด€๋ฆฌ ์„ค๊ณ„ ๊ธฐ์ค€: ์„œ๋ฒ„ ์ƒํƒœ(TanStack Query)์™€ ์ „์—ญ ์ƒํƒœ(Zustand)๋ฅผ ์–ธ์ œ, ์–ด๋–ป๊ฒŒ ๊ฒฐํ•ฉํ•ด์•ผ ํ• ์ง€ ๋ช…ํ™•ํ•œ ์„ค๊ณ„ ์ฒ ํ•™์ด ํ•„์š”ํ•œ ๋ถ„


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


  • ์ปดํฌ๋„ŒํŠธ ๊ฒฝ๊ณ„ ํ™•๋ฆฝ: ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์™€ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ์˜ ์ฐจ์ด๋ฅผ ๋ชฐ๋ผ ๋ฌด์ž‘์ • 'use client'๋งŒ ๋‚จ๋ฐœํ•˜๋ฉฐ ํƒ€ํ˜‘ ์ค‘์ธ ๊ฐœ๋ฐœ์ž


  • ์„ฑ๋Šฅ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ์ˆ˜์ˆ : "๋А๋ฆฐ ๊ฒƒ ๊ฐ™๋‹ค"๋Š” ์ง์ž‘ ๋Œ€์‹ , ํ”„๋กœํŒŒ์ผ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทผ๊ฑฐ๋กœ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ๊ตฌ๊ฐ„์„ ์ •ํ™•ํžˆ ์ง€๋ชฉํ•˜๊ณ  ๊ฐœ์„ ํ•˜๊ณ  ์‹ถ์€ ๋ถ„


  • ๊ทนํ•œ์˜ ๋ฒˆ๋“ค ๋‹ค์ด์–ดํŠธ: Turbopack๊ณผ ๋™์  ์ž„ํฌํŠธ๋ฅผ ํ™œ์šฉํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ดˆ๊ธฐ ๋กœ๋“œ ์šฉ๋Ÿ‰์„ 100KB ๋ฏธ๋งŒ์œผ๋กœ ๊นŽ์•„๋ณด๊ณ  ์‹ถ์€ ๋ถ„


  • ์—”์ง€๋‹ˆ์–ด๋ง ๊ธฐ๋ฐ˜ SEO: ๋‹จ์ˆœ ๋ฉ”ํƒ€ํƒœ๊ทธ ์„ค์ •์„ ๋„˜์–ด JSON-LD ๊ตฌ์กฐํ™” ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์ฃผ์ž…ํ•ด ๊ฒ€์ƒ‰ ์—”์ง„ ์ƒ๋‹จ ๋…ธ์ถœ์„ ์žฅ์•…ํ•˜๊ณ  ์‹ถ์€ ๋ถ„


  • ๋„คํŠธ์›Œํฌ ํ†ต์ œ๊ถŒ ํ™•๋ณด: CORS ์—๋Ÿฌ์˜ ๋ฒฝ์— ๊ฐ€๋กœ๋ง‰ํ˜€ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž์˜ API ์ˆ˜์ •๋งŒ ๊ฐ„์ ˆํžˆ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ๊ฐœ๋ฐœ์ด ๋ฉˆ์ถฐ์žˆ๋Š” ๋ถ„


  • ๋ณด์•ˆ ์ธ์ฆ ์‹œ์Šคํ…œ ๊ตฌ์ถ•: JWT ํ† ํฐ๊ณผ ์„ธ์…˜์„ ์–ด๋””์— ์ €์žฅํ•ด์•ผ ํ•ดํ‚น(XSS, CSRF)์œผ๋กœ๋ถ€ํ„ฐ ๊ฐ€์žฅ ์•ˆ์ „ํ•œ์ง€ ์‹ค๋ฌด์ ์ธ ์ •๋‹ต์ด ํ•„์š”ํ•œ ๋ถ„


  • ์ฒ ํ†ต ๋ณด์•ˆ๋ง ์„ค๊ณ„: ์ „์—ญ ํ”„๋ก์‹œ์™€ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ํ™œ์šฉํ•ด API ํ‚ค ๋…ธ์ถœ ์—†์ด ์™ธ๋ถ€ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ๋ณด์•ˆ๋ง์„ ๊ตฌ์ถ•ํ•  ๋ถ„


  • ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต(DAL) ์„ค๊ณ„: ์„œ๋ฒ„ ๋‚ด๋ถ€์˜ ๋ฏผ๊ฐํ•œ ์ •๋ณด๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋กœ ์œ ์ถœ๋˜๋Š” ์‚ฌ๊ณ ๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ๋ณด์•ˆ ๊ณ„์ธต์„ ๋‘ํ…๊ฒŒ ์„ค๊ณ„ํ•˜๊ณ  ์‹ถ์€ ๋ถ„


  • ๊ณ ๊ธ‰ ์‹ค๋ฌด UI ๊ตฌํ˜„: ๋ฌดํ•œ ์Šคํฌ๋กค์ด๋‚˜ ๋‚™๊ด€์  ์—…๋ฐ์ดํŠธ(Optimistic UI) ๋“ฑ ๋ณต์žกํ•œ ๊ธฐ๋Šฅ์„ ๋กœ๋”ฉ ์ง€์—ฐ ์—†์ด ๋งค๋„๋Ÿฝ๊ฒŒ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์€ ๋ถ„


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


  • ์ƒ์šฉ ์„œ๋น„์Šค ์ˆ˜์ค€์˜ ๊ฒฐ๊ณผ๋ฌผ: Next.js 16๊ณผ React 19์˜ ์ตœ์‹  ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ด '์ง„์งœ ์ƒ์šฉ ์„œ๋น„์Šค' ์ˆ˜์ค€์˜ ์™„์„ฑ๋„๋ฅผ ์†๋์œผ๋กœ ์ฆ๋ช…ํ•˜๊ณ  ์‹ถ์€ ๋ถ„


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

  1. ํ†ตํ•ฉ ์ƒํƒœ ์—”์ง„ ๊ตฌ์ถ•: TanStack Query v5์™€ Zustand๋ฅผ ๊ฒฐํ•ฉํ•ด ์„œ๋ฒ„์™€ ๋ธŒ๋ผ์šฐ์ € ์‚ฌ์ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ 0.1์ดˆ์˜ ์˜ค์ฐจ ์—†์ด ๋™๊ธฐํ™”ํ•˜๋Š” ๋ฌด๊ฒฐ์  ๋ฐ์ดํ„ฐ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ํ•˜์ด๋“œ๋ ˆ์ด์…˜ ์ •๋ณต: Next.js์˜ ๊ณ ์งˆ์ ์ธ ํ•˜์ด๋“œ๋ ˆ์ด์…˜(Hydration) ์—๋Ÿฌ๋ฅผ ์›๋ฆฌ์ ์œผ๋กœ ๋ถ„์„ํ•˜๊ณ , ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ์˜ ์ •์ฒด์„ฑ์„ ์ผ์น˜์‹œํ‚ค๋Š” ์™„๋ฒฝํ•œ ๋ Œ๋”๋ง ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  3. ์‹ค๋ฌด ํ‘œ์ค€ ํด๋” ์„ค๊ณ„: ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•œ FSD ์ง€ํ–ฅํ˜• ํด๋” ๊ตฌ์กฐ๋ฅผ ํ™•๋ฆฝํ•˜๊ณ , ์„œ๋ฒ„ ์ „์šฉ(Server-only) ๋ชจ๋“ˆ์˜ ์œ ์ถœ์„ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๊ฒฉ๋ฆฌํ•˜์—ฌ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.

  4. 100KB ๋ฒˆ๋“ค ๋‹ค์ด์–ดํŠธ: ๋ฒˆ๋“ค ๋ถ„์„๊ธฐ(experimental-analyze)๋ฅผ ํ™œ์šฉํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ดˆ๊ธฐ ๋กœ๋“œ ์šฉ๋Ÿ‰์„ 100KB ๋ฏธ๋งŒ์œผ๋กœ ๊นŽ์•„๋‚ด๋Š” ๊ทนํ•œ์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์„ ์‹ค๋ฌด์— ์ฆ‰์‹œ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  5. ๋ฆฌ์น˜ ์Šค๋‹ˆํŽซ SEO: ๋‹จ์ˆœ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋„˜์–ด JSON-LD ๊ตฌ์กฐํ™” ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ์ž…ํ•˜์—ฌ ๊ตฌ๊ธ€ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์— ๋ณ„์ ๊ณผ ๊ฐ€๊ฒฉ์ด ํ‘œ์‹œ๋˜๋Š” ํ•˜์ด์—”๋“œ ๋งˆ์ผ€ํŒ… ์—”์ง€๋‹ˆ์–ด๋ง์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  6. ์ž์ฒด ํ”„๋ก์‹œ ์„œ๋ฒ„ ๊ตฌ์ถ•: ๋ฐฑ์—”๋“œ ์ˆ˜์ • ์—†์ด๋„ ์ „์—ญ ํ”„๋ก์‹œ(proxy.ts)๋ฅผ ๊ตฌ์ถ•ํ•˜์—ฌ CORS ์—๋Ÿฌ๋ฅผ ์Šค์Šค๋กœ ํ•ด๊ฒฐํ•˜๊ณ  ๋ฏผ๊ฐํ•œ API ํ‚ค๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ˆจ๊ธฐ๋Š” ๋„คํŠธ์›Œํฌ ํ†ต์ œ๊ถŒ์„ ์ฅก๋‹ˆ๋‹ค.

  7. ์ฒ ๋ฒฝ ๋ณด์•ˆ ์„ธ์…˜ ๊ด€๋ฆฌ: JWT ์„ธ์…˜๊ณผ 5์ค‘ ์ž๋ฌผ์‡  ๋ณด์•ˆ ์ฟ ํ‚ค(httpOnly, SameSite ๋“ฑ)๋ฅผ ์กฐํ•ฉํ•ด ํ•ด์ปค๊ฐ€ ์ ˆ๋Œ€ ํ›”์น  ์ˆ˜ ์—†๋Š” ์•ˆ์ „ํ•œ ์ธ์ฆ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

  8. DAL/DTO ๋ณด์•ˆ ํŒจํ„ด: ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต(DAL)๊ณผ ๋ฐ์ดํ„ฐ ์ „์†ก ๊ฐ์ฒด(DTO) ํŒจํ„ด์„ ์ ์šฉํ•ด ์„œ๋ฒ„ ๋‚ด๋ถ€์˜ ๋ฏผ๊ฐํ•œ ์ •๋ณด๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋กœ ์œ ์ถœ๋˜๋Š” ๊ฒƒ์„ ์›์ฒœ ๋ด‰์‡„ํ•ฉ๋‹ˆ๋‹ค.

  9. ํ•˜์ด์—”๋“œ UX ๊ตฌํ˜„: Server Actions์™€ ์—ฐ๋™๋œ ๋‚™๊ด€์  ์—…๋ฐ์ดํŠธ(Optimistic UI)๋ฅผ ํ†ตํ•ด ๋„คํŠธ์›Œํฌ ์ง€์—ฐ ์ค‘์—๋„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฆ‰๊ฐ์ ์ธ ๋ฐ˜์‘์„ ์ฃผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  10. ๋นŒ๋“œ ํŒŒ์ดํ”„๋ผ์ธ ํŠœ๋‹: ์ฐจ์„ธ๋Œ€ ๋ฒˆ๋“ค๋Ÿฌ Turbopack์˜ ํŠน์„ฑ์„ ์™„๋ฒฝํžˆ ์ดํ•ดํ•˜๊ณ  ์ตœ์ ํ™”๋œ ๋นŒ๋“œ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•˜์—ฌ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๋น„์•ฝ์ ์œผ๋กœ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

  11. ๋ฏธ๋””์–ด ๋ฐ ์Šคํฌ๋ฆฝํŠธ ํ†ต์ œ: ์ฐจ์„ธ๋Œ€ ์ด๋ฏธ์ง€ ํฌ๋งท(AVIF)๊ณผ ํŒŒ์‚ฌ๋“œ(Facade) ํŒจํ„ด์„ ํ™œ์šฉํ•ด ๋ฌด๊ฑฐ์šด ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ ์œ ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

  12. ์ง€๋Šฅํ˜• ๋ฏธ๋“ค์›จ์–ด ์„ค๊ณ„: ๋ฏธ๋“ค์›จ์–ด๋ฅผ ํ™œ์šฉํ•ด ์ ‘์† ๊ธฐ๊ธฐ๋‚˜ ๊ถŒํ•œ์— ๋”ฐ๋ผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ผ์šฐํŒ…์„ ๋ถ„๊ธฐํ•˜๊ณ  ๋ณด์•ˆ ํ•„ํ„ฐ๋ฅผ ๊ฑฐ๋Š” ๋™์  ์ œ์–ด ์‹œ์Šคํ…œ์„ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค.

  13. ๋ฌด๊ฒฐ์  ๋ฐฐํฌ ์ „๋žต: ํ™˜๊ฒฝ ๋ณ€์ˆ˜์˜ ๋ณด์•ˆ ์œ ๋ฆฌ๋ฒฝ(NEXT_PUBLIC_) ์›๋ฆฌ๋ฅผ ํŒŒ์•…ํ•˜์—ฌ ์–ด๋–ค ํ˜ธ์ŠคํŒ… ํ™˜๊ฒฝ์—์„œ๋„ ์‹œํฌ๋ฆฟ ํ‚ค ์œ ์ถœ ์—†๋Š” ์•ˆ์ „ํ•œ ๋ฐฐํฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  14. ์˜๊ตฌ์  ์ƒํƒœ ๋ณด์กด: ๋ธŒ๋ผ์šฐ์ € ์Šคํ† ๋ฆฌ์ง€์™€ ์ „์—ญ ์ƒํƒœ๋ฅผ ๋™๊ธฐํ™”ํ•˜์—ฌ ์ƒˆ๋กœ๊ณ ์นจ์ด๋‚˜ ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ ํ›„์—๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์‹ค๋˜์ง€ ์•Š๋Š” ๊ฐ•๋ ฅํ•œ ์ƒํƒœ ์œ ์ง€ ์‹œ์Šคํ…œ์„ ๊ฐ–์ถฅ๋‹ˆ๋‹ค.

  15. ์•„ํ‚คํ…ํŠธ์˜ ์‹œ์•ผ ํ™•๋ณด: ๋‹จ์ˆœํ•œ "๋Œ์•„๊ฐ€๋Š” ์ฝ”๋“œ"๋ฅผ ๋„˜์–ด ์„ฑ๋Šฅ ์ง€ํ‘œ์™€ ๋ณด์•ˆ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ณตํ•™์  ๊ทผ๊ฑฐ๋กœ ์ œ์‹œํ•˜๋Š” ์‹œ๋‹ˆ์–ด๊ธ‰ '๋ฆฌ์•กํŠธ ์—”์ง€๋‹ˆ์–ด'๋กœ ๊ฑฐ๋“ญ๋‚ฉ๋‹ˆ๋‹ค.

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

์‹ค์Šต ํ™˜๊ฒฝ

  • 1. ์šด์˜ ์ฒด์ œ (OS)

    • Windows 10/11, macOS (Intel/Apple Silicon), Linux ๋ชจ๋‘ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    • ๋„คํŠธ์›Œํฌ ๋ณด์•ˆ ๋ฐ ํ”„๋ก์‹œ ์‹ค์Šต์„ ์œ„ํ•ด ํ„ฐ๋ฏธ๋„ ํ™˜๊ฒฝ(Git Bash, Zsh, PowerShell ๋“ฑ) ์‚ฌ์šฉ์ด ์›ํ™œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    2. ๋Ÿฐํƒ€์ž„ ๋ฐ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €

    • Node.js: v22.x (LTS) ์ด์ƒ ๊ถŒ์žฅ (Next.js 16 ๋ฐ React 19 ๊ธฐ๋Šฅ์„ ์™„๋ฒฝํžˆ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•จ)

    • Package Manager: pnpm ๊ฐ•๋ ฅ ๊ถŒ์žฅ (๋น ๋ฅธ ์„ค์น˜ ์†๋„์™€ ํšจ์œจ์ ์ธ ์šฉ๋Ÿ‰ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋ฉฐ, npm/yarn๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.)

    3. ๊ฐœ๋ฐœ ๋„๊ตฌ (IDE)

    • VS Code (Visual Studio Code): ์ตœ์‹  ๋ฒ„์ „ ๊ถŒ์žฅ

    • ํ•„์ˆ˜ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ: ESLint, Prettier, Tailwind CSS IntelliSense, Client-side/Server-side ๊ตฌ๋ถ„์„ ์œ„ํ•œ ํ”„๋ฆฌ์ฆ˜ ํ…Œ๋งˆ ๋“ฑ

    4. ์ฃผ์š” ๊ธฐ์ˆ  ์Šคํƒ (Core Stack)

    • Framework: Next.js 16 (App Router)

    • Library: React 19, TypeScript

    • State Management: TanStack Query v5+, Zustand

    • Styling: Tailwind CSS

    5. ๋ธŒ๋ผ์šฐ์ € ๋ฐ ๋””๋ฒ„๊น…

    • Google Chrome: ์„ฑ๋Šฅ ์ธก์ •(Profiler), ๋„คํŠธ์›Œํฌ ํƒญ ๋ถ„์„, ๋ฒˆ๋“ค ๋ถ„์„๊ธฐ ์‹คํ–‰์„ ์œ„ํ•ด ๋ฉ”์ธ ๋ธŒ๋ผ์šฐ์ €๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    • React DevTools & TanStack Query DevTools: ๊ฐ•์˜ ๋‚ด์—์„œ ์ƒํƒœ ํ๋ฆ„์„ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ์„ค์น˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

    6. ์ˆ˜๊ฐ• ์ „ ๊ถŒ์žฅ ์ง€์‹

    • Part 1, 2 ์ด์ˆ˜ ๊ถŒ์žฅ: Next.js์˜ ๊ธฐ๋ณธ์ ์ธ ๋ Œ๋”๋ง ์›๋ฆฌ์™€ App Router์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ณ  ๊ณ„์…”์•ผ ์›ํ™œํ•œ ์ˆ˜๊ฐ•์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    • JavaScript/TypeScript: ํ™”์‚ดํ‘œ ํ•จ์ˆ˜, ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ(Async/Await), ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜ ๋“ฑ ๊ธฐ์ดˆ ๋ฌธ๋ฒ•์— ์ต์ˆ™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


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

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

  • Next.js๋กœ ๋„˜์–ด์™”์ง€๋งŒ ์—ฌ์ „ํžˆ useEffect์™€ useState๋กœ API๋ฅผ ํ˜ธ์ถœํ•˜๋ฉฐ ๋ ˆ์ด์Šค ์ปจ๋””์…˜ ๋ฒ„๊ทธ์— ์‹œ๋‹ฌ๋ฆฌ๋Š” ๋ถ„

  • ๋นจ๊ฐ„์ƒ‰ Hydration Mismatch ์—๋Ÿฌ ์ฐฝ๋งŒ ๋ณด๋ฉด ๊ฐ€์Šด์ด ์ฒ ๋  ๋‚ด๋ ค์•‰๊ณ  ์›์ธ์„ ๋ชฐ๋ผ ๊ตฌ๊ธ€๋ง๋งŒ ์ˆ˜์‹œ๊ฐ„์งธ์ธ ๋ถ„

  • ์ƒˆ๋กœ๊ณ ์นจ๋งŒ ํ•˜๋ฉด ๊ธฐ๊ป ๋‹ด์•„๋‘” ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค ๋‚ ์•„๊ฐ€์„œ ๋ฉ˜ํƒˆ์ด ๋ถ•๊ดด๋œ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž

  • ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์™€ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์–ด๋””์„œ ์–ด๋–ป๊ฒŒ ๋‚˜๋ˆ ์•ผ ํ• ์ง€ ๋ชฐ๋ผ ์ตœ์ƒ๋‹จ์— ๋ฌด์ž‘์ • 'use client'๋ฅผ ๋‚จ๋ฐœํ•˜๋Š” ๋ถ„

  • Redux์˜ ๋ฌด๊ฑฐ์šด ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ์— ์ง€์ณ, ๊ฐ€๋ณ๊ณ  ๊ฐ•๋ ฅํ•œ Zustand๋กœ ๊ฐˆ์•„ํƒ€๊ณ  ์‹ถ์€๋ฐ SSR ์ ์šฉ๋ฒ•์„ ๋ชจ๋ฅด๋Š” ๋ถ„

  • ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ๋กœ๋”ฉ ์Šคํ”ผ๋„ˆ ์—†์ด ์ฆ‰๊ฐ์ ์œผ๋กœ ํ™”๋ฉด์ด ๋ฐ”๋€Œ๋Š” ๋‚™๊ด€์  ์—…๋ฐ์ดํŠธ(Optimistic UI)๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์€ ๋ถ„

  • Lighthouse ์„ฑ๋Šฅ ์ ์ˆ˜๊ฐ€ ๋ฐ”๋‹ฅ์„ ๊ธฐ๊ณ , ๋ฌด๊ฑฐ์šด ๋ฒˆ๋“ค ์‚ฌ์ด์ฆˆ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๊ฐ€ ์ฒ˜์ฐธํ•ด ์ตœ์ ํ™”์˜ ์••๋ฐ•์„ ๋ฐ›๋Š” ๊ฐœ๋ฐœ์ž

  • ๋ฌดํ•œ ์Šคํฌ๋กค์„ ๊ตฌํ˜„ํ•˜๊ธด ํ–ˆ๋Š”๋ฐ, ์Šคํฌ๋กค์„ ๋‚ด๋ฆด์ˆ˜๋ก ๋ธŒ๋ผ์šฐ์ € ๋”(DOM) ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ„ฐ์งˆ ๊ฒƒ ๊ฐ™์•„ ์ฐ์ฐํ•จ์„ ๋А๋ผ๋Š” ๋ถ„

  • ๊ฒ€์ƒ‰ ์—”์ง„(SEO)์— ์šฐ๋ฆฌ ์„œ๋น„์Šค๊ฐ€ ๋…ธ์ถœ๋˜์ง€ ์•Š์•„ ๋งˆ์ผ€ํŒ… ํŒ€์˜ ์งˆํƒ€๋ฅผ ๋ฐ›์œผ๋ฉฐ JSON-LD ์ฃผ์ž…์„ ์‹œ๋„ํ•˜๋ ค๋Š” ๋ถ„

  • CORS ์—๋Ÿฌ์˜ ๋ถ‰์€ ์žฅ๋ฒฝ์— ๊ฐ€๋กœ๋ง‰ํ˜€ ์™ธ๋ถ€ API ์—ฐ๋™์„ ํฌ๊ธฐํ•˜๊ณ  ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋งŒ ์• ํƒ€๊ฒŒ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ถ„

  • ๋ฏธ๋“ค์›จ์–ด(proxy.ts)๋ฅผ ํ™œ์šฉํ•ด ๋น„๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž๋ฅผ ํŠ•๊ฒจ๋‚ด๊ณ , ์ ‘์† ๊ธฐ๊ธฐ๋ณ„(๋ชจ๋ฐ”์ผ/PC)๋กœ ๋™์  ๋ผ์šฐํŒ…์„ ๋ถ„๊ธฐํ•˜๊ณ  ์‹ถ์€ ๋ถ„

  • JWT ํ† ํฐ์„ ์–ด๋””์— ์–ด๋–ป๊ฒŒ ์ €์žฅํ•ด์•ผ ํ•ดํ‚น(XSS, CSRF)์œผ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•œ์ง€ ๋ชฐ๋ผ ๋ฉฐ์น ์งธ ์•„ํ‚คํ…์ฒ˜๋งŒ ๊ณ ๋ฏผ ์ค‘์ธ ๋ถ„

  • App Router์˜ ๋ณ‘๋ ฌ/๊ฐ€๋กœ์ฑ„๊ธฐ ๋ผ์šฐํŒ… ๊ณต์‹ ๋ฌธ์„œ๋ฅผ 10๋ฒˆ ์ฝ์–ด๋„ ์‹ค๋ฌด์—์„œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ชจ๋‹ฌ๋กœ ์–ด๋–ป๊ฒŒ ์—ฎ์–ด๋‚ด๋Š”์ง€ ๊ฐ์ด ์•ˆ ์˜ค๋Š” ๋ถ„

  • ํŒ€ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด์„œ ์ŠคํŒŒ๊ฒŒํ‹ฐ ์ฝ”๋“œ๊ฐ€ ๋˜์–ด๊ฐ€๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์‹ค๋ฌด ํ‘œ์ค€ ํด๋” ๊ตฌ์กฐ๋กœ ๊น”๋”ํ•˜๊ฒŒ ๋ฆฌํŒฉํ† ๋งํ•˜๊ณ  ์‹ถ์€ ๋ฆฌ๋”

  • ๋‹จ์ˆœํžˆ '๋Œ์•„๊ฐ€๋Š” ์ฝ”๋“œ'๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋„˜์–ด, ์ƒ์šฉ ์„œ๋น„์Šค ์ˆ˜์ค€์˜ ์„ฑ๋Šฅ๊ณผ ๋ณด์•ˆ์„ ๊ฐ–์ถ˜ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์„ค๊ณ„๋ฅผ ๋ฐฐ์šฐ๊ณ  ์‹ถ์€ ๋ถ„

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

  • React ํ•ต์‹ฌ ๊ฐœ๋… (Hooks, ์ƒํƒœ ๊ด€๋ฆฌ ํ๋ฆ„, ์ปดํฌ๋„ŒํŠธ ์ƒ๋ช…์ฃผ๊ธฐ)์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ดํ•ด

  • Next.js App Router ๊ธฐ์ดˆ (๋ณธ ๊ฐ•์˜์˜ Part 1, Part 2 ๋‚ด์šฉ์„ ์ˆ˜๊ฐ•ํ•˜์…จ๊ฑฐ๋‚˜, Server/Client Component์˜ ๊ธฐ๋ณธ์ ์ธ ์ฐจ์ด๋ฅผ ์•Œ๊ณ  ๊ณ„์‹  ๋ถ„)

  • ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (async/await, Promise, fetch API)์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ง€์‹

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

1,601

๋ช…

์ˆ˜๊ฐ•์ƒ

87

๊ฐœ

์ˆ˜๊ฐ•ํ‰

34

๊ฐœ

๋‹ต๋ณ€

4.8

์ 

๊ฐ•์˜ ํ‰์ 

17

๊ฐœ

๊ฐ•์˜

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

์šฐ๋ฆฌ๋™๋„ค์ฝ”๋”ฉ ์ŠคํŠœ๋””์˜ค๋Š” ์นด๋„ค๊ธฐ ๋ฉœ๋ก , ์›Œ์‹ฑํ„ด, ํ† ๋ก ํ† , ์›Œํ„ฐ๋ฃจ ๋“ฑ ๋ถ๋ฏธ์˜ ์ฃผ์š” ๋Œ€ํ•™์—์„œ ์ปดํ“จํ„ฐ๊ณตํ•™์„ ์ „๊ณตํ•˜๊ณ , 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.

๋”๋ณด๊ธฐ

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

์ „์ฒด

78๊ฐœ โˆ™ (5์‹œ๊ฐ„ 38๋ถ„)

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

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

์ˆ˜๊ฐ•ํ‰

์ „์ฒด

2๊ฐœ

5.0

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

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

    ์ˆ˜๊ฐ•ํ‰ 6

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    ์ˆ˜์ •๋จ

    5

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

    ๋•๋ถ„์— ์ •๋ง Next.js์˜ ์‚ฌ์šฉ๋ฒ•์™€ ๊ณ ๊ธ‰ ํŒ์— ๋Œ€ํ•ด ๋งŽ์ด ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ˜น์‹œ ์ด๊ฒŒ ๋งˆ์ง€๋ง‰ ์ฑ•ํ„ฐ์ผ๊นŒ์š”?

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

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

    • ์•—.. ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ข‹์€ ๊ธฐํšŒ๋ฅผ ์ฃผ์…จ๋Š”๋ฐ ใ… ใ…  ์ด๋ฏธ ๋งˆ์Šคํ„ฐ ๊ฐ•์˜๋“ค์€ ๋‹ค ๊ตฌ๋งค๋ฅผ ํ•œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ฐ•์˜๊ฐ€ ๋‚˜์˜จ๋‹ค๋ฉด ๊ผญ ์ฑ™๊ฒจ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค ์ข‹์€ ๊ฐ•์˜ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

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

    ์ˆ˜๊ฐ•ํ‰ 2

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    5

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

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

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

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

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

    ์–ผ๋ฆฌ๋ฒ„๋“œ ํ• ์ธ ์ค‘

    โ‚ฉ3,256

    74%

    โ‚ฉ99,000