Nest.js의 controller와 service

조소복·2022년 6월 2일

지난 포스팅에서 nest.js를 시작하기위한 기초설정을 설명했다.

이번 포스팅에서는 Nest.js 개발을 위해 파일을 하나씩 설명하려 한다.

module, controller, service

파일 구조를 보면 app.module, app.controller,app.service가 있다.

main.ts는 JS로 따지면 메인 인덱스를 생각하면 될 것 같다.

간단하게 순서를 설명하자면 main에서 app.module로 가게 되고, app.controller, app.service로 시선이 이동한다고 생각하면 된다.

(spec.ts 파일은 테스팅을 위한 파일이니 지금은 신경쓰지 말자)

app.module.ts

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})

module 파일엔 이렇게 imports,controllers,providers가 있다.

controller에는 예상했다싶이 Controller 파일을 넣어주고
providers에는 Services 파일을 넣어주면 된다.


app.controller.ts

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

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

이 부분은 router 역할을 한다고 생각하면 된다. 클래스의 위에 @Controller()를 선언해주고 get, post, delete, update 등 request 요청을 선언해주면된다.

이때 @가 붙은것을 데코레이터라고 부른다.

위의 코드를 참고하면 @Get() 데코레이터를 선언하여 '/' 링크로 접속하여 get 요청을 보냈을 때 아래에 있는 함수를 실행하겠다는 뜻이다.

@Controller() 선언에서 ()안에 들어가는 문자열이 그 파일의 기본 라우터라고 생각하면 된다. 즉, @Controller('home')이라고 되어 있고, @Get('one') 이라고 되어있는 라우터에 접근하려면 url 주소를 http://localhost:3000/home/one 으로 접속해야하는 것이다.

getHello(): string 에서 getHello는 함수 이름이고, string은 반환되는 타입을 나타낸다. 그리고 {} 내에 있는 코드를 실행하는 것인데 appService로 이동하니 우리도 app.service.ts 파일로 눈을 돌려보자.


app.service.ts

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello World!';
  }
}

controller에서 service 파일의 getHello() 함수를 호출했고 service에서는 문자열을 반환하므로 결국 홈화면을 접속하면 'Hello World!'라는 문자열을 확인할 수 있는 것이다.

여기까지가 코드를 읽는 시선의 이동이다. 이러한 순서로 코드를 읽어나간다고 생각하면 될 것 같다.

모듈 생성, DB 연결, Entity, Repository, Dto 생성 등 본격적으로 CRUD 구현을 위한 기초 세팅을 해야한다. 조금은 긴 설명이 될 듯하니 다음 포스팅에서 설명하려고 한다.

profile
개발을 꾸준히 해보자

0개의 댓글