0. Nest JS 프로젝트 구조

수원 개발자·2023년 11월 23일
0

NestJS

목록 보기
2/15

프로젝트 시작하기

먼저 프로젝트를 시작할 폴더를 생성하고 폴더 안에서 다음 명령어를 통해 nest 기본 구조를 생성한다.

npm i -g @nestjs/cli

nest new ./

앱 실행은 다음과 같이 실행한다.

npm start:dev

Nest JS 기본 구조 설명

  • eslint : 개발자들이 특정한 규칙을 가지고 코드를 깔끔하게 짤 수 있게 도와주는 라이브러리이다. 타입스크립트를 쓰는 가이드 라인 제시, 문법에 오류가 나면 알려주는 역할 등을 수행한다.
  • prettier : 주로 코드 형식을 맞추는데 사용한다. 작은따옴표(')를 사용 할지 큰 따옴표(")를 사용할지, Indent 값을 2로 줄지 4로 줄지 등등의 역할을 하며 에러 찾는것이 아닌 코드 포맷터 역할을 한다.
  • nest-cli.json : nest 프로젝트를 위해 특정한 설정을 할 수 있는 json 파일이다.
  • tsconfig.json : 어떻게 타입스크립트를 컴파일 할지 설정하는 파일이다.
  • tsconfig.build.json : tsconfig.json의 연장선상 파일이며, build를 할 때 필요한 설정들을 적고 "excludes"에서는 빌드할 때 필요 없는 파일들을 명시한다.
  • package.json
    build -> 운영환경을 위한 빌드
    format -> 린트에러가 났을지 수정
    start -> 앱 시작

기본 프로젝트 구조

  • main.ts: 애플리케이션의 진입점이 되는 파일로, Nest 애플리케이션을 생성하고 실행하는 역할을 한다.

  • app.module.ts: Nest 애플리케이션의 주 모듈이다. 이 모듈은 애플리케이션의 다양한 부분을 가져오고 구성하는 역할을 한다. @Module() 데코레이터가 붙은 클래스로, Nest 프레임워크에서 모듈을 정의할 때 사용된다.

  • app.controller.ts: 기본적인 라우팅 및 HTTP 요청을 처리하는 컨트롤러 클래스다. HTTP 요청을 받아 처리하는 역할을 한다.

  • app.service.ts: 애플리케이션의 비즈니스 로직을 처리하는 서비스 클래스다. 컨트롤러에서 사용되어 비즈니스 로직을 구현하고 제공한다.

  • app.*.ts (옵션): 추가적인 모듈, 서비스, 컨트롤러 등이 필요한 경우, 이들을 포함하는 파일들이 있을 수 있다. Nest는 모듈화와 컴포넌트 간의 분리된 구조를 촉진하기 때문에 이러한 추가 파일들이 있을 수 있다.

  • 폴더 구조: Nest 프로젝트는 보통 src 폴더 안에 위치하며, 해당 폴더 안에 컨트롤러, 서비스, 모듈 등의 파일들이 각각의 역할에 따라 구분되어 있다. 예를 들어, src/controllers, src/services, src/modules와 같은 폴더들이 있을 수 있다.

Module

모듈이란 @Module () 데코레이터로 주석이 달린 클래스이다.
@Module () 데코레이터는 Nest가 애플리케이션 구조를 구성하는 데 사용하는 메타 데이터를 제공한다.

모듈은 밀접하게 관련된 기능 집합으로 구성 요소를 구성하는 효과적인 방법이다. 기능별로 만들어서 유저 모듈, 주문 모듈 등 관련된 기능으로 묶는다.

모듈은 기본적으로 싱글 톤이므로 여러 모듈간에 쉽게 공급자의 동일한 인스턴스를 공유 할 수 있다.

nest g module name

Controller

컨트롤러는 들어오는 요청을 처리하고 클라이언트에 응답을 반환한다.
컨트롤러는 @Controller 데코레이터로 클래스를 데코레이션하여 정의된다.

Handler

핸들러는 @Get, @Post, @Delete 등과 같이 데코레이터로 장식된 컨트롤러 클래스 내의 단순한 메서드이다.

nest g coltroller name 

// 테스트 소스 코드 생성을 하고 싶지 않으면 name 뒤에 --no-spec을 붙인다.

Provider

프로바이더는 Nest의 기본 개념이다. 대부분의 기본 Nest 클래스는 서비스, 리포지토리, 팩토리, 헬퍼 등 프로바이더로 취급될 수 있다. 프로바이더의 주요 아이디어는 종속성으로 주입할 수 있다는 것이다. 즉, 객체는 서로 다양한 관계를 만들 수 있으며 객체의 인스턴스를 "연결"하는 기능은 대부분 Nest 런타임 시스템에 위임될 수 있다.

Service

@Injectable 데코레이터로 감싸져서 모듈에 제공되며, 이 서비스 인스턴스는 애플리케이션 전체에서 사용될 수 있다.
서비스는 컨트롤러에서 데이터의 유효성 체크를 하거나 데이터베이스에 아이템을 생성하는 등의 작업을 하는 부분을 처리한다.

nest g service name 

// 마찬가지로 테스트 코드 필요없으면 --no-spec

의존성 주입

Controller에서 Service에 정의해놓은 메소드를 Controller에서 가져와서 쓰는 것을 볼 수 있다.
업로드중..

BoardsService를 Constructor 클래스에서 가져오고 있다. 그런 후에 Private 문법을 사용하고 있따. 이렇게 해서 boardsService를 정의해서 Controller 안에서 사용할 수 있게 만들었다. 이렇게 할 수 있는 이유는 타입스크립트의 기능을 이용해서 종속성을 타입으로 해결할 수 있기 때문이다.

Provider 등록하기

Provider을 사용하기 위해서는 Nest에 등록해줘야 사용할 수 있다.
등록하기 위해서는 Module 파일에서 할 수 있다. Module 파일에 providers 항목 안에 해당 모듈에서 사용하고자 하는 Provider을 넣어주면 된다.

업로드중..

0개의 댓글

관련 채용 정보