NestJS

Eugenius1st·2025년 12월 12일

NestJS

목록 보기
1/1

시작 전 환경 세팅

1️⃣ 필수 도구

Insomnia
→ API 테스트용 (Postman 대체)

2️⃣ NestJS CLI 설치 및 프로젝트 생성

npm i -g @nestjs/cli nest new project-name

nest new 명령어를 사용하면
기본적인 폴더 구조와 설정이 자동으로 구성된다.


Single Responsibility Principle (SRP)

NestJS는 단일 책임 원칙(SRP) 을 굉장히 강하게 따른다.

하나의 module / class / function 은 하나의 책임만 가져야 한다

기본 구조 예시

AppModule
├── AppController
└── AppService

역할 분리

  1. Controller
  • HTTP 요청/응답 처리
  • URL, Method 정의
  1. Service
  • 실제 비즈니스 로직 담당
  1. Module
  • 관련 Controller와 Provider를 묶는 단위

👉
Controller에서 로직을 처리하지 않고
Service로 위임하는 구조가 기본이다.


ValidationPipe (요청 데이터 검증)

NestJS는 class 기반 유효성 검사를 공식적으로 지원한다.

1️⃣ 패키지 설치
npm i class-validator class-transformer

class-validator : 유효성 검사

class-transformer : plain object → class 변환

2️⃣ DTO를 위한 패키지
npm i @nestjs/mapped-types

DTO 상속 및 변환을 도와주는 유틸 패키지

3️⃣ DTO 예시

export class CreateMovieDto {
  @IsString()
  title: string;

  @IsNumber()
  year: number;
}

👉
ValidationPipe를 사용하면

컨트롤러 진입 전에 자동으로 유효성 검증이 이루어진다.


Dependency Injection (DI)

NestJS의 가장 핵심 개념 중 하나.

NestJS의 DI 기본 구조 – 핵심 3요소

역할 - 의미
Provider - 주입 가능한 클래스
Consumer - 주입받는 쪽
Module - Provider를 등록하는 장소

예시

@Injectable()
export class MoviesService {}

@Module({
  providers: [MoviesService],
})
export class MoviesModule {}

@Controller('movies')
export class MoviesController {
  constructor(private readonly moviesService: MoviesService) {}
}

👉
객체를 직접 생성하지 않고
NestJS가 DI 컨테이너를 통해 자동으로 주입해준다.


Fastify vs Express

NestJS는 기본적으로 Express 위에서 동작한다

하지만 Fastify를 사용하면
Express 대비 약 2배 빠른 성능을 낼 수 있다.

Req / Res 직접 접근
getAll(@Req() req, @Res() res): GetMovieDto[] {
return this.movies;
}

NestJS에서는 @Req(), @Res() 데코레이터를 통해
플랫폼(Express / Fastify)의 객체에 직접 접근할 수 있다.

❗ 하지만 권장되지 않는 이유

NestJS의 추상화 레이어를 깨게 됨

플랫폼 종속 코드가 됨

테스트 및 유지보수 어려움 증가

👉
가능하면 NestJS 방식(@Body, @Param, @Query 등)을 사용하는 것이 좋다.


정리하며 느낀 점

NestJS는 구조와 규칙을 강하게 강제하는 프레임워크

처음엔 번거롭지만 규모가 커질수록 장점이 커진다

특히 DI + Module 구조는 테스트, 유지보수, 협업에 굉장히 유리하다

React 개발자 입장에서는
“왜 이렇게 나눠?” 싶지만
커질수록 이 구조가 왜 필요한지 체감하게 되겠지

profile
최강 프론트엔드 개발자가 되고싶은 안유진 입니다

0개의 댓글