Skip to content

[feat] CH7 통합 API 응답 구조 및 코드 Enum 도입/적용 완료 내역 정리 #7

@millkk04

Description

@millkk04

✅ 완료된 작업

1️⃣ API 응답 통일 구조 구축

  • BaseErrorCode 인터페이스: getStatus(), getCode(), getMessage() 메서드 정의
  • BaseSuccessCode 인터페이스: getStatus(), getCode(), getMessage() 메서드 정의
  • ApiResponse 클래스: 통일된 JSON 응답 구조(성공/실패, 코드, 메시지, 결과값)와 정적 팩토리 메서드 onSuccess()/onFailure() 구현

2️⃣ 성공 응답 코드 Enum 제작

  • GeneralSuccessCode: OK, CREATED, ACCEPTED, NO_CONTENT
  • 도메인별 SuccessCode Enum(ReviewSuccessCode, MemberSuccessCode, MissionSuccessCode, StoreSuccessCode)

3️⃣ 에러 응답 코드 Enum 완성

  • GeneralErrorCode: BAD_REQUEST, UNAUTHORIZED, FORBIDDEN, NOT_FOUND, INTERNAL_SERVER_ERROR

4️⃣ ApiResponse 메서드 구현

  • onSuccess(T result), onSuccess(BaseSuccessCode code, T result), of(BaseSuccessCode code, T result), onSuccess(), onFailure(BaseErrorCode code, T result), onFailure(BaseErrorCode code)

5️⃣ 예외 처리 구조 구축

  • GeneralException(RuntimeException 상속, BaseErrorCode 포함)
  • TestException(GeneralException 상속 도메인 예시)

6️⃣ 기존 API 응답 통일 적용

  • TestController (/temp): 테스트 및 예외 테스트 API
  • ReviewController (/api/reviews): 내가 작성한 리뷰 조회 API - ResponseEntity → ApiResponse로 변경, 코드 Enum 적용

7️⃣ 서비스 레이어 구조 정리

  • TestCommandServiceImpl 구조 정비
  • TestQueryService 의존성 주입 개선

📋 통일된 API 응답 예시
✅ 성공 응답
{
"isSuccess": true,
"code": "REVIEW200_2",
"message": "리뷰 목록 조회에 성공했습니다.",
"result": { /* 실제 데이터 */ }
}
❌ 실패 응답
{
"isSuccess": false,
"code": "COMMON404_1",
"message": "요청한 리소스를 찾을 수 없습니다.",
"result": null
}

🔍 적용된 설계 패턴 및 원칙

  • 응답 DTO 통일: 모든 API에서 ApiResponse 사용
  • 도메인별 코드 분리: SuccessCode, ErrorCode Enum 분리 관리
  • 정적 팩토리 메서드: 명시적이고 일관된 응답 생성
  • 인터페이스 기반 설계: BaseSuccessCode, BaseErrorCode
  • 타입 안정성: Enum 통한 코드 관리

📁 생성 / 수정된 파일
🆕 생성: BaseErrorCode.java, BaseSuccessCode.java, GeneralSuccessCode.java, ReviewSuccessCode.java, MemberSuccessCode.java, MissionSuccessCode.java, StoreSuccessCode.java
✏️ 수정: ApiResponse.java, GeneralErrorCode.java, ReviewController.java, TestController.java, TestException.java, TestCommandServiceImpl.java

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions