Nest로 API 구현하기(2) - Module

Lojy·2022년 7월 2일
0

Nest

목록 보기
2/5
post-thumbnail

Nest 모듈 이란?

모듈은 @Moudle 데코레이터로 주석이 달린 클래스이다. @Moudle 데코레이터는 Nest가 애플리케이션 구조를 구성하는데 사용하는 메타 데이터를 제공한다.

각 애플리케이션에는 최소 하나의 모듈인 루트 모듈이 있다. 루트 모듈은 Nest가 애플리케이션 그래프 를 빌드하는 데 사용하는 시작점이다. Nest가 모듈과 공급자 관계 및 종속성을 해결하는 데 사용하는 내부 데이터 구조이다. 아주 작은 응용 프로그램에는 이론적으로 루트 모듈만 있을 수 있지만 일반적인 경우는 아니다. 구성 요소를 구성하는 효과적인 방법으로 모듈을 사용 하는 것이 좋다. 따라서 대부분의 응용 프로그램에서 아키텍처 결과는 각각 밀접하게 관련된 기능 집합을 캡슐화하는 여러 모듈을 사용한다 .

모듈은 기복적인 싱글 톤이므로 여러 모듈간에 쉽게 공급자의 동일한 인스턴스를 공유 할 수 있다.

모듈은 밀접하게 관련된 기능 집합으로 구성 요소를 구성하는 효과적인 방법이다.
같은 기능에 해당하는 것들은 하나의 모듈 폴더안에 넣어서 사용한다.(UserController, UserService, UserEntity 다 같은 기능이기에 UserMoule 안에 넣는다.)


Controller 란?

컨트롤러는 들어오는 요청을 처리하고 클라이언트에 응답을 반환한다.

컨트롤러의 목적은 애플리케이션에 대한 특정 요청을 수신하는것이다. 라우팅 메커니즘은 어떤 컨트롤러가 어떤 요청을 수신하는지 제어 한다. 종종 각 컨트롤러에는 둘 이상의 경로가 있으며 다른 경로는 다른 작업을 수행할 수 있다.

라우팅

기본 컨트롤러를 만들기 위해 클래스의 데코레이터를 사용한다. 데코레이터는 클래스를 필수 메타데이터와 연결하고 Nest가 라우팅 맵을 생성할 수 있도록 한다(요청을 해당 컨트롤러에 연결).

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

@Controller('cats')
export class CatsController {
	@Get()
    findAll(): string {
    	return 'This action returns all cats';
    }
}

데코레이터에서 경로 접두사를 사용하면 관련 경로 세트를 쉽게 그룹화하고 반복적인 코드를 최소화 할 수 있다.
위 코드에서 모든 경로()에 대해 접두사를 선언했고 데코레이터에 경로 정보를 추가하지 않았으로 Nest는 GET /cats 요청을 이 핸들러에 매핑합니다.
(예를 들어 데코레이터와 결합된 경로 접두어 @Get('profile') 와 같은 요청에 대한 경로 매핑을 GET /cats/profile 로 생성한다.)

Handler 란?
핸들러는 @Get, @Post, @Put, @Delete 등과 같은 데코레이터로 장식된 컨틀로러 클래스 내의 단순한 메서드이다.



Providers 란?

프로바이더는 Nest의 기본 개념이다. 기본 Nest 클래스의 대부분은 서비스, 리포지토리, 팩토리, 헬퍼 등 프로바이더로 취급될수 있다. 프로바이더의 주요 아이디어는 종속성으로 주입될수 있다는 것이다. 즉, 객체는 서로 다양한 관계를 만들 수 있으며 객체의 인스턴스를 "연결"하는 기능은 대부분 Nest 런타임 시스템에 위임될수 있다.

컨트롤러는 간단한 HTTP 요청을 처리하고 더 복잡한 작업을 프로바이더에게 위임해야 한다.

Service

서비스는 컨트롤러에서 데이터의 유효성 체크를 하거나 데이터베이스에 아이템을 생성하는 등의 작업을 하는 부분을 처리한다.

서비스는 @Injectable 데코레이터로 감사져서 모듈에 제공되며, 이 서비스 인스턴스는 애플리케이션 전체에서 사용 될 수 있다.



마무리

오늘은 Module과 Controller, Providers에 대해 알아봤다.
아직까지는 복잡해 보이지만 기능별로 나눠 놓으면 보기도 쉽고 코드도 간결해질꺼 같다는 생각이 든다.
다음에는 직접 모듈과 컨트롤러 프로바이더를 생성해보고 CRUD까지 구현 해 봐야겠다.

[참조: Nest 공식문서, 따라하며 배우는 NestJS ]

profile
Node 하는 lojy

0개의 댓글