방학 동안 열심히 백엔드 기술 스택 쌓기 위한 노력의 일환
spring 공부하기 + nestjs 공부하기
두개가 비슷한 점이 많아서 아직까지는 할만한 것 같다
무엇보다 곧 진행하는 프로젝트에서 nestjs를 사용하기 때문에
얼른 공부해둬야 싶어서 부랴부랴 강의 들으면서 정리하는 중이다
✅ Nestjs 설치
npm i -g @nestjs/cli
cli를 global 로 설치해서 어떤 디렉토리에서도 쓸 수 있도록 한다
✅ 프로젝트 생성
nest new (project-name)
또는
nest new ./
nest cli 를 설치했기 때문에 nest 명령어를 쓸 수 있다
현재 디렉토리인 ./를 입력하면 현재 위치에 프로젝트를 생성한다
✅ 새 모듈 추가
nest g module (module-name)
처음 공부하면서 이거 보고 되게 신기했다
같은 형식의 코드 복붙하는 것도 귀찮은 일인데
nest는 개발자의 편의성을 많이 배려하는듯 하다
src 디렉토리에 모듈네임에 해당하는 디렉토리와 모듈을 동시에 생성해준다
g는 generate의 약자이다
✅ 새 컨트롤러 추가
nest g controller (module-name) --no-spec
컨트롤러 추가도 cli에서 지원해준다
역시나 신기한 점은 파일 생성과 컨트롤러 등록까지 자동으로 해줌...
--no-spec 옵션은 테스트 파일을 생성하지 않는 옵션인데
아직은 테스트 코드를 짤 정도의 복잡한 어플리케이션이 아니기 때문에
일단 테스트 코드는 만들지 않는다
✅ 컨트롤러와 핸들러
컨트롤러 내부에 HTTP 메소드를 받는 부분을 핸들러라고 한다
스프링에서는 골뱅이 @를 에노테이션이라고 불렀는데
NestJs 에서는 데코레이터라고 한다
컨트롤러는 @Controller('{module-name}')
핸들러는 @Get('{url}') 이런 식으로
✅ 새 서비스 추가
nest g service (module-name) --no-spec
서비스 코드 파일도 자동으로 만들어줌
서비스는 @Injectable 이라는 데코레이터 감싼다
📝 ./boards/boards.module.ts
import { Module } from '@nestjs/common';
import { BoardsController } from './boards.controller';
import { BoardsService } from './boards.service';
@Module({
controllers: [BoardsController],
providers: [BoardsService],
})
export class BoardsModule {}
서비스는 해당 모듈에 해당하는 module 파일의 providers 항목에 등록해주면
의존성 주입이 된다
✅ DI (Dependency Injection)
📝 ./boards/boards.controller.ts
import { Controller } from '@nestjs/common';
import { BoardsService } from './boards.service';
@Controller('boards')
export class BoardsController {
boardsService: BoardsService;
constructor(boardsService: BoardsService) {
this.boardsService = boardsService;
}
}
컨트롤러에 서비스에 대한 의존성을 주입시키는 방법이다
타입스크립트 규칙으로 일단 프로퍼티를 명시해준 후 생성자를 통해 주입시킨다
근데 코드를 더 간결하게 쓸 수 있는데
import { Controller } from '@nestjs/common';
import { BoardsService } from './boards.service';
@Controller('boards')
export class BoardsController {
constructor(private boardsService: BoardsService) {}
}
nest는 typescript 덕에 private 같은 접근제어를 할 수 있다
이 부분도 스프링이랑 비슷한 방법이라서 이해하기는 쉬웠다
'📡 백엔드 > 🐱 Nest.js' 카테고리의 다른 글
[NestJs] 따라하면서 배우는 NestJs - 5 (레포지토리 구현 및 DB 이용 CRUD) (0) | 2022.07.07 |
---|---|
[NestJs] TypeORM 사용 시 RepositoryNotFoundError 해결하기 (0) | 2022.07.06 |
[NestJs] 따라하면서 배우는 NestJs - 4 (Postgres, TypeORM 적용) (0) | 2022.07.05 |
[NestJs] 따라하면서 배우는 NestJs - 3 (pipe와 validation) (0) | 2022.07.04 |
[NestJs] 따라하면서 배우는 NestJs - 2 (기본적인 CRUD 수행) (0) | 2022.07.04 |