rimo030 / nestjs-e-commerce-frame

✏️ NestJS로 구현한 Commerce API
47 stars 1 forks source link

NestJS 구조정리 #6

Open rimo030 opened 11 months ago

rimo030 commented 11 months ago

NestJS의 구조

Controller (Router), Service, Repository, Middleware, Interceptor, Pipe, Filter, Entity, Dto 등 NestJS의 구조를 이루는 각종 Layer에 대해서 학습하세요. 미리 학습해두면 추후 코드를 작성할 때 이해도가 높아져 있을 겁니다. 읽어도 이해가 가지 않는 부분은 추후 질문해주세요.

_Originally posted by @kakasoo in https://github.com/rimo030/Repo-Server/pull/1#discussion_r1377334130_


🔧Controller

사용자의 요청(request)을 처리하고, 응답(response)을 반환하는 역할

@Controller() 
export class ... {
 }

Routing

역할을 수행하기 위해 경로를 지정하는 것

@Controller(경로명) 
export class ... {
}

🔧Providers

어플리케이션이 제공하는 서비스 기능을 구현하고 수행하는 역할을 맡는 것 service, repository, factory, helper 등 여러가지 형태로 구현

의존성 주입

@Injectable()  # 싱글턴(Singleton) 객체로 메모리에 존재
export class ... {
}
@Controller('...')  # 생성자 기반 의존성 주입
export class ...{
    constructor(private readonly service: Service) {}

🔧Modules

서로 유사한 서비스 혹은 기능들끼리 모듈들로 묶인 코드 덩어리

@Module({
    imports: [module, ...],
    controllers: [controller, ...],
    providers: [provider, ...],
    exports: [provider, ...]
})
export class AppModule {}

전역모듈

@Global() # imports 설정 필요 X

🔧Pipe

data transformation과 data validation를 위해서 사용

Built-in pipes

  1. ParseIntPipe
  2. ParseFloatPipe
  3. ParseBoolPipe
  4. ParseArrayPipe
  5. ParseUUIDPipe
  6. ParseEnumPipe
  7. DefaultValuePipe
  8. ParseFilePipe

Custom pipes

import { PipeTransform, Injectable, ArgumentMetadata } from '@nestjs/common';

@Injectable()
export class ... implements PipeTransform {
  transform(value: any, metadata: ArgumentMetadata) {
    return value;
  }
}

🕹️Entity

애플리케이션에서 비즈니스 객체 또는 모델을 나타내는 클래스

@Entity() 

🕹️DTO(Data Transfer Object)

프로세스 간에 데이터를 전달하는 객체

🕹️Repository Pattern

Service Layer- Repository Layer-Data Source Layer


Middleware

기본적으로 Express 미들웨어와 동일

Interceptor

Filter


아래 블로그 시리즈가 이해에 도움이 되어 남깁니다! https://tristy.tistory.com/38?category=993422

kakasoo commented 11 months ago