Skip to content

Conversation

@jueunk617
Copy link
Collaborator

📌 개요

  • 채팅/웹소켓 관련 코드의 구조 개선 및 책임 분리
  • N+1 쿼리 감지를 위한 테스트 환경 구축
  • 코드 가독성 및 유지보수성을 고려한 전반적인 리팩토링

🔨 작업 내용

1. 트랜잭션 관리 개선

  • 클래스 레벨의 @Transactional 어노테이션을 메서드 레벨로 이동
  • 각 메서드의 트랜잭션 경계를 명확하게 설정
  • 읽기 전용 작업과 쓰기 작업의 트랜잭션 전략을 개별적으로 관리

2. N+1 쿼리 감지 환경 구축

  • 테스트 코드에 datasource-proxy 라이브러리 적용
  • 프록시를 통해 실행되는 모든 쿼리 로깅 및 카운팅 설정
  • 테스트 실행 시 쿼리 실행 횟수 자동 추적 기능 구현

3. WebSocketSessionManager 책임 분리

기존의 WebSocketSessionManager를 3개의 독립적인 컴포넌트로 분리

3-1. RedisSessionStore 분리

  • Redis 세션 저장소와의 저수준 상호작용 로직 분리
  • Redis Set/Hash 자료구조를 이용한 세션 데이터 CRUD 구현
  • 세션 키 생성 및 관리 로직 담당

3-2. UserSessionService 분리

  • 사용자 세션 관리 비즈니스 로직 분리
  • 사용자의 웹소켓 세션 생성/조회/삭제 기능 구현
  • 사용자별 활성 세션 목록 관리 및 온라인 상태 추적

3-3. RoomParticipantService 분리

  • 채팅방 참여자 관리 로직 분리
  • 채팅방별 참여자 목록 관리 기능 구현
  • 참여자 입장/퇴장 처리 및 채팅방 참여 상태 조회

4. 코드 품질 개선

4-1. RedisSessionStore의 @RequiredArgsConstructor 제거

  • final 필드가 없어 불필요한 @RequiredArgsConstructor 어노테이션 제거
  • 명시적인 의존성 주입 방식으로 변경

4-2. WebSocketConstants 클래스 추가

  • Redis 키 prefix 상수 정의 (예: USER_SESSION:, ROOM_PARTICIPANTS:)
  • 웹소켓 메시지 타입 상수 정의
  • 세션 만료 시간 등 설정 값 중앙 관리

4-3. 중복 로깅 및 불필요한 try-catch 제거

  • 동일한 정보를 여러 곳에서 로깅하던 중복 코드 제거
  • 예외를 재던지기만 하는 불필요한 try-catch 블록 제거

5. 테스트 코드 정비

  • RedisSessionStore: Redis 연산 동작 검증
  • UserSessionService: 사용자 세션 관리 로직 검증
  • RoomParticipantService: 채팅방 참여자 관리 로직 검증
  • 통합 테스트: 전체 웹소켓 플로우 검증

🔗 관련 이슈

Closes #134


📝 참고 사항

  • 리팩토링 작업으로 기존 기능 동작에는 변경 없음
  • datasource-proxy는 테스트 환경에만 적용
  • 테스트 코드 내용이 많아서 이 부분은 자세히 보지 않으셔도 됩니다 !!

✅ 체크리스트

  • 기능 동작 확인
  • 테스트 코드 작성
  • 문서/주석 추가 및 최신화

@github-actions github-actions bot changed the title Refactor: 채팅/웹소켓 코드 리팩토링 Refactor: 채팅/웹소켓 코드 리팩토링 (#134) Oct 1, 2025
@jueunk617 jueunk617 merged commit ee333c6 into dev Oct 1, 2025
2 checks passed
@github-actions github-actions bot deleted the Refactor/134 branch October 1, 2025 05:19
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.

4 participants