본문 바로가기
  • optimuslee
Nestjs

[Nestjs] 3. Controller??

by OptimusLee 2022. 3. 27.
728x90
반응형

오늘은 nestjs controller에 대해 같이 알아보도록 하겠습니다. controller는 말 그대로 어떤 것을 제어한다는 뜻입니다. 과연 그렇다면 어떤 것을 어떻게 제어하는 것일까요?? nestjs에서 controller는 client로부터 server로 들어온 요청을 처리하고 응답을 반환하는 역할을 합니다. 아마도 이전에 express.js로 작업을 해본 경험이 있는 분들이라면 무슨 말인지 쉽게 이해하실 수 있을 것입니다. (서버와 관련된 공부를 전혀하지 않았더라도 상관없으니까 겁먹지 마세요~!!)

 

물론 처음에는 이 기능이 굳이 필요한가? 라는 의문이 들기도 합니다. 하지만 서버의 구조가 복잡해지고 커지면 유수/보수 과정에 어마어마한 시간과 노력이 필요하기에 초기에 구조를 정확하게 잡아놓기 위함입니다. controller의 생성 방법은 굉장히 간단합니다. 직접 코드를 작성해도 상관은 없지만 터미널에 아래의 코드를 입력하면 원하는 이름의 파일과 controller 기능을 생성할 수 있습니다.

 

$ nest g controller [name]

 

 

저는 cats라는 이름의 controller를 생성하기 위해 nest g controller cats를 터미널에 입력하였습니다. 잠시 시간이 지나자 cats라는 디렉토리가 src 디렉토리 내부에 생성되는 것을 확인할 수 있었습니다. 

내부의 소스 코드를 들여다보면 아래와 같이 나타났습니다. 

 

cats/cats.controller.spec.ts

import { Test, TestingModule } from '@nestjs/testing';
import { CatsController } from './cats.controller';

describe('CatsController', () => {
  let controller: CatsController;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      controllers: [CatsController],
    }).compile();

    controller = module.get<CatsController>(CatsController);
  });

  it('should be defined', () => {
    expect(controller).toBeDefined();
  });
});

 

cats/cats.controller.ts

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

@Controller('cats')
export class CatsController {}

 

/app.module.ts

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

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

 

 

cats.controller.spec.ts 파일은 크게 신경쓰지 않으셔도 됩니다. cats.controller.tsapp.module.ts를 살펴보면 새로 생성되거나 수정된 내용이 있을 것입니다. cats.controller.ts는 controller 데코레이터가 사용되었습니다. app.module.ts에는 CatsController가 controllers 배열에 추가된 것을 확인할 수 있습니다. 위의 코드들이 client로부터 들어온 요청을 처리해주는 코드라는 것을 인지하고 다음 장으로 넘어가시면 될 것 같습니다. 

728x90
반응형