끄적이는 개발노트

NestJS 연습 프로젝트(Movie) - Controller 기본 사용법 본문

JavaScript/NestJS

NestJS 연습 프로젝트(Movie) - Controller 기본 사용법

크런키스틱 2021. 9. 30. 18:03
728x90

이번 포스트에서는 NestJS를 통한 간단한 프로젝트 생성을 해본다.

처음 접하며 스터디를 위한 프로젝트이다보니 노마드코더의 강좌 코드를 토대로 실습한 NestJS 사용법을 정리한다.

굉장히 이해하기 쉽고 따라하기 좋게 구성되어 있으니 나처럼 NestJS를 입문하는 사람들에게 추천한다.

https://nomadcoders.co/nestjs-fundamentals

 

NestJS로 API 만들기 – 노마드 코더 Nomad Coders

Enterprise Server Side Applications

nomadcoders.co

 

1. controller 생성

우선, 기존 app.module.ts 파일에서 controllers와 providers 내용을 다음과 같이 비운다.

이후, nest 명령어를 통해 controller를 생성한다.

$> nest g co

그러면 다음과 같이 이름을 설정하라고 메세지가 나온다.

원하는 이름으로 설정한다.

완료가 되면, 자동으로 app.modules.ts의 controller에 import가 되고, movies 폴더와 그 안에 movies.controller.ts 파일이 생성된다.(spec.ts는 테스트용 파일로 나중에 다룬다.)

아무것도 하지않고 명령어 한 줄로 파일생성과 import가 굉장히 빠르게 완료되었다!

 

2. controller 설정

비어있는 controller 내용에 다음과 같이 내용을 수정해보자.

import { Controller, Get, Param } from '@nestjs/common';

@Controller('movies')
export class MoviesController {
    @Get()
    getAll() {
        return 'This will return all movies';
    }

    @Get(':id')
    getOne(@Param('id') movieId: string) {
        return `This will return one movie : ${movieId}`;
    }
}

우선, 코드에 대해 설명하기 전에 실행화면을 살펴보자.

개발모드로 실행을 해야하는데 이에 대한 npm run 명령어는 package.json 파일에 기본적으로 제공된다.

$> npm run start:dev

실행해보면 다음과 같다.

 

실행화면을 통해 알 수 있는 사실은

@Controller('movies') 데코레이터는 entry point를 설정하는 곳이라는 점이다.

그렇게 때문에 13.209.202.53:3000 을 실행하면 에러를 뱉고, /movies를 붙여야지만 우리가 원하는 리턴값을 출력한다.

 

즉, @Controller() 데코레이터 안에 내용은 기본 라우터가 되고 @Get() 데코레이터같은 경우는 Express.js 어플리케이션을 쓸 때의 라우터들이 된다. 

 

또한, NestJS에서는 무언가가 필요하다면 요청을 해야만 한다.

위에 코드에서처럼 url에 입력된 id를 받고 저장하기 위해서 @Param('id')을 통해 id 파라미터를 요청한다.

이 때, @Get 데코레이터 안의 이름과 @Param 데코레이터 안의 이름이 같아야한다.

그 후, id 파라미터를 movieId라는 string 타입의 변수로 저장하기 위해서 movieId: string을 설정한다.

그러고나서야 비로소, movieId라는 변수를 사용할 수 있다.


지금까지 movie controller를 자동 생성해보고 데코레이터를 통해 get 방식의 라우팅을 해보았다.

위에서 간단히 해본 것 외에도 post, delete 방식의 라우팅, body와 query 파싱을 하는 방법도 데코레이터를 통해 당연히 가능하다. 이에 대한 코드는 service와 dto를 다루고 나서 전체 코드를 통해 확인해보자.

 

물론, 저번 포스트에서 언급했듯이 controller는 url을 설정하고 함수를 리턴해주는 곳이기 때문에 지금처럼 직접적인 실행이 들어가면 좋지 않은 코드가 된다.

 

따라서, service를 설정하고 controller에 연결하는 방법을 다음 포스트에서 알아본다.

728x90