Programming Project ์ž‘์—…์‹ค/๋‚ด์šฉ ์ •๋ฆฌ

[BackEnd][Node.js][nest.js-PJ] ์‚ฌ๋‚ด ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค - ์ดˆ๊ธฐ ๊ตฌ์„ฑ(Pipe, TypeORM, Configuration, Swagger, Logger)

์ฃผ๋‹ˆ์“ฐ๐Ÿง‘‍๐Ÿ’ป 2022. 4. 9. 19:21
728x90
๋ฐ˜์‘ํ˜•

 

 

Project Git Hub

 

 

๐Ÿ—‚ ๋ชฉ์ฐจ

โ— [BackEnd][Node.js][nest.js-PJ] ์‚ฌ๋‚ด ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค - ์ดˆ๊ธฐ ๊ตฌ์„ฑ(Pipe, TypeORM, Configuration, Swagger, Logger)

โ— [BackEnd][Node.js][Nest.js] ์‚ฌ๋‚ด ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค - ํšŒ์› ๊ฐ€์ž…

โ— [BackEnd][Node.js][Nest.js] ์‚ฌ๋‚ด ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค - JWT๋ฅผ ์ด์šฉํ•œ Login

โ— [BackEnd][Node.js][Nest.js] ์‚ฌ๋‚ด ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค - Passport, JWT๋ฅผ ์ด์šฉํ•œ ์ธ๊ฐ€ ์ฒ˜๋ฆฌ

โ— [BackEnd][Node.js][Nest.js] ์‚ฌ๋‚ด ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค - Custom Decorator

โ— [BackEnd][Node.js][nest.js-PJ] ์‚ฌ๋‚ด ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค - ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ : ์ดˆ๊ธฐ ๊ตฌ์„ฑ(Entity, Controller,Module,Repository,Service)

 

 

 

 

๐Ÿ“š ๋ถ€๋ก

โ— [Node.js] Node.js ๊ธฐ์ดˆ
โ— [JavaScript] ๊ธฐ๋ณธ ๋ฌธ๋ฒ• 
โ— [BackEnd][Node.js] ์‚ฌ๋‚ด ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค - ์ดˆ๊ธฐ ๊ตฌ์„ฑ
โ— [BackEnd][Node.js] ์‚ฌ๋‚ด ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค - ์ดˆ๊ธฐ ๊ตฌ์„ฑ : DB ์—ฐ๊ฒฐ
โ— [BackEnd][Node.js] ์‚ฌ๋‚ด ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค - ์ดˆ๊ธฐ ๊ตฌ์„ฑ : DB ์—ฐ๊ฒฐ(Sequelize)

โ— [Web] URL์˜ ์ดํ•ด
โ— 
[Spring] Spring์ด๋ž€?
โ—[Node.js][Nest.js] ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์™€ Data ํ˜•์‹ ๋ณ€ํ™˜ํ•˜๊ธฐ - Pipe
โ—[Node.js][Nest.js] Configuration (์„ค์ •)
โ—
[Node.js][Nest.js]TypeORM
โ— [Node.js][Nest.js] Logger ๊ธฐ๋Šฅ
โ—
[JavaScript] Promise์™€ async ๊ทธ๋ฆฌ๊ณ  await 
โ— 
[Nest.js] API ์„ค๊ณ„ - ์š”์ฒญ, ์‘๋‹ต ๊ฐ์ฒด (Request, Response Object) 
โ— 
[์ •๋ณด๋ณด์•ˆ] JWT(JSON Web Token) ์ด๋ž€? 
โ— 
[Nest.js] Middle Ware(๋ฏธ๋“ค์›จ์–ด)






 

 

 

 

๐Ÿค” ๋‚ด๊ฐ€ ๋งŒ๋‚œ Error

โ— [Node.js][Error] Cannot find module '.dotenv'

 

 

 

 

 

 

 

 

 

๐Ÿš€ Nest.js Project ์‹œ์ž‘ํ•˜๊ธฐ

    ๐Ÿ”ฝ  ๊ฐœ์š”

์•ˆ๋…•ํ•˜์„ธ์š”? ์ฃผ๋‹ˆํ•˜๋ž‘์€ ์ด์ „ ํฌ์ŠคํŒ…์—์„œ `Node.js`, `Express.js`, `Sequelize`๋ฅผ ์ด์šฉํ•˜์—ฌ Project๋ฅผ ์ง„ํ–‰ํ•ด๋ณด๋ ค ํ•˜์˜€๊ณ , ์ด์— ๋Œ€ํ•œ ์ดˆ๊ธฐ ๊ตฌ์„ฑ์— ๋Œ€ํ•ด ๊ธ€์„ ์ž‘์„ฑ ํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ, ์ฐพ์•„๋ณด๋‹ˆ `Nest.js`๊ฐ€ ์ฃผ๋‹ˆํ•˜๋ž‘์—๊ฒŒ๋Š” ๋„ˆ๋ฌด๋‚˜๋„ ์ž˜ ๋งž๋Š” Framwork๋ผ๊ณ  ์ƒ๊ฐ์ด ๋œ ๊ฒƒ์ด์—์š”.

๊ทธ ์ด์œ ๋Š” ์ฃผ๋‹ˆํ•˜๋ž‘์€ `JAVA` ๊ธฐ๋ฐ˜์˜ `Spring Boot`๋ฅผ ์—ด์‹ฌํžˆ ๊ณต๋ถ€ ์ค‘์ด์˜€๋Š”๋ฐ, `Node.js`๋„ ๊ณต๋ถ€ํ•˜๋ฉด ์ข‹์„๋งŒํ•œ ์ด์œ ๊ฐ€ ์ƒ๊ฒจ์„œ ํ•œ๋ฒˆ ๊ณต๋ถ€๋ฅผ ํ•ด๋ณด๋˜ ๋„ ์ค‘ `Express.js`๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ดํ•ดํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ผ๋‹จ `Nest.js`๋ฅผ ํ†ตํ•ด `Spring Boot`์™€ ๋น„์Šทํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ `Node.js`๋ฅผ ๊ณต๋ถ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ํŒ๋‹จํ•œ ๊ฒƒ์ด์—์š”.

์ด๋ฒˆ ํฌ์ŠคํŒ… ์‹œ๋ฆฌ์ฆˆ๋Š” ์ง€๋‚œ `Spring Boot`์˜ `Maven`๊ณผ `MyBatis`๋ฅผ ์ด์šฉํ•œ `[BackEnd][Maven-PJ] ์‚ฌ๋‚ด ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค ์‹œ๋ฆฌ์ฆˆ`๋ฅผ `Node.js`์˜ `Nest.js`๋กœ ๋ฐ”๊ฟ”์„œ ์ฝ”๋”ฉ์„ ํ•ด๋ณด๋ฉด์„œ ๊ณต๋ถ€๋ฅผ ํ•˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

๊ทธ๋Ÿฐ ์ด์œ ๋กœ ์ด๋ฒˆ ํฌ์ŠคํŒ…๋ถ€ํ„ฐ ๋‹ค์‹œ ์ฒ˜์Œ๋ถ€ํ„ฐ Project๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ , ์ง„ํ–‰์„ ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. 

์ฐธ๊ณ ๋กœ `Spring Boot` Project ์—์„œ๋„ `RESTFul `ํ•˜๊ฒŒ ๋งŒ๋“ค์ง€ ์•Š์•˜์—ˆ๊ณ , ๋ช‡๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ์–ธ๊ธ‰ํ–ˆ์—ˆ๋Š”๋ฐ, ์ด๋ฒˆ Project๋„ ์ผ๋‹จ ๋™์ผํ•˜๊ฒŒ ๊ตฌ์ถ•์„ ํ•˜๊ณ , ๋‚˜์ค‘์— `Refectoring`์„ ์ง„ํ–‰ํ•  ๊ฒƒ์ด์—์š”.

 

 

        ๐Ÿ“ฆ  Nest.js๋ž€?

`Nest.js`๋Š” ํšจ์œจ์ ์ด๊ณ , ํ™•์žฅ ๊ฐ€๋Šฅํ•œ `Node.js` Server ์ธก Application ๊ตฌ์ถ•์„ ์œ„ํ•œ Framwork์ธ ๊ฒƒ์ด์—์š”.

ํ”„๋กœ๊ทธ๋ ˆ์‹œ๋ธŒ `JavaScript`๋ฅผ ์ด์šฉํ•˜๊ณ , `TypeScript`๋กœ Build ๋ฐ ์™„๋ฒฝ ์ง€์›๋˜๋ฉฐ (๊ฐœ๋ฐœ์ž๊ฐ€ ์ˆœ์ˆ˜ `JavaScript` ๋ฌธ๋ฒ•์œผ๋กœ Coding ๊ฐ€๋Šฅ) `OOP(Object Oriented Programming)`, `FP(Functional Programming)`, `FRP(Functional Reactive Programming)` ์š”์†Œ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ฃผ๋Š” ๊ฒƒ์ด์—์š”.

`Nest.js`๋Š” ์•ž ์จ `Spring Boot`์™€ ์œ ์‚ฌํ•˜๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, ๊ฒŒ์‹œํŒ ๋“ฑ์„ ๋งŒ๋“ค ๋•Œ `Spring Boot`์™€ ๋™์ผํ•œ `MVC Pattern`์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

์ฃผ๋‹ˆํ•˜๋ž‘์€ ๊ฒŒ์‹œ๊ธ€์— ๊ด€ํ•œ Module๊ณผ ์ธ์ฆ, ์ธ๊ฐ€์— ๋Œ€ํ•œ Module์„ ์ด์šฉํ•  ๊ฒƒ์ด๊ณ , ๊ฐ Module์„ ๊ตฌ์„ฑํ•˜๋Š” `Controller`, `Service`, `Repository` ๋“ฑ์„ ์ด์šฉํ•ด์„œ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•  ๊ฒƒ์ด์—์š”.

 

        ๐Ÿ“ฆ  Nest.js ๋‚ด๋ถ€ ๊ตฌ์„ฑ

`Nest.js`๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ `Express.js(Default Value)`์™€ ๊ฐ™์€ ๊ฐ•๋ ฅํ•œ `HTTP Server Framwork`๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์„ ํƒ์ ์œผ๋กœ `Fastify`๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

๐Ÿ’ก ์ฐธ๊ณ  ์‚ฌํ•ญ
Fastify๋ž€?

`Fastify`๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์ด์œ ๋Š” ํšจ์œจ์ ์ธ Server๋Š” ๋‚ฎ์€ ๋น„์šฉ์œผ๋กœ ๋†’์€ ์‘๋‹ต์„ฑ์„ ๋ณด์—ฌ ์ด์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œ์ผœ์•ผ ํ•˜๋Š”๋ฐ, ์ด๋ฅผ ์œ„ํ•ด ๋ณด์•ˆ์„ฑ์„ ์œ ์ง€ํ•˜๊ณ , ๊ฐœ๋ฐœ์ž์˜ ๊ฐœ๋ฐœ ๋ถˆํŽธํ•จ์„ ์ตœ์†Œํ™”ํ•˜๋ฉด์„œ ์ˆ˜ ๋งŽ์€ ์ด์šฉ์ž๋“ค์˜ ์š”์ฒญ์„ ํšจ๊ณผ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด ์ค„ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

`Fastify`๋Š” ์ตœ์†Œํ•œ์˜ ์˜ค๋ฒ„ํ—ค๋“œ์™€ ๊ฐ•๋ ฅํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์•„ํ‚คํ…์ฒ˜๋กœ ์ตœ๊ณ ์˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋Š”๋ฐ ์ค‘์ ์„ ๋‘” `Web Framwork`
์ฆ‰, `Nest.js`, `Express.js`์™€ ๊ฐ™์€ `Web Framwork`์ด๋‹ค.
`Hapi`์™€ `Express`๋ฅผ ์ฐธ๊ณ ํ•ด ๋งŒ๋“ค์–ด์กŒ์œผ๋ฉฐ, ํ˜„์žฌ ๊ฐ€์žฅ ๋น ๋ฅธ `Web Framwork` ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

`Nest.js`๋Š” ์ด๋Ÿฌํ•œ ๊ณตํ†ต `Node.js` Framework (`Express.js`, `Fastify`)์œ„์— ์ถ”์ƒํ™” ์ˆ˜์ค€์„ ์ œ๊ณตํ•˜์ง€๋งŒ, API๋ฅผ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ง์ ‘ ๋…ธ์ถœํ•˜๋Š” ํŠน์ง•์ด ์žˆ๋Š” ๊ฒƒ์ด์—์š”. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๊ธฐ๋ณธ Platform์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜ ๋งŽ์€ ํƒ€์‚ฌ Module์„ ์ž์œ ๋กญ๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

 

 

        ๐Ÿ“ฆ  Nest.js ์ฒ ํ•™

`Node.js ๋ฐ Server ์ธก JavaScript`๋ฅผ ์œ„ํ•œ ํ›Œ๋ฅญํ•œ Library๋ฅผ ์ง€ํ–ฅํ•˜๋Š” ๊ฒƒ์ด์—์š”.

๋‹ค๋ฅธ Library๋„ ๋งŽ์ด ์กด์žฌํ•˜์ง€๋งŒ, ์ด๋“ค ์ค‘ ์–ด๋–ค ๊ฒƒ๋„ ์•„ํ‚คํ…์–ด์˜ ์ฃผ์š” ๋ฌธ์ œ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•˜๋Š” ๋‹จ์ ์ด ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

`Nest.js`๋Š” ๊ฐœ๋ฐœ์ž์™€ ๊ฐœ๋ฐœํŒ€์ด ๊ณ ๋„๋กœ Test ๊ฐ€๋Šฅํ•˜๊ณ , ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋Š์Šจํ•œ ๊ฒฐํ•ฉ์„ ์ถ”๊ตฌํ•˜๊ณ , ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ์‰ฌ์šด Application์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ Application ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด์—์š”.

์ด ์•„ํ‚คํ…์ฒ˜๋Š” `Angular`์—์„œ ์˜๊ฐ์„ ๋ฐ›์•˜๋‹ค๊ณ  ํ•ด์š”!

 

Nest JS ๊ณต์‹ ๋ฌธ์„œ

 

 

        ๐Ÿ“ฆ  Nest.js ๊ธฐ๋ณธ ๊ตฌ์กฐ

์ด   ๋ฆ„ ์„ค   ๋ช…
eslintrc.js ๊ฐœ๋ฐœ์ž๋“ค์ด ํŠน์ •ํ•œ ๊ทœ์น™์„ ๊ฐ€์ง€๊ณ  Code๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์งค ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” Library.
TypeScript๋ฅผ ์“ฐ๋Š” Guide Line์„ ์ œ์‹œํ•ด์ฃผ๊ณ , ๋ฌธ๋ฒ•์— ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ๋Š” ์—ญํ•  ๋“ฑ ์ˆ˜ํ–‰
prettierrc ์ฃผ๋กœ Code ํ˜•์‹์„ ๋งž์ถ”๋Š”๋ฐ, ์ด์šฉ.
์ž‘์€๋”ฐ์˜ดํ‘œ(')๋ฅผ ์‚ฌ์šฉํ• ์ง€ ํฐ ๋”ฐ์˜ดํ‘œ(")๋ฅผ ์‚ฌ์šฉํ• ์ง€ ํ˜น์€ Indent ๊ฐ’์„ 2 ํ˜น์€ 4๋กœ ์ค„์ง€ ๋“ฑ๋“ฑ์— ์ด์šฉ.
Error๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด ์•„๋‹Œ Code ํฌ๋งทํ„ฐ ์—ญํ•  ์ˆ˜ํ–‰.
nest-cli.json nest Project๋ฅผ ์œ„ํ•ด ํŠน์ •ํ•œ ์„ค์ •์„ ํ•  ์ˆ˜ ์žˆ๋Š” json File.
tsconfig.json ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ TypeScript๋ฅผ Compileํ• ์ง€ ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„.
tsconfig.build.json tsconfig.json์˜ ์—ฐ์žฅ์„ ์ƒ์˜ ํŒŒ์ผ.
bvuild๋ฅผ ํ•  ๋•Œ, ํ•„์š”ํ•œ ์„ค์ •์„ ํ•˜๋Š” ๋ถ€๋ถ„.
"excludes"์—์„œ๋Š” Build ํ•  ๋•Œ, ํ•„์š” ์—†๋Š” File๋“ค ๋ช…์‹œ.
package.json build : ์šด์˜ ํ™˜๊ฒฝ์„ ์œ„ํ•œ Build.
Format : Lint Error ๋ฐœ์ƒ ์‹œ ์ˆ˜์ •.
start : Application ์‹คํ–‰.
src ๋Œ€๋ถ€๋ถ„์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ํ•˜์œ„์— ๊ตฌ์„ฑ.
main.ts : Application ์ƒ์„ฑ ๋ฐ ์‹คํ–‰ (JAVA์˜ ๊ฒฝ์šฐ Main()์ด ์žˆ๋Š” Class)
app.module.ts : Application Module ์ •์˜

 

 

 

        ๐Ÿ“ฆ  Nest.js Module

App Module ์•ˆ์— ๊ฒŒ์‹œํŒ Module๊ณผ ํšŒ์› ๊ด€๋ จ Module์ด ์žˆ๋‹ค๋ฉด ๊ฐ Module์•ˆ์— `Controller`, `Entity`, `Service`๋“ฑ์ด ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

Module์€ `@Module()`์ด๋ผ๋Š” `Decorator(JAVA์˜ Annotation)`์ด ๋‹ฌ๋ฆฐ Class์ธ ๊ฒƒ์ด์—์š”.

`@Module()` Decorator๋Š” `Nest.js`๊ฐ€ Application ๊ตฌ์กฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š”๋ฐ, ์ด์šฉํ•˜๋Š” `Meta Data`๋ฅผ ์ œ๊ณตํ•œ๋‹ต๋‹ˆ๋‹ค.

๊ฐ Application์—๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ Module(Root Module)์ด ์กด์žฌํ•˜๋Š”๋ฐ, Root Module์€ `Nest.js`๊ฐ€ ์ด์šฉ๋˜๋Š” ์‹œ์ž‘์ ์ธ ๊ฒƒ์ด์—์š”.

 

Module์€ ๋ฐ€์ ˆํ•˜๊ฒŒ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ ์ง‘ํ•ฉ์œผ๋กœ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ•์„ ์ œ์‹œํ•˜๋Š” ๊ฒƒ์ด์—์š”.
(๊ธฐ๋Šฅ๋ณ„ ๊ตฌํ˜„ :์˜ˆ User Module, Oders Module, Chat Module)

๊ฐ™์€ ๊ธฐ๋Šฅ์— ํ•ด๋‹นํ•˜๋Š” ๊ฒƒ๋“ค์„ ํ•˜๋‚˜์˜ Module Directory์•ˆ์— ๋„ฃ์–ด ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

Module์€ ๊ธฐ๋ณธ์ ์œผ๋กœ `์‹ฑ๊ธ€ ํ†ค`์ด๋ฏ€๋กœ, ์—ฌ๋Ÿฌ Module ์‚ฌ์ด์— ์‰ฝ๊ฒŒ ๊ณต๊ธ‰์ž๊ฐ€ ๋™์ผํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

 

 

 

์ฃผ๋‹ˆํ•˜๋ž‘์€ ์ด๋ฒˆ `Node.js` Project์—์„œ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์œผ๋กœ ์„ ํƒํ•œ Q&A ๊ฒŒ์‹œํŒ๊ณผ ์ธ์ฆ, ์ธ๊ฐ€ ๋ฐ ํšŒ์› ๊ฐ€์ž…์— ๋Œ€ํ•ด์„œ ํฌ์ŠคํŒ…์„ ์ž‘์„ฑํ•˜๋ ค ํ•˜๋Š” ๊ฒƒ์ด์—์š”. `Spring Boot` Project๋„ ์ด ๋‘ ๊ฐ€์ง€ ๊ธฐ๋Šฅ๋งŒ ํฌ์ŠคํŒ…์„ ๋‚จ๊ธธ ๊ฒƒ์ด๊ณ , ๋‚˜๋จธ์ง€๋Š” ์ถ”๊ฐ€ ๊ฒŒ์‹œํŒ๋“ค์ด๋ผ ๋”ฐ๋กœ ํฌ์ŠคํŒ…์„ ๋‚จ๊ธฐ์ง€๋Š” ์•Š์„ ๊ฒƒ์ด์—์š”. ์™„์„ฑ๋œ Code๋Š” `Git Hub`์— ์˜ฌ๋ ค ๋‘๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

 

 

 

 

๐Ÿš€ ์ดˆ๊ธฐ ๊ตฌ์„ฑ

    ๐Ÿ”ฝ  ์„ค์น˜

        ๐Ÿ“ฆ Node.js

https://nodejs.org/ko/

 

Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

์œ„์˜ ๊ณต์‹ Site์— ๋“ค์–ด๊ฐ€๋ฉด ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ํ™”๋ฉด์ด ๋‚˜์˜ค๋Š” ๊ฒƒ์ด์—์š”.

 

node.js ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€

 

์ด ๊ณณ์—์„œ ์ž์‹ ์˜ ์šด์˜์ฒด์ œ(OS)์— ๋งž๋Š” LTS Version์„ ์„ค์น˜ํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด์—์š”.

 

์ฃผ๋‹ˆํ•˜๋ž‘์€ `MacOS`๋ฅผ ํƒ‘์žฌํ•œ `MacBook`์„ ์“ฐ๊ณ  ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

์„ค์น˜๊ฐ€ ๋‹ค ๋˜๊ณ  ๋‚˜๋ฉด ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ์„ค์น˜๊ฐ€ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

๋ช…๋ น์–ด

node -v

 

$ node -v

๋ฐ˜์‘ํ˜•

 

 

 

 

 

        ๐Ÿ“ฆ Nest.js - Nest.js CLI๋กœ Nest.js ์„ค์น˜ํ•˜๊ธฐ

`Spring Boot`์˜ ๊ฒฝ์šฐ ์ดˆ๊ธฐ ํ™˜๊ฒฝ ์„ค์ •์„ ํ•  ๋•Œ, `Spring initalizr` ๋“ฑ์„ ์ด์šฉํ•ด์„œ File๋“ค์„ ๋„ฃ์–ด์ฃผ๋Š”๋ฐ, `Node.js`์˜ ๊ฒฝ์šฐ ๋ช…๋ น์–ด ๊ธฐ๋ฐ˜์œผ๋กœ ์ดˆ๊ธฐ ํ™˜๊ฒฝ ๊ตฌ์„ฑ์„ ํ•˜๋Š” ์ฐจ์ด์ ์ด ์žˆ๋Š” ๊ฒƒ์ด์—์š”. ์•„๋ฌด๋ž˜๋„ `Node.js`๋Š” CLI๋ฅผ ์–ด๋Š์ •๋„ ๋‹ค๋ฃฐ ์ค„ ์•Œ์•„์•ผ ํŽธํ•˜๊ฒ ์–ด์š”!

 

์ฐธ๊ณ ๋กœ ์•„๋ž˜ ๋ช…๋ น์–ด๋“ค์€ Project Directory์—์„œ ์ž…๋ ฅํ•ด์ค˜์•ผ ํ•œ๋‹ค๋Š” ๊ฑธ ์žŠ์œผ๋ฉด ์•ˆ๋˜๋Š” ๊ฒƒ์ด์—์š”.

 

Project Directory

 

 

๋ช…๋ น์–ด

npm install -g @nestjs/cli

๋จผ์ € ์œ„์˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด `Nest.js`์˜ CLI๋ฅผ ๋ฐ›์•„์ค˜์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

 

Permission Denied Error

Mac OS๋‚˜, Linux์™€ ๊ฐ™์€ OS์—์„œ๋Š” ์œ„์™€ ๊ฐ™์€ `๊ถŒํ•œ ๋ฌธ์ œ`๋กœ ์ธํ•ด ์„ค์น˜๊ฐ€ ์•ˆ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

๊ทธ ์ด์œ ๋Š” `root` ๊ถŒํ•œ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ, ์ด๋Ÿด๋•Œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅ ํ•ด ์ฃผ๋ฉด ๋˜๋Š” ๊ฒƒ์ด์—์š”.

 

๋ช…๋ น์–ด

sudo npm install -g @nestjs/cli

 

$ sudo npm i -g @nestjs/cli

 

 

 

๋ช…๋ น์–ด

nest new {Projcet-Name}

๊ทธ๋Ÿฐ ๋’ค ์œ„์˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด Project ์ด๋ฆ„์— ๋งž๋Š” ํŒŒ์ผ๊ณผ ๋ชจ๋“ˆ๋“ค์ด ๋‚ด๋ ค ๋ฐ›์•„ ์ง€๋ฉด์„œ ์ดˆ๊ธฐ ํ™˜๊ฒฝ ๊ตฌ์„ฑ์ด ์™„๋ฃŒ ๋˜๋Š” ๊ฒƒ์ด์—์š”.

 

$ npm new {Project-Name}

์œ„์˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด `Package Manager`๋ฅผ ์–ด๋–ค ๊ฑธ ์‚ฌ์šฉํ•˜๊ฒ ๋ƒ๊ณ  ๋ฌป๋Š”๋ฐ, ์ฃผ๋‹ˆํ•˜๋ž‘์€ `npm`์„ ์ด์šฉํ•  ๊ฒƒ์ด์—์š”.

 

์ฐธ๊ณ ๋กœ Project ์ด๋ฆ„์˜ Directory๋ฅผ ๋งŒ๋“ค๊ณ , ๊ทธ ์•ˆ์—์„œ ์œ„์˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด Project ์ด๋ฆ„ Directory ์•ˆ์— ๋˜‘๊ฐ™์€ Directory๊ฐ€ ๋˜ ์ƒ๊ธฐ๊ณ , ๊ทธ ์•ˆ์— ํŒŒ์ผ๋“ค์ด ์ƒ๊ธฐ๋Š”๋ฐ, ์ด ๋ถ€๋ถ„์„ ์ฃผ์˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

 

 

`Nest.js`๊ฐ€ ์„ค์น˜ํ•ด์ค˜์„œ ๊ณ ๋ง™๋‹ค๊ณ  ํ•˜๋„ค์š”!

 

์ดˆ๊ธฐ ํ™˜๊ฒฝ ๊ตฌ์„ฑ ์™„๋ฃŒ

์ดˆ๊ธฐ ํ™˜๊ฒฝ ๊ตฌ์„ฑ์ด ์™„๋ฃŒ๋˜๋ฉด ์œ„์™€ ๊ฐ™์ด ํŒŒ์ผ๋“ค์ด ์ƒ์„ฑ ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

 

 

๋ช…๋ น์–ด

nest --version

`Nest.js`๊ฐ€ ์ œ๋Œ€๋กœ ์„ค์น˜ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ ํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ์œ„์˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด์—์š”.

 

$ nest --version

 

 

 

 

        ๐Ÿ“ฆ Pipe

๋จผ์ € `Pipe`์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ `์ด ๊ณณ`์— ์ค€๋น„ ํ•ด ๋‘” ๊ฒƒ์ด์—์š”.

 

๋ช…๋ น์–ด

npm install class-validator class-transformer --save

 

$ npm install class-validator class-transformer --save

 

`Pipe`๋ฅผ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” `class-validator`, `class-transformer` Module์ด ํ•„์š”ํ•œ ๊ฒƒ์ด์—์š”.

์œ„์™€ ๊ฐ™์ด ์„ค์น˜ ํ•ด ์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 

Documentation Page

 

 

 

 

        ๐Ÿ“ฆ TypeORM - Data Base ์—ฐ๋™

๋จผ์ € `TypeORM`์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ `์ด ๊ณณ`์— ์ค€๋น„ ํ•ด ๋‘” ๊ฒƒ์ด์—์š”.

 

$ npm install typeorm@0.2 @nestjs/typeorm mysql2 --save

 

 

directory path

์ตœ์ดˆ ์„ค์ • File์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด `/src` ๋ฐ‘์— `config` Directory๋ฅผ ๋งŒ๋“ค๊ณ , ๊ทธ ๋ฐ‘์— `typeorm.config.ts`๋ฅผ ๋งŒ๋“ค์–ด ์ด ๊ณณ์—์„œ Data Base ์„ค์ •์„ ํ•ด ์ค„ ๊ฒƒ์ด์—์š”.

์ฐธ๊ณ ๋กœ ์ฃผ๋‹ˆํ•˜๋ž‘์€ ๋ฐ‘์—์„œ `Configuration`์„ ์ด์šฉํ•˜์—ฌ ๋ฏผ๊ฐ ์ •๋ณด๋ฅผ ์ˆจ๊ธธ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— `typeorm.config.ts`์—์„œ ์ง์ ‘์ ์ธ Data Base ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด์—์š”.

 

 

typeorm.config.ts

์ตœ์ดˆ ๋‘๋ฒˆ์งธ ์ค„์— ๋ฐ‘์—์„œ ์–ธ๊ธ‰ํ•  ์„ค์ • ๋‚ด์šฉ๋“ค์„ `import` ํ•ด์ฃผ๊ณ , 4๋ฒˆ์งธ ์ค„์—์„œ ํ•ด๋‹น ์„ค์ • ํŒŒ์ผ์— `db`๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋‚ด์šฉ (๋ฐ‘ ๊ทธ๋ฆผ ์ฐธ๊ณ )์— ๋‚ด์šฉ์„ ๊ฐ€์ ธ์™€ dbConfig์— ๋„ฃ์–ด์ค€ ๊ฒƒ์ด์—์š”.

6๋ฒˆ์งธ ์ค„์— `export` Keyword๋ฅผ ํ†ตํ•ด `@nestjs/typorm` Module๋ฅผ `improt` ํ•œ ์ธ์Šคํ„ด์Šค `TypeOrmModuleOptions` ๊ฐ์ฒด ์ž๋ฃŒํ˜• Type์œผ๋กœ ๊ฐ–๋Š” ์ƒ์ˆ˜ํ˜•(const) ๊ฐ์ฒด('{}') `typeORMConfig`๋ฅผ ๋‹ค๋ฅธ ๊ณณ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋‚ด๋ณด๋‚ด๊ธฐ ํ•˜๊ณ , Data Base ์„ค์ • ๊ฐ’๋“ค์„ ๋„ฃ์–ด์ค€ ๊ฒƒ์ด์—์š”. `process.env.**`๋Š” ๋‚˜์ค‘์— AWS์™€ ๊ฐ™์€ Cloud ํ™˜๊ฒฝ์—์„œ Data Base๋ฅผ ์ด์šฉํ•  ๋•Œ, ํ•ด๋‹น ๋‚ด์šฉ์„ ๊ฐ€์ ธ์˜ค๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จ์ด๊ณ , `dbConfig.**`์€ ๋ฐ‘์—์„œ ์–ธ๊ธ‰ํ•  ์„ค์ • ๋‚ด์šฉ์—์„œ ๊ฐ’์„ ๊ฐ€์ ธ์™€ ์ฃผ๋Š” ๊ฒƒ์ด์—์š”.

`Spring Boot`์—์„œ๋Š” `application.yml`, `application.properties`์— ๊ฐ’์„ `@Value()`๋ฅผ ํ†ตํ•ด ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๊ฒƒ๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์ธ ๊ฒƒ์ด์—์š”.

17๋ฒˆ์งธ ์ค„์— `entities`๋Š” `Entity` ๊ฐ์ฒด๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ ์„ค์ •์ด๊ณ , 29๋ฒˆ์งธ ์ค„์—๋Š” Application์ด ์‹คํ–‰ํ•  ๋•Œ, ์„ค์ •๊ฐ’์— ๋”ฐ๋ผ true, false๊ฐ€ ๋ฐ”๋€Œ๋„๋ก ํ•œ ๊ฒƒ์ด์—์š”.

 

 

default.yml

 

 

 

        ๐Ÿ“ฆ Configuration (์„ค์ •)

๋จผ์ € `Configuration`์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ `์ด ๊ณณ`์— ์ค€๋น„ ํ•ด ๋‘” ๊ฒƒ์ด์—์š”.

 

$ npm install config --save

 

 

config Directory ์ƒ์„ฑ

 

 

config Directory ์ƒ์„ฑ

 

 

์„ค์ • File ์ƒ์„ฑ

 

 

default.yml

 

 

development.yml

`development.yml` ์—์„œ๋Š” Data Base Management System์˜ IP, ์ด์šฉ์ž IP, Password๋ฅผ ๋„ฃ์–ด์ค€ ๊ฒƒ์ด์—์š”.

๋งˆ์ง€๋ง‰ `synchronize`๋ฅผ true๋กœ ์„ค์ •ํ•˜๋ฉด `Spring Boot`์˜ `JPA` ๊ธฐ๋Šฅ์œผ๋กœ `ddl-auto`๋ฅผ ํ†ตํ•ด `Entity`๋ฅผ ์ฝ์–ด ์ž๋™์œผ๋กœ Table์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ , ๋ณ€๊ฒฝํ•ด์ฃผ๋Š”๋ฐ, ์ด์™€ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

์ฃผ๋‹ˆํ•˜๋ž‘์€ ์ด ์ „์— ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋˜ `Spring Boot` Project๋กœ ์ธํ•ด ์ด๋ฏธ DB Table๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— false๋กœ ์„ค์ •ํ•ด ์ค„ ๊ฒƒ์ด์—์š”.

 

 

production.yml

์šด์˜ ํ™˜๊ฒฝ์—์„œ ์ด์šฉํ•  Data Base๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ์ •๋ณด๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ , `synchronize`๋Š” false๋กœ ์„ค์ •์„ ํ•˜๋Š”๋ฐ, ๊ทธ ์ด์œ ๋Š” ์šด์˜์ด๋ผ๋ฉด ์‹ค์ œ ์„œ๋น„์Šค๋ฅผ ๊ตฌ๋™ํ•˜๋Š” ํ™˜๊ฒฝ์ด๊ณ , `synchronize`๊ฐ€ true ๋ผ๋ฉด `Entity` ๋ณ€๊ฒฝ์ด ์žˆ์„ ๋•Œ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜๋„ํ•˜์ง€ ์•Š์€ DB ๋ณ€๋™์ด ๋ฐœ์ƒํ•  ์œ„ํ—˜์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์ธ ๊ฒƒ์ด์—์š”.

 

์ด์ œ `main.ts`์—์„œ ์œ„ ์„ค์ •๋“ค์ด ์ธ์‹๋˜๋„๋ก ํ•ด ์ค˜์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

 

configuration ๊ตฌ์„ฑ ์ „

 

 

 

configuration ๊ตฌ์„ฑ ๋’ค

3๋ฒˆ์งธ ์ค„์— ์„ค์ • ํŒŒ์ผ์„ `import`ํ•˜๊ณ , 8๋ฒˆ์งธ ์ค„์— ํ•ด๋‹น ์„ค์ • Module ๊ฐ์ฒด์—์„œ `get()`์„ ํ†ตํ•ด `default.yml`์— ์„ ์–ธ๋œ server ๋‚ด์šฉ์„ ๊ฐ€์ ธ์™€ ์ƒ์ˆ˜ํ˜• ๋ณ€์ˆ˜ serverConfig์— ๋„ฃ์–ด์ค€ ๊ฒƒ์ด์—์š”.

serverConfig ๋ณ€์ˆ˜ ์•ˆ์—๋Š” port ๋ฒˆํ˜ธ๊ฐ€ ์žˆ๊ณ , ๊ทธ ๋ฒˆํ˜ธ๋ฅผ ์ƒ์ˆ˜ํ˜• ๋ณ€์ˆ˜ port์— ๋„ฃ์–ด์ค€ ๋’ค Application์ด ๋™์ž‘ํ•  ๋•Œ, 8080 Port๋กœ ๋™์ž‘ํ•˜๊ฒŒ ํ•ด ์ค€ ๊ฒƒ์ด์—์š”.

 

์ด์ œ Server๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๊ตฌ๋™๋˜๋Š”์ง€ ํ™•์ธ ํ•ด ๋ณผ ๊ฒƒ์ด์—์š”.

 

package.json

 

 

 

        ๐Ÿ“ฆ Swagger ์„ค์ •

`Swagger`๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ๊ณ  ์‹ถ์œผ์‹  ๋ถ„๋“ค์„ ์œ„ํ•ด ๊ฐœ์š”๋ฅผ `์ด ๊ณณ`์— ์ค€๋น„ ํ•ด ๋‘” ๊ฒƒ์ด์—์š”.

 

`Swagger`๋Š” `Nest.js`์—์„œ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก Module์ด ์ œ๊ณต ๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

๋ช…๋ น์–ด

npm install @nestjs/swagger swagger-ui-express --save

 

๋งŒ์•ฝ `Nest.js(fastify)`์„ ์ด์šฉํ•œ๋‹ค๋ฉด `swagger-ui-express` ๋Œ€์‹  `fastify-swagger`๋ฅผ ์„ค์น˜ํ•˜์—ฌ์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

 

๋ช…๋ น์–ด

npm install @nestjs/swagger fastify-swagger --save

 

 

์ฃผ๋‹ˆํ•˜๋ž‘์€ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด์„œ ์„ค์น˜ ํ•ด ์ค„ ๊ฒƒ์ด์—์š”.

npm install @nestjs/swagger swagger-ui-express --save

 

 

 

 

swagger.config.ts

์ตœ์ดˆ Swagger๋ฅผ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์„ค์ • Class๋ฅผ ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

`DocumnetBuilder()`๋ฅผ ํ†ตํ•ด ๋ฌธ์„œ์˜ ๊ธฐ๋ณธ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด ์ฃผ์—ˆ๊ณ , `Builder Pattern`์„ ์ด์šฉํ•ด์„œ ์ œ๋ชฉ, ๋‚ด์šฉ, ๋ฒ„์ „์„ ์„ค์ •ํ•ด ์ค€ ๊ฒƒ์ด์—์š”.

๊ทธ๋Ÿฐ ๋’ค API๋ฌธ์„œ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ ์œ„ํ•ด `createDocumnet()`๋ฅผ ํ˜ธ์ถœํ•ด์„œ Appication์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ๋„ฃ์–ด์ฃผ๊ณ , ๋ฌธ์„œ์˜ ๊ตฌ์„ฑ ๋‚ด์šฉ์„ ํ•จ๊ป˜ ๋„ฃ์–ด ์ค€ ๋’ค ์ƒ์ˆ˜ํ˜• ๋ณ€์ˆ˜ document์— ๋„ฃ์–ด์ค€ ๊ฒƒ์ด์—์š”.

๊ทธ๋Ÿฐ ๋’ค `setup()`์„ ํ˜ธ์ถœํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ Web Browser์„ ํ†ตํ•ด Swagger ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” URI Path๋ฅผ ๋„ฃ์–ด์ค€ ๊ฒƒ์ด์—์š”.

main.ts


๊ทธ๋ฆฌ๊ณ  ์œ„ 13๋ฒˆ์งธ ์ค„๊ณผ ๊ฐ™์ด main.ts์— swaggerConfig ์„ค์ • ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์–ด์•ผ ํ•ด์š”.

 

 

 

 

 

๐Ÿš€ Nest.js Project Server ๊ตฌ๋™ํ•˜๊ธฐ

 

 

12 ~ 15๋ฒˆ์งธ ๊นŒ์ง€ ์œ ์‹ฌํžˆ ์ง€์ผœ๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

12๋ฒˆ์งธ ์ค„์€ `nest.js` Application ๊ตฌ๋™ ๋ช…๋ น์–ด์ธ nest start๊ฐ€ ๋“ค์–ด ์žˆ๊ณ , 13 ~ 15๋ฒˆ์งธ ์ค„๊นŒ์ง€๋Š” ๊ฐ ํ™˜๊ฒฝ(๊ฐœ๋ฐœ, ์šด์˜ ๋“ฑ)์— ๋งž๋Š” ๋™์ž‘์„ ํ•˜๋„๋ก ๋ช…๋ น์–ด๊ฐ€ Value๋กœ ๋“ฑ๋ก๋˜์–ด ์žˆ๊ณ , Key๋กœ ์ด๋ฆ„์„ ๋ช…์‹œํ•œ ๋’ค ๊ฐ์ฒด Type์œผ๋กœ ์„ ์–ธ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

๋ช…๋ น์–ด

npm run start:dev

 

ํ˜„ ์‹œ์  Project๋Š” ๊ฐœ๋ฐœ ๋‹จ๊ณ„์ด๊ธฐ ๋•Œ๋ฌธ์— ์œ„์˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Server๋ฅผ ๊ตฌ๋™ํ•  ๊ฒƒ์ด์—์š”.

 

 

Server๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์˜€๊ณ , ์„ค์ • ๋‚ด์šฉ๋„ ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ๋˜๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

 

Swagger ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์™„๋ฃŒ ๋’ค ์ ‘์†

์œ„์™€ ๊ฐ™์ด ์ดˆ๊ธฐ ๊ตฌ์„ฑํ•œ `Swagger API` ๋ฌธ์„œ์— ์ž˜ ์ ‘์†ํ•œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

์ด์ œ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด์„œ `Controller` ๋“ฑ์—์„œ `Decorator(JAVA : Annotaion)`์„ ์ด์šฉํ•ด์„œ ๋ฌธ์„œ๋ฅผ ๊ณ„์† ์ž‘์„ฑํ•ด ๋‚˜๊ฐ€๋ฉด ๋˜๋Š” ๊ฒƒ์ด์—์š”. 

 

 

๋‹ค์Œ ๊ธ€ : [BackEnd][Node.js][Nest.js] ์‚ฌ๋‚ด ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค - ํšŒ์› ๊ฐ€์ž…

 

 

 

 

 

 

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•