-
Notifications
You must be signed in to change notification settings - Fork 2
Closed
Description
상위 이슈
요약
problem 도메인의 역할을 문제 메타데이터 저장소로 재정의하고, Middleman 안티패턴 및 데드 코드를 제거한다.
현재 문제점
1. ProblemService — Middleman 안티패턴
ProblemService의 4개 메서드가 전부 SolvedAcClient.recommendUnsolvedProblems()로 단순 위임만 수행. 자체 비즈니스 로직 없음.
// ProblemService.java — 모든 메서드가 이 패턴
public List<ProblemInfo> recommend(...) {
return solvedAcClient.recommendUnsolvedProblems(...);
}호출부 (2곳):
| 위치 | 사용 메서드 |
|---|---|
RecommendationCreator:89 |
recommend(handles, count, minLevel, maxLevel, tagKeys) |
ProblemController:47,70 |
recommend(handle, count), recommend(request, count) |
2. ProblemController 역할 의문
/api/problem/recommend 엔드포인트가 solved.ac API를 그대로 프록시할 뿐, 문제 메타데이터를 DB에 저장하지 않음. problem 도메인의 본래 책임("메타데이터 저장소")과 맞지 않음.
3. 데드 코드
| 파일 | 상태 |
|---|---|
TeamProblem.java |
레거시 엔티티. 어디서도 import/사용되지 않음 |
TeamProblemRecommendResponse.java |
레거시 DTO. 어디서도 import/사용되지 않음 |
해결 방안
Step 1: ProblemService 제거
RecommendationCreator→SolvedAcClient.recommendUnsolvedProblems()직접 호출ProblemController→SolvedAcClient직접 주입 (또는 엔드포인트 필요성 재검토)ProblemService.java삭제
Step 2: 데드 코드 삭제
TeamProblem.java삭제TeamProblemRecommendResponse.java삭제
Step 3: problem 도메인 역할 재정의
리팩토링 후 problem 도메인 구성:
- 엔티티:
Problem,Tag,ProblemTag(문제 메타데이터) - 서비스:
ProblemSyncService(solved.ac → 로컬 DB 동기화) - 레포지토리:
ProblemRepository,TagRepository,ProblemTagRepository - 컨트롤러:
ProblemController(직접SolvedAcClient사용, 또는 제거 검토)
난이도
쉬움 — 단순 삭제 + 호출부 변경 (2곳)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Type
Projects
Status
Done