일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- It
- restful api
- 자바
- 상속
- front-end
- back-end
- class
- react
- props
- Producer
- Nest.js
- Kotlin
- 개발자
- 반복문
- state
- javascript
- kafka
- component
- file upload
- AWS
- 조건문
- node.js
- java
- 코틀린
- swagger
- SWIFT
- spring boot
- vue
- Sequelize
- 개발이 취미인 사람
- Today
- Total
개발이 취미인 사람
[Nest.js] Nest.js 기본 구조 분석하기 본문
- 개요
안녕하세요. 이번 시간에는 지난 시간에 만들어 놓은 Nest.js 기본 구조에 대해 분석해보는 시간을 가져보겠습니다.
프로젝트를 만들어 보지 않으신 분들은 아래 링크를 통해 프로젝트를 만들어 보시는 걸 추천드리겠습니다.
[Nest.js] Nest.js 개념 및 프로젝트 생성
- 구조 분석
프로젝트를 생성하면 기본적인 구조는 아래와 같습니다. (제일 중요한 몇 가지 폴더를 살펴보겠습니다)
dist : 서버를 실행하면 dist폴더 아래 컴파일 파일이 생성이 됩니다.(TypeScript -> JavaScript)
src : 프로젝트 core 폴더 (실제 작업은 src 하위에서 진행한다.)
src
├── app.controller.spec.ts //단위 테스트 파일
├── app.controller.ts //Controller
├── app.module.ts //Module
├── app.service.ts // Service
└── main.ts
nest-cli.json : 프로젝트 Root 경로를 설정하는 파일
tsconfig.build.json : 컴파일 시 ignore 설정을 하는 파일
tsconfig.json : TypeScript 환경설정을 담당하는 파일
우리가 개발할 때 손이 가장 많이 가는 src 폴더에 대해 알아보겠습니다.
- src 폴더 분석
main.ts
Nest.js 프로젝트는 main.ts 파일을 통해 서버가 실행됩니다. (main.ts 파일의 이름을 변경하면 안 됩니다.)
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
main.ts 파일은 수정할 부분이 없다. 핵심적인 부분은 await NestFactory.create(AppModule);이다.
NestFactory를 확인해보면 아래와 같은 주석으로 자세하게 설명이 되어있다.
NestFactory를 사용하여 응용 프로그램 인스턴스를 만듭니다.
### 항목 모듈 지정
모듈 매개 변수를 통해 애플리케이션에 필요한 *root module* 을 전달합니다.
일반적으로 애플리케이션 모듈(ApplicationModule)이라고 부른다.
Nest는 이 모듈을 시작으로 종속성 그래프를 조립하고 종속성 주입 프로세스를 시작하고 응용 프로그램을 시작하는 데 필요한 클래스를 인스턴스 화합니다.
NestFactory를 사용해서 응용 프로그램 인스턴스를 만든다고 설명하고 있다.
그리고 root module을 전달받아 NestFactory는 응용프로그램을 시작하는데 필요한 클래스를 인스턴스화 하고 종속성을 주입을 통해 연결한다는 걸 알 수 있습니다.
말이 참 어렵죠...ㅋㅋ 쉽게 말하면 아래와 같습니다.
root module은 AppModule이며, 해당 AppModule은 애플리케이션 전체에 모듈을 통합한 모듈이다.
NestFactory는 AppModule을 통해 애플리케이션 전체에 모듈을 조립하고 필요한 클래스를 생성해서 서버를 실행한다.
- app.module.ts
app.module.ts 파일은 프로젝트에 최상위 모듈입니다.
@Module() 데로레이터를 선언해서 사용할 수 있으며, 같은 기능에 해당하는 것들은 하나의 모듈 폴더 안에 넣어서 사용합니다.
Ex) UserController, UserService, UserEntify 와 같은 기능이 UserModule안에 넣어서 사용합니다.
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
- app.controller.ts
app.controller.ts 파일은 Controller 역할을 합니다.
@Controller 데로레이터로 선언해 지정할 수 있으며, Module 파일에 controllers 항목에 추가함으로써 Nest.js는 내부적으로 Controller라는 걸 인식해 사용할 수 있습니다.
@Controller는 클라이언트에서 들어오는 "요청"과 "응답"을 반환하는 역할을 합니다.
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
}
Controller에 경로 설정은 @Controller("/경로") 첫 번째 인자 값으로 설정할 수 있습니다.
Handler
@Controller에는 @Get, @Post 등과 같은 RESTFul API에서 사용하는 메서드가 있습니다.
- app.service.ts
app.service.ts 파일은 Service 역할을 합니다.
@Service 데로레이터로 선언해 지정할 수 있으며, Module 파일에 providers 항목에 추가함으로써 Nest.js는 내부적으로 Service라는 걸 인식해 사용할 수 있습니다.
@Service는 비즈니스 로직을 담당합니다. 우리가 실제 개발하는 로직들은 Service 로직에서 처리합니다.
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
}
Service는 @Injectable 데코레이터를 선언해서 Nest.js는 이것을 다른 곳에서 이 서비스를 사용할 수 있게 만들어줍니다.
- app.controller.sepc.ts
app.controller.sepc.ts 파일은 Nest.js에서 해당 Controller를 테스트할 때 사용합니다.
자세한 사용 방법은 다음에 자세히 작성하도록 하겠습니다.
'백앤드(Back-End) > Nest.js' 카테고리의 다른 글
[Nest.js] Nest.js API 만들기 (4) - 미들웨어(Middleware) (0) | 2021.11.11 |
---|---|
[Nest.js] Nest.js API 만들기 (3) - DTO(Data Transfer Object) & 유효성 검사(Validation Check) & Pipes (1) | 2021.11.10 |
[Nest.js] Nest.js API 만들기 (2) - Handler(@Get, @Post ...) (0) | 2021.11.09 |
[Nest.js] Nest.js API 만들기 (1) - Controller, Service, Provider (0) | 2021.11.07 |
[Nest.js] Nest.js 개념 및 프로젝트 생성 (0) | 2021.11.06 |