NestJS 시작하기, 구조 분석

4689 단어 NestJS백엔드NestJS

📌 해당 글은 따라하면서 배우는 NestJS를 참조해 작성되었습니다.

📌 Nest JS란?

Nest는 Node.js 서버 측 어플리케이션을 구축하기 위한 프레임워크이며, JavaScript를 사용하고 TypeScript로 빌드되며 객체지향, 함수형, 함수형 반응형 프로그래밍적 요소를 사용할 수 있게 해준다.


📘 NestJS CLI로 NestJS 시작하기

위 환경은 NodeJSnpm이 깔려있다는 전제로 한다.

npm i =g @nestjs/cli
nest new 프로젝트 이름

후 NestJS가 잘 설치되었는지 보려면

nest --version

📘 NestJS 구조

예를 들어 게시글을 만든다고 가정했을 때, 우리는 게시글에 관한 모듈과 그 게시글을 만드는 사람에 대한 인증 모듈이 필요하다.
또한, 각 모듈을 구성하는 Controller, Entity, Service, Repository 등이 있다.

NestCLI로 생성한 프로젝트 기본 구조

▪ eslintrc.js

  • 개발자들이 특정한 규칙을 가지고 코드를 깔끔하게 짤 수 있게 도와주는 라이브러리이다. 타입스크립트를 쓰는 가이드 라인을 제시해주거나 문법에 오류가 나면 알려준다.

▪ prettierrc

  • 주로 코드 형식을 맞추는데 사용한다. 어떤 따옴표를 사용할지, Indent값을 어떻게 줄지와 같은 코드 포맷터 역할을 한다.

▪ nest-cli.json

  • nest 프로젝트를 위해 특정한 설정을 할 수 있는 json 파일이다.

▪ tsconfig.json

  • 어떻게 타입스크립트를 컴파일 할지 설정한다.

▪ tsconfig.build.json

  • tsconfig.json의 연장선상 파일이며, build를 할 때 필요한 설정들이다. "excludes"에서는 빌드할 때 필요없는 파일들을 명시한다.

▪ package.json

  • 앱이 참조하는 패키지와 앱의 설명들을 명시한다.

▪ src폴더

  • matin.ts -> 앱을 생성하고 실행하는 시작점
    app.module.ts -> 앱 모듈을 정의한다.

Nest 로직 흐름

app.module.ts -> board.controller.ts -> board.service.ts


NestJS Module

Module 이란?

모듈은 @Module {} 데코레이터로 주석이 달린 클래스로, 어플리케이션 구조를 구성하는데 사용하는 메타 데이터를 제공한다.
각 응용 프로그램에는 하나 이상의 모듈이 존재하며, 루트 모듈은 Nest가 사용하는 시작점이 된다.

모듈은 관련된 기능 집합으로 구성 요소를 구성하는 효과적인 방법이다. 즉, 기능별로 만들어진다.
ex)유저모듈, 주문모듈 ...

같은 기능에 해당하는 것들은 하나의 모듈 폴더 안에 넣어서 사용한다.

또한, 하나의 공통된 모듈을 생성해 여러 모듈에 공유하며 사용할 수도 있다.

Module 생성하기

nest g module 모듈 이름

대부분의 nest 파일들은 명령어로 생성한다.


NestJs Controller

Controller 란?

컨트롤러는 들어오는 요청을 처리하고 클라이언트 응답을 반환한다.

컨트롤러는 @Controller 데코레이터로 클래스를 데코레이션하여 정의된다.

Handler 란?

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

Controller 생성하기

nest g controller 컨트롤러 이름 --no-spec

--no-spec: 테스트를 위한 소스 코드 생성을 방지한다.

컨트롤러가 만들어지는 Logic:
해당 폴더에 Controller 생성 -> 폴더 내 Module 탐색 -> Module 파일 내에 Controller 명시


NestJS Service(Providers)

Provider / Service 란?

Provider는 Nest의 기본개념이다. Controller가 필요로 하는 컴포넌트들이 기능 단위로 존재하고, Controller가 해당 컴포넌트를 필요로 할 때 그 컴포넌트를 Controller로 종속시켜주는 것을 주입이라고 하는데, 여기서 각 요소가 Provider가 된다. 우리는 Service를 Controller에 주입시키기 때문에, Service는 큰 의미로 Provider이다.

Service는 sw 개발 내 공통개념이다, 즉 Nest에서만 사용되는 개념이 아니다. 데이터의 유효성을 검사하거나 DB 아이템을 생성하는 등의 작업을 처리한다. @Injectable 데코레이터로 감싸져서 모듈에 제공되며, 이 서비스 인스턴스는 어플리케이션 전체에 사용될 수 있다.

Service 생성하기

nest g service 서비스 이름 --no-spec

또한 이렇게 만들어진 Service를 Controller에 사용할 수 있게 Dependency Injection, 즉 종속성 주입을 해주어야 한다. 이는 Controller 클래스의 Constructor 안에서 이루어 진다.

접근 제한자(public, protected, private)를 생성자(constructor) 파라미터 안에 선언하면 접근 제한자가 사용된 생성자 파라미터는 암묵적으로 클래스 프로퍼티로 선언된다.

또한, Private가 선언되었기 때문에 위 사진에서 userServvice 프로퍼티는 UserController 클래스 내부에서만 사용 가능하다.

좋은 웹페이지 즐겨찾기