NestJS 는 Java 의 Spring 또는 Python 의 django 처럼 Node 기반의 프로젝트에 익숙한 아키텍처와 구조를 제공한다. 기존에 Node 를 활용한 프로젝트는 망망대해에서 나만의 레고 블록을 조립하는 느낌이 강했다. (본인이 원하는 대로 프로젝트 구조를 잡아갈 수 있는 장점은 있지만 그 만큼 시간과 노력이 많이 들고 공부해야 할 양도 방대해 짐, 물론 NestJS 라고 공부할 양이 적거나 그런건 아니다). 그러나 NestJS 를 사용하면 정해진 틀 안에서 Router 를 작성하고 DB 와 연결하고 테스트 코드를 작성하면서 보다 쉽게 프로젝트 구조를 구성할 수 있게 해주고 무엇 보다 개인적으로 Typescript 를 사용한다는 점이 굉장히 맘에 들었다.
$ npm i -g @nestjs/cli
$ nest new nest-tutorial
nestjs/cli 를 global 로 설치하면 NestJS 의 유용한 기능들을 터미널로 사용 할 수 있다. 그리고 yarn 보다 npm 을 사용하는 것을 추천한다.
src 폴더를 열어보면 controller 와 service 그리고 중요한 app.module.ts, main.ts 가 존재하는데 main.ts 코드를 보면 3000 번 포트로 앱을 실행시키는 것을 알 수 있다. 그리고 controller 와 service 를 사용하기 위해서는 app.module.ts 에 등록을 해줘야 한다.
NestJS 는 Controller 와 비즈니스 로직을 구분지어 코드를 작성해야 한다. 컨트롤러는 URL 을 가져올 뿐이고 URL 에 맞는 데이터를 Service 에서 가져와서 리턴 해준다. Service 는 사실상 비즈니스 로직을 실행하는 역할이라고 볼 수 있다.
간단한 User Controller 를 만들어 보자.
$ nest g co
위 명령어는 NestJS 에게 새로운 controller 를 만들어 달라고 하는 것이다. 위 명령어를 실행시키면 controller 의 이름을 무엇으로 할건지 물어보는데 간단하게 users 로 만들자. 그리고 app.module.ts 를 보면 자동으로 아래와 같이 users 의 controller 가 등록되어 있다. NestJS의 cli 기능이 이런 점에서 참 편리하다.
// app.module.ts
import { Module } from '@nestjs/common';
import { UsersController } from './users/users.controller';
@Module({
imports: [],
controllers: [UsersController], // router 같은 존재
providers: [],
})
export class AppModule {}
그리고 간단한 users controller 를 작성 해 보자.
// users.controller.ts
import { Body, Controller, Delete, Get, Param, Patch, Post } from '@nestjs/common';
@Controller('users')
export class UsersController {
@Get()
getAllUser() {
return '모든 유저 정보를 요청합니다.';
}
@Get('/:id') // Decorator 의 id 와 Param 의 id 의 네임은 일치해야 하지만 뒤의 오는 변수명은 아무거나 사용해도 된다
getUserById(@Param('id') userId: string) {
return `${userId} 의 유저 정보를 요청합니다!`;
}
@Patch('/:id') // Decorator 의 id 와 Param 의 id 의 네임은 일치해야 하지만 뒤의 오는 변수명은 아무거나 사용해도 된다
patchUserById(@Param('id') fooId: string) {
return `${fooId} 의 유저 정보가 업데이트 됩니다`;
}
@Delete('/:id')
deleteByUserId(@Param('id') userId: string) {
return `${userId} 의 유저가 삭제 되었습니다`;
}
}
NestJS 의 decorator 를 이해하는 것은 굉장히 중요하다. decorator 를 통해 해당 함수의 역할 및 기능들을 정의해 준다.
$ npm run start:dev
위 명령어로 프로젝트를 실행한 후에 Postman 또는 Insomnia 툴을 활용해서 아래의 주소로 요청을 보내보자.
- GET localhost:3000/users
- GET localhost:3000/users/1
- PATCH localhost:3000/users/1
- DELETE localhost:3000/users1
controller 에 작성한 return 값들을 확인 할 수 있다. 사실 controller 는 위에 작성한 예제처럼 직접 리턴값을 반환하는 것이 아닌 service 에서 비즈니스 로직을 받고 그 값을 리턴해야 한다. service 로직과 Post 요청에 대해서도 알아 보도록 하자.
참고
'Development > NestJS' 카테고리의 다른 글
NestJS + TypeORM + Migration 설정 (0) | 2021.02.01 |
---|---|
NestJS 코드 변경이 적용되지 않을 때 해결법 (0) | 2021.01.06 |
[NestJS] 간단하게 일단 맛보기 #3 (0) | 2020.12.31 |
[NestJS] 간단하게 일단 맛보기 #2 (0) | 2020.12.30 |
최근댓글