강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

당황한 너구리님의 프로필 이미지
당황한 너구리

작성한 질문수

Spring Boot, AWS로 백엔드 서비스 한 사이클 완성하기

섹션 7 퀴즈

댓글 생성, 삭제 시 게시글의 댓글 수 증감 로직 질문

작성

·

9

1

안녕하세요. 코드에서 궁금한 점 질문드립니다.

댓글 생성, 삭제 시에 게시글의 댓글 수 증감 로직이 아래 예시 코드처럼 CommentService에서 이루어지고 있는데 과한 책임이 아닌가 싶어서요. 실무에서는 어떻게 나누게 되는지 궁금합니다.

 

public CommentResponse createComment(Long postId, CommentRequest request) {
    Post post = postRepository.findById(postId)
        .orElseThrow(() -> new IllegalArgumentException("게시글을 찾을 수 없습니다."));

    Comment comment = Comment.builder()
        .content(request.content())
        .postId(postId)
        .createdAt(LocalDateTime.now())
        .updatedAt(LocalDateTime.now())
        .build();

    Comment newComment = commentRepository.save(comment);

    post.increaseCommentCount();
    postRepository.save(post);

    return CommentResponse.from(newComment);
}

답변 1

0

한조각님의 프로필 이미지
한조각
지식공유자

안녕하세요, 당황한 너구리님

현재 CommentService 에서 댓글 뿐만 아니라 게시글에 관한 책임이 함께 있는 상황인데요.

서비스가 커져감에 따라 발생할 수 있는 유지보수성 문제를 잘 지적해주셨네요.

 

실무에서 책임을 분리하는 방법으로는

1) 가장 간단하게는 PostService 에 댓글수를 증가하는 메소드를 만든 뒤, CommentService 에서 이를 호출하는 방법이 있습니다.

이렇게 되면 CommentServicePostService 를 의존하게 되는데, 그 반대로도 의존하여 순환참조 되지 않도록 개발 내부 규칙을 두어 한 방향으로만 의존할 수 있게 강제하면 좋습니다.

 

2) 반대로, PostService 에 댓글 생성 메소드를 만든뒤, CommentService 의 댓글 생성 메소드만 호출하도록 만들어도 됩니다.

PostService
  createComment()
  Post 조회 및 검증
  CommentService.createComment() 호출
  Post의 댓글 수 증가 및 저장

PostService 를 비즈니스 플로우 진입점으로 정해놓고, CommentService 는 간단하게 댓글을 저장하는 식입니다. 즉, 게시글, 댓글이 동시에 사용된다면 진입점은 항상 PostService 로 규칙을 정하는 겁니다. 이를 통해 비즈니스 로직에 통일성을 부여하고, 위에서 언급한 순환참조 문제도 없게 됩니다.

 

3) PostService, CommentService 위의 상위 계층을 만들어 이곳에서 두 로직을 조합합니다.

가령, CommentCreationUseCase 를 두어 추상화된 게시글, 댓글 통합 처리를 담당하게 하면 됩니다.

이를 통해 각 서비스는 자신이 맡은 도메인 로직에만 집중할 수 있고, 복잡한 트랜잭션이나 비즈니스 규칙은 CommentCreationUseCase에서 일관성 있게 처리할 수 있습니다.

 

제가 선택지를 여러개 드렸는데, 이 외에도 도메인 이벤트 발행 등 다양한 방법이 있을 수 있습니다.

 

강의에서는 간단한 로직을 다루고 있다보니 CommentService 에서 모든 작업을 처리하고 있습니다.

개인적으로는 현재 서비스 수준에서 과하지 않게 필요한 정도로 책임을 분리해주면 좋다고 생각합니다.

 

감사합니다.

 

당황한 너구리님의 프로필 이미지
당황한 너구리

작성한 질문수

질문하기