Nest.js의 controller와 service

노누리·2022년 6월 2일
0

지난 포스팅에서 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개의 댓글