nestjs

2. NestJS λΈ”λ‘œκ·Έ λ§Œλ“€κΈ° - CRUD 둜 μ‹œμž‘ν•˜μž.

goldjun 2022. 8. 10. 16:46

πŸ‘Œ NestJS λΈ”λ‘œκ·Έ λ§Œλ“€κΈ° μ‹œλ¦¬μ¦ˆμ˜ λͺ©μ 

μ €λŠ” NestJS μ „λ¬Έκ°€κ°€ μ•„λ‹™λ‹ˆλ‹€.
μ € λ˜ν•œ NestJS 둜 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“€λ €κ³  ν•œμ§€ ν•œλ‹¬μ΄ 채 λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

λ‹€λ§Œ μ œκ°€ κ³΅λΆ€ν•˜λ©΄μ„œ μŠ΅λ“ν•˜κ³  μ΄ν•΄ν•œ λ‚΄μš©μ„ λ°”νƒ•μœΌλ‘œ κ°„λ‹¨ν•œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“€λ©° 기본적인 지식을
μ—¬λŸ¬λΆ„κ»˜ 같이 κ³΅μœ ν•˜λŠ” 것이 제 λͺ©μ μž…λ‹ˆλ‹€.

λŒ€λΆ€λΆ„μ˜ μ •λ³΄λŠ” NestJS Doc , Github λ₯Ό μ°Έκ³ ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

이 μ‹œλ¦¬μ¦ˆλŠ”

  • CRUD κΈ°λŠ₯
  • Postgresql DataBase μ—°κ²°
  • Auth
  • λ©”μ‹œμ§€ 큐
  • 기타 κΈ°λŠ₯ (카톑 곡유, μΉ΄ν†‘μœΌλ‘œ λ‘œκ·ΈμΈν•˜κΈ° λ“±)

의 λ‚΄μš©μ„ λ‹€λ£° 것 μž…λ‹ˆλ‹€.

μ‚¬μš©ν•˜λŠ” IDE λŠ” VSCode μž…λ‹ˆλ‹€.

이후 μΆ”κ°€ν•  μ‚¬ν•­μ΄λ‚˜ μœ μš©ν•œ 팁이 μžˆλ‹€λ©΄ 더 μΆ”κ°€ν•˜κ² μŠ΅λ‹ˆλ‹€.

κΆκΈˆν•œ μ‚¬ν•­μ΄λ‚˜ μ œκ°€ ν‹€λ Έλ‹€κ³  μƒκ°ν•˜λŠ” 뢀뢄이 μžˆλ‹€λ©΄ μ–Έμ œλ“  ν”Όλ“œλ°± ν•΄μ£Όμ„Έμš”.


πŸ›΄ NestJS μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹œμž‘ν•˜κΈ°.

NestJS λŠ” Javascript 기반 Typescript μ–Έμ–΄λ₯Ό 주둜 λ‹€λ£Ήλ‹ˆλ‹€.
Javascript ν™˜κ²½μ„ μœ„ν•΄μ„œ Node.js κ°€ μ„€μΉ˜λ˜μ–΄ μžˆλŠ”μ§€ λ¨Όμ € ν™•μΈν•΄μ£Όμ„Έμš”.

Node.js μ„€μΉ˜ν•˜κΈ°

NestJS μ„€μΉ˜λ₯Ό μœ„ν•΄ λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό ν„°λ―Έλ„μ—μ„œ μ‹€ν–‰ν•΄μ£Όμ„Έμš”.

$ npm i -g @nestjs/cli

μ„€μΉ˜κ°€ μ •μƒμ μœΌλ‘œ λ˜μ—ˆλ‹€λ©΄ 이제 ν”„λ‘œμ νŠΈ 폴더λ₯Ό λ§Œλ“€μ–΄ λ΄…μ‹œλ‹€. project-name 은 μ›ν•˜μ‹œλŠ”λ°λ‘œ ν•˜λ©΄ λ©λ‹ˆλ‹€.
μ €ν¬λŠ” nestjs-practice 라고 지어보죠.

$ nest new nestjs-practice

νŒ¨ν‚€μ§€ λ§€λ‹ˆμ €λŠ” npm 을 μ‚¬μš©ν•˜κ² μŠ΅λ‹ˆλ‹€. (κ·ΈλŒ€λ‘œ μ—”ν„° 눌러주면 λ©λ‹ˆλ‹€.)

πŸ‘“κ΅¬μ‘° μ‚΄νŽ΄λ³΄κΈ°

src
  app.controller.spec.ts
  app.controller.ts
  app.module.ts
  app.service.ts
  main.ts

src ν΄λ”μ—λŠ” μ•±μ˜ μ½”λ“œλ“€μ΄ λͺ¨μ—¬μžˆλ‹€κ³  μƒκ°ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.
각 역할을 보자면

  • app.controller.spec.ts : spec 이 뢙은 νŒŒμΌλ“€μ€ ν…ŒμŠ€νŠΈ νŒŒμΌμž…λ‹ˆλ‹€. μ§€κΈˆμ€ λ¬΄μ‹œν•˜μ…”λ„ λ©λ‹ˆλ‹€.
  • app.controller.ts : μ•±μ˜ request 와 response λ₯Ό λ‹΄λ‹Ήν•˜λŠ” λΌμš°νŒ… κ΄€λ ¨ νŒŒμΌμž…λ‹ˆλ‹€.
  • app.module.ts : 앱을 κ΅¬μ„±ν•˜λŠ” κ΅¬μ‘°μ˜ 메타데이터λ₯Ό λ‹΄λ‹Ήν•˜λŠ” νŒŒμΌμž…λ‹ˆλ‹€.
  • app.service.ts : μ•±μ˜ λΉ„μ§€λ‹ˆμŠ€ λ‘œμ§μ„ λ‹΄λ‹Ήν•˜λŠ” νŒŒμΌμž…λ‹ˆλ‹€.

μ•žμœΌλ‘œ λͺ¨λ“  μ•±μ˜ κ΅¬μ„±μš”μ†Œλ“€μ€ μœ„μ™€ 같은 ν˜•νƒœλ‘œ λ§Œλ“€μ–΄μ§ˆκ±°μ—μš”!!

μ΅œμƒμ˜ ν΄λ”μ˜ λ‹€λ₯Έ νŒŒμΌλ“€μ€ ꡬ성 μš”μ†Œλ₯Ό λ‹΄λ‹Ήν•˜λŠ” λ…€μ„μ΄μ—μš”.
예λ₯Ό λ“€λ©΄ typescript ν™˜κ²½μ„€μ • 파일 λ˜λŠ” νŒ¨ν‚€μ§€ μ˜μ‘΄μ„± κ΄€λ¦¬νŒŒμΌ 같은 κ²ƒλ“€μ΄μ—μš”.!!

πŸ”¨κΈ°λŠ₯ λ§Œλ“€μ–΄λ³΄κΈ°

nest cli λŠ” 정말 μœ μš©ν•œ κΈ°λŠ₯듀을 많이 μ§€μ›ν•©λ‹ˆλ‹€.
nest generate κΈ°λŠ₯을 μ΄μš©ν•˜λ©΄ 자주 μ‚¬μš©ν•˜λŠ” μš©λ„μ˜ ν…œν”Œλ¦Ώμ„ 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.
λ‹€μŒμ€ nest generate | g λ₯Ό μ΄μš©ν•΄ λ§Œλ“€ 수 μžˆλŠ” λͺ…λ Ήμ–΄λ“€μž…λ‹ˆλ‹€.

  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚ name          β”‚ alias       β”‚ description                                  β”‚
  β”‚ application   β”‚ application β”‚ Generate a new application workspace         β”‚
  β”‚ class         β”‚ cl          β”‚ Generate a new class                         β”‚
  β”‚ configuration β”‚ config      β”‚ Generate a CLI configuration file            β”‚
  β”‚ controller    β”‚ co          β”‚ Generate a controller declaration            β”‚
  β”‚ decorator     β”‚ d           β”‚ Generate a custom decorator                  β”‚
  β”‚ filter        β”‚ f           β”‚ Generate a filter declaration                β”‚
  β”‚ gateway       β”‚ ga          β”‚ Generate a gateway declaration               β”‚
  β”‚ guard         β”‚ gu          β”‚ Generate a guard declaration                 β”‚
  β”‚ interceptor   β”‚ in          β”‚ Generate an interceptor declaration          β”‚
  β”‚ interface     β”‚ interface   β”‚ Generate an interface                        β”‚
  β”‚ middleware    β”‚ mi          β”‚ Generate a middleware declaration            β”‚
  β”‚ module        β”‚ mo          β”‚ Generate a module declaration                β”‚
  β”‚ pipe          β”‚ pi          β”‚ Generate a pipe declaration                  β”‚
  β”‚ provider      β”‚ pr          β”‚ Generate a provider declaration              β”‚
  β”‚ resolver      β”‚ r           β”‚ Generate a GraphQL resolver declaration      β”‚
  β”‚ service       β”‚ s           β”‚ Generate a service declaration               β”‚
  β”‚ library       β”‚ lib         β”‚ Generate a new library within a monorepo     β”‚
  β”‚ sub-app       β”‚ app         β”‚ Generate a new application within a monorepo β”‚
  β”‚ resource      β”‚ res         β”‚ Generate a new CRUD resource                 β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

μ˜ˆλ“€ λ“€λ©΄

nest g module catiscute

μœ„ λͺ…λ Ήμ–΄λŠ” catiscute λΌλŠ” λͺ¨λ“ˆμ„ μžλ™μœΌλ‘œ μƒμ„±ν•΄μ€λ‹ˆλ‹€. μ–΄λ•Œμš” 정말 μœ μš©ν•˜μ£ ? !!

μžμ•„μ•„μ•„ μ €κΈ° μ €κΈ° CRUD λ³΄μ΄μ‹œλ‚˜μš”? resource λΌλŠ” λͺ…λ Ήμ–΄λ₯Ό μ΄μš©ν•˜μ‹œλ©΄ CRUD 에 ν•„μš”ν•œ ν…œν”Œλ¦Ώμ„ 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.!!!!!
μš°ν›„ ~ λ°•μˆ˜λ°•μˆ˜ μ§„μ§œ 어메이징 ν•©λ‹ˆλ‹€. μ—¬λŸ¬λΆ„ 이 λͺ…λ Ήμ–΄λ‘œ λ°”λ‘œ ν…œν”Œλ¦Ώ μ–»λŠ” κ±°λŠ” μ§„μ§œ λ†€λΌμš΄κ±°μ—μš”!!

이제 users λΌλŠ” CRUD κΈ°λŠ₯을 λ§Œλ“€μ–΄λ³΄μ£ .

nest g res users

λ₯Ό μž…λ ₯ν•΄λ΄…μ‹œλ‹€. μ™€μš° 폴더 λ³΄μ΄μ‹œλ‚˜μš”?? !! λ³΄μ΄μ‹œλ‚˜μš”!!!
ν•œ κ°€μ§€ 더 λ§ν•˜μžλ©΄ app.module.ts νŒŒμΌμ— μžλ™μœΌλ‘œ UsersModule μ΄ μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.!!!
와 λ―Έμ³λ”° 미쳐따... μ§„μ§œ νŽΈλ¦¬ν•˜λ‹€ ... πŸ™€

μš°λ¦¬λŠ” 이제 μœ μ €μ— κ΄€ν•œ 기본적인 CRUD κΈ°λŠ₯을 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μš°ν›„~

ν•œ 번 앱을 μ‹€ν–‰ν•΄λ³ΌκΉŒμš”??

npm run start

μ–΄λž ?!?!? μ €λŠ” 이런 μ—λŸ¬κ°€ λ–³μŠ΅λ‹ˆλ‹€. nest κ°€ 생성해쀀 νŒŒμΌμ— μš°λ¦¬κ°€ μ„€μΉ˜ν•˜μ§€ μ•Šμ€ node λͺ¨λ“ˆμ΄ μžˆλ‚˜λ³΄λ„€μš”!!

1 import { PartialType } from '@nestjs/mapped-types';
                              ~~~~~~~~~~~~~~~~~~~~~~

λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό 톡해 μ„€μΉ˜ν•΄μ£Όμžκ΅¬μš”!!

npm install @nestjs/mapped-types --save

μ„€μΉ˜κ°€ 되면 λ‹€μ‹œ

npm run start

μœ ν›„~ μ΄λ²ˆμ—” μ—λŸ¬κ°€ μ—†μŠ΅λ‹ˆλ‹€!!!!! 둜그λ₯Ό λ³΄μ‹œλ©΄

[Nest] 35604   - 2021-01-22 11:31:13 β”œF10: AM─   [NestFactory] Starting Nest application...
[Nest] 35604   - 2021-01-22 11:31:13 β”œF10: AM─   [InstanceLoader] AppModule dependencies initialized +24ms
[Nest] 35604   - 2021-01-22 11:31:13 β”œF10: AM─   [InstanceLoader] UsersModule dependencies initialized +2ms
[Nest] 35604   - 2021-01-22 11:31:13 β”œF10: AM─   [RoutesResolver] AppController {}: +8ms
[Nest] 35604   - 2021-01-22 11:31:13 β”œF10: AM─   [RouterExplorer] Mapped {, GET} route +4ms
[Nest] 35604   - 2021-01-22 11:31:13 β”œF10: AM─   [RoutesResolver] UsersController {/users}: +1ms
[Nest] 35604   - 2021-01-22 11:31:13 β”œF10: AM─   [RouterExplorer] Mapped {/users, POST} route +0ms
[Nest] 35604   - 2021-01-22 11:31:13 β”œF10: AM─   [RouterExplorer] Mapped {/users, GET} route +9ms
[Nest] 35604   - 2021-01-22 11:31:13 β”œF10: AM─   [RouterExplorer] Mapped {/users/:id, GET} route +0ms
[Nest] 35604   - 2021-01-22 11:31:13 β”œF10: AM─   [RouterExplorer] Mapped {/users/:id, PUT} route +1ms
[Nest] 35604   - 2021-01-22 11:31:13 β”œF10: AM─   [RouterExplorer] Mapped {/users/:id, DELETE} route +0ms
[Nest] 35604   - 2021-01-22 11:31:13 β”œF10: AM─   [NestApplication] Nest application successfully started +2ms

RouteExplorer λ₯Ό λ³΄μ‹œλ©΄ users μ— κ΄€λ ¨λœ 맀핑듀을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€!!

이제 νŽΈν•˜μ‹  λΈŒλΌμš°μ €λ₯Ό ν‚€μ‹œκ³  http://localhost:3000 λ‘œ μ ‘μ†ν•˜μ‹œλ©΄!!

μ•„λ¬΄λŸ° μ„€μ • μ•ˆν•˜μ…¨μœΌλ©΄ μ•±μ˜ κΈ°λ³Έ ν¬νŠΈλŠ” 3000 μž…λ‹ˆλ‹€!!

Hello World!
사싀 이 νŽ˜μ΄μ§€λ₯Ό λ³΄λŠ”κ²Œ λͺ©μ μ΄ μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— 링크 뒀에 /users λ₯Ό μž…λ ₯ν•΄λ΄…μ‹œλ‹€

κ°€λ³΄μžκ΅¬μš”!! http://localhost:3000/users
This action returns all users

κ°€λ³΄μžκ΅¬μš”!! http://localhost:3000/users/1
This action returns a #1 user

λͺ¨μ•Όλͺ¨μ•Ό~ 벌써 λœκ±°μ•Ό? 우리 뭐 ν•œκ²ƒλ„ μ—†λŠ”λ°??

nest 정말 νŽΈν•œ κΈ°λŠ₯듀이 λ§ŽμŠ΅λ‹ˆλ‹€. λ‹€λ§Œ μš°λ¦¬κ°€ μ›ν•˜λŠ”κ±΄ λ‹¨μˆœνžˆ μ €λŸ° λ¬Έμžκ°€ μ•„λ‹ˆλΌ μ§„μ§œ μœ μ € 정보겠죠?

λ‹€μŒ μ‹œκ°„μ—λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ— μ—°κ²°ν•΄μ„œ μ§„μ§œ μœ μ € 정보λ₯Ό λ§Œλ“€κ³  κ°€μ Έμ˜€κ³  μˆ˜μ •ν•˜κ³  μ‚­μ œν•˜κ³ λ₯Ό λ°°μ›Œλ³΄κ² μŠ΅λ‹ˆλ‹€.

πŸ”¨ μ’€ 더 μ‚΄νŽ΄λ³΄κΈ°

자 근데 우리 μ—¬κΈ°μ„œ 마치면 μ’€ μ°μ°ν•˜μž–μ•„μš”? κ·ΈλŸ¬μ…”μ•Ό ν•©λ‹ˆλ‹€. κ·ΈλŸ΄κ±°μ—μš”. κ·Έλž˜μ„œ μ€€λΉ„ν–ˆμŠ΅λ‹ˆλ‹€!!

μ½”λ“œμ™€ ꡬ쑰λ₯Ό 쑰금 더 μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

users
    β”‚  users.controller.spec.ts
    β”‚  users.controller.ts
    β”‚  users.module.ts
    β”‚  users.service.spec.ts
    β”‚  users.service.ts
    β”‚
    β”œβ”€dto
    β”‚      create-user.dto.ts
    β”‚      update-user.dto.ts
    β”‚
    └─entities
            user.entity.ts

spec μ΄ 뢙은 νŒŒμΌμ€ ν…ŒμŠ€νŠΈ νŒŒμΌμž…λ‹ˆλ‹€. λ‹€μŒμ— ν…ŒμŠ€νŠΈ ν•  λ•Œ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€!

dto 에 κ΄€ν•œ λ‚΄μš©κ³Ό entities 에 κ΄€ν•œ λ‚΄μš©μ€ λ‹€μŒλ²ˆμ— λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²°ν•˜κ³  μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

그럼 service, controller, module 에 λŒ€ν•΄μ„œ ν•œλ²ˆ μ‚΄νŽ΄λ³΄μ£ .

πŸ”Service

Service νŒŒμΌμ€ λΉ„μ§€λ‹ˆμŠ€ λ‘œμ§μ„ μ²˜λ¦¬ν•˜λŠ” 파일이라고 ν–ˆμŠ΅λ‹ˆλ‹€. UserService ν΄λž˜μŠ€ μ•ˆμ„ μ‚΄νŽ΄ λ³΄μ‹œλ©΄
create, findAll, findOne, update, remove ν•¨μˆ˜λ“€μ΄ μžˆμŠ΅λ‹ˆλ‹€.
μ—¬κΈ°μ„œ λ¦¬ν„΄ν•˜λŠ” λ¬Έμžμ—΄μ΄ μš°λ¦¬κ°€ λΈŒλΌμš°μ €μ—μ„œ λ³Έ λ¬Έμžλ“€μ΄μ£ ?

그리고 클래슀 μœ„μ— @Injectable() μ΄λΌλŠ” Decorator κ°€ μžˆμŠ΅λ‹ˆλ‹€.

Decorator λŠ” κΈ°λŠ₯을 ν™•μž₯ν•  λ•Œ 쓰일 수 μžˆλŠ” λ””μžμΈ νŒ¨ν„΄μž…λ‹ˆλ‹€.
λ°μ½”λ ˆμ΄ν„° νŒ¨ν„΄μ΄ λ­”κ°€μš”?

Injectable λ°μ½”λ ˆμ΄ν„°λŠ” λ‹€λ₯Έ ν΄λž˜μŠ€μ— constructor λ₯Ό 톡해 이 클래슀λ₯Ό Inject ν•˜κΈ° μœ„ν•œ λ°μ½”λ ˆμ΄ν„°λ‘œ DI(Dependency Injection) κΈ°λŠ₯을 μ‚¬μš©ν•˜κΈ° μœ„ν•΄ μ“°μž…λ‹ˆλ‹€.

Controller νŒŒμΌμ„ 보면 더 이해가 잘 λ κ²λ‹ˆλ‹€!

🌭Controller

Controller νŒŒμΌμ€ λΌμš°νŒ…을 μ²˜λ¦¬ν•˜λŠ” νŒŒμΌμž…λ‹ˆλ‹€.
일단 UsersController 클래슀 μ•ˆμ— constructor λ₯Ό λ³΄μ‹œλ©΄. userService μ˜ νƒ€μž…λ§Œ μ§€μ •ν–ˆμŠ΅λ‹ˆλ‹€.

κ·ΈλŸΌμ—λ„ λΆˆκ΅¬ν•˜κ³  create ν•¨μˆ˜μ—μ„œ 이 this.userService.create λ₯Ό ν˜ΈμΆœν•˜κ³  μžˆλŠ”λ°μš”.

이게 μ–΄λ–»κ²Œ κ°€λŠ₯ν•œ 것이냐면 λ°”λ‘œ Nest 의 ν›Œλ₯­ν•œ DI μ‹œμŠ€ν…œ λ•Œλ¬Έμž…λ‹ˆλ‹€.

DI λŠ” κ°„λ‹¨ν•˜κ²Œ NestJS 의 틀에 맞게 μš°λ¦¬κ°€ μ–΄λ–€ 값을 μ§€μ •ν•΄μ£Όλ©΄ NestJS κ°€ μ•Œμ•„μ„œ 컨트둀 ν•΄μ£ΌλŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€.우리 UserService λΆ€λΆ„μ—μ„œ Injectable λ°μ½”λ ˆμ΄ν„°λ₯Ό 톡해 UserService λ₯Ό Injectable ν•œ provider 둜 μ§€μ •ν–ˆμŠ΅λ‹ˆλ‹€.λ”°λΌμ„œ UserController 클래슀 λ‚΄μ˜ constructor μ—μ„œ λ‹¨μˆœνžˆ userService 의 νƒ€μž…μ„ UserService 둜 μ§€μ •ν•΄μ€ŒμœΌλ‘œμ„œNestJSκ°€ μ•Œμ•„μ„œ this.userService 의 μƒμ„±κ³Ό μ†Œλ©Έμ„ κ΄€λ¦¬ν•˜κ²Œ λ©λ‹ˆλ‹€.

와 미쳐따 미쳐따!!! 정말 νŽΈν•˜λ‹€!!

아직 λͺ‡ κ°€μ§€ 더 봐야할 것이 μžˆμŠ΅λ‹ˆλ‹€.

λ°”λ‘œ @Controller λ°μ½”λ ˆμ΄ν„° μž…λ‹ˆλ‹€. λ°μ½”λ ˆμ΄ν„°μ—μ„œ "users" 라고 μ§€μ •ν•΄μ£Όκ³  μžˆμŠ΅λ‹ˆλ‹€. 이 말은 λ°”λ‘œ!

/users λΌλŠ” μ£Όμ†Œλ‘œ μš”μ²­μ΄ λ“€μ–΄μ˜€λ©΄ 이 ν΄λž˜μŠ€μ—μ„œ μ²˜λ¦¬ν•˜κ² λ‹€

λΌλŠ” λœ»μž…λ‹ˆλ‹€. μš°λ¦¬λŠ” UserController λ₯Ό app λͺ¨λ“ˆμ— κ°”λ‹€ λΆ™μ˜€μœΌλ‹ˆ μ£Όμ†ŒλŠ” localhost:3000/users κ°€ 되겠죠??.

이후 UsersController λ‚΄μ˜ ν•¨μˆ˜λ₯Ό 보면

@Post, @Get, @Put, @Delete λ°μ½”λ ˆμ΄ν„°λ“€μ΄ λ³΄μž…λ‹ˆλ‹€.

μ΄λ¦„μ—μ„œλ„ μœ μΆ”ν•  수 μžˆλ“―μ΄ /users 에 ν•΄λ‹Ήν•˜λŠ” λ©”μ„œλ“œλ‘œ λ“€μ–΄μ˜€λ©΄ 이 ν•¨μˆ˜μ—μ„œ μ²˜λ¦¬ν•˜κ² λ‹€. λΌλŠ” 뜻 μž…λ‹ˆλ‹€.

users 이후 맀핑도 μ§€μ •ν•  수 μžˆλŠ”λ°μš”.
@Get(":id") λΌλŠ” λ°μ½”λ ˆμ΄ν„°λŠ” /users/:id 둜 λ“€μ–΄μ˜¨ μš”μ²­μ„ 이 ν•¨μˆ˜μ—μ„œ μ²˜λ¦¬ν•˜κ²Ÿλ‹€ λΌλŠ” 뜻 μž…λ‹ˆλ‹€.

정말 직관적이죠?? μš°ν›„~

':' λ‘œ μ‹œμž‘ν•˜λŠ” λ¬Έμžμ—΄μ€ νŒŒλΌλ©”ν„°λΌλŠ” κ°’μœΌλ‘œ μΈμ‹ν•˜κ² λ‹€λŠ” λœ»μž…λ‹ˆλ‹€.
findOne 을 λ³΄μ‹œλ©΄ ν•¨μˆ˜ 인자 값에 @Param('id') μ΄λΌλŠ” λ°μ½”λ ˆμ΄ν„°λ₯Ό λΆ™μ—¬ :id μœ„μΉ˜μ˜ 값을 id λΌλŠ” 값에 ν• λ‹Ήν•˜λŠ” 과정을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ λΉ„μŠ·ν•˜κ²Œ @Body λ°μ½”λ ˆμ΄ν„°λŠ” request body 의 λ‚΄μš©μ„ λ³€μˆ˜μ— ν• λ‹Ήν•˜κ² λ‹€λŠ” 뜻 μž…λ‹ˆλ‹€.

정말 쉽닀쉽닀!!

πŸ₯£Module

UsersModule ν΄λž˜μŠ€λŠ” 이 users λΌλŠ” 폴더 μ•ˆμ˜ λͺ¨λ“ˆμ„ κ΄€λ¦¬ν•˜λŠ” ν΄λž˜μŠ€μž…λ‹ˆλ‹€.
이 λͺ¨λ“ˆμ˜ controllers λŠ” UsersController 클래슀λ₯Ό 톡해 κ΄€λ¦¬ν•˜κ² λ‹€!
이 λͺ¨λ“ˆμ˜ providers λŠ” UserService 클래슀λ₯Ό 톡해 κ΄€λ¦¬ν•˜κ² λ‹€ !!

잘 λ³΄μ‹œλ©΄ λ°°μ—΄μ˜ κ°’μ΄λ―€λ‘œ 볡수의 값을 ν• λ‹Ήν•  수 μžˆμŠ΅λ‹ˆλ‹€!!

이 UsersModule 을 app λͺ¨λ“ˆμ—μ„œ imports ν•˜κ³  있기 λ•Œλ¬Έμ— app 이 UserModule 을 인식할 수 있던 것 μž…λ‹ˆλ‹€!!

λ‹€λ₯Έ 값에 λŒ€ν•΄μ„œλŠ” 이후 ν¬μŠ€νŠΈμ—μ„œ λ‹€λ£¨κ² μŠ΅λ‹ˆλ‹€.


자 μ—¬λŸ¬λΆ„ 정말 쉽고 μ§κ΄€μ μœΌλ‘œ λ˜μ–΄μžˆμ§€ μ•Šλ‚˜μš”? μ œκ°€ NestJS λ₯Ό μ’‹μ•„ν•˜κ²Œ 된 이유 이기도 ν•©λ‹ˆλ‹€.!!

λ‹€μŒμ—λŠ” Postgresql λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ΄μš©ν•΄ μ§„μ§œ user 정보λ₯Ό μ €μž₯ν•΄λ³΄μžκ΅¬μš”!

ν”Όλ“œλ°±μ€ 항상 ν™˜μ˜μž…λ‹ˆλ‹€!!