Nest.js 모듈 생성

노누리·2022년 6월 8일
0
post-thumbnail

저번 포스팅에서 nest 프로젝트를 생성하고 코드가 실행되는 구조를 살펴보았다.

저번 포스팅

모듈 생성하기

터미널에서 nest를 치면 다음과 같이 사용할 수 있는 명령어들이 뜬다.

nest g 를 하면 파일을 새로 생성할 수 있는데 이때, module, controller, service 등을 입력해서 원하는 파일을 생성할 수 있다.

board라는 게시판 모듈을 생성해보자. nest g mo board라고 입력하면 board라는 이름의 module을 생성한다는 뜻이다.

이렇게 board라는 폴더안에 board.module.ts가 생성된다. module, controller, service 파일을 모두 만들어본다.

이렇게 폴더구조가 만들어지고 나면 board.module.ts 파일이 조금 변경된다.

@Module({
  controllers: [BoardController],
  providers: [BoardService],
})

controllers와 providers에 각각 controller, service 파일이 들어간다.


코드 뜯어보기

app.module.ts

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

board 모듈을 꾸며주기 전에 모듈을 import해주어야하는데 app.module.ts에 BoardController,BoardService를 참조해줘야 그 모듈을 사용할 수 있다.

board.controller.ts

@Controller('board')
export class BoardController {
  constructor(private readonly boardService: BoardService) {}
  @Get()
  getAllBoards(): string {
    return this.boardService.AllBoards();
  }
}

@Controller에 있는 값이 홈 주소에서 해당 모듈을 잇는 라우터 주소이다. 즉, board 모듈은 localhost:3000/board로 주어지는 것이다.

따라서 @Get()을 하면 localhost:3000/board를 접속하여 get요청을 보냈을 때 아래에 있는 코드가 실행되는 것이다.

@Get 데코레이터 밑에 있는 getAllBoards는 함수 이름이고 : string은 string 형식으로 반환된다는 뜻이다.

Controller에서는 라우터 역할을 하고 Service에서 대부분의 로직을 수행하는데 Controller에서 Service 파일을 import 하기 위해서는 constructor를 이용한다.

생성자를 만들어서 BoardServiceboardService라는 이름으로 만들어주는 것이다. this.boardService.서비스 함수 이름을 작성하면 해당하는 서비스파일의 함수를 실행시킨다.

board.service.ts

@Injectable()
export class BoardService {
  AllBoards(): string {
    return 'AllBoards return';
  }
}

BoardService 파일에 있는 AllBoards()함수를 불러서 Controller에서 실행시킨 것이다.

localhost:3000/board 으로 접속하면 AllBoards return이라는 글이 뜬다!

모듈을 생성하고 라우팅하고, 함수를 사용하는 방법을 알았으니 다음 포스팅에서는 DB를 연결하고 엔티티를 생성해보겠다!

(본인은 현재 postgresSQL을 이용해서 하고 있어서 해당 DB로 설명할 예정이다.)

profile
백엔드 개발자입니다.

0개의 댓글