[Nest] 네스트JS 기본 구조

404·2022년 7월 6일
0

nest.js

목록 보기
1/2
post-thumbnail

찍먹으로 시작하는 Nest.JS

https://github.com/FUNco247/nest

1. Nest.JS 서버 기본 구조

Nest.JS를 설치하고 프로젝트를 시작하는 것으로 위 사진과 같은 기본 폴더구조를 얻을 수 있다.
기본적인 tsconfig 파일부터 package.json 파일까지 자동 완성된다.

서버는 main.ts 에서 작동된다. main.ts 파일명은 변경하면 안된다.
NestFactory 모듈은 네스트에서 제공하는 것이므로 다음에 알아보도록 하고 우리가 손댈 수 있는 AppModule에 대해서 알아보자.
main.ts는 3000번 포트 요청을 대기하다가 AppModule을 NestFactory.create() 하고있다.

모듈 파일이다.
새로운것이 보이는데 먼저 @로 시작하는 모듈 클래스가 보인다. @ 로 시작하는 것을 데코레이터 라고 한다. (내가 보는 강의에선 그렇게 부름)

Module 클래스 혹은 데코레이터는 import, controllers, providers 세가지를 갖고있는데, 먼저 Express를 사용하며 익숙해진 controllers를 먼저 보도록 하자. (나머지 둘은 다음 포스팅을 기약)

컨트롤러 파일이다.

@Controller 라는 데코레이터를 갖고있고 AppController 클래스를 export 하고있다.

재밌는 것은 Nest의 컨트롤러는 Express의 그 것과는 다르게 라우터 역할을 한다.

@Get() 은 루트 URL 즉, localhost:3000/ 으로 get 요청이 왔을 때 아래 붙어있는 함수를 실행한다는 것을 의미한다. 여기서 라우터 역할을 하는 @Get과 그 아래 실행함수는 반드시 빈 공간 없이 붙어있어야 한다.

  • 정리하자면 위 컨트롤러는 루트URL로 들어온 get 요청에 대해 getHello()를 실행시킨다.

그런데 여기서 주의깊게 봐야 할 것이 return this.appService.getHello(); 부분이다.

라우터 실행 코드를 아래와 같이 작성해도 이 요청에 대해서는 정상적으로 작동한다.

@Get()
  getHello(): string {
    return "Hello World";
  }

그럼에도 불구하고 return this.appService.getHello(); 와 같이 작성하는 이유는 비지니스 로직을 구분하기 위해서라고 한다.

그럼 여기서 App.Servie 파일을 열어보자

컨트롤러 파일에 있던 함수가 서비스 파일에도 있다.

라우터를 그룹화 할 수 있는 방법을 예제를 통해 알아보자.

@Controller('hi')
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get('do')
  getHello(): string {
    return this.appService.getHello();
  }
}

위와 같이 작성하면 /hi url로 그룹화되어 /hi/do url로 접근시 요청을 처리할 수 있다.

정리

  1. main.ts 에서 모듈을 create 하는 것으로 서버 실행

  2. 모듈에는 임포트, 컨트롤러, 프로바이더가 존재

  3. 컨트롤러는 익스프레스에서 라우터의 역할을 함, 지정 URL로 요청이 오면 함수를 실행

  4. 실행되는 함수는 비지니스로직 분리를 위해서 서비스 파일에 분리

profile
T.T

0개의 댓글