꿈꾸는 시스템 디자이너

NestJS 기본 소스 구조 본문

Development/JS

NestJS 기본 소스 구조

독행소년 2021. 9. 23. 20:32

지난 포스팅에서 NestJS의 환경을 구축하고 웹브라우저를 통해 서버에 접속하여 메시지가 출력되는 것을 확인했다.

 

이번 포스트에서는 샘플코드의 소스 구조에 대해서 살펴본다. 프로젝트의 src 디렉토리의 구성을 확인하자.

ubuntu@here4you:~/cats-project/src$ ls
app.controller.spec.ts  app.controller.ts  app.module.ts  app.service.ts  main.ts

 

1. 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();

 

2. app.controller.ts

컨트롤러는 라우팅을 담당한다. 다시 말해 브라우저 등을 이용해서 서버에 접속할 때 그 접속을 처리하는 역할을 수행하다. app.controller는 본 프로젝트의 root 컨트롤러로 AppService를 생성하고, 접속 요청에 해당하는 서비스를 호출한다.

아래 소스를 보면 Get 방식의 요청이 들어올 경우 AppService의 getHello 메소드를 호출한 결과를 반환한다.

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();
  }
}

 

3. app.service.ts

서비스는  컨트롤러에 의해 호출되어 각 요청에 해당하는 서비스 로직을 수행하고 그 결과를 컨트롤러에게 반환한다.

AppService는 getHello 메소드를 통해 환영 메시지를 반환한다.

 

import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello World!';
  }
}

 

4. app.module.ts

NestJS는 서버를 모듈단위로 구성할 수 있다는 장점이 있다. 이는 개발과 유지보수에서 큰 장점으로 작용하게 된다. 현재는 별도의 서브 모듈이 존재하지 않기 때문에 컨트롤러와 프로바이더만 정의되어 있다. 향후 리소스가 추가되게 되면 imports 항모에 추가될 것이다.

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

 

후기

그간 node.js를 이용한 프로젝트를 진행해 오다 처음으로 NestJS를 살펴보고 있는데 어느 포스트에선가 이렇게 평가하고 있었다.

"node.js를 이용하면 제로부터 시작해서 서버를 개발하게 되고, 규모가 커지고 개발자가 늘수록 힘들어진다. 하지만 NestJS를 쓰면 체계적으로 서버를 개발할 수 있게 된다."

 

실제로 살펴보니 무슨 뜻인지 알 수 있었다. NestJS에서는 오래전 Spring의 느낌이 들었다. MVC 체계에 따라서 서버를 개발할 수 있다는게 큰 특징으로 보여진다.

'Development > JS' 카테고리의 다른 글

Next.js 팁  (0) 2021.10.13
[NestJS] 첫 번째 프로젝트  (0) 2021.10.05
React 개발 환경 구성  (0) 2021.09.30
NestJS 개발에 유용한 npm 패키지들  (0) 2021.09.27
NestJS 개발 환경 구성  (0) 2021.09.23
Comments