본문 바로가기

Backend/NestJS

NestJS Controller,Service 톺아보기(+ Decorator/Handler 차이,Provider,@Injectable )

확실히 집에 와서 다시 개발 공부를 할때면 일하면서 놓쳤던 부분들에 대해 아 그래서 그렇게 되는구나!라고 상기시킬 수 있다. 

그래도 계속 포스팅 하면서 일하면서 만났던 내용들이나 부족했던 개념들 상기시키고, 될때까지, 익숙할때까지, 질릴때까지 계속 포스팅 작성할거다...! 

 

집에 와서 시청한 영상은 인프런 '따라하면서 배우는 NestJS'이다. 

 


Decorator와 Handler의 차이 

@Decorator -> ex) @Controller, @Service, @Entity, @Repository 

@Handler -> ex) @Get, @Post, @Patch, @Delete 

 

Decorator로 장식된 @Controller가 있다면, 클래스 내의 단순한 메소드가 Handler이다. 

@Controller('greeting')
@Get('/hello'){ 
	~ }

 

 

 

nest g controller boards --no-spec 

1) nest 키워드는 nestCLI를 사용하겠다는 선언 

2) --no-spec은 boards.controller.spec.ts 파일(테스트 파일)을 생성하지 않겠다는 뜻

3) g는 generate의 의미 

 

Provider 

boards.module.ts 파일을 가보자. 

위에서 nest g controller boards를 했다면 boards.module.ts 파일에 controller 부분에 [BoardsController] 라고 생성이 되어있을 것이다. 이는 nest g ~ 키워드를 사용하였기 때문에 자동으로 module.ts에 등록되는 것이다. module에 등록을 해줘야 해당 역할을 하는 파일들을 사용할 수 있다(마치 카드등록이랄까? 카드도 받기만 하고 바로 사용하는게 아니라, 사용등록을 해주어야 카드를 사용할 수 있다) 

그렇다면 Provider의 역할은 무엇인가? Service,Repository,Factory,Helper 등을 정의하는 곳이다. 

종속성을 주입하여 객체 인스턴스를 연결한다. 

 

Service 

@Injectable 데커레이터를 이용하여 다른 데러케리어테어 이 Service를 사용할 수 있도록 만들어준다. 

Service에서는 DB 관련 로직을 처리하고, 데이터 유효성을 체크하는 역할을 한다. Service가 이런 로직을 처리하면서 return값을 Controller에게 전달해주고, Controller는 그에 맞는 HTTP Response를 한다.