[nest.js] Nest.js

김민재·2025년 4월 1일

nest.js

목록 보기
42/63

🦁 Nest.js

Nest.js에 대해 깊이 배워보고 싶어서 새로 작성한다.

  • TypeScript 기반의 웹 애플리케이션을 만들기 위한 프레임워크로, Angular의 아키텍처에서 영감을 받았고, Express나 Fastify와 함께 사용될 수 있다. NestJS는 강력한 DI(의존성 주입), 데코레이터, 모듈화된 아키텍처를 제공하여 대규모 애플리케이션을 쉽게 유지 관리하고 확장할 수 있다.

👍 Nest.js의 핵심

  1. 모듈화: 애플리케이션이 여러 개의 모듈로 나뉘며, 각 모듈은 관련된 컨트롤러, 서비스, 파이프, 미들웨어 등을 포함한다.

    • 모듈화를 통해 애플리케이션의 유지보수성을 높여주고, 각 기능이 독립적으로 관리될 수 있도록한다.

    • 효율성: 모듈화된 구조는 코드의 재사용성과 테스트 용이성을 증가시킨다. 각 모듈은 독립적으로 테스트할 수 있으며, 모듈 간의 의존성도 명확하게 정의된다.
  2. 의존성 주입(DI): 의존성 주입 패턴을 사용하여 클래스 간의 의존성을 관리한다. 객체 간의 결합도를 낮추고 테스트 가능성을 높여준다.

    • DI의 역할: 클래스는 필요한 의존성 객체들을 생성자에 주입받고, 이를 통해 의존성 객체에 접근할 수 있다.
    • 효율성: DI를 통해 객체 간의 강한 결합을 피할 수 있고, 코드 변경 시 한 곳만 수정하면 되므로 유지보수가 용이하다.
  3. 데코레이터: TypeScript의 데코레이터 기능을 활용한다. 클래스를 설명하는 메타데이터를 추가하고, 그 클래스를 다른 코드에서 어떻게 사용할지를 정의하는 역할을 한다.

    • @Controller(), @Injectable(), @Get() 등등 미리 만들어둔 데코레이터를 이용하며, 의존성 주입, 라우팅 등을 처리하는데 사용된다.
  4. 비동기 처리: 비동기 이벤트 기반 아키텍처를 활용하여 비동기 작업을 자연스럽게 처리할 수 있다.

🧩 Nest.js의 아키텍처

1. 모듈(Module): 데코레이터 @Module()을 사용해 정의되며, 다른 모듈을 imports 배열에 추가하여 의존성을 해결한다.

@Module({
  imports: [CatsModule],  // 다른 모듈을 임포트
  controllers: [CatsController],
  providers: [CatsService],  // 서비스 주입
})
export class AppModule {}

2. 컨트롤러(Controller): HTTP요청 즉 사용자와 소통하는 클래스이다.

@Controller('cats')
export class CatsController {
  constructor(private readonly catsService: CatsService) {}

  @Get()
  findAll() {
    return this.catsService.findAll();
  }
}

3. 서비스(Service): 가장 중요한 비즈니스 로직을 처리하는 클래스이다. @Injectable() 데코레이터를 이용하여 정의되며, 서비스 간의 의존성을 관리하고, 데이터를 처리한다.

@Injectable()
export class CatsService {
  findAll() {
    return 'All cats';
  }
}

4. 파이프(Pipe): 입력 데이터를 변환하거나 검증하는데 사용된다. 예를 들어, 유효성 검사, 형식 변환, 데이터 정규화 등을 처리할 수 있다.

5. 가드(Guard): 요청을 처리하기 전에 특정 조건을 확인할 수 있다. 예를 들어, 인증, 권한 확인 등을 처리하는 데 사용된다.

6. 인터셉터(Interceptor): 요청과 응답을 가로채서 처리할 수 있는 기능을 제공한다. 응답 데이터를 변환하거나, 로깅을 하는 데 사용된다.

profile
개발 경험치 쌓는 곳

0개의 댓글