๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Project

[NextJS, NestJS] ์˜คํ”ˆํ”„์ฐจ - ํ”„๋žœ์ฐจ์ด์ฆˆ ์ •๋ณด ๋ถ„์„

by LasBe 2025. 1. 10.
๋ฐ˜์‘ํ˜•

๐ŸŽ™๏ธ ์˜คํ”ˆํ”„์ฐจ - ํ”„๋žœ์ฐจ์ด์ฆˆ ์ •๋ณด ๋ถ„์„


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


1์ฐจ ์™„์„ฑ ํ›„ ํšŒ์›, ๋กœ๊ทธ์ธ, ๊ฒŒ์‹œํŒ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ ค ํ–ˆ์œผ๋‚˜ ์ทจ์—…ํ•˜๋Š” ๋ฐ”๋žŒ์— ๊ณ„์†ํ•ด์„œ ๋ฏธ๋ค„์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์™„์„ฑ๋„ 2๋‹ฌ ์ „์— ํ–ˆ๋Š”๋ฐ ์ด์ œ์„œ์•ผ ์˜ฌ๋ฆฌ๊ณ  ์žˆ๋„ค์š”.

 

์›๋ž˜ ๋‚จ๋“ค ๋ˆ ์–ผ๋งˆ๋ฒ„๋‚˜ ๊ด€์‹ฌ์ด ๋งŽ์•„ ๊ด€๋ จ ์œ ํŠœ๋ฒ„๋ฅผ ์ฆ๊ฒจ๋ณด๋Š”๋ฐ, ํŠน์ • ํ”„๋žœ์ฐจ์ด์ฆˆ ๋ณธ์‚ฌ ๋ถ„์„ํ•˜๋Š” ์˜์ƒ์„ ๋ณด๋ฉฐ ์ˆœ๊ฐ„์ ์œผ๋กœ ์•„์ด๋””์–ด๋ฅผ ์–ป๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์•„์ด๋””์–ด ๋– ์˜ค๋ฅด์ž๋งˆ์ž ๋ฐ”๋กœ ๋งŒ๋“ค๊ธฐ ์‹œ์ž‘ํ•ด ํ”„๋ก ํŠธ, ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ๊ณผ ๋ฐฐํฌ๊นŒ์ง€ 2์ฃผ ์ •๋„ ์†Œ์š”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋ฆ„ ๊ตฌ๊ฒฝํ•˜๋Š” ์žฌ๋ฏธ๊ฐ€ ์žˆ์œผ๋‹ˆ ํ•œ๋ฒˆ ์”ฉ ๋“ค๋ ค์ฃผ์„ธ์š”~~

๐Ÿ”ฌ ์ฃผ์š” ๊ธฐ๋Šฅ

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

๐Ÿ’ป ๊ธฐ์ˆ ์Šคํƒ

  • NextJS 14 App Router
  • tailwind css
  • shadcn/ui
  • Recharts
  • Playwright + Docker๋ฅผ ์ด์šฉํ•œ e2e test ํ™˜๊ฒฝ ๊ตฌ์ถ•
  • Vercel์„ ์ด์šฉํ•œ ๋ฐฐํฌ
  • NestJS
  • Prisma
  • PostgreSQL
  • Swagger๋ฅผ ์ด์šฉํ•œ API ๋ช…์„ธ์„œ ์ž‘์„ฑ
  • Github Actions + Private Docker Repository๋ฅผ ์ด์šฉํ•œ ๋ฐฐํฌ ์ž๋™ํ™”
  • pm2๋ฅผ ์ด์šฉํ•œ ๋ฐฐํฌํ™˜๊ฒฝ ๊ตฌ์„ฑ
    • ํด๋Ÿฌ์Šคํ„ฐ ๋ชจ๋“œ
    • ๋ถ„์‚ฐ ์„œ๋น„์Šค
    • ๋ชจ๋‹ˆํ„ฐ๋ง

โ˜ ๏ธ ์–ด๋ ค์› ๋˜ ๋ถ€๋ถ„

๊ฐœ๋ฐœ์€ ๋„ˆ๋ฌด๋‚˜ ์ˆœ์กฐ๋กญ๊ฒŒ ์ง„ํ–‰์ด ๋˜์—ˆ์ง€๋งŒ ๊ณต๊ณต๋ฐ์ดํ„ฐ ํ’ˆ์งˆ์ด ์ข‹์ง€ ์•Š์•„ ์งœ์ฆ์ด ๋งŽ์ด ๋‚ฌ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ™์€ ๋ธŒ๋žœ๋“œ์ง€๋งŒ ์ •๋ณด๊ณต๊ฐœ์„œ์— ์—ฐ๋„๋ณ„๋กœ ์‚ด์ง์”ฉ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค๋˜๊ฐ€, ๊ธˆ์•ก ๋‹จ์œ„๊ฐ€ ํ‹€๋ฆฌ๊ฑฐ๋‚˜, ์–ด๋–ค ๊ฐ’์ด nullableํ•œ์ง€ ๋ชจ๋ฅด๋Š” ๋“ฑ๋“ฑ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋งค ์ˆœ๊ฐ„์ˆœ๊ฐ„์ด ๊ณ ๋น„์˜€์Šต๋‹ˆ๋‹ค.

๊ฒŒ๋‹ค๊ฐ€ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋“ค์ด ๊ฐ๊ฐ ๋‹ค๋ฅธ API๋กœ ํŒŒํŽธํ™” ๋˜์–ด ์žˆ์–ด DB ์„ค๊ณ„๋ฅผ ๊ณ„์†ํ•ด์„œ ๋ฐ”๊ฟ”์•ผ ํ•˜๋Š” ์ ๋„ ์‹œ๊ฐ„์„ ๋งŽ์ด ์žก์•„๋จน์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋„ ์ง€๊ธˆ์€ ์•ˆ์ •ํ™” ๋˜์—ˆ์œผ๋‹ˆ ๋งค๋…„ ์ •๋ณด๊ณต๊ฐœ์„œ๊ฐ€ ๋“ฑ๋ก๋  ๋•Œ ์—…๋ฐ์ดํŠธ๋งŒ ํ•ด์ฃผ๋ฉด ๋  ๊ฒƒ ๊ฐ™๋„ค์š”.

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€


์˜คํ”ˆ ์ฑ„ํŒ