-
Notifications
You must be signed in to change notification settings - Fork 2
Closed
Description
배경
현재 "누가 어떤 문제를 풀었는가"에 대한 책임이 member, team 2개 도메인에 흩어져 있음.
| 현재 위치 | 기능 | 핵심 데이터 |
|---|---|---|
member/MemberService |
문제해결 인증 (verifyProblemSolved) |
MemberSolvedProblem |
member/MemberService |
일별 풀이 현황 (getDailySolved) |
MemberSolvedProblem |
member/RankingService |
전체 랭킹 (getGlobalRanking) |
MemberSolvedProblem |
member/domain |
MemberSolvedProblem 엔티티 |
MemberSolvedProblem |
member/repository |
MemberSolvedProblemRepository |
MemberSolvedProblem |
→ 모두 MemberSolvedProblem 하나의 엔티티를 중심으로 쓰기/읽기/집계하는 로직
문제점
- MemberService God Class — 회원 관리 + 풀이 인증 + 풀이 통계 + 이메일 변경 + 핸들 등록, 의존성 8개 주입
- assignRanks() 코드 중복 —
RankingService와TeamActivityService에 완전히 동일한 순위 부여 로직 - TeamActivityService가 Repository 직접 접근 —
MemberSolvedProblemRepository를 직접 주입받아 풀이 데이터를 조회
solve 도메인 구성
solve/
├── domain/
│ └── MemberSolvedProblem.java ← member에서 이동
├── repository/
│ └── MemberSolvedProblemRepository.java ← member에서 이동
├── service/
│ ├── SolveService.java ← 문제해결 인증 + 일별 풀이 현황 + 풀이 상태 조회
│ └── RankingService.java ← 전체 랭킹 (member에서 이동) + assignRanks 통합
├── dto/
│ ├── request/
│ └── response/
│ ├── DailySolvedResponse.java ← member에서 이동
│ └── GlobalRankingResponse.java ← member에서 이동
└── SolveController.java
solve에 포함하지 않는 것
TeamActivityService— 풀이 데이터의 소비자이지 소유자가 아님. team에 유지하되 solve 서비스를 호출하는 조정자 역할
작업 항목
-
solve패키지 생성 -
MemberSolvedProblem엔티티 +MemberSolvedProblemRepository→ solve로 이동 -
MemberService.verifyProblemSolved()→SolveService로 이동 -
MemberService.getDailySolved()→SolveService로 이동 -
RankingService→ solve로 이동 -
DailySolvedResponse,GlobalRankingResponse등 관련 DTO 이동 -
SolveController생성 (기존 MemberController의 풀이 관련 엔드포인트 이동) - 기존 테스트 이동 및 수정
후속 작업 (별도 이슈)
TeamActivityService→SolveService/RankingService호출로 전환 (Repository 직접 접근 제거)assignRanks()중복 제거 — 공통 인터페이스 도입
기대 효과
MemberServiceGod Class 해소 (의존성 8개 → 4~5개)- "풀이"라는 관심사가 한 곳에 응집
관련 이슈
- [REFACTOR] 전체 도메인 점검 #141 (전체 도메인 점검) 우선순위 5, 7, 8번이 이 작업으로 연쇄 해소
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Type
Projects
Status
Done