๐Ÿฑ Nest.js ๊ณต๋ถ€ํ•˜๋ ค๊ณ  ์“ฐ๋Š” ์‹œ์ž‘ ๊ธ€

์ด์ค€์„ยท2021๋…„ 12์›” 13์ผ
0

nestjs

๋ชฉ๋ก ๋ณด๊ธฐ
1/3
post-thumbnail
post-custom-banner

์„œ๋ก 

Java ์™€ Spring ์„ ์‚ฌ์šฉํ•œ Javascript ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ํ•œ ๋ฒˆ์ฏค ๊ด€์‹ฌ์žˆ๊ฒŒ ๋ดค์„ ๋ฒ•ํ•œ ์„œ๋ฒ„ ํ”„๋ ˆ์ž„ ์›Œํฌ์ผ ๊ฒƒ ๊ฐ™๋‹ค. Express ๋„ ๊ต‰์žฅํžˆ ์ข‹์€ ์„œ๋ฒ„ ํ”„๋ ˆ์ž„์›Œํฌ์ด์ง€๋งŒ ๋„ˆ๋ฌด ์ž์œ ๋กœ์›Œ์„œ ๋ง๋ง๋Œ€ํ•ด์— ๋– ์žˆ๋Š” ๊ธฐ๋ถ„์ด์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ฐพ๋‹ค๊ฐ€ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ  ์š”์ฆ˜์— ๊ธฐ์—…๋“ค์—์„œ๋„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ๊ด€์‹ฌ์žˆ๊ฒŒ ๋ณด๊ณ  ์žˆ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ธ ๊ฒƒ ๊ฐ™๋‹ค.

๊ทธ๋ž˜์„œ nest.js ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ–ˆ๋Š”๋ฐ ํ˜ผ์ž์„œ ์ •๋ฆฌ๊ฐ€ ์ž˜ ์•ˆ๋˜๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ๋“ค์„ ์ ์–ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ์ˆ˜๋„ ์žˆ๊ณ  ๋‡Œํ”ผ์…œ์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ตœ๋Œ€ํ•œ ๊ณต์‹๋ฌธ์„œ์— ์˜๊ฑฐํ•ด์„œ ํŒฉํŠธ๋งŒ ์ ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜์€ ๊ณต์‹๋ฌธ์„œ์˜ ์ˆœ์„œ๋Œ€๋กœ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ์„ ํ•˜๊ณ  ์‹คํ–‰์‹œ์ผœ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

๋ณธ๋ก 

๐Ÿ“ nest.js ํŠน์ง•

์šฐ์„  nest.js ์˜ ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • Angular ํ”„๋ ˆ์ž„์›Œํฌ ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด์„œ ์˜๊ฐ์„ ๋ฐ›์•„์„œ ์ œ์ž‘๋˜์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค.
  • ํ…Œ์ŠคํŒ…์ด ํŽธ๋ฆฌํ•˜๊ณ  ์œ ์ง€๊ด€๋ฆฌ๊ฐ€ ์‰ฌ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ œ๊ณตํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.
  • API ๋“ค์ด ๋…ธ์ถœ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉ์„ฑ์— ๋งž์ถฐ์„œ ์ปค์Šคํ…€์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.
  • ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ•ด๋‹น ๋งํฌ๋ฅผ ํ†ตํ•ด์„œ ์ฝ์–ด๋ณด๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

๐Ÿ“ nest.js ์ƒ์„ฑํ•˜๊ธฐ

๊ทธ๋Ÿผ nest.js ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰์‹œ์ผœ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ•˜์ž.
nest.js ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‚ฌ์ „์— ๋‹ค์šด๋กœ๋“œ ํ•ด์ค˜์•ผ ํ•  ๊ฒƒ๋“ค์ด ์žˆ๋‹ค.

  • node.js (LTS๋กœ ๋‹ค์šด๋กœ๋“œ ๊ถŒ์žฅ)
  • ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” IDE (VSCode or Webstorm or ๊ทธ ์™ธ ํŽธํ•œ ํˆด)

ํ™˜๊ฒฝ์ด ์„ธํŒ…์ด ๋˜์—ˆ์œผ๋ฉด ํ„ฐ๋ฏธ๋„์„ ์ผœ๊ณ  nest ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ ๋‹นํ•œ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์œ„์น˜๋ฅผ ์˜ฎ๊ธด๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ์˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

$ npm i -g @nestjs/cli	// nestcli๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“ˆ ๋‹ค์šด
$ nest new project-name // nest ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

project-name ์€ ์ž์‹ ์ด ์›ํ•˜๋Š” ํ”„๋กœ์ ํŠธ ๋ช…์„ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ž์‹ ์ด ์‚ฌ์šฉํ•˜๋Š” IDE์— ์ž„ํฌํŠธํ•ด์„œ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. (nest.js ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Typescript ๋กœ ์„ธํŒ…๋˜์–ด ์žˆ์ง€๋งŒ ์ˆœ์ˆ˜ Javascript ๋กœ๋„ ์ฝ”๋”ฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.)

node_modules
src
   - app.controller.spec.ts
   - app.controller.ts
   - app.modules.ts
   - app.service.ts
   - main.ts
test
nest-cli.json
package-lock.json
package.json
tsconfig.build.json
tsconfig.json
.eslintrc.js
.gitignore
.prettierrc
README.md

์—ฌ๊ธฐ์„œ controller, modules, service ๋ผ๋Š” ์ด๋ฆ„์ด ๋ถ™์—ฌ์ง„ ํŒŒ์ผ๋ช…์ด ๋ณด์ด๋Š”๋ฐ ์„ค๋ช…ํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • Controller : Express ์˜ ๋ผ์šฐํŠธ์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์œผ๋กœ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋“ค์–ด์˜จ ์š”์ฒญ์„ ๋ถ„๊ธฐ์‹œ์ผœ์„œ ์„œ๋น„์Šค์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.
  • Modules : ์‘์šฉํ”„๋กœ๊ทธ๋žจ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•ด์ค๋‹ˆ๋‹ค.
  • Service : Controller ์—์„œ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ ๋œ ํ›„ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.
  • spec : spec ์ด๋ฆ„์ด ๋“ค์–ด๊ฐ€๋Š” ์ฝ”๋“œ๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ํŒŒ์ผ์ด๋ผ๊ณ  ์•Œ๋ฉด ๋œ๋‹ค.

๊ธ€๋กœ์จ๋Š” ์ดํ•ด๊ฐ€ ์•ˆ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๊ฐ€๋ฉด์„œ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋ฉด ์ดํ•ด๊ฐ€ ์ข€ ๋” ์‰ฝ๊ฒŒ ๋  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“ nest.js ์‹คํ–‰ํ•˜๊ธฐ

๋จผ์ €, ์ฝ”๋”ฉ์„ ๋“ค์–ด๊ฐ€๊ธฐ์ „์— ์„œ๋ฒ„๋ฅผ ์‹คํ–‰์‹œ์ผœ์„œ ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
์„œ๋ฒ„๋ฅผ ์‹คํ–‰ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์Šคํฌ๋ฆฝํŠธ๋Š” 4๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

"start": "nest start",
"start:dev": "nest start --watch",
"start:debug": "nest start --debug --watch",
"start:prod": "node dist/main",

์—ฌ๊ธฐ์„œ ๋‚˜๋Š” start:dev ๋ฅผ ์ด์šฉํ•ด์„œ ์‹คํ–‰ํ•ด ๋ณผ ์˜ˆ์ •์ด๋‹ค. ๋”ฐ๋ผ์„œ ํ„ฐ๋ฏธ๋„์„ ์ผœ์„œ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋“ค์–ด๊ฐ€๊ณ  ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

npm run start:dev

์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋กœ๊ทธ๊ฐ€ ๋œฌ๋‹ค.

[2:41:27 PM] File change detected. Starting incremental compilation...

[2:41:27 PM] Found 0 errors. Watching for file changes.

[Nest] 1335  - 12/13/2021, 2:41:27 PM     LOG [NestFactory] Starting Nest application...
[Nest] 1335  - 12/13/2021, 2:41:27 PM     LOG [InstanceLoader] ConfigHostModule dependencies initialized +17ms
[Nest] 1335  - 12/13/2021, 2:41:27 PM     LOG [InstanceLoader] AppModule dependencies initialized +0ms
[Nest] 1335  - 12/13/2021, 2:41:27 PM     LOG [InstanceLoader] ConfigModule dependencies initialized +0ms
[Nest] 1335  - 12/13/2021, 2:41:27 PM     LOG [RoutesResolver] AppController {/}: +2ms
[Nest] 1335  - 12/13/2021, 2:41:27 PM     LOG [RouterExplorer] Mapped {/, GET} route +2ms
[Nest] 1335  - 12/13/2021, 2:41:27 PM     LOG [NestApplication] Nest application successfully started +1ms

๊ทธ๋ฆฌ๊ณ  ๋””ํดํŠธ ํฌํŠธ๋Š” 3000๋ฒˆ์ธ๋ฐ ๋”ฐ๋กœ ์ˆ˜์ •ํ•˜์ง€ ์•Š์•˜์œผ๋ฉด http://localhost:3000 ์œผ๋กœ ์ ‘์†ํ•ด๋ณด๋ฉด "Hello World!" ๋ฉ”์‹œ์ง€๊ฐ€ ๋œฐ ๊ฒƒ์ด๋‹ค. (์ €๋Š” ํฌํŠธ๋ฅผ 8080์œผ๋กœ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค!)

์—ฌ๊ธฐ๊นŒ์ง€ ์™„๋ฃŒํ–ˆ์œผ๋ฉด ์•„๋ฌด ๋ฌธ์ œ ์—†์ด nest ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒ์„ฑ์ด ๋๋‹ค.

๊ฒฐ๋ก 

์˜ค๋Š˜์€ nest ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ๊ณผ ์‹คํ–‰๊นŒ์ง€ ์ž‘์„ฑ์„ ํ•ด๋ณด์•˜๋Š”๋ฐ, ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋ผ์šฐํ„ฐ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๊ณ  ๋กœ๊ทธ์™€ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๋ฉด์„œ ์ฝ”๋“œ์™€ ์ต์ˆ™ํ•ด ์งˆ ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ง€๋„๋ก ํ•ด๋ณด๊ฒ ๋‹ค.

๊ทธ๋Ÿผ ์ด๋งŒ.. ์ด์ด..๐Ÿƒ๐Ÿปโ€โ™€๏ธ

profile
ํ˜ธ์ฃผ ์›Œํ™€์ค‘ https://blog.naver.com/wnstjrl96
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€