Nest.JS

공부의 기록·2022년 3월 31일
0

Nest.JS

목록 보기
2/2
post-thumbnail

Nest.JS

본 문서는 2022년 3월 31일 에 작성되었습니다.

국내 번역 문서 및 강의를 참고하였으며, 이해가 되지 않는 부분은 공식 문서를 참고하였습니다.


Structure

Module

Module 은 @Module() 이 선언된 클래스입니다.

@Module() 은 Nest Application 이 해당 클래스를 조직화된 구조 안으로 넣기 위해서 필요한 metadata 를 제공해줍니다.

@Module({
  imports: [],
  controllers: [], // 컨트롤러
  providers: [], // 공급자
  expotrs: []
}) export class Module {}

Dependency Injection 에 대해서

Controller

Controller 는 @Conroller() 이 선언된 클래스입니다.
해당 Decorator 안에는 매개변수로 Routing URL 을 넣어줘야합니다.

클라이언트의 요청이 URL/user 로 들어오면 Nest 는 이를 해당 Controller 로 보내줍니다.

사용하려면 해당 @Module() 의 controllers: [] 안에 넣어줘야 합니다.

@Controller('/user')
export class UserController {
   // ...
}

@Request Object 에 대해서

Service

Service 는 @Injectable() 이 선언된 클래스입니다.

Controller 가 복잡한 비즈니스를 처리해야 할 경우, 해당 내용은 Servcie 클래스에서 처리하고 결과를 리턴하는 것을 담당합니다.

사용하려면 해당 @Module() 의 providers: [] 안에 넣어줘야 합니다.

@Injectable()
export class AuthService {
   //...
}

Repository

Repository 는 사용하는 DB 에 따라 고유한 Decorator 가 선언된 클래스입니다.

Service 가 복잡한 DB 처리를 포함할 경우, 해당 내용은 Repository 클래스에서 처리하고 결과를 리턴합니다.

아래는 TypeORM - PotsgreSQL 을 기준으로 작성된 Repository 입니다.

@EntityRepository(EntityName)
export class Repository extends Repository<User> {
   // ...
}

Middleware

이는 Express 의 Middleware 와 문맥상 동일합니다.
하지만, Express 훨씬 체게적인 구조를 가지고 있습니다.

Middleware 는 route handling 이전에, request 와 response 에 접근해 어떠하여 기능을 담당합니다.

Nest 에는 총 4가지 Middleware 가 존재합니다.

  1. Pipe | 주로 유효성 검사 등을 담당
  2. Filter | 에러 핸들링 등을 담당
  3. Guards | 인증 미들웨어 등을 담당
  4. Intercepter | 응답 매핑 및 캐시 관리와 함께 요청 로깅과 같은 전후 미들웨어

이러한 Middleware 의 호출 순서는 다음과 같습니다.

  1. guard
  2. interceptor(bef)
  3. pipe
  4. controller
  5. service
  6. controller
  7. interceptor(af)
  8. filter (if applicable)
  9. client
profile
2022년 12월 9일 부터 노션 페이지에서 작성을 이어가고 있습니다.

0개의 댓글