์ธํ”„๋Ÿฐ ํด๋ก ์ฝ”๋”ฉ Part 1: Next.js์™€ NestJS๋กœ ์‹œ์ž‘ํ•˜๋Š” ์‹ค์ „ ํ”„๋กœ์ ํŠธ

๐Ÿ”ฅ ๊ฐ•์˜ ๋“ฑ๋ก๋ถ€ํ„ฐ ์˜์ƒ ์—…๋กœ๋“œ๊นŒ์ง€, ์ง€์‹๊ณต์œ ์ž ๊ธฐ๋Šฅ์„ ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„ํ•ด๋ณด๋Š” ์‹ค์ „ ํ’€์Šคํƒ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค. Next.js 15์™€ NestJS๋ฅผ ํ™œ์šฉํ•ด ๊ฐ•์˜ ์ƒ์„ฑ, ์ปค๋ฆฌํ˜๋Ÿผ ๊ตฌ์„ฑ, ์ธ๋„ค์ผ ๋ฐ ์˜์ƒ ์—…๋กœ๋“œ, ์ƒ์„ธ ์†Œ๊ฐœ ์ž‘์„ฑ๊นŒ์ง€ ์‹ค์ œ ์ธํ”„๋Ÿฐ ํ๋ฆ„์„ ๋”ฐ๋ผ ๋งŒ๋“ค๋ฉฐ, Prisma ๋ชจ๋ธ๋ง, JWT ์ธ์ฆ, S3 + CloudFront ์—…๋กœ๋“œ, Swagger API ์„ค๊ณ„ ๋“ฑ ์‹ค๋ฌด์— ๊ฐ€๊นŒ์šด ๊ฒฝํ—˜์„ ์Œ“์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(4.8) ์ˆ˜๊ฐ•ํ‰ 40๊ฐœ

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

๋‚œ์ด๋„ ์ค‘๊ธ‰์ด์ƒ

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

์‹ค์Šต ์ค‘์‹ฌ
์‹ค์Šต ์ค‘์‹ฌ
์ธํ”„๋Ÿฐ
์ธํ”„๋Ÿฐ
์‹ค์Šต ์ค‘์‹ฌ
์‹ค์Šต ์ค‘์‹ฌ
์ธํ”„๋Ÿฐ
์ธํ”„๋Ÿฐ
์นด์นด์˜ค
๋งˆ์ผ“์ปฌ๋ฆฌ
์ž‰์นด์ธํ„ฐ๋„ท
์‚ฌ๋žŒ์ธ
๋ฐฐ๋‹ฌ์˜๋ฏผ์กฑ

๋ฐฐ๋‹ฌ์˜๋ฏผ์กฑ

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

์นด์นด์˜ค
๋งˆ์ผ“์ปฌ๋ฆฌ
์ž‰์นด์ธํ„ฐ๋„ท
์‚ฌ๋žŒ์ธ
๋ฐฐ๋‹ฌ์˜๋ฏผ์กฑ

๋ฐฐ๋‹ฌ์˜๋ฏผ์กฑ

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

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

4.8

5.0

์น˜ํ˜„

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

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ํ•˜๊ณ  ์žˆ๊ณ , ๋ฐฑ์—”๋“œ๋„ ๋‘๋“œ๋ ค๋ณด๊ณ  ์‹ถ์—ˆ๋˜ ์ƒํƒœ์ธ๋ฐ, ๋กœํŽ€๋‹˜์˜ Next.js ํ’€์Šคํƒ ๊ฐ•์˜๋ฅผ ์ข‹๊ฒŒ ๋“ค์—ˆ๋˜ ๊ธฐ์–ต์— ์ˆ˜๊ฐ•ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ์ธํ”„๋Ÿฐ๊ฐ™์€์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๊ณ  ์‹ถ์–ด์„œ, ์ธํ”„๋Ÿฐ์˜ ๊ฐ•์˜๋ฐ์ดํ„ฐ๋“ค์„ ํฌ๋กค๋งํ•ด๋„ ๋˜๋ƒ๊ณ  ๊ณต์‹์ ์œผ๋กœ ๋ฌธ์˜ํ–ˆ๋‹ค๊ฐ€ ๋ฐ˜๋ ค๋‹นํ•˜๊ธฐ๋„ ํ–ˆ์—ˆ๋Š”๋ฐ, ์ œ ๋ฐ”๋žจ์„ ์ด๋ฒˆ ๊ฐ•์˜๋กœ ์ด๋ฃฐ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Nest.js๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ์‚ฌ๋žŒ์œผ๋กœ์„œ, ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด ์ด๋Ÿฐ ์‹์œผ๋กœ ๊ตฌ์„ฑํ•˜๋ฉด ๋˜๊ฒ ๋‹ค๋Š” ๊ฐ์„ ์žก์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ•์˜์—ˆ๊ณ , "์ธํ”„๋Ÿฐ ํ”„๋กœ๋•ํŠธ ๋‘˜๋Ÿฌ๋ณด๊ธฐ"๋ผ๋Š” ๊ธฐํš ๋ถ€๋ถ„๋„ ํฌํ•จ๋˜์–ด์žˆ์–ด ์•„ํ‚คํ…์ณ๋‚˜ ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ฏผํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Part1์—๋Š” ๋ฐฐํฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์•„์„œ ๋‹ค์†Œ ์•„์‰ฝ์ง€๋งŒ, ๋นจ๋ฆฌ Part2๊ฐ€ ๋‚˜์˜จ๋‹ค๋ฉด ๋ฐฐํฌ๊นŒ์ง€ ๊ณ๋“ค์ธ ์™„์„ฑ๋œ ํฌํŠธํด๋ฆฌ์˜ค๋ฅผ ๊ฐ€์ ธ๊ฐ€๊ณ  ์‹ถ๋„ค์š” ใ…Žใ…Ž

5.0

์ฐฌ์šฐ ์ด

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

์ €๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด ๊ณต๋ถ€ ์ค‘์ธ๋ฐ, ์ด์ „์— ๋กœํŽ€๋‹˜์˜ supabase ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ๋งŽ์€ ๋„์›€์ด ๋˜์–ด ์ด๋ฒˆ ํด๋ก ์ฝ”๋”ฉ ๊ฐ•์˜๋„ ์ˆ˜๊ฐ•ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•  ๋•Œ ๋ฐฑ์—”๋“œ ๋ถ„๊ป˜ API๋ฅผ ๋ฐ›์•„ ์Šค์›จ๊ฑฐ๋ฅผ ์ฐธ๊ณ ํ•ด ํ”„๋ก ํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ, ํ•ญ์ƒ ๋ฐฑ์—”๋“œ์—์„œ๋Š” ์–ด๋–ค ๋กœ์ง์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ํ˜๋Ÿฌ๊ฐ€๋Š”์ง€ ๊ถ๊ธˆํ–ˆ๋Š”๋ฐ, ์ด๋ฒˆ ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ๊ทธ ํ๋ฆ„์„ ์ง์ ‘ ๊ฒฝํ—˜ํ•ด๋ณผ ์ˆ˜ ์žˆ์–ด์„œ ์ •๋ง ์œ ์ตํ–ˆ์Šต๋‹ˆ๋‹ค. NestJS, Prisma ๋“ฑ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๊ธฐ์ˆ ๋„ ๋งŽ์•„ ์–ด๋ ค์šด ๋ถ€๋ถ„์ด ์žˆ์—ˆ์ง€๋งŒ, ๊ฐ•์‚ฌ๋‹˜์ด ์‹ค๋ฌด์—์„œ ์ž์ฃผ ์“ฐ๋Š” ์ตœ์‹  ๊ธฐ์ˆ ๋“ค์„ ์ž˜ ์„ค๋ช…ํ•ด์ฃผ์‹œ๊ณ  ๋…ธ์…˜์—๋„ ์ •๋ฆฌ๊ฐ€ ์ž˜ ๋˜์–ด ์žˆ์–ด ๋”ฐ๋ผ๊ฐ€๊ธฐ๊ฐ€ ์ˆ˜์›”ํ–ˆ์Šต๋‹ˆ๋‹ค. Shadcn UI, TailwindCSS, S3 ๋“ฑ ์—ฌ๋Ÿฌ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•ด๋ณด๋Š” ๊ณผ์ •๋„ ํฅ๋ฏธ๋กœ์› ๊ณ , ์‹ค๋ฌด์—์„œ ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š” ํŒ๊ณผ ๋…ธํ•˜์šฐ๋ฅผ ๋งŽ์ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ํ”„๋ก ํŠธ์™€ ๋ฐฑ์—”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐ๋˜๊ณ  ์ „์ฒด์ ์œผ๋กœ ์–ด๋–ค ๊ตฌ์กฐ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ณด๋ฉด์„œ ํ’€์Šคํƒ ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ์ดํ•ด๋„๊ฐ€ ํ™•์‹คํžˆ ๋†’์•„์กŒ์Šต๋‹ˆ๋‹ค. ํฌํŠธํด๋ฆฌ์˜ค๋กœ ํ™œ์šฉํ•  ๋งŒํ•œ ์™„์„ฑ๋„ ๋†’์€ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๋ถ„์ด๋‚˜, ์‹ค๋ฌด ์ง€ํ–ฅ์ ์ธ ํ’€์Šคํƒ ๊ฐœ๋ฐœ์„ ๋ฐฐ์šฐ๊ณ  ์‹ถ์€ ๋ถ„๋“ค์—๊ฒŒ ์ด ๊ฐ•์˜๋ฅผ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค!

5.0

cafe small house

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

๊ฐ•์˜๋ฅผ ๋‹ค ๋“ฃ๊ณ  ๋‹ค์‹œ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ผ๋‹จ ์ •๋ง ์ข‹์Šต๋‹ˆ๋‹ค ์ด์ „์—๋Š” ๊น”๋”ํ•œ ๊ฐ•์˜๊ตฌ๋‚˜ ์ •๋„๋กœ๋งŒ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ์–ป์–ด๊ฐ€๋Š”๊ฒŒ ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. ์ผ๋‹จ ์ €์—๊ฒŒ ์žˆ์–ด์„œ๋Š” hey-api๋ฅผ ํ†ตํ•ด์„œ ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๋ฐฑ์—”๋“œ ์ŠคํŽ™์„ ์ „๋‹ฌ ๋ฐ›์„์ˆ˜์žˆ๋Š”๊ฒƒ์„ ๋ฐฐ์›Œ์„œ ๋„ˆ๋ฌด ์ข‹์•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค ์†”์งํžˆ ์ด๊ฒƒ๋งŒ์œผ๋กœ๋„ ๊ฐ•์˜ ๊ฐ’์€ ๋‹ค ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š” ๋ฌผ๋ก  graphql, trpc ๋“ฑ ๊ทธ๋Ÿฐ ๋ฐฉ๋ฒ•๋“ค์ด ๋งŽ๊ฒ ์ง€๋งŒ ๊ฒฐ๊ตญ์—๋Š” ์ทจ์—…์„ ํ•˜๋ฉด ๋‹ค rest api ๋กœ๋งŒ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๊ทธ๋Ÿฐ ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ ์„œ๋กœ ์ผ์„ ์ค„์ผ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†๋‚˜ ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ์ข‹์€ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๊ฐ„๊ฑฐ ๊ฐ™๊ณ  next ์™€ nest์— ๋Œ€ํ•ด์„œ๋„ ์ œ๊ฐ€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋” ์ข‹์€๋ฐฉ๋ฒ•๋“ค์ด ์žˆ๊ตฌ๋‚˜ ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค€ ๊ฐ•์˜๋ผ์„œ ์ข‹์•˜๋˜๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

  • ์ตœ์‹  ํ’€์Šคํƒ ๊ฐœ๋ฐœ ํ๋ฆ„ (Next.js 15, NestJS, Prisma)

  • ํฌํŠธํด๋ฆฌ์˜ค๋กœ ํ™œ์šฉ ๊ฐ€๋Šฅํ•œ โ€˜๋‚˜๋งŒ์˜ ์ธํ”„๋Ÿฐโ€™ ํ”Œ๋žซํผ ์™„์„ฑ

  • ๊ฐ•์˜ ๋“ฑ๋ก, ์ˆ˜์ •, ์˜์ƒ ์—…๋กœ๋“œ, ์ปค๋ฆฌํ˜๋Ÿผ ํŽธ์ง‘ ๋“ฑ ์‹ค์„œ๋น„์Šค ๊ธฐ๋Šฅ ์ „๋ฐ˜ ๊ฐœ๋ฐœ

  • Shadcn UI + TailwindCSS + Cursor AI๋กœ ์‹ค๋ฌด ์ˆ˜์ค€์˜ ๊ฐ๊ฐ์ ์ธ UI ์ œ์ž‘

  • Swagger + OpenAPI ๊ธฐ๋ฐ˜ ์ž๋™ํ™”๋œ ๋ฐฑ์—”๋“œ ํ˜ธ์ถœ ๊ตฌ์กฐ ๊ตฌ์„ฑ

  • Prisma๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชจ๋ธ๋งํ•˜๊ณ  PostgreSQL ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ ์„ค๊ณ„ํ•˜๊ธฐ

  • S3 + CloudFront ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆฌ๋ฐ ์—…๋กœ๋“œ ์‹œ์Šคํ…œ ๊ตฌ์ถ•

๐Ÿš€

๊ตญ๋‚ด ์ตœ์ดˆ!

Next.js 15 + NestJS ํ’€์Šคํƒ ํด๋ก  ์ฝ”๋”ฉ ๊ฐ•์ขŒ

โœ‹ ์ž ๊น! ์ธํ”„๋Ÿฐ ํด๋ก ์ฝ”๋”ฉ ์ฑŒ๋ฆฐ์ง€ 2๊ธฐ ๋ชจ์ง‘์ค‘
โœ… ๋ชจ์ง‘๊ธฐ๊ฐ„ : 3/24 ~ 4/18
โœ… ์šฐ์ˆ˜ ์ˆ˜๋ฃŒ์ž 100% ํ™˜๊ธ‰

https://inf.run/bNpwg


์ด ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ๋ถ„์€



๊ฐ•๋ ฅํ•œ ํ’€์Šคํƒ ์กฐํ•ฉ์ธ NextJS, NestJS์™€

ํ•ซํ•œ ORM์ธ Prisma๋ฅผ ํ†ตํ•ด


๋‚˜๋งŒ์˜ ์ธํ”„๋Ÿฐ์„ ๋งŒ๋“ค์–ด๋ณด๋ฉด์„œ

ํƒ„ํƒ„ํ•œ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ์ง€๋‹Œ ํ’€์Šคํƒ ๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•ฉ๋‹ˆ๋‹ค!


โ€œ์ฐ๋จน์€ ์ด์ œ ๊ทธ๋งŒ! ์ง„์งœ ํ’€์Šคํƒ์„ ๊ฒฝํ—˜ํ•˜์„ธ์š”.โ€

๋‹จ ํ•˜๋‚˜์˜ ๊ฐ•์˜๋กœ ๊ธฐํš, ๊ฐœ๋ฐœ, ๋ฐฐํฌ๊นŒ์ง€ ์™„์„ฑํ•˜๋Š” ํ’€์Šคํƒ ์—ฌ์ •์„ ์‹œ์ž‘ํ•˜์„ธ์š”.

"Next.js + NestJS ์กฐํ•ฉ์œผ๋กœ ์‹ค๋ฌด์— ๊ฐ€๊นŒ์šด ์ธํ”„๋Ÿฐ ํ”Œ๋žซํผ์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ง์ ‘ ๋งŒ๋“ค์–ด๋ด…๋‹ˆ๋‹ค."

๐Ÿงฉโ€ฏโ€ฏNext.jsโ€ฏ+โ€ฏNestJSโ€ฏ = ๋‹จ์ผ ์–ธ์–ด ํ’€์Šคํƒ ์ตœ์ ์˜ ์กฐํ•ฉ

Next.jsโ€ฏ15๋Š” React ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ์— ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ ยท Appโ€ฏRouter ยท Serverโ€ฏActions๋ฅผ ๋”ํ•ด, ํ™”๋ฉด ๋ Œ๋”๋ง๋ถ€ํ„ฐ ๊ฐ„๋‹จํ•œ API๊นŒ์ง€ ํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค๋‹ˆ๋‹ค.

NestJS๋Š” ๊ฐ™์€ TypeScript๋กœ ์ž‘์„ฑ๋˜๋ฉฐ, ์˜์กด์„ฑ ์ฃผ์ž…๊ณผ ๋ชจ๋“ˆ์‹ ๊ตฌ์กฐ ๋•๋ถ„์— ํŒ€ ๊ทœ๋ชจ๊ฐ€ ์ปค์ ธ๋„ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์ˆ˜์›”ํ•œ ๋ฐฑ์—”๋“œ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‘ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ•จ๊ป˜ ์“ฐ๋ฉด UI์™€ ์„œ๋ฒ„๊ฐ€ ํ•˜๋‚˜์˜ ํƒ€์ž… ์ •์˜๋ฅผ ๊ณต์œ ํ•ด ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜๋ฅผ ์ค„์ด๊ณ , ๊ฐœ๋ฐœ์ž๋Š” ์–ธ์–ดยทํˆด์…‹ ์ „ํ™˜ ์—†์ด ํ”„๋ŸฐํŠธ์™€ ๋ฐฑ์—”๋“œ๋ฅผ ์˜ค๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”ฅ Next.js v15 ๐Ÿ”ฅ

๐Ÿ”ฅ Nest.js v10 ๐Ÿ”ฅ

๐Ÿค” ์™œโ€ฏ"์ธํ”„๋Ÿฐ ํด๋ก  ํ”„๋กœ์ ํŠธ" ์ธ๊ฐ€?

์ž‘์€ ์˜ˆ์ œ ์•ฑ์œผ๋กœ๋Š” ํ’€์Šคํƒ ํ•œ ์‚ฌ์ดํด์„ ์ œ๋Œ€๋กœ ๋ง›๋ณด๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ๋งŒ ๋˜๋Š” ๋ธ”๋กœ๊ทธ๋‚˜ ํˆฌ๋‘ ๋ฆฌ์ŠคํŠธ๋กœ๋Š” โ€œ์‹ค์ œ ์„œ๋น„์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ์›€์ง์ด๋Š”์ง€โ€ ํ”ผ๋ถ€๋กœ ๋А๋‚„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .

๊ทธ๋ž˜์„œ ์ €๋Š” ์ธํ”„๋Ÿฐ์˜ ํ•ต์‹ฌ ํ๋ฆ„์„ ๊ทธ๋Œ€๋กœ ์˜ฎ๊ฒจ ์˜จ ๋ฏธ๋‹ˆ ์ธํ”„๋Ÿฐ์„ ๋งŒ๋“ค๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.
ํšŒ์› ๊ด€๋ฆฌ๋ถ€ํ„ฐ ๊ฐ•์˜๋ฅผ ๋“ฑ๋กํ•˜๊ณ , ์ปค๋ฆฌํ˜๋Ÿผ์„ ํŽธ์ง‘ํ•˜๊ณ , ์˜์ƒ์„ S3์— ์˜ฌ๋ฆฐ ๋’ค CloudFront๋กœ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๋Š” ๊ณผ์ •์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ์„ค๊ณ„ โ†’ ์ธ์ฆ โ†’ ๋ฏธ๋””์–ด ์ฒ˜๋ฆฌ โ†’ ๊ถŒํ•œ ๊ด€๋ฆฌ๋ฅผ ํ•œ ๋ฒˆ์— ๊ฒฝํ—˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก Part 1 ์†Œ๊ฐœ

์ด๋ฒˆ Partโ€ฏ1 ๊ฐ•์ขŒ์—์„œ๋Š”

  • ํ”„๋ก ํŠธ์™€ ๋ฐฑ์—”๋“œ ํ”„๋กœ์ ํŠธ ์„ธํŒ…์„ ์ง„ํ–‰ํ•˜๊ณ  (Next.jsโ€ฏ15 ยท NestJS ยท Prisma ยท Docker)

  • Auth.js ๋ฅผ ํ™œ์šฉํ•ด์„œ JWT ์ธ์ฆ์„ ๊ตฌํ˜„ํ•œ ๋’ค

  • ์ง€์‹๊ณต์œ ์ž ๊ธฐ๋Šฅ (๊ฐ•์˜ ๊ด€๋ฆฌ, ์ปค๋ฆฌํ˜๋Ÿผ ๊ด€๋ฆฌ, ์ƒ์„ธ ํŽ˜์ด์ง€ ์ž‘์„ฑ, ๋™์˜์ƒยท์ธ๋„ค์ผ ์—…๋กœ๋“œ)์„ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • TailwindCSS ยท ShadcnUI, Cursorโ€ฏAI๋ฅผ ํ™œ์šฉํ•ด ๋น ๋ฅด๊ฒŒ ์Šคํƒ€์ผ๋ง์„ ์ง„ํ–‰ํ•˜๊ณ  ์‹ค์ œ ๋กœ์ง๊ณผ ํ’€์Šคํƒ ๊ฒฝํ—˜์— ์ง‘์ค‘ํ•˜๋„๋ก ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

Partโ€ฏ2์—์„œ๋Š” ์ด ํ† ๋Œ€ ์œ„์— ๊ฐ•์˜ ํƒ์ƒ‰ยท์ˆ˜๊ฐ•ยท์ˆ˜๊ฐ•ํ‰ยทQ&A ๊ธฐ๋Šฅ์„ ์–น๊ณ , ์ตœ์ข…์ ์œผ๋กœ AWSโ€ฏ๋ฐฐํฌ๊นŒ์ง€ ๋งˆ๋ฌด๋ฆฌํ•ด โ€œ๋ˆ„๊ตฌ๋‚˜ ์ ‘์†ํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ง„์งœ ์„œ๋น„์Šคโ€๋กœ ์™„์„ฑํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

Partโ€ฏ1์—์„œ ๋‹ค์ง„ ๊ธฐ์ดˆ๊ฐ€ Partโ€ฏ2๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์—ฐ๊ฒฐ๋˜๋„๋ก ์ปค๋ฆฌํ˜๋Ÿผ์„ ์„ค๊ณ„ํ–ˆ์œผ๋‹ˆ, ๋‘ ํŒŒํŠธ๋ฅผ ์—ฐ์†ํ•ด ์ˆ˜๊ฐ•ํ•˜๋ฉด ์„ค๊ณ„๋ถ€ํ„ฐ ์šด์˜๊นŒ์ง€ ํ’€์Šคํƒ ์ „ ๊ณผ์ •์„ ์˜จ์ „ํžˆ ์ฒดํ—˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿš€

์ด ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•˜์‹œ๋Š” ๋ชจ๋“  ๋ถ„๋“ค์€

์ด๋Ÿฐ ๊ฒฐ๊ณผ๋ฌผ์„ ์‹ค์ œ๋กœ ์™„์„ฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค


๐Ÿฅ‡ ๊ตญ๋‚ด ์ตœ์ดˆ! Next.js 15 ร— NestJS ์‹ค์ „ ํ’€์Šคํƒ ์™„์„ฑ

  • App Router, Server Action ๋“ฑ
    ์ตœ์‹  Next ๊ธฐ๋Šฅ ์‹ค์Šต

  • NestJS ๋ชจ๋“ˆ ์•„ํ‚คํ…์ฒ˜ & REST API ์„ค๊ณ„

  • Prisma + PostgreSQL + Swagger๋กœ ์‹ค๋ฌด ๋ฐฑ์—”๋“œ ๊ตฌํ˜„


๐Ÿง‘๐Ÿปโ€๐Ÿ’ป ๋‚ด๊ฐ€ ๋งŒ๋“œ๋Š” ๋‚˜๋งŒ์˜ "๋ฏธ๋‹ˆ ์ธํ”„๋Ÿฐ"

  • ๊ฐ•์˜ ๋“ฑ๋ก/์ˆ˜์ •, ์ƒ์„ธ ์†Œ๊ฐœ ์ž‘์„ฑ, ์ธ๋„ค์ผ ์—…๋กœ๋“œ

  • ์„น์…˜/๊ฐ•์˜ ์ถ”๊ฐ€ ๋ฐ ์ปค๋ฆฌํ˜๋Ÿผ ๊ตฌ์„ฑ ๊ธฐ๋Šฅ

  • ์ง€์‹๊ณต์œ ์ž ์ „์šฉ ๊ด€๋ฆฌ์ž ๊ธฐ๋Šฅ ์ง์ ‘ ๊ฐœ๋ฐœ


๐ŸŽฅ ์˜์ƒ ์—…๋กœ๋“œ๋ถ€ํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ๊นŒ์ง€

  • S3 + CloudFront๋กœ ๋ณด์•ˆ ์ฒ˜๋ฆฌ๋œ ์˜์ƒ ์—…๋กœ๋“œ

  • Multer๋ฅผ ํ™œ์šฉํ•œ ์˜์ƒ ์—…๋กœ๋“œ + ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ตฌํ˜„

  • ์‹ค์‹œ๊ฐ„ ์—…๋กœ๋“œ ๊ฒฐ๊ณผ ํ‘œ์‹œ๊นŒ์ง€ ์™„์„ฑ


๐ŸŽจ UI๋Š” ์˜ˆ์˜๊ฒŒ, ๊ฐœ๋ฐœ์€ ๋น ๋ฅด๊ฒŒ

  • TailwindCSS + ShadcnUI๋กœ ๊ฐ๊ฐ์  UI ๊ตฌ์„ฑ

  • Cursor AI๋กœ ์Šคํƒ€์ผ ์ž๋™ํ™” ๋ฐ ๋น ๋ฅธ ๊ฐœ๋ฐœ

  • ๋ฐ˜์‘ํ˜• ๋ ˆ์ด์•„์›ƒ, ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ์ง์ ‘ ์„ค๊ณ„


๐Ÿ 

์ด ๋ชจ๋“ ๊ฑธ ์‹ค๋ฌด ์ˆ˜์ค€์˜ ๊ธฐ์ˆ ์Šคํƒ์œผ๋กœ

ํƒ„ํƒ„ํ•˜๊ฒŒ ์™„์„ฑํ•ด๋‚˜๊ฐ€์š”

ํ”„๋ก ํŠธ์—”๋“œ

  • Next.js 15 โ€“ ์ตœ์‹  ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ

  • TailwindCSS โ€“ ๋น ๋ฅด๊ฒŒ ์Šคํƒ€์ผ์„ ์ž…ํž ์ˆ˜ ์žˆ๋Š” CSS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • Shadcn/UI โ€“ ์‹ค์ „์šฉ UI ์ปดํฌ๋„ŒํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • React Query โ€“ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ ์บ์‹ฑ ๋ฐ ์š”์ฒญ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • Jotai v2 โ€“ ์ง๊ด€์ ์ธ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ


๋ฐฑ์—”๋“œ ยท ์ธํ”„๋ผ

  • NestJS โ€“ ๋ฐฑ์—”๋“œ API ์„œ๋ฒ„ ํ”„๋ ˆ์ž„์›Œํฌ

  • Prisma โ€“ ์•ˆ์ „ํ•˜๊ณ  ํŽธ๋ฆฌํ•œ DB ์—ฐ๊ฒฐ์šฉ ORM

  • PostgreSQL โ€“ ํ™•์žฅ์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ๊ฐ–์ถ˜ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

  • Docker โ€“ ์ผ๊ด€๋œ ๊ฐœ๋ฐœยท๋ฐฐํฌ ํ™˜๊ฒฝ ๊ตฌ์„ฑ ๋„๊ตฌ

  • AWS S3 / CloudFr

    ont โ€“ ๊ฐ•์˜ ์˜์ƒ ์ €์žฅ ๋ฐ ๋น ๋ฅธ ์ „์†ก์„ ์œ„ํ•œ ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ


๐ŸŽฏ

์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜ ๊ฐ•๋ ฅํžˆ ์ถ”์ฒœํ•ด์š”!

๋‹จ์ˆœํ•œ ํˆฌ๋‘์•ฑ์—์„œ ๋ฒ—์–ด๋‚˜
์ œ๋Œ€๋กœ ๋œ ์„œ๋น„์Šค๋ฅผ
๋งŒ๋“ค๊ณ  ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž

ํฌํŠธํด๋ฆฌ์˜ค๋กœ
๋ฐ”๋กœ ํ™œ์šฉ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ์ ํŠธ๊ฐ€
ํ•„์š”ํ•œ ์ด์งยท์ทจ์—… ์ค€๋น„์ƒ

๊ฐ•์˜ ํ”Œ๋žซํผ๊ณผ ๊ฐ™์€
์‹ค์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์€
1์ธ ๊ฐœ๋ฐœ์ž

โœ…

์ˆ˜์—…์—์„œ ์ด๋Ÿฐ๊ฑธ ๋ฐฐ์›Œ์š”


์„น์…˜ 1~3
๊ธฐ๋ณธ๊ธฐ๋ฅผ ๋‹ค์ง€๊ณ  Next + Nest ํ”„๋กœ์ ํŠธ ์„ธํŒ…

Next.js 15, TailwindCSS, ShadcnUI, Jotai, React Query๊นŒ์ง€ ํ”„๋ก ํŠธ ์„œ๋ฒ„๋ฅผ ์„ธํŒ…ํ•˜๊ณ ,

NestJS, Prisma, Docker๋กœ ๋ฐฑ์—”๋“œ์™€ DB๊นŒ์ง€ ํ•œ ๋ฒˆ์— ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.
Cursor AI๋ฅผ ํ™œ์šฉํ•œ ์‹ค์ „ํ˜• ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ๋„ ํ•จ๊ป˜ ์ตํ˜€์š”.

์„น์…˜ 4
์ง„์งœ ์„œ๋น„์Šค์ฒ˜๋Ÿผ ๋กœ๊ทธ์ธ๋ถ€ํ„ฐ ์ธ์ฆ๊นŒ์ง€

Auth.js(next-auth)์™€ JWT ์กฐํ•ฉ์œผ๋กœ
ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ, ์„ธ์…˜ ์œ ์ง€, ๊ถŒํ•œ ๋ณดํ˜ธ๊นŒ์ง€ ์ „๋ถ€ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

SSR/CSR ๊ณ ๋ คํ•œ ์ธ์ฆ ์ฒ˜๋ฆฌ๋ถ€ํ„ฐ
NestJS Auth Guard ์ ์šฉ๊นŒ์ง€ ์‹ค์ „์—์„œ ๋ฐ”๋กœ ์“ฐ๋Š” ์ธ์ฆ ์‹œ์Šคํ…œ์„ ์†์— ์ตํž™๋‹ˆ๋‹ค.

์„น์…˜ 5
์ธํ”„๋Ÿฐ ๊ตฌ์กฐ ๋œฏ์–ด๋ณด๊ณ  ์ง์ ‘ ๊ธฐํšํ•ด๋ณด๊ธฐ

์ง„์งœ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ธํ”„๋Ÿฐ์„ ๋จผ์ € ๋œฏ์–ด๋ด…๋‹ˆ๋‹ค.

์–ด๋–ค ๊ธฐ๋Šฅ๊ณผ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์ด ํ•„์š”ํ•œ์ง€ ์ง์ ‘ ๊ธฐํšํ•˜๊ณ  Course, Section, Lecture ๋“ฑ ๋ชจ๋ธ์„ Prisma๋กœ ์ง์ ‘ ์ •์˜ํ•˜๊ณ  Seed ๋ฐ์ดํ„ฐ๋„ ๋งŒ๋“ค์–ด๋ด์š”.

์„น์…˜ 6
์ง€์‹๊ณต์œ ์ž ๊ธฐ๋Šฅ ๊ตฌํ˜„ (๊ฐ•์˜ ๊ด€๋ฆฌ)

์ง€์‹๊ณต์œ ์ž๊ฐ€ ์ง์ ‘ ๊ฐ•์˜๋ฅผ ๋“ฑ๋กํ•˜๊ณ  ์ˆ˜์ •ํ•˜๋Š” ์ „์ฒด ํ”Œ๋กœ์šฐ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

CKEditor๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ƒ์„ธํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ณ 
S3 + CloudFront ์กฐํ•ฉ์œผ๋กœ ๋™์˜์ƒ๊ณผ ์ธ๋„ค์ผ ์—…๋กœ๋“œ ๊ธฐ๋Šฅ์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค. (์ŠคํŠธ๋ฆฌ๋ฐ๋„ ๊ตฌํ˜„)
Swagger Codegen์œผ๋กœ API ํ˜ธ์ถœ๋„ ์ž๋™ํ™”ํ•ด์š”.

๐Ÿ“ฆ Part 1๊ณผ Part 2, ์ด๋ ‡๊ฒŒ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค

์ด ๊ฐ•์˜๋Š” โ€˜์ธํ”„๋Ÿฐ ํด๋ก  ํ”„๋กœ์ ํŠธโ€™ ์‹œ๋ฆฌ์ฆˆ์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.
Part 1๊ณผ Part 2๋Š” ์„œ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ์ˆ˜๊ฐ• ๊ฐ€๋Šฅํ•˜์ง€๋งŒ,
ํ•จ๊ป˜ ๋“ค์œผ๋ฉด ๊ธฐํš๋ถ€ํ„ฐ ๋ฐฐํฌ๊นŒ์ง€, ์ง„์งœ ์„œ๋น„์Šค ํ•œ ํŽธ์„ ์™„์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Part 1

์ง€์‹๊ณต์œ ์ž ๊ธฐ๋Šฅ ์ค‘์‹ฌ

์ˆ˜๊ฐ•์ƒ ๊ธฐ๋Šฅ ์ค‘์‹ฌ

๊ฐ•์˜ ๋“ฑ๋ก, ์ปค๋ฆฌํ˜๋Ÿผ ๊ตฌ์„ฑ, ์˜์ƒ ์—…๋กœ๋“œ

Part 2

๊ฐ•์˜ ํƒ์ƒ‰, ์ˆ˜๊ฐ•์‹ ์ฒญ, ์˜์ƒ ์‹œ์ฒญ, ๊ฒฐ์ œ, ๋ฐฐํฌ

JWT ์ธ์ฆ, S3 ์—…๋กœ๋“œ, ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€ ๊ตฌ์„ฑ

์‹œ์ฒญ ๊ธฐ๋ก ์ €์žฅ, ์งˆ๋ฌธ/์ˆ˜๊ฐ•ํ‰, ๊ฒฐ์ œ API, EC2 ๋ฐฐํฌ

๐Ÿง‘โ€๐ŸŽ“

์ˆ˜์—…์„ ํ†ตํ•ด
์ด๋Ÿฐ ๊ฒƒ๋“ค์„ ์–ป์–ด๊ฐˆ ์ˆ˜ ์žˆ์–ด์š”


1โƒฃ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์Šค์Šค๋กœ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์–ด์š”.

2โƒฃ ์„œ๋น„์Šค์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ End-to-End๋กœ ๊ตฌํ˜„ํ•˜๋Š” ํž˜์ด ์ƒ๊ฒจ์š”.

3โƒฃ AWS๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ์ธํ”„๋ผ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์–ด์š”.

4โƒฃ Cursor AI๋ฅผ ํ™œ์šฉํ•ด์„œ ์™„์„ฑ๋„ ๋†’์€ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์–ด์š”.

5โƒฃ โ€œ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์„œ๋น„์Šค ํ•˜๋‚˜์ฏค์€ ์ง์ ‘ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค!โ€๋Š” ๊ทผ๊ฑฐ์žˆ๋Š” ์ž์‹ ๊ฐ์ด ์ƒ๊ฒจ์š”.

๐Ÿงฐ

๊ฐ•์˜ ๊ตฌ์„ฑ

์ด 7๊ฐœ์˜ ์„น์…˜, ~15์‹œ๊ฐ„ ๋ถ„๋Ÿ‰, ~50๊ฐœ ๊ฐ•์˜ (ํ‰์ƒ ์—…๋ฐ์ดํŠธ)

GitHub ์˜ˆ์ œ ์ฝ”๋“œ ๋ฐ ์ฐธ๊ณ ์ž๋ฃŒ ์ œ๊ณต

์™„์„ฑ๋œ ํ”„๋กœ์ ํŠธ๋Š” ํฌํŠธํด๋ฆฌ์˜ค๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๐Ÿงฉ

์ˆ˜๊ฐ• ์ „ ์ค€๋น„์‚ฌํ•ญ

Typescript ๋ฌธ๋ฒ• ๊ธฐ์ดˆ, React ์‚ฌ์šฉ ๊ฒฝํ—˜

Git, Node.js์— ๋Œ€ํ•œ ์ดํ•ด

#Next.js #Nest.js #NextJS #NestJS #Fullstack #ํ’€์Šคํƒ #Jotai #ReactQuery #Prisma #PostgreSQL #CloneCoding #ํด๋ก ์ฝ”๋”ฉ #Node.js #AWS #S3 #Cloudfront

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

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

  • ๋ธ”๋กœ๊ทธ, ํˆฌ๋‘์•ฑ์€ ๊ทธ๋งŒ! ์„œ๋น„์Šค ์ „๋ฐ˜์„ ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ณด๊ณ  ์‹ถ์€ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž

  • NestJS ๋ฐฑ์—”๋“œ ์„ค๊ณ„๋ฅผ ์‹ค์ „์œผ๋กœ ์ตํžˆ๊ณ  ์‹ถ์€ ์ฃผ๋‹ˆ์–ด~๋ฏธ๋“ค ๊ฐœ๋ฐœ์ž

  • ์ด์ง, ํฌํŠธํด๋ฆฌ์˜ค๋ฅผ ์œ„ํ•œ ์™„์„ฑ๋„ ๋†’์€ ํ”„๋กœ์ ํŠธ๊ฐ€ ํ•„์š”ํ•œ ์ทจ์ค€์ƒ

  • ๊ฐ•์˜ ํ•˜๋‚˜๋กœ ์‹ค์ „ ์Šคํƒ์„ A to Z๋กœ ์ตํžˆ๊ณ  ์‹ถ์€ ์‹ค๋ฌด ์ง€ํ–ฅ ์ˆ˜๊ฐ•์ƒ

  • ๋‹จ์ผ ์–ธ์–ด ๊ธฐ๋ฐ˜์˜ ํ’€์Šคํƒ ๊ตฌ์กฐ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ตํžˆ๊ณ  ์‹ถ์€ ์‹ค๋ฌด ์ง€ํ–ฅ ์ˆ˜๊ฐ•์ƒ

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

  • HTML/CSS/JS ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

  • React ๊ธฐ์ดˆ ์‚ฌ์šฉ ๊ฒฝํ—˜

  • REST API, Node.js์— ๋Œ€ํ•œ ์ดํ•ด

์•ˆ๋…•ํ•˜์„ธ์š”
๋กœํŽ€์ž…๋‹ˆ๋‹ค.

3,800

๋ช…

์ˆ˜๊ฐ•์ƒ

231

๊ฐœ

์ˆ˜๊ฐ•ํ‰

67

๊ฐœ

๋‹ต๋ณ€

4.9

์ 

๊ฐ•์˜ ํ‰์ 

8

๊ฐœ

๊ฐ•์˜

๐Ÿš€ โ€œํ•ซํ•œ ์Šคํƒ์œผ๋กœ ์‹ค์ „ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ ์ˆจ๊น€์—†์ด ๋ณด์—ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.โ€

์ด๋ก ๋ณด๋‹ค๋Š” ํ”„๋กœ์ ํŠธ ์œ„์ฃผ์˜ ์‹ค๋ฌด ๊ฐ•์˜๋กœ ํ˜„์—…์— ๋ฐ”๋กœ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ๋‚ด์šฉ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • (ํ˜„) ๋„ค์นด๋ผ์ฟ ๋ฐฐ ์žฌ์ง

  • (ํ˜„) 7๋…„์ฐจ ํ’€์Šคํƒ ๊ฐœ๋ฐœ

  • (๊ฐ•์˜) ์ŠคํŒŒ๋ฅดํƒ€ ์ฝ”๋”ฉํด๋Ÿฝ ๊ฐ•์‚ฌ

  • (๊ต์œก) ํ•œ๊ตญ๊ณผํ•™๊ธฐ์ˆ ์›(KAIST) ์ „์‚ฐํ•™๊ณผ ์กธ์—…

๋”๋ณด๊ธฐ

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

์ „์ฒด

55๊ฐœ โˆ™ (14์‹œ๊ฐ„ 42๋ถ„)

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

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

์ˆ˜๊ฐ•ํ‰

์ „์ฒด

40๊ฐœ

4.8

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

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

    ์ˆ˜๊ฐ•ํ‰ 6

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    ์ˆ˜์ •๋จ

    5

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

    ๐ŸŽฏํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋„ ๋ถ€๋‹ด ์—†์ด ํ’€์Šคํƒ ํ๋ฆ„์„ ์ตํž ์ˆ˜ ์žˆ๋Š” ๊ฐ•์˜ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด์„œ ๋ฐฑ์—”๋“œ ์ง€์‹์˜ ํ•„์š”์„ฑ์„ ๋А๊ปด ์ด์ „์— "ํ”„๋ก ํŠธ ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ๋ฐฑ์—”๋“œ 101" ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ–ˆ๋Š”๋ฐ, ๋งŒ์กฑ๋„๊ฐ€ ๋†’์•„ ์ด๋ฒˆ ๊ฐ•์˜๋„ ๋ฐ”๋กœ ์ด์–ด์„œ ๋“ฃ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐ•์˜๋Š” ๋‹จ์ˆœํ•œ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ๋„˜์–ด์„œ, Next.js 15, NestJS, Prisma, React Query, TailwindCSS, Cursor AI, Jotai ๋“ฑ ์ตœ์‹  ๊ธฐ์ˆ  ์Šคํƒ์˜ ์ด๋ก ์„ ๋จผ์ € ์งš๊ณ  ๋„˜์–ด๊ฐ€์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธ‰์ž๋„ ์ถฉ๋ถ„ํžˆ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์„ฑ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ์„œ๋น„์Šค๋ฅผ ํด๋ก ํ•˜๋ฉด์„œ ํ•˜๋‚˜ํ•˜๋‚˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด๋ณด๋‹ˆ, ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ์„œ ๋ฐฑ์—”๋“œ ํ๋ฆ„์„ ํ•จ๊ป˜ ์ดํ•ดํ•˜๊ณ  ์‹ถ์€ ๋ถ„๋“ค์—๊ฒŒ ๋งค์šฐ ์ ํ•ฉํ•œ ๊ฐ•์˜๋ผ๊ณ  ๋А๊ผˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์ธ์ƒ ๊นŠ์—ˆ๋˜ ๋ถ€๋ถ„์€ โœ… Prisma๋ฅผ ํ™œ์šฉํ•œ API ๊ตฌํ˜„๊ณผ PostgreSQL ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชจ๋ธ๋ง โœ… Swagger + OpenAPI ๊ธฐ๋ฐ˜์˜ ์ž๋™ํ™”๋œ ๋ฐฑ์—”๋“œ ํ˜ธ์ถœ ๊ตฌ์กฐ ๊ตฌ์„ฑ โœ… AWS S3 + CloudFront ๊ธฐ๋ฐ˜์˜ ์˜์ƒ ์ŠคํŠธ๋ฆฌ๋ฐ ์—…๋กœ๋“œ ์‹œ์Šคํ…œ ๊ตฌ์ถ• ๋“ฑ ์‹ค๋ฌด์—์„œ ๋ฐ”๋กœ ์จ๋จน์„ ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€์˜ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„ ๋‚ด์šฉ์ด ๋งŽ์•˜๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ, ํ•™์Šต ์ค‘ ๊ถ๊ธˆํ•œ ์ ์ด๋‚˜ ํ”ผ๋“œ๋ฐฑ์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์€ Slack ์ฑ„๋„์„ ํ†ตํ•ด ์งˆ๋ฌธ์„ ๋‚จ๊ธฐ๋ฉด ๋‹ต๋ณ€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด ํ•™์Šต ํ™˜๊ฒฝ๋„ ๋งค์šฐ ๋งŒ์กฑ์Šค๋Ÿฌ์› ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์•„์‰ฌ์šด ์ ์€ CKEditor ๊ด€๋ จ ์ด์Šˆ๋กœ ์ธํ•ด ์˜์ƒ ์ˆœ์„œ๊ฐ€ ๋งค๋„๋Ÿฝ์ง€ ๋ชปํ•œ ๋ถ€๋ถ„์ด ์žˆ์—ˆ๋˜ ์ ์ž…๋‹ˆ๋‹ค. ํฐ ํ๋ฆ„์—๋Š” ์ง€์žฅ์ด ์—†์ง€๋งŒ, ์กฐ๊ธˆ ํ—ท๊ฐˆ๋ ธ์Šต๋‹ˆ๋‹ค. ๐Ÿ‘‰ ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๋ฐฑ์—”๋“œ๊นŒ์ง€ ์•„์šฐ๋ฅด๋Š” ํ”„๋กœ์ ํŠธ ๊ฒฝํ—˜์„ ์Œ“๊ณ  ์‹ถ์€ ๋ถ„๋“ค์—๊ฒŒ ์ ๊ทน ์ถ”์ฒœ๋“œ๋ฆฌ๋Š” ๊ฐ•์˜์ž…๋‹ˆ๋‹ค. โญโญโญโญโญ ์‹ค๋ฌด ๊ฐ๊ฐ, ๊ธฐ์ˆ  ์Šคํƒ, ํด๋ก  ๋Œ€์ƒ ๋ชจ๋‘ ๋งŒ์กฑ์Šค๋Ÿฌ์› ์Šต๋‹ˆ๋‹ค.

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

      ์ˆ˜๊ฐ•ํ‰ 13

      โˆ™

      ํ‰๊ท  ํ‰์  5.0

      ์ˆ˜์ •๋จ

      5

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

      ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ํ•˜๊ณ  ์žˆ๊ณ , ๋ฐฑ์—”๋“œ๋„ ๋‘๋“œ๋ ค๋ณด๊ณ  ์‹ถ์—ˆ๋˜ ์ƒํƒœ์ธ๋ฐ, ๋กœํŽ€๋‹˜์˜ Next.js ํ’€์Šคํƒ ๊ฐ•์˜๋ฅผ ์ข‹๊ฒŒ ๋“ค์—ˆ๋˜ ๊ธฐ์–ต์— ์ˆ˜๊ฐ•ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ์ธํ”„๋Ÿฐ๊ฐ™์€์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๊ณ  ์‹ถ์–ด์„œ, ์ธํ”„๋Ÿฐ์˜ ๊ฐ•์˜๋ฐ์ดํ„ฐ๋“ค์„ ํฌ๋กค๋งํ•ด๋„ ๋˜๋ƒ๊ณ  ๊ณต์‹์ ์œผ๋กœ ๋ฌธ์˜ํ–ˆ๋‹ค๊ฐ€ ๋ฐ˜๋ ค๋‹นํ•˜๊ธฐ๋„ ํ–ˆ์—ˆ๋Š”๋ฐ, ์ œ ๋ฐ”๋žจ์„ ์ด๋ฒˆ ๊ฐ•์˜๋กœ ์ด๋ฃฐ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Nest.js๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ์‚ฌ๋žŒ์œผ๋กœ์„œ, ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด ์ด๋Ÿฐ ์‹์œผ๋กœ ๊ตฌ์„ฑํ•˜๋ฉด ๋˜๊ฒ ๋‹ค๋Š” ๊ฐ์„ ์žก์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ•์˜์—ˆ๊ณ , "์ธํ”„๋Ÿฐ ํ”„๋กœ๋•ํŠธ ๋‘˜๋Ÿฌ๋ณด๊ธฐ"๋ผ๋Š” ๊ธฐํš ๋ถ€๋ถ„๋„ ํฌํ•จ๋˜์–ด์žˆ์–ด ์•„ํ‚คํ…์ณ๋‚˜ ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ฏผํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Part1์—๋Š” ๋ฐฐํฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์•„์„œ ๋‹ค์†Œ ์•„์‰ฝ์ง€๋งŒ, ๋นจ๋ฆฌ Part2๊ฐ€ ๋‚˜์˜จ๋‹ค๋ฉด ๋ฐฐํฌ๊นŒ์ง€ ๊ณ๋“ค์ธ ์™„์„ฑ๋œ ํฌํŠธํด๋ฆฌ์˜ค๋ฅผ ๊ฐ€์ ธ๊ฐ€๊ณ  ์‹ถ๋„ค์š” ใ…Žใ…Ž

      • ๋กœํŽ€
        ์ง€์‹๊ณต์œ ์ž

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

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

      ์ˆ˜๊ฐ•ํ‰ 5

      โˆ™

      ํ‰๊ท  ํ‰์  5.0

      5

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

      Part1๊ณผ Part2๋ฅผ ํ•จ๊ป˜ ๊ตฌ๋งคํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ค๋ฌด์ž๋กœ์จ ํ˜„์žฌ ํšŒ์‚ฌ์— ๋„์ž…ํ•  ๊ธฐ์ˆ ๋ ฅ์„ ๋ชจ์ƒ‰ ์ค‘ nest์™€ next ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•œ ๊ธฐ์ˆ ์ด ํ•„์š”ํ•˜์—ฌ ๋„์ž…ํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ•์˜๋ฅผ ํ†ตํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ธฐ์ˆ ๋“ค์„ ์•Œ๊ฒŒ๋˜๊ณ  ์ ‘๋ชฉ์‹œํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ๋ฆ„๋„ ์ข‹๊ณ , ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด๋‚˜ ์–ด๋–ป๊ฒŒ๋“  ๋˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ, ํšจ์œจ์ ์œผ๋กœ ๊ฐœ๋ฐœ/๊ด€๋ฆฌ/์šด์˜์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ์ฃผ๋Š” ๊ตฌ์„ฑ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์—ฌ ๊ฐ•์˜๋Š” ๋งŒ์  ์ค‘ ๋ฐฑ๋งŒ์  ์ž…๋‹ˆ๋‹ค. ์ข‹์€ ๊ฐ•์˜์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๊ทผ๋ฐ ์„ ์ƒ๋‹˜... ์„ ์ƒ๋‹˜์ด ์•Œ๊ณ  ๊ณ„์‹œ๋Š” ๊ฒƒ์„ ์ €ํฌ ์ˆ˜๊ฐ•์ƒ๋“ค์€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์šฐ๊ณ ์‹ถ๊ธฐ์— ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์žˆ์ง€์š”... ์ด ๊ฐ•์˜๋Š” ์ดˆ๊ธ‰์ด ์•„๋‹ˆ์˜ต๋‹ˆ๋‹ค... ์ˆ˜๊ฐ•ํ•˜์‹œ๋Š” ๋Œ€๋ถ€๋ถ„์€ ์•„๋งˆ ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋ณด์•„๋„ "๋„๋Œ€์ฒด ๋‚ด๊ฐ€ ๋ญ˜ ๋ด์•ผ ํ•˜๋‚˜?" ๋ผ๋Š” ์ƒ๊ฐ์„ ํ•ด์š”.. ์ž˜ ๋ชจ๋ฅด๋‹ˆ๊นŒ์š”...ใ…Ž ๊ฐ‘์ž๊ธฐ "์ด ๋ถ€๋ถ„์ด ์ด ๋ถ€๋ถ„์„ ๋Œ€์ฒดํ•˜๋‹ˆ๊นŒ ์ง€์šฐ๊ฒ ์Šต๋‹ˆ๋‹ค." ๋ผ๋Š” ๋ง์”€์„ ํ•˜์‹œ๋ฉด ์ˆ˜๊ฐ•์ƒ ๋Œ€๋ถ€๋ถ„์€ ์ด ๋ถ€๋ถ„๊ณผ ์ด ๋ถ€๋ถ„์ด ๋„๋Œ€์ฒด ๋ญ”์ง€๋ฅผ ํ•œ์ฐธ ์ƒ๊ฐํ•ด์•ผ ํ•˜๊ณ , ์ฐพ์•„๋‚ด๋Š” ๊ฒƒ์— ๊ต‰์žฅํžˆ ํž˜๋“ฌ์„ ๋А๋ผ๊ฒŒ ๋˜๋Š” ๊ฑฐ ๊ฐ™์•„์š”.. ์„ ์ƒ๋‹˜์˜ ๊ฐ•์˜๊ฐ€ ์ข‹์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ, ์ œ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ๋“ค์„ ์ „๋ถ€ ๊ตฌ์„ฑํ•ด์ฃผ๊ณ  ๊ณ„์„ธ์š”. ์กฐ.. ์กฐ๊ธˆ๋งŒ, ์•„์ฃผ ์กฐ๊ธˆ๋งŒ์š”. ์•„์ง ํ˜ผ์ž ์ˆจ์‰ฌ๋Š” ๊ฒƒ๋„ ์ž˜ ๋ชปํ•˜๋Š” "๋ชป๋‚œ ๊ฐ์ž"๋“ค์ด ์ˆ˜๊ฐ•ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

      • ๋กœํŽ€
        ์ง€์‹๊ณต์œ ์ž

        ์ข‹์€ ์˜๊ฒฌ ๋‚จ๊ฒจ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋ง์”€์ฃผ์‹  ๋‚ด์šฉ์„ ๋ฐ˜์˜ํ•ด์„œ ์ดˆ๋ณด์ž ๋ถ„๋“ค๋„ ๋น„๊ต์  ๋” ์‰ฝ๊ฒŒ ๋”ฐ๋ผ์˜ค์‹ค ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋ ฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค :) ๊ถ๊ธˆํ•˜์‹  ์ ์ด๋‚˜ ๋ง‰ํžˆ์‹œ๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์–ธ์ œ๋“ ์ง€ ์Šฌ๋ž™์œผ๋กœ ๋ฌธ์˜ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์™„๊ฐ•๊นŒ์ง€ ํ™”์ดํŒ…์ž…๋‹ˆ๋‹ค!

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

      ์ˆ˜๊ฐ•ํ‰ 21

      โˆ™

      ํ‰๊ท  ํ‰์  4.8

      ์ˆ˜์ •๋จ

      5

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

      Next.js ๊ธฐ๋ฐ˜์ด๋ผ ์ต์ˆ™ํ•˜๊ฒŒ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , NestJS๋ž‘ Prisma๋Š” ์ฒ˜์Œ์ด์—ˆ์ง€๋งŒ ํฅ๋ฏธ๋กญ๊ฒŒ ๋‹ค๋ค„๋ณผ ์ˆ˜ ์žˆ์—ˆ์–ด์š”. ์‹ค์ œ ์„œ๋น„์Šค ๊ฐ™์€ ํด๋ก  ํ”„๋กœ์ ํŠธ๋ผ ์‹ค๋ฌด ๊ฐ๊ฐ๋„ ํ‚ค์šธ ์ˆ˜ ์žˆ์–ด์„œ ๋งŒ์กฑ์Šค๋Ÿฌ์› ์–ด์š”! Part 2๋„ ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹น! ๐Ÿ˜Š

      • ๋กœํŽ€
        ์ง€์‹๊ณต์œ ์ž

        ์†Œ์ค‘ํ•œ ์ˆ˜๊ฐ•ํ‰ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ์กฐ๋‚ด์ผ๋‹˜! Next.js์— ์ต์ˆ™ํ•œ ๋ถ„๋“ค์ด๋ผ๋ฉด ์‹œ์ž‘์ด ์กฐ๊ธˆ ๋” ์ˆ˜์›”ํ•˜์…จ์„ ํ…๋ฐ, NestJS์™€ Prisma๋„ ์ž˜ ๋”ฐ๋ผ์™€ ์ฃผ์…”์„œ ๋‹คํ–‰์ด์—์š” ใ…Žใ…Ž ํด๋ก  ํ”„๋กœ์ ํŠธ๊ฐ€ ์‹ค์ œ ํ๋ฆ„์„ ์ตํžˆ๋Š” ๋ฐ ๋„์›€์ด ๋˜์—ˆ๋‹ค๋‹ˆ ๋ฟŒ๋“ฏํ•ฉ๋‹ˆ๋‹ค. Part 2๋„ ๋” ์•Œ์ฐจ๊ฒŒ ์ค€๋น„ ์ค‘์ด๋‹ˆ ๊ธฐ๋Œ€ํ•ด์ฃผ์„ธ์š” ๐Ÿ˜Š

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

      ์ˆ˜๊ฐ•ํ‰ 2

      โˆ™

      ํ‰๊ท  ํ‰์  5.0

      ์ˆ˜์ •๋จ

      5

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

      ์ €๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด ๊ณต๋ถ€ ์ค‘์ธ๋ฐ, ์ด์ „์— ๋กœํŽ€๋‹˜์˜ supabase ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ๋งŽ์€ ๋„์›€์ด ๋˜์–ด ์ด๋ฒˆ ํด๋ก ์ฝ”๋”ฉ ๊ฐ•์˜๋„ ์ˆ˜๊ฐ•ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•  ๋•Œ ๋ฐฑ์—”๋“œ ๋ถ„๊ป˜ API๋ฅผ ๋ฐ›์•„ ์Šค์›จ๊ฑฐ๋ฅผ ์ฐธ๊ณ ํ•ด ํ”„๋ก ํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ, ํ•ญ์ƒ ๋ฐฑ์—”๋“œ์—์„œ๋Š” ์–ด๋–ค ๋กœ์ง์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ํ˜๋Ÿฌ๊ฐ€๋Š”์ง€ ๊ถ๊ธˆํ–ˆ๋Š”๋ฐ, ์ด๋ฒˆ ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ๊ทธ ํ๋ฆ„์„ ์ง์ ‘ ๊ฒฝํ—˜ํ•ด๋ณผ ์ˆ˜ ์žˆ์–ด์„œ ์ •๋ง ์œ ์ตํ–ˆ์Šต๋‹ˆ๋‹ค. NestJS, Prisma ๋“ฑ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๊ธฐ์ˆ ๋„ ๋งŽ์•„ ์–ด๋ ค์šด ๋ถ€๋ถ„์ด ์žˆ์—ˆ์ง€๋งŒ, ๊ฐ•์‚ฌ๋‹˜์ด ์‹ค๋ฌด์—์„œ ์ž์ฃผ ์“ฐ๋Š” ์ตœ์‹  ๊ธฐ์ˆ ๋“ค์„ ์ž˜ ์„ค๋ช…ํ•ด์ฃผ์‹œ๊ณ  ๋…ธ์…˜์—๋„ ์ •๋ฆฌ๊ฐ€ ์ž˜ ๋˜์–ด ์žˆ์–ด ๋”ฐ๋ผ๊ฐ€๊ธฐ๊ฐ€ ์ˆ˜์›”ํ–ˆ์Šต๋‹ˆ๋‹ค. Shadcn UI, TailwindCSS, S3 ๋“ฑ ์—ฌ๋Ÿฌ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•ด๋ณด๋Š” ๊ณผ์ •๋„ ํฅ๋ฏธ๋กœ์› ๊ณ , ์‹ค๋ฌด์—์„œ ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š” ํŒ๊ณผ ๋…ธํ•˜์šฐ๋ฅผ ๋งŽ์ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ํ”„๋ก ํŠธ์™€ ๋ฐฑ์—”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐ๋˜๊ณ  ์ „์ฒด์ ์œผ๋กœ ์–ด๋–ค ๊ตฌ์กฐ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ณด๋ฉด์„œ ํ’€์Šคํƒ ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ์ดํ•ด๋„๊ฐ€ ํ™•์‹คํžˆ ๋†’์•„์กŒ์Šต๋‹ˆ๋‹ค. ํฌํŠธํด๋ฆฌ์˜ค๋กœ ํ™œ์šฉํ•  ๋งŒํ•œ ์™„์„ฑ๋„ ๋†’์€ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๋ถ„์ด๋‚˜, ์‹ค๋ฌด ์ง€ํ–ฅ์ ์ธ ํ’€์Šคํƒ ๊ฐœ๋ฐœ์„ ๋ฐฐ์šฐ๊ณ  ์‹ถ์€ ๋ถ„๋“ค์—๊ฒŒ ์ด ๊ฐ•์˜๋ฅผ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค!

      • ๋กœํŽ€
        ์ง€์‹๊ณต์œ ์ž

        ์†Œ์ค‘ํ•œ ์ˆ˜๊ฐ•ํ‰ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ์ฐฌ์šฐ๋‹˜! ๊ฐ•์˜๊ฐ€ ์œ ์ตํ–ˆ๋‹ค๊ณ  ํ•ด์ฃผ์‹œ๋‹ˆ ๋งŽ์ด ๋ณด๋žŒ์ฐจ๋„ค์š” ใ…Žใ…Ž ๋๊นŒ์ง€ ์ˆ˜๊ฐ•ํ•˜์‹œ๋А๋ผ ๋„ˆ๋ฌด ์ˆ˜๊ณ  ๋งŽ์œผ์…จ์Šต๋‹ˆ๋‹ค. ํ–‰๋ณตํ•œ ํ•˜๋ฃจ ๋ณด๋‚ด์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค! :)

    ๋กœํŽ€๋‹˜์˜ ๋‹ค๋ฅธ ๊ฐ•์˜

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

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

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