NestJS 시작하기! #0

1Jui.ce·2023년 5월 31일
0

NestJS

목록 보기
1/1
post-thumbnail

NestJS는 서버 애플리케이션을 개발할 수 있는 백엔드 웹 프레임워크입니다!
Java의 Spring, Python의 django 처럼 구조와 규칙을 가진다고 생각하면 된답니다.
node.js의 Express 위에서 작동합니다! 하지만 Express에 없는 규칙과 구조가 있으며 빠르게 백엔드를 완성할 수 있다고 합니다.

이를 통해서 API를 제작해보고 테스트까지 진행해볼게요!

진짜 처음 시작하기

설치

$ npm i -g @nestjs/cli
$ nest new nest-start

실행

$ cd nest-start
$ npm run start:dev

localhost:3000으로 접속해서 잘 나오는지 한번 확인해보죠!

구조 설명하기

왜 Hello World!가 출력됐는지 확인해보도록 하죠!

main.ts는 NestJS의 핵심입니다! 없어서는 안되죠.
AppModule은 하나의 클래스로 시작이자 어플리케이션입니다. port 3000번을 사용하며 여기에도 Hello World의 단서가 없으니 AppModule을 더 파보도록 하죠.

AppModule이 작성되어있는 app.module.ts로 왔습니다. 여기서 @는 데코레이터입니다. 클래스 위의 함수이고 클래스에 함수 기능을 추가할 수 있답니다! 여기서 다른 모듈을 만들면, AppModule에 import하여서 사용한다고 합니다! 예를 들어 user 인증 모듈, 게시판 모듈을 만든다면 여기에 import해서 추가하는 거죠! 데코레이터의 Controllers를 보자면 AppController가 있고, provider에는 AppService가 있습니다. 일단은 여기에도 Hello World에 대한 단서가 없으니깐 Controller로 가봅시다!

여기서도 데코레이터를 사용했네요. 그리고 데코레이터는 띄어서 쓰면 안됩니다! 꾸며주는 친구로서 함수와 데코레이터사이에 빈칸이 있으면 슬픕니다!
AppController라는 클래스안에 구조적으로 AppService를 다시 불러오네요. 그리고 @Get()을 사용해서 getHello라는 함수를 만들어 appServicegetHello()을 반환하네요! 여기에 왠지 Hello World가 있을 것 같습니다. 한번 AppService로 가보죠!

@Injectable()이 무엇인지 저도 잘 모르기에 일단 넘어가겠습니다. 저희에게 지금 중요한건 Hello World의 출처이니까요! 근데 찾았습니다. AppService 클래스에 getHello() 함수가 string이라는 반환값 타입을 가지고 Hello World!를 반환합니다!

정리해보자~

그러면 저희가 무엇인가 만들려고 한다면 main.ts에 바로 작성하는게 아니라 순서가 있습니다.먼저 controller부터 보자면 말그대로 제어하고 통제하는 역할입니다. 길을 알려주는? 그런 느낌인것 같죠. url을 지정하고 그에 대한 무언가를 Get이나 Post 같은 역할을 정해주는 거죠. 그다음 Service로 가서 그 url에서 무엇을 할 것인가를 작성하면 되는겁니다!

즉, Controller == url 가져오는 역할, Service == 비즈니스 로직(실질적으로 동작하는 함수)입니다. 이처럼 NestJS는 컨트롤러와 비즈니스 로직을 구분하기 위해서 구조적으로 Module, Conroller, Service가 나누어진 형태랍니다!

그러면 또 보자 NestJS를 출력해보자!

배운대로 해봅시다. 먼저 저는 백엔드 알못이라서 컨트롤러 먼저해야하는지, 로직 먼저 만들어야하는지 모릅니다. 일단 컨트롤러가 작동되는지 확인하는게 우선인 것 같아서 컨트롤러부터 만져보겠습니다!

/** src/app.controller.ts */
~
  @Get('/seeyou')
  getSeeyou() : string {
    return ;
  }
}

endpoint 잡기 위해서 @Get 데코레이터에 /seeyou를 넣어주었습니다. localhost:3000/seeyou 로 접속하니 진짜 아무것도 안보이는군요. 잘 작동하나 봅니다. 혹시나 다 되나? 하고 seeyou2로 접속하니깐 에러가 뜨긴 합니다! 신기하다~

이제 실제 비즈니스 로직을 구성해보죠!

/** src/app.service.ts */
~
  getSeeyou(): string {
    return '또 보자 NestJS';
  }
}

간단합니다. 반환 타입 string으로 getSeeyou() 함수를 생성해주었습니다.

/** src/app.controller.ts */
~
  @Get('/seeyou')
  getSeeyou() : string {
    return this.appService.getSeeyou();
  }
}

로 작성해주면 컨트롤러가 seeyou로 GET 요청을 받으면 서비스에서 getSeeyou 함수를 반환해주는 아주아주 간단하고 이해하기 쉬운 응용을 해버렸습니다!

저에게 무수한 자존감과 나 백엔드 재능있나? 싶은 느낌을 마구 주네요. 시작이 좋습니다. NestJS 많이 애정을 담고 해보자구요!

profile
옷에 기름기 닦는 사람

0개의 댓글