made-by-AI

nodeJS๊ธฐ๋ฐ˜ ์›น๊ฐœ๋ฐœ ํ”„๋ ˆ์ž„์›Œํฌ NestJS ๊ฐ„๋‹จ ์š”์•ฝ

sila_kr 2025. 6. 8. 22:43
๋ฐ˜์‘ํ˜•

๐Ÿ—๏ธ NestJS๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

๐Ÿ“‹ ํ•ต์‹ฌ ์š”์•ฝ

• TypeScript ๊ธฐ๋ฐ˜ Node.js ํ”„๋ ˆ์ž„์›Œํฌ • ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด • ์˜์กด์„ฑ ์ฃผ์ž… • ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์•„ํ‚คํ…์ฒ˜

NestJS๋Š” ํšจ์œจ์ ์ด๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ Node.js ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ๐Ÿš€ TypeScript๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ํ•˜๋ฉฐ, Angular์˜ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์—์„œ ์˜๊ฐ์„ ๋ฐ›์•„ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

NestJS์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜์ž…๋‹ˆ๋‹ค. ๐Ÿ“ ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์ง๊ด€์ ์ด๊ณ  ์„ ์–ธ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๋ผ์šฐํŒ…, ์˜์กด์„ฑ ์ฃผ์ž…, ๋ฏธ๋“ค์›จ์–ด ๋“ฑ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ์ฝ”๋“œ์˜ ๊ตฌ์กฐํ™”์™€ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐ŸŽฏ NestJS ํ•ต์‹ฌ ํŠน์ง•

NestJS๋Š” ์—ฌ๋Ÿฌ ํ˜์‹ ์ ์ธ ํŠน์ง•๋“ค์„ ํ†ตํ•ด ํ˜„๋Œ€์ ์ธ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์˜ ์ƒˆ๋กœ์šด ํ‘œ์ค€์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค:

 

์นดํ…Œ๊ณ ๋ฆฌ ํŠน์ง• ์„ค๋ช… ์žฅ์ 
ํ•ต์‹ฌ ๊ธฐ๋Šฅ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด @Controller, @Service, @Module ๋“ฑ โœ… ์„ ์–ธ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ
ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์˜์กด์„ฑ ์ฃผ์ž… IoC ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ DI โœ… ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ
์„ฑ๋Šฅ ๊ด€๋ จ ๊ธฐ๋ณธ Express ๊ธฐ๋ฐ˜ Express/Fastify ์„ ํƒ ๊ฐ€๋Šฅ โœ… ๋†’์€ ์„ฑ๋Šฅ
๊ฐœ๋ฐœ ๊ฒฝํ—˜ TypeScript ๊ธฐ๋ณธ ์ง€์› ํƒ€์ž… ์•ˆ์ „์„ฑ ๋ณด์žฅ โœ… ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ
๊ฐœ๋ฐœ ๊ฒฝํ—˜ CLI ๋„๊ตฌ ์ž๋™ ์ฝ”๋“œ ์ƒ์„ฑ ๋ฐ ์Šค์บํด๋”ฉ โœ… ๋น ๋ฅธ ๊ฐœ๋ฐœ ์†๋„


๐Ÿ”„ Express vs NestJS ๋น„๊ต

๊ธฐ์กด์˜ Express.js์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ NestJS๋Š” ์–ด๋–ค ์ฐจ์ด์ ๊ณผ ์žฅ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์„๊นŒ์š”? ๐Ÿ“Š ๋‹ค์Œ ํ‘œ๋ฅผ ํ†ตํ•ด ์ž์„ธํžˆ ๋น„๊ตํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค:

 

์นดํ…Œ๊ณ ๋ฆฌ ๊ตฌ๋ถ„ Express.js NestJS
ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์•„ํ‚คํ…์ฒ˜ ๋ฏธ๋‹ˆ๋ฉ€๋ฆฌ์ŠคํŠธ, ์ž์œ ๋„ ๋†’์Œ โœ… ๊ตฌ์กฐํ™”๋œ ์•„ํ‚คํ…์ฒ˜
ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์˜์กด์„ฑ ์ฃผ์ž… โŒ ๊ธฐ๋ณธ ์ง€์› ์—†์Œ โœ… ๋‚ด์žฅ DI ์ปจํ…Œ์ด๋„ˆ
๊ฐœ๋ฐœ ๊ฒฝํ—˜ TypeScript ์ˆ˜๋™ ์„ค์ • ํ•„์š” โœ… ๊ธฐ๋ณธ ์ง€์›
๊ฐœ๋ฐœ ๊ฒฝํ—˜ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ๋งŽ์€ ์ˆ˜๋™ ์„ค์ • โœ… ์ตœ์†Œํ•œ์˜ ์„ค์ •
์„ฑ๋Šฅ ๊ด€๋ จ ํ™•์žฅ์„ฑ ๊ฐœ๋ฐœ์ž ์—ญ๋Ÿ‰์— ์˜์กด โœ… ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ํ™•์žฅ์„ฑ
๊ธฐํƒ€/์ฐธ๊ณ  ํ•™์Šต ๊ณก์„  โœ… ๋‚ฎ์Œ ์ค‘๊ฐ„-๋†’์Œ


๐Ÿ› ๏ธ ์‹ค์ œ ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ํ•˜๊ธฐ

NestJS ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๐Ÿš€ `npm i -g @nestjs/cli`๋กœ CLI๋ฅผ ์„ค์น˜ํ•œ ํ›„, `nest new project-name`์œผ๋กœ ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์‹ค์ œ ๊ฐœ๋ฐœ์—์„œ๋Š” ๋ชจ๋“ˆ ๊ตฌ์กฐ ์„ค๊ณ„๊ฐ€ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. ๐ŸŽฏ ๊ฐ ๊ธฐ๋Šฅ๋ณ„๋กœ ๋ชจ๋“ˆ์„ ๋ถ„๋ฆฌํ•˜๊ณ , Controller, Service, Repository ํŒจํ„ด์„ ํ™œ์šฉํ•˜์—ฌ ๊ณ„์ธตํ™”๋œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์€ UserModule๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™๋„ ๋งค์šฐ ๊ฐ„ํŽธํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ—„๏ธ TypeORM, Prisma, Mongoose ๋“ฑ ๋‹ค์–‘ํ•œ ORM์„ ์ง€์›ํ•˜๋ฉฐ, ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ๊ธฐ๋ฐ˜ ์—”ํ‹ฐํ‹ฐ ์ •์˜๋ฅผ ํ†ตํ•ด ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•˜๋ฉด์„œ๋„ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 


๐ŸŽฏ ๊ฒฐ๋ก 

NestJS๋Š” ํ˜„๋Œ€์ ์ธ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์˜ ์ƒˆ๋กœ์šด ํ‘œ์ค€์„ ์ œ์‹œํ•˜๋Š” ํ˜์‹ ์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ๐Ÿš€ TypeScript ๊ธฐ๋ฐ˜์˜ ํƒ€์ž… ์•ˆ์ „์„ฑ๊ณผ Angular ์Šคํƒ€์ผ์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•ด ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ํฌ๊ฒŒ ๋‹จ์ˆœํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

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

 

๋ฌผ๋ก  Express.js์— ๋น„ํ•ด ๋†’์€ ํ•™์Šต ๊ณก์„ ์ด ์กด์žฌํ•˜์ง€๋งŒ, ์žฅ๊ธฐ์ ์ธ ๊ด€์ ์—์„œ ๋ณผ ๋•Œ ํˆฌ์žํ•  ๊ฐ€์น˜๊ฐ€ ์ถฉ๋ถ„ํ•œ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ๐ŸŒŸ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ ๊ฐ€๋Šฅํ•œ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, NestJS๋Š” ์ตœ๊ณ ์˜ ์„ ํƒ์ž…๋‹ˆ๋‹ค.

 


 

๋ฐ˜์‘ํ˜•