살구잼의 여정
Published 2024. 11. 9. 23:37
NestJS 알아보기 카테고리 없음

NestJS /  https://docs.nestjs.com/

- 구조화된 코드 작성과 모듈화에 강점을 가진 Node.js 프레임워크

- Node.js의 웹 서버 프레임워크를 기반으로, TypeScript를 지원하여 타입 안정성과 코드 자동 완성을 제공

 

주요 개념들

모듈(Module)

- NestJS의 모든 애플리케이션은 모듈로 구성됨

- 특정 기능을 그룹화하는 단위

- NestJS에서 모듈은 @Module() 데코레이터로 정의되며, 모듈 내에서 사용할 수 있는 컴포넌트(서비스, 컨트롤러 등)를 지정할 수 있다.

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

위 예제에서, AppModule은 애플리케이션의 루트 모듈로, 컨트롤러와 서비스를 포함함.

 

컨트롤러(Controller)

- 클라이언트의 요청을 처리하고 응답을 반환하는 역할

- @Controller() 데코레이터를 통해 생성

- HTTP 메서드(@Get, @Post, @Put, @Delete 등)를 명시하여 특정 요청을 처리함.

import { Controller, Get } from '@nestjs/common';

@Controller('example')
export class ExampleController {
  @Get()
  findAll(): string {
    return 'This action returns all examples';
  }
}

GET /example 요청이 들어오면 findAll() 메서드가 실행되는 예시

 

서비스(Service)

- 비즈니스 로직 담당

- 컨트롤러와 모듈에 종속되지 않고 독립적인 로직을 수행

- @Injectable() 데코레이터를 통해 다른 컴포넌트에 주입할 수 있음

  - NestJS에서는 종속성 주입(Dependency Injection) 시스템을 활용하여 필요한 곳에 서비스를 주입할 수 있음.

 

 

주요 기능, 아키텍처

의존성 주입(Dependency Injection, DI)

- NestJS는 DI를 통해 모듈 간 결합도를 낮추고 테스트 용이성을 높힘.

- NestJS의 IoC(Inversion of Control) 컨테이너가 자동으로 인스턴스를 관리함.

 

미들웨어(Middleware)

- 요청과 응답 사이에서 특정 작업을 수행할 수 있는 함수    예) 인증, 로깅 등

- NestJS에서 미들웨어는 @Middleware() 데코레이터 대신 함수로 정의하고 apply() 메서드를 통해 모듈에 적용함.

import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  use(req: Request, res: Response, next: NextFunction) {
    console.log(`Request...`);
    next();
  }
}

 

파이프(Pipe)

- 데이터 유효성 검사를 수행하거나 데이터를 변환할 때 사용됨.

- NestJS는 기본적으로 ValidationPipeParseIntPipe 등 여러 파이프를 제공함.

- @UsePipes() 데코레이터를 사용해 적용함.

@Get(':id')
findOne(@Param('id', ParseIntPipe) id: number) {
  return this.exampleService.findOne(id);
}

"id" 파라미터를 정수로 변환하는 파이프를 적용하여 올바른 데이터 타입으로 처리하는 방식

 

profile

살구잼의 여정

@드림살구잼

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!