Nest.js 기본설정

cm·2024년 1월 18일

Nest

목록 보기
3/7

Nest.js 기본설정

1. 설치 및 프로젝트 설정

1.1 node.js 설치

https://nodejs.org/en/ (설치되어 있다면 건너뛰기)

1.2 NestJS/CLI 설치

npm i -g @nestjs/cli

1.3 프로젝트 생성

nest new porject-name 또는 nest new ./ (폴더 안에서 nest 기본구조 생성)


2. 명령어

2.1 모듈 생성

nest g module 모듈명
nest g mo 컨트롤러명

2.2 컨트롤러 생성

nest g controller 컨트롤러명 --no-spec
nest g co 컨트롤러명
※ --no-spec : 테스트를 위한 소스 코드 자동 생성을 비활성화한다.

2.3 서비스 생성

nest g service 서비스명 --no-spec
nest g s 컨트롤러명

2.4 리소스 생성

컨트롤러, 서비스, 모듈을 한번에 생성한다.
nest g resource 리소스명
nest g res 리소스명

2.5 인터셉터 생성

HTTP 요청 또는 응답을 가로채는 인터셉터를 생성한다.
nest g interceptor 인터셉터명

2.6 미들웨어 생성

nest g middleware 미들웨어명

2.7 파이프 생성

파이프를 생성. 입력값을 가공하거나 검증하는데 사용된다.
nest g pipe 파이프명

2.8 게이트웨이 생성

웹소켓과 같은 실시간 통신을 다루는 게이트웨이를 생성한다.
nest g pipe 게이트웨이명

3. TypeORM 설치

pnpm i typeorm @nestjs/typeorm mysql2

  • package.json에 추가

    "pretest:e2e": "cd test && docker compose up -d && pwd",
    "test:e2e": "jest --config ./test/jest-e2e.json",
    "posttest:e2e": "cd test && docker compose rm -vsf && rm -rf .tmp",
    "e2e": "jest --config ./test/jest-e2e.json --watch"

4. dotenv 또는 @nestjs/config 설치

환경변수를 관리하는 라이브러리

4-1. dotenv

  • 목적: .env 파일을 사용하여 환경 변수를 로드하고 관리한다.
  • 정의: 프로젝트 root에 .env 파일 생성하여 키-값 쌍 형태로 환경 변수를 정의
  • 사용방법 :process.env
  • 설치 : pnpm i --save dotenv
DB_HOST=localhost
DB_PORT=5432

4-2. @nestjs/config

  • 목적: .env 파일뿐만 아니라 다양한 소스(환경 변수, 환경별 파일, 파일 등)에서 설정을 로드하고 관리한다.

  • 정의 : ConfigModule을 사용하여 설정로드 후, 프로바이더를 통해 액세스한다.

  • 사용방법 : get, getOrThrow

  • 설치 : pnpm i @nestjs/config

    // ConfigModule를 애플리케이션 모듈에 임포트
    @Module({
      imports: [ConfigModule.forRoot()],
    })
    // 설정을 사용하려는 서비스 또는 컴포넌트에서 ConfigService를 주입받아 사용
      constructor(private configService: ConfigService) {}
    
      getDatabaseHost(): string {
        return this.configService.get<string>('DB_HOST');
      }

    get()

    • 목적: get() 메서드는 데이터 구조나 설정 제공자에서 값을 가져오는 데 사용된다.
    • 사용 방법: 주로 일부 속성 또는 설정을 제공하는 객체 또는 서비스에서 호출된다. 예를 들어, 구성 값을 가져오는 get() 메서드를 가진 구성 서비스가 있을 수 있다.
    const databaseHost = configurationService.get('DB_HOST');

    getOrThrow()

    • 목적: getOrThrow() 메서드는 get()과 유사하지만 요청한 값이 발견되지 않거나 특정 조건이 충족되지 않으면 추가로 예외나 오류를 발생시킬 수 있다.
    • 사용 방법: 이 메서드는 특정 값이 존재할 것으로 예상되며, 그렇지 않으면 예외를 발생시켜 오류 상황을 처리하려고 할 때 유용하다.
    try {
      const databaseHost = configurationService.getOrThrow('DB_HOST');
    } catch (error) {
      console.error('데이터베이스 호스트를 가져오는 중 오류 발생:', error.message);
    }

5. Pipe

  • 설치 : pnpm install class-validator class-transformer --save
  • 기능 : data transformation, data validation 수행
  • 요청 데이터의 검증, 가공 또는 변환을 수행하여 컨트롤러 경로 처리기에 의해 처리되는 인수에 대해서 데이터를 조작하거나 검증하는데 사용함. 통과하면 컨트롤러의 핸들러가 작동하고 실패하면 에러 발생함
    • data transformation : 입력 데이터를 원하는 형식으로 반환 [ex] 문자열 -> 정수
    • data validation : 입력데이터를 평가하고 유효한 경우 변경되지 않은 상태로 전달. 그렇지 않으면 예외 발생 [ex] 이름길이가 10자 이하여야하는데 10자 이상이 되면 에러 발생
  • 사용방법 :
    • handler-level pipes : 핸들러 레벨의 파이프.
      • @UsePipes() 데코레이터 사용하면 해당 핸들러의 파라미터 값들에 대한 검증 수행가능. 주로 DTO 클래스 와 함께 사용되며 각 필드에는 데코레이터를 사용하여 규칙 및 제약조건 지정할 수 있다. (@IsNotEmpty(), @IsString(), @IsDate()...)
    • parameter-level pipes : 파라미터 레벨의 파이프.
      • @Body('title', 파이프)
    • global-level pipes : 애플리케이션 레벨의 파이프. 클라이언트에서 들어오는 모든 요청에 적용됨.
      • main.ts에 넣어준다. app.useGlobalPipes(파이프)
  • built-in Pipe 종류
    • ValidationPipe
    • ParseIntPipe
    • ParseBoolPipe
    • ParseArrayPipe
    • ParseUUIDPipe
    • DefaultValuePipe
profile
나를 위한 기록

0개의 댓글