서버 실행하기
nestjs를 설치하면 많은 기본 파일이 생성되는데
여기서 package.json파일을 열어서 서버를 어떻게 실행하는지 확인해보자
보시다시피 이렇게 되어 있는 것을 알 수 있다.
npm run start:dev
package.json 파일을 참조하여, 위 명령어를 터미널로 입력해주면
localhost:3000
경로로 서버를 실행할 수 있게 된다.
기본 파일
src 폴더에 main.ts 파일이 있다.
해당 파일의 내용으로 보시다시피 포트넘버가 기본적으로 3000번으로 되어 있는 것을 볼 수 있다.
그렇다면 Hello World!는 어디서 오는 걸까?
바로 AppModule이다.
app.module.ts는 main 파일과 같은 폴더에 위치하고 있다.
여기서 @Module이 바로 데코레이터이다.
테코레이터는 클래스에 함수기능을 추가해주는 것으로 가장 아랫줄에 보면 AppModule 클래스를 익스포트 한다고 되어있지만 정작 그 안에는 아무 내용도 없는데, 여기서 데코레이터로 추가된 것들이 추가된 것이다.
즉, AppModule이라는 클래스에는 Module이라는 데코레이터가 추가되어 있는 것이다.
자, 그런데 데코레이터에 AppController와 AppService가 있는 것을 볼 수 있다.
먼저 컨트롤러 파일을 보자,
컨트롤러에는 get 데코레이터가 있고 서비스 파일의 getHello()를 리턴하고 있으며
서비스에선 getHello()가 Hello World! 문자열을 리턴하고 있다.
즉 모듈 파일은 컨트롤러 파일을 호출했고
컨트롤러 파일은 서비스 파일을 호출했고
서비스 파일이 Hello World!를 반환한 것이다.
컨트롤러
컨트롤러는 라우터와 비슷한 역할을 한다.
컨트롤러 파일에 새로운 데코레이터를 추가해보자
@Get('/hello')
sayHello(): string {
return 'myHello';
}
여기서 Get은 메소드를 의미한다
'/hello'는 경로를 의미하고
sayHello()는 사용할 함수를 말한다.
함수에서, 문자열 myHello를 반환하도록 했으니, hello 라는 경로에 들어가면 myHello라는 문자열이 출력된다.
주의사항
데코레이터는 반드시 사용하고자 하는 함수나 클래스랑 붙어있어야 한다.
즉, 아래와 같이 쓰면 안 된다.
@Get('/hello')
sayHello(): string {
return 'hello';
}
만약 Post 메소드를 쓰고자 한다면?
컨트롤러 파일의 최상단에 위치한 import에 Post를 넣어주면 된다.
import { Controller, Get } from '@nestjs/common';
// 위 코드를 아래로 바꾸어준다.
import { Controller, Get, Post } from '@nestjs/common';
서비스
서비스는 일반적으로 함수를 가지는 파일이다.
위에서, 컨트롤러에서 myHello를 return하도록 했는데
이렇게 하지말고 서비스 파일에서 myHello를 출력하는 함수를 만들고
그 다음 컨트롤러에서 출력하게 해보자
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
getHi(): string {
return 'myHello';
}
}
서비스 파일에 getHi 함수를 추가한 모습이다.
이제 컨트롤러 파일을 수정해주자
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
@Get('/hello')
sayHello(): string {
return this.appService.getHi();
}
}
컨트롤러 파일의 sayHello 부분을 서비스에 있는 getHi 함수를 리턴해주는 형태로 바꾸어 주었다.
자 이제 Nodejs의 express에서 하던 방식을 온전히 nestjs의 방식으로 옮기는 가장 기본적인 부분을 살펴보았다.
사실 app.controller와 app.service는 뭔가 예시파일 같은 느낌이다.
고로 이걸 그냥 없애버리고 내가 직접 만들어보도록 하자
기타
nestjs에서는 Nodemon의 기능을 기본적으로 지원하는듯 하다.
실제로 코드를 편집하고 저장해보면 바로 재시작이 되는 것을 알 수 있다.
'Framework > Nest.js' 카테고리의 다른 글
Nest.js 공부정리 - 테스트(jest - Unit) (0) | 2023.01.05 |
---|---|
Nest.js 공부정리 - 기본 - 서비스, CRUD, 유효성 검사 (1) | 2023.01.05 |
Nest.js 공부정리 - 기본 - 라우터, 메소드, Param, Body, Query (0) | 2023.01.03 |
Nest.js 공부정리 - 시작 (0) | 2023.01.02 |