Skip to content

채팅방 삭제 API 개발#138

Merged
ckdals4600 merged 1 commit intomainfrom
feature/#129-chat-delete-api
Dec 19, 2025
Merged

채팅방 삭제 API 개발#138
ckdals4600 merged 1 commit intomainfrom
feature/#129-chat-delete-api

Conversation

@ckdals4600
Copy link
Contributor

관련 이슈

PR 설명

  • 사용자가 채팅방을 삭제할 때 연관된 모든 데이터(메시지, 피드백)를 영구적으로 제거하는 Hard Delete API를 구현

작업 내용

1. API 구현 (ChatController)

  • Endpoint: DELETE /v1/chats/{chatId}
  • *Response
        {
          "success": true,
          "status": "OK",
          "message": "성공적으로 삭제했습니다.",
          "data": null
        }

2. 아키텍처 및 비즈니스 로직 (Facade & Service)

  • Facade 패턴 적용 (ChatFacade):
    • @Transactional 범위 내에서 피드백 삭제 -> 메시지 삭제 -> 채팅방 삭제 순서로 로직을 실행하여 데이터 무결성을 보장함.

3. Repository 구현 (@Query 최적화 및 Bulk Operation)

  • JPQL Custom Query 적용:
    • Spring Data JPA의 기본 delete 메서드 대신 @Query를 사용하여 직접 DELETE 문을 실행함.
    • 단건 조회 후 삭제하는 방식(N+1 발생)을 피하고, 쿼리 발생 횟수를 최소화하여 대량 데이터 삭제 시 성능을 최적화함.
  • FeedbackRepository:
    • deleteAllByMessageInQuery: @Modifying(clearAutomatically = true)를 적용하여 Bulk Delete 수행 후 영속성 컨텍스트를 초기화함으로써 데이터 동기화를 보장함.
  • MessageRepository:
    • deleteAllByChat: 특정 채팅방에 속한 모든 메시지를 일괄 삭제하는 최적화 쿼리를 작성함.
  • ChatRepository:
    • delete: 최종적으로 채팅방 엔티티를 제거함.

4. 테스트 작성 (Aggregate 관점 포함)

  • Integration Test (ChatIntegrationTest):
    • API 호출 후 Chat, Message, Feedback 리포지토리에서 해당 ID의 데이터가 조회되지 않음을 검증함 (Hard Delete 확인).
    • 타인의 채팅방 삭제 시도 시 예외 발생(ACCESS_DENIED 등) 여부를 테스트함.
  • Repository Test (Aggregate Testing):
    • ChatAggregate Root로 간주하여 테스트를 진행함.
    • 개별 Repository 단위 테스트에 그치지 않고, Chat 삭제 시 하위 엔티티인 MessageFeedback까지 의도한 대로 일괄 삭제되는지 Aggregate 전체의 데이터 정합성을 한번에 검증함.
  • Unit Test (ChatFacadeTest):
    • Mocking을 통해 서비스 간의 호출 순서(Feedback -> Message -> Chat)가 FK 제약 조건을 준수하는지 확인함.

@ckdals4600 ckdals4600 linked an issue Dec 15, 2025 that may be closed by this pull request
@ckdals4600 ckdals4600 requested review from Goder-0 and minibr December 15, 2025 15:18
@ckdals4600 ckdals4600 self-assigned this Dec 15, 2025
@github-actions
Copy link

github-actions bot commented Dec 15, 2025

📊 코드 커버리지 리포트

Overall Project 91.18% 🍏
Files changed 100% 🍏

File Coverage
MessageCommandService.java 100% 🍏
FeedbackCommandService.java 100% 🍏
ChatCommandService.java 100% 🍏
FeedbackService.java 100% 🍏
ChatService.java 100% 🍏
MessageQueryService.java 100% 🍏
ChatFacade.java 100% 🍏
ChatController.java 100% 🍏
MessageService.java 64.78% 🍏

@ckdals4600 ckdals4600 changed the title 채팅방 삭제 API 개발 (Hard Delete) 채팅방 삭제 API 개발 Dec 16, 2025
@ckdals4600 ckdals4600 force-pushed the feature/#129-chat-delete-api branch 2 times, most recently from 77cc7a5 to a23f63d Compare December 19, 2025 10:20
@ckdals4600 ckdals4600 force-pushed the feature/#129-chat-delete-api branch from a23f63d to 9144995 Compare December 19, 2025 10:24
@ckdals4600 ckdals4600 requested a review from minibr December 19, 2025 14:44
@ckdals4600 ckdals4600 merged commit 18a626a into main Dec 19, 2025
1 check passed
@ckdals4600 ckdals4600 deleted the feature/#129-chat-delete-api branch December 19, 2025 15:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

채팅방 삭제 API 개발

2 participants