TIL 2024-06-10

Taesoo Kim·2024년 6월 10일

What is Nest.js?

  • 특이하게 Angular 프레임워크에서 영감을 받아 제작된 프레임워크
  • 모듈식 아키텍쳐로 인한 유연한 구조
  • Typescript 기반
  • 모듈, 미들웨어 및 컨트롤러와 강력한 DI 시스템

-> 어느정도 정형화된 백엔드 규칙을 따르고 있다!

Power of Nest.js

  1. 아키텍쳐 -> 정형화된 개발 제공, 유지보수에 용이
  2. 데코레이터 -> 메타데이터 추가, 모듈 확장
  3. Typescript 지원 -> 타입에러 및 테스팅
  4. Dependency Injection -> 모듈간의 결합도를 낮추는 방식

Basic Flow of Nest

  1. Controller -> 특정 api 엔드포인트를 처리
  2. Service
  3. Module -> 특정 기능 또는 비즈니스 로직을 담당하는 컴포넌트 집합

Module

기능 또는 비즈니스 로직을 관리하는 집합체. 주로
providers, controllers, import, exports 정도가 포함된다.

Feature Modules

어플리케이션의 특정 기능을 캡슐화
예를 들어, 사용자 관리, 상품관리, 주무처리 등 특정 기능에 대해 컨트롤러에 등록

Shared Modules

전반적으로 공통적으로 쓰는 기능을 제공
DB 접속이라던지, 로깅, 인증 등 각각의 feature modules에서 쓸 수 있는 공통 기능의 집합

Controller

API 엔트포인트를 관리 -> 평소에 알던 그 컨트롤러
여러 데코레이터로 기능을 손쉽게 추가할 수 있음!

Service

DI와 엮어서 이해하는게 편함..

Dependency Injection

특정 클래스가 의존하고 있는 다른 클래스나 컴포넌트를 직접 만드는 것이 아닌, 외부에서 주입받아 사용하는 방식.
모듈간의 결합도를 낮추고, 유연성과 재사용성을 높이고자 고안
수월한 단위테스트가 가능

동작방식

  • 클래스는 필요한 의존성을 명시적으로 정의
  • DI 컨테이너 또는 IoC 컨테이너는 이런한 의존성을 관리. 이 컨테이너는 필요한 의존성을 찾아 인스턴스를 생성하고 이를 요청한 클래스에 주입
  • 클래스는 직접적으로 의존성을 생성하거나 관리할 필요 없이 해당 의존성을 사용할 수 있게 된다

Ex)


@Controller('cats)
export class CatsController {
	constructor(private catsService: CatsService){}
	@Post()
	async create(@Body() cat:Cat){
		this.catsService.create(cat);
	}
	@Get()
	async findAll(): Promise<Cat[]>{
		return this.catService.findAll();
	}
}

직접 서비스를 구현한 것이 아닌, constructor를 통해서 서비스를 주입받는 것을 볼 수 있다. 유닛테스트때 모의 객체를 만들면 쉽게 테스트가 가능하다.

하지만, module에 provider에 명시되지 않은 service는 등록할 수 없다.

File Naming Convention

여러 파일들이 존재해서 모르겠지만,
일단은 케밥케이스!!!
운영체제에 따른 대소문자 구분을 피할 수 있어서 좋다.

ex) user-profile.controller.ts

필터와 파이프

보통 클라이언트에서 오는 요청이 바로 컨트롤러로 도달하지는 않는다. 그 중간에 여러 단계를 거치면서, 유효성 검사든, 데이터 변환이던, 어떤 일련의 테스트들을 통과해서 컨트롤러에 닿게 된다. 그때, 마주치는 것이 바로 필터와 파이프이다.

파이프에선 특히 유효성 검사와 데이터 변환에 초점을 두고 있다. 그리고, 가장 중요한 로그인, jwt를 사용한 인증/인가에 활용되고 있다. 네스트에서는 기본적으로 여러 파이프를 지원하고 있다.

ValidationPipe

dto에 맞는 값이 들어오는지 확인하는 파이프이다.

ParseIntPipe

말그대로 대개 스트링으로 들어오는 숫자들의 타입변환을 해주는 파이프이다.

뭐 이런 기능들이 있다.

Decorator

좀 더 편한 코딩 스타일을 제공해 주는데, 클래스 데코레이터, 매개변수 데코레이터, 메서드 데코레이터 같은 것들이 있다.

profile
뭔 생각을 해. 그냥 하는 거지 뭐

0개의 댓글