2025년 1월 24일

김동환·2025년 1월 24일

TIL (Today I Learned)


NestJS를 활용한 CommentsController 개발

오늘은 NestJS를 활용하여 댓글 기능을 관리하는 컨트롤러를 작성해보았다. 아래는 내가 작성한 코드의 주요 내용을 정리한 것이다.


1. Controller의 주요 목적

CommentsControllercomments 관련 요청을 처리하기 위해 만들어졌다.
주요 역할은 다음과 같다:

  • 댓글 생성
  • 카드별 댓글 조회
  • 댓글 수정
  • 댓글 삭제

NestJS의 데코레이터를 활용하여 요청 메서드와 라우트를 정의하였다.


2. 코드 상세

댓글 생성

@Post(':cardId')
async createComment(
  @Param('cardId') cardId: number,
  @Body() createCommentDto: CreateCommentDto,
) {
  await this.commentsService.createComment(cardId, 1, createCommentDto.content);
}
  • 라우트: POST /comments/:cardId
  • 설명: 특정 카드(cardId)에 댓글을 생성한다.
  • 매개변수:
    • @Param('cardId'): URL에서 카드 ID를 가져온다.
    • @Body(): 요청 Body에서 댓글 내용을 가져온다.
  • 추가 작업: 현재는 user.id 대신 임시로 1을 사용 중이며, 나중에 사용자 인증 기능을 추가해야 한다.

카드별 댓글 조회

@Get(':cardId')
async findAllComment(@Param('cardId') cardId: number) {
  return await this.commentsService.getCommentByCardId(cardId);
}
  • 라우트: GET /comments/:cardId
  • 설명: 특정 카드(cardId)에 작성된 모든 댓글을 조회한다.
  • 매개변수:
    • @Param('cardId'): URL에서 카드 ID를 가져온다.

댓글 수정

@Patch(':id')
async updateComment(
  @Param('id') id: number,
  @Body() updateCommentDto: UpdateCommentDto,
) {
  await this.commentsService.updateComment(+id, 1, updateCommentDto.content);
}
  • 라우트: PATCH /comments/:id
  • 설명: 특정 댓글(id)의 내용을 수정한다.
  • 매개변수:
    • @Param('id'): URL에서 댓글 ID를 가져온다.
    • @Body(): 요청 Body에서 수정할 내용을 가져온다.
  • 추가 작업: 사용자 인증 정보(user.id)를 받아와야 한다.

댓글 삭제

@Delete(':id')
async deleteComment(@Param('id') id: number) {
  await this.commentsService.deleteComment(+id, 1);
}
  • 라우트: DELETE /comments/:id
  • 설명: 특정 댓글(id)을 삭제한다.
  • 매개변수:
    • @Param('id'): URL에서 댓글 ID를 가져온다.
  • 추가 작업: user.id를 받아와 인증 기능과 연동해야 한다.

3. 개선 포인트

  1. 유저 인증 추가:
    현재 user.id를 하드코딩(1)으로 사용하고 있다. 실제 사용자 정보를 받아오도록 인증 미들웨어를 추가할 필요가 있다.

    • 주석 처리된 @userInfo() 데코레이터 활용 가능.
  2. 에러 핸들링:

    • 서비스 로직에서 처리되지 않는 에러에 대해 글로벌 에러 필터를 추가하면 더 안정적인 API를 제공할 수 있다.
  3. 응답 데이터 개선:

    • 각 메서드에서 생성 또는 수정된 데이터를 반환하도록 수정할 필요가 있다.
    • 현재는 일부 메서드가 단순히 성공 여부만 처리하고 있다.

오늘 느낀 점

  • NestJS의 데코레이터를 활용하면 라우팅과 컨트롤러 작성이 깔끔하고 직관적이다.
  • 비즈니스 로직과 컨트롤러를 명확히 분리하는 것이 유지보수에 도움이 된다.
  • 인증 기능을 염두에 두고 설계해야 실제 배포 환경에서도 문제가 생기지 않는다.

다음 목표:

  • 인증/인가 미들웨어를 추가하여 댓글 생성, 수정, 삭제 시 사용자 정보를 기반으로 처리할 수 있도록 개선하기!
profile
Node.js 7기

0개의 댓글