#2_nest.js 특징

유상우·2023년 4월 8일
0

Nest.js

목록 보기
3/6

1. Decorator

decorator를 잘 사용하면 cross-cutting concern을 분리하여 관점 지향 프로그래밍을 적용한 코드를 작성할 수 있습니다. 타입스크립트의 데커레이터는 파이썬의 데커레이터나 자바의 이노테이션과 유사한 기능을 합니다. 클래스, 메서드, 접근자, 프로퍼티, 매개변수에 적용 가능합니다. 각 요소의 선언부 앞에 @로 시작하는 decorator를 선언하면 decorator로 구현된 코드를 함께 실햄합니다. 예를 들어 다음 코드는 유저 생성 요청의 본문을 data transfer object(DTO)로 표현한 클래스 입니다.

사용자는 얼마든지 요청을 잘못 보낼 수 있기 때문에 decorator를 이용하여 앱이 허용하는 값으로 제대로 요청을 보냈는지 검사하고 있습니다.

2. Controller

controller는 request를 받고 처리된 결과를 response으로 돌려주는 interface 역할을 합니다.

@Controller(decorator)를 class에 선언하는 것으로 해당 class는 controller의 역할을 하게 됩니다.

getHello 함수는 @Get(decorator)를 가지고 있습니다. 따라서 root 경로('/')로 들어오는 요청을 처리할 수 있게 됩니다.

- 요청객체

클라이언트는 요청을 보내면서 종종 서버가 원하는 정보를 함께 전송합니다. Nest는 요청과 함께 전달되는 데이터 핸들러(요청을 처리할 구성 요소, 컨트롤러가 이 역할을 합니다.)가 다룰 수 있는 객체로 변환합니다. 이렇게 변환된 객체는 @Req 데커레이터를 이용하여 다룰 수 있습니다.

요청 객체는 HTTP 요청을 나타냅니다. 쿼리 스트링, 매개변수, 헤더와 본문 외 많은 정보를 가지고 있습니다.

- 응답

Express를 사용한다면 @Res 데커레이터를 이용해서 Express 응답 객체를 다룰 수 있습니다.
Nest는 또 다른 데커레이터 @HttpCode를 통해 상태 코드를 변경할 수 있습니다.

- 라우트 매개변수

http://localhost:3000/users/1에서 1에 해당하는 부분이 유저 id인데 당연히 동적으로 구성됩니다. 즉 경로를 구성하는 매개변수가 됩니다. 전달 받은 매개변수는 함수 인수에 @Param 데커레이터로 주입받을 수 있습니다.

라우트 매개변수를 전달받는 방법은 2가지가 있습니다. 먼저 매개변수가 여러 개 전달 될 경우 객체로 한 번에 받는 방법입니다. 이 방법은 params 타입이 any가 되어 권장하지 않습니다.

물론 라우트 매개변수는 타입이 항상 string 이기 때문에 명시적으로 { [key: string]: string } 타입을 지정해도 됩니다.

- 하위 도메인 라우팅

하위도메인 라우팅 기법을 통해서 해당 도메인만 따로 요청을 받을 수도 있습니다.

3. 페이로드 다루기

POST,PUT,PATCH 요청을 보통 처리에 필요한 데이터를 함께 실어 보냅니다.
이 데이터 덩어리, 즉 페이로드는 body라고 합니다. 전송 객체(DTO)가 구현되어 있어 본문을 쉽게 다룰 수 있습니다.

지금까지 백엔드 앱의 관문이라 할 수 있는 컨트롤러를 Nest에서 어떻게 사용하는지 살펴 보았습니다. 정리하자면, 컨트롤러는 서버로 들어오는 요청을 처리하고 응답을 가공합니다. 서버에서 제공하느 기능을 어떻게 클라이언트와 주고 받을지에 대한 인터페이스를 정의하고 데이터의 구조를 기술합니다.

profile
Potentialist

0개의 댓글