※ 본 영상은 Nomad Coder의 'NestJS로 API 만들기' 영상을 보고 작성한 내용입니다.
1. NestJS의 Controller와 다른 프레임워크와의 유사성
Java-Spring의 Controller, Express의 controller/router의 기능과 같다.
저번 포스팅에서도 언급했던 것처럼,
main.ts+Controller+Service 이 셋은 뗄레야 뗄 수 없는 관계이다.
2. @Module의 역할
Module 모듈은 하나의 기능을 하는 앱이라고 생각하면 된다.
ex) 유튜브에서는 video 모듈, photo 모듈이 필요할 것이다.
인증에 관한 모듈은 auth 모듈이 될 것이다.
3. Controller와 main.ts 그리고 Service와의 관계
[ main.ts ]
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
1) 저번 포스팅에서도 언급했듯이, bootstrap()은 함수 이름이고 다른 이름으로 바꿔서 쓸 수 있다.
2) NestFactory를 통해 app이 create되어 app이 만들어진다.
* NestFactory : Nest 애플리케이션 인스턴스를 생성하기 위한 클래스
NestFactory에서 응용프로그램을 만들 수 있는 몇 가지 정적 메서드를 제공하는데 그 중 하나가 create()이다.
위의 main.ts에서 HTTP 리스너를 시작하면 애플리케이션이 인바운드 HTTP 요청을 기다릴 수 있다. (이건 다음 포스팅에 정리할 예정)
[ app.controller.ts ]
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get('/hello')
getHello(): string {
return this.appService.getHello();
}
}
1) Controller 데커레이터
Controller의 역할은 url을 가져오고 함수(function)을 실행하는 역할이다.
2) @Get('/hello') 라는 url이 삽입
여기서 @Get은 express의 Get 라우터, Java spring의 @Get과 같은 역할을 한다.
그래서 /hello 라는 url을 요청하면 그에 맞는 값을 아래에서 return~으로 응답한다.
[ app.service.ts ]
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello Errrrbody!';
}
}
1) Controller 단에서 /hello 라는 url 요청이 들어왔을 시 return this.appService.getHello()를 반환한다고 했다.
그래서 appService로 이동되었다. AppService 클래스를 살펴보니 내부에 getHello()메소드가 있고, 'Hello Errrrbody!';라는 string 형태의 문자열을 return 해준다고 한다.
2) 그래서 결론적으로, Controller단에서 /hello에 대한 Get 요청에 대한 응답은 --->
Service(여기서는 appService)의 클래스 부분 - 메소드(getHello())를 통한 응답으로 브라우저에 보여준다(반환해준다)
url - localhost:3000/hello
브라우저에 보이는 화면 - Hello Errrrrbody!
'Backend > NestJS' 카테고리의 다른 글
NestJS Controller,Service 톺아보기(+ Decorator/Handler 차이,Provider,@Injectable ) (0) | 2023.03.16 |
---|---|
nest.cli.json에서 source root(프로그램 시작점) 찾기 (0) | 2023.03.15 |
localhost:3000시 Hello World!는 어디서 오는걸까? (0) | 2023.03.05 |
NestJS의 커맨드(명령어) 살펴보기 with Terminal (0) | 2023.03.05 |
[오류] TS2307: Cannot find module 'class-validator' or its corresponding type declarations (0) | 2023.03.03 |