[NestJS] Module, Controller, Service

Module

- 모듈이란 애플리케이션의 일부분, 한 가지의 역할을 하는 부분
(ex. 유저 로그인 모듈, 사진 모듈, 비디오 모듈…)
- controller와 provider를 가짐
- 위 AppModule은 모든 것의 루트 모듈.
- 루트모듈에선 우리가 구현하는 모든 것을 import할 예정이다.
Controller

- controller는 기본적으로 url을 가져오고 함수를 그에 해당하는 함수를 실행함 (express의 라우터와 동일한 역할이다.)
- URL 매핑, 리퀘스트를 받아 쿼리, 바디 등을 넘겨주는 역할을 한다.
/hello URL을 접속하면 sayHello()를 호출
@Get() 외에도 다른 다양한 HTTP Method 활용 가능
Service

- AppController에서
getHello()의 경우는 appService를 참조한다.
- Nest의 구조에서는 Controller와 Service를 구분시킴.
- Controller : URL을 가져와 호출하는 역할
- Service : URL에 해당하는 함수의 세부 비즈니스 로직을 구현하는 역할
- 즉, AppController의
SayHello()에서 ‘Hello everyone’을 바로 리턴하는게 아닌,
app.controller.ts
app.service.ts
- 위와 같이 구현되는게 이상적인 방식이다.
- 단, 위 예시와 같이 컨트롤러의 함수명(sayHello)과 서비스의 함수명(getHi)은 달라도 됨.
Nest 구조 정리

- 루트 모듈 아래에 기능 별로 모듈을 두고, 모듈은 url별로 컨트롤러를 가진다.
- 컨트롤러는 각 url별로 비즈니스 로직을 서비스에서 구현한다.
- AppController, AppService는 최상위 URL(
/)에 대한 라우팅과 로직을 구현하기 위해 사용된다고 생각하면 된다.