-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Labels
enhancementNew feature or requestNew feature or request
Description
현재 상황
CustomResponseStatus 하나의 enum에 모든 도메인의 에러 코드가 집중되어 있음 (90줄+)
현재 구조
common/
enums/
CustomResponseStatus.java # 모든 도메인의 에러 코드가 여기에 집중 (90줄+)
exception/
CustomException.java # CustomResponseStatus를 감싸는 단일 예외
GlobalExceptionHandler.java
dto/
ApiResponse.java
현재 코드
// 하나의 enum에 모든 도메인 에러가 혼재
public enum CustomResponseStatus {
// Auth
EXPIRED_JWT(...),
BAD_JWT(...),
// Member
MEMBER_NOT_FOUND(...),
HANDLE_ALREADY_EXISTS(...),
// Team
TEAM_NOT_FOUND(...),
TEAM_ACCESS_DENIED(...),
// Recommendation
RECOMMENDATION_NOT_FOUND(...),
// ... 40개 이상의 상수
}문제점:
team/코드 수정 시에도common/을 건드려야 함 → 도메인 간 불필요한 결합- enum이 비대해지며 관리가 어려워짐
- 코드 번호 충돌 관리가 어려움
개선 방안
도메인별 ErrorCode enum을 분리하고, 공통 인터페이스로 통합
변경 후 구조
common/
exception/
ErrorCode.java # 인터페이스
BusinessException.java # ErrorCode를 받는 공통 예외
GlobalExceptionHandler.java # 기존 유지
member/exception/
MemberErrorCode.java # implements ErrorCode
team/exception/
TeamErrorCode.java
recommendation/exception/
RecommendationErrorCode.java
auth/exception/
AuthErrorCode.java
ErrorCode 인터페이스
public interface ErrorCode {
HttpStatus getHttpStatus();
String getCode();
String getMessage();
}도메인별 enum 예시
public enum MemberErrorCode implements ErrorCode {
NOT_FOUND(HttpStatus.NOT_FOUND, "M001", "해당 유저를 찾을 수 없습니다."),
HANDLE_ALREADY_EXISTS(HttpStatus.CONFLICT, "M002", "이미 사용 중인 핸들입니다.");
// ...
}코드 번호 체계
| prefix | 도메인 |
|---|---|
C |
Common (서버 에러, 공통) |
A |
Auth |
M |
Member |
T |
Team |
R |
Recommendation |
S |
SolvedAc |
작업 범위
-
ErrorCode인터페이스 생성 -
BusinessException생성 (기존CustomException대체) - 도메인별
ErrorCodeenum 분리 -
GlobalExceptionHandler에서BusinessException처리 - 각 도메인 서비스에서 새 ErrorCode 사용하도록 변경
- 기존
CustomResponseStatus,CustomException제거 - 테스트 수정
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request