Skip to content

refactor: 채팅방 접근 검증 책임 정리#608

Merged
dh2906 merged 9 commits intodevelopfrom
refactor/chat-room-access-service-600
Apr 28, 2026
Merged

refactor: 채팅방 접근 검증 책임 정리#608
dh2906 merged 9 commits intodevelopfrom
refactor/chat-room-access-service-600

Conversation

@dh2906
Copy link
Copy Markdown
Contributor

@dh2906 dh2906 commented Apr 28, 2026

🔍 개요


🚀 주요 변경 내용

  • direct, club group, 일반 group 채팅방 접근 검증을 ChatRoomAccessService로 이동
  • SYSTEM_ADMIN 문의방 어드민 뮤트 예외와 club group 멤버 보장 정책 유지
  • 메시지 조회, 뮤트, 방 이름 변경의 접근 검증 호출부를 새 서비스로 정리

💬 참고 사항

  • 검증: ChatServiceTest, ChatApiTest 접근 관련 케이스, checkstyleMain, git diff --check 통과
  • 참고: checkstyleTest는 기존 테스트 파일 3개의 LineLength 12건으로 실패합니다. 이번 변경 파일의 신규 위반은 없습니다.

✅ Checklist (완료 조건)

  • 코드 스타일 가이드 준수
  • 테스트 코드 포함됨
  • Reviewers / Assignees / Labels 지정 완료
  • 보안 및 민감 정보 검증 (API 키, 환경 변수, 개인정보 등)

- ChatService에 남아 있던 direct, club group, group 접근 검증 흐름을 ChatRoomAccessService로 이동
- direct SYSTEM_ADMIN 문의방 예외와 club group 멤버 보장 정책을 기존 경로 그대로 유지
- 뮤트, 방 이름 변경, 메시지 조회 접근 검증을 한 서비스로 모아 후속 멤버 명령 분리 범위를 줄임
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 28, 2026

Warning

Rate limit exceeded

@dh2906 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 26 minutes and 20 seconds before requesting another review.

To keep reviews running without waiting, you can enable usage-based add-on for your organization. This allows additional reviews beyond the hourly cap. Account admins can enable it under billing.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 013036ce-7907-4ba8-9821-1c63c46c6865

📥 Commits

Reviewing files that changed from the base of the PR and between 5f7999d and 100d6d9.

📒 Files selected for processing (5)
  • src/main/java/gg/agit/konect/domain/chat/service/ChatRoomAccessService.java
  • src/main/java/gg/agit/konect/domain/chat/service/ChatRoomMembershipService.java
  • src/main/java/gg/agit/konect/domain/chat/service/ChatService.java
  • src/test/java/gg/agit/konect/unit/domain/chat/service/ChatRoomMembershipServiceTest.java
  • src/test/java/gg/agit/konect/unit/domain/chat/service/ChatServiceTest.java
📝 Walkthrough

Walkthrough

채팅 방 접근 검증 로직을 전담하는 새로운 ChatRoomAccessService를 도입하여 중앙화했습니다. 기존 ChatService의 멤버십 검증 및 접근 제어 로직을 새 서비스로 이관하고, 클럽-그룹·다이렉트·일반 방 유형별 검증 흐름을 정리했습니다.

Changes

Cohort / File(s) Summary
새로운 접근 검증 서비스
src/main/java/gg/agit/konect/domain/chat/service/ChatRoomAccessService.java
클럽-그룹 멤버십 검증, 다이렉트 방 접근, 일반 방 멤버 조회 및 방 탈출 거부 로직을 중앙화하는 새 서비스 추가. getAccessibleMember(), ensureMuteAccess() 메서드 제공.
ChatService 위임 리팩토링
src/main/java/gg/agit/konect/domain/chat/service/ChatService.java
기존 로컬 getAccessibleRoomMember() 제거 후 새로운 ChatRoomAccessService로 위임. 메시지 페이지네이션, 뮤트 토글, 방 이름 변경 로직에서 접근 검증 호출 변경.
테스트 설정 업데이트
src/test/java/gg/agit/konect/unit/domain/chat/service/ChatServiceTest.java
setUp()에서 ChatRoomAccessService 구성 및 ChatService 생성자에 의존성 주입 추가.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested labels

리팩토링

Poem

🐰 방 접근 검증, 한곳에 모여
클럽, 다이렉트, 그룹 모두를 다루는
ChatRoomAccessService, 새로운 친구!
ChatService의 짐을 덜어주고
책임 정리, 코드는 더 맑아졌네 ✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed 제목이 핵심 변경 사항을 명확하게 요약하고 있습니다. ChatService에서 ChatRoomAccessService로 채팅방 접근 검증 책임을 분리하는 리팩토링을 간결하게 표현합니다.
Description check ✅ Passed 설명이 변경 사항과 관련성이 높고, 주요 내용(책임 분리), 정책 유지(SYSTEM_ADMIN 예외, club group 멤버 보장), 검증 결과를 포함하고 있습니다.
Linked Issues check ✅ Passed pull request가 이슈 #600의 모든 요구사항을 충족합니다. club/group 접근 검증을 ChatRoomAccessService로 분리하고, direct 정책을 일반화하지 않으며, 멤버 보장 및 접근 거부 정책을 유지하고, 검증 테스트를 통과했습니다.
Out of Scope Changes check ✅ Passed 모든 변경 사항이 이슈 #600의 채팅방 접근 검증 책임 정리 범위 내에 있습니다. ChatRoomAccessService 추가, ChatService 리팩토링, 테스트 업데이트 모두 명시된 목표와 일치합니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/chat-room-access-service-600

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 28, 2026

🧪 JaCoCo Coverage Report (Changed Files)

Summary

  • Overall Coverage: 85.3% ✅
  • Covered Lines: 308 / 361
  • Changed Files: 3

Coverage by File

Class Coverage Lines Status
ChatService
gg.agit.konect.domain.chat.service
80.6% 195/242
ChatRoomAccessService
gg.agit.konect.domain.chat.service
85.0% 17/20
ChatRoomMembershipService
gg.agit.konect.domain.chat.service
97.0% 96/99

📊 View Workflow Run

@dh2906 dh2906 self-assigned this Apr 28, 2026
@dh2906 dh2906 added the 리팩토링 리팩터링을 위한 이슈입니다. label Apr 28, 2026
@dh2906 dh2906 requested a review from Copilot April 28, 2026 01:29
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

ChatService에 남아 있던 채팅방 접근 검증 책임을 ChatRoomAccessService로 분리해, 메시지 조회/뮤트/방 이름 변경 등에서 접근 검증 호출 흐름을 일관되게 정리하는 리팩터링입니다. (#600)

Changes:

  • ChatRoomAccessService 신규 추가: direct/club group/group 접근 가능 멤버 조회 및 뮤트 접근 예외 처리 제공
  • ChatService에서 기존 접근 검증 로직을 제거하고 새 서비스 호출로 치환
  • ChatServiceTest에서 ChatService 생성 시 새 의존성(ChatRoomAccessService) 주입 반영

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

File Description
src/test/java/gg/agit/konect/unit/domain/chat/service/ChatServiceTest.java ChatRoomAccessService 생성/주입으로 테스트 셋업 업데이트
src/main/java/gg/agit/konect/domain/chat/service/ChatService.java 접근 검증 호출부를 ChatRoomAccessService로 위임하고 기존 private 메서드 제거
src/main/java/gg/agit/konect/domain/chat/service/ChatRoomAccessService.java 접근 검증 책임을 모은 신규 서비스 추가

Comment thread src/main/java/gg/agit/konect/domain/chat/service/ChatRoomAccessService.java Outdated
Comment thread src/main/java/gg/agit/konect/domain/chat/service/ChatRoomAccessService.java Outdated
dh2906 added 5 commits April 28, 2026 14:25
- 뮤트 접근 검증에서 이미 조회한 User를 재사용해 불필요한 getById 호출을 피함
- 일반 room 접근 검증은 userId 기반으로 유지해 기존 테스트 스텁과 정책을 보존
- group 방 이름 변경 경로에서 불필요한 사용자 조회가 발생하지 않도록 접근 검증 분기를 정리
- 이미 받은 User 객체로 direct 방 접근 검증을 수행해 중복 사용자 조회를 피함
- club/group 접근 검증은 기존 userId 기반 정책과 예외 처리를 동일하게 유지
- 뮤트 접근 검증에서 사용자 조회 재사용 의도를 코드 경로에 직접 반영
- develop의 ChatInviteService, ChatRoomCreationService, ChatMessageSendService 분리 구조를 유지했습니다.
- PR 브랜치의 ChatRoomAccessService 주입과 접근 검증 위임은 유지해 뮤트/방 이름/그룹 메시지 조회 권한 검증 흐름이 사라지지 않게 했습니다.
- ChatServiceTest 생성자 설정도 두 변경 흐름을 함께 반영해 병합 후 단위 테스트가 같은 서비스 조합으로 실행되도록 정리했습니다.
- userId 기반 호출과 User 기반 호출이 같은 방 유형 분기를 공유하도록 정리
- direct 방에서만 User 재사용 여부가 달라지는 조건을 helper 안으로 모아 불필요한 중복 분기를 줄임
- 기존 접근 검증 정책과 direct 방 사용자 재조회 회피 동작은 그대로 유지
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

Comment thread src/main/java/gg/agit/konect/domain/chat/service/ChatRoomAccessService.java Outdated
dh2906 added 3 commits April 28, 2026 14:47
- 이미 조회한 ChatRoom을 가진 접근 검증 경로에서는 roomId 기반 재조회 대신 ChatRoom 기반 멤버 보장 경로를 사용합니다.
- 기존 roomId 기반 API는 유지해 다른 호출부 호환성을 보존합니다.
- 재조회 없이 멤버 보장이 이뤄지는 회귀 테스트를 추가해 같은 성능 회귀가 반복되지 않게 했습니다.
- develop의 메시지 읽음 및 채팅방 멤버 명령 서비스 분리 구조를 유지했습니다.
- PR 브랜치의 ChatRoomAccessService 주입과 재조회 제거 흐름을 테스트 셋업에 함께 반영했습니다.
- 충돌난 ChatServiceTest는 새 서비스 조합을 명시적으로 구성해 기존 접근 검증 회귀 테스트가 유지되도록 정리했습니다.
- nullable User 인자로 직접 채팅방 재조회 여부를 표현하던 흐름을 제거했습니다.
- direct 방과 non-direct 방 분기를 public 진입점에서 명확히 나눠 읽기 쉽게 정리했습니다.
- 기존 접근 검증 정책과 재조회 제거 동작은 유지했습니다.
@dh2906 dh2906 merged commit d33d0a2 into develop Apr 28, 2026
5 checks passed
@dh2906 dh2906 deleted the refactor/chat-room-access-service-600 branch April 28, 2026 06:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

리팩토링 리팩터링을 위한 이슈입니다.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

채팅 리팩토링: 방 접근 검증 책임 정리

2 participants