인텔리제이에서 스프링부트 프로젝트를 생성했습니다.
런타임: Java 21, Spring Boot 3.5.13
빌드: Gradle - Groovy DSL
패키징: JAR
패키지 네이밍: com.marketengine.backend
런타임과 빌드 설정은 학습 자료가 가장 많고 안정적인 버전으로 설정했습니다.
첫번째 구현 : 전역 예외 + 공통 응답 형식
API 스타일이 고정되면 이후 컨트롤러 - 도메인 코드가 훨씬 편해지기 때문에 먼저 구현했습니다.
ApiResponse: 성공, 실패를 감싸는 공통 래퍼

JsonInclude.Include.NON_NULL // 응답에서 NULL 제외
ApiError: 에러 래퍼

public static ApiError of(String code, String message) // of() -> 정적 팩토리 메서드
//사용 예
ApiError.of("400", "잘못된 요청");
ErrorCode: 에러코드 통일 enum

RESOURCE_NOT_FOUND(HttpStatus.NOT_FOUND, "Resource not found")
// 서비스에서
throw new BusinessException(ErrorCode.RESOURCE_NOT_FOUND);
// 핸들러에서
ApiError.of(
errorCode.code(),
errorCode.defaultMessage()
)
// 응답
{
"code": "RESOURCE_NOT_FOUND",
"message": "Resource not found"
}
BusinessException: 도메인에서 던지는 예외

Map<String, Object> details = Map.of(
"currentBalance", 500,
"requiredAmount", 2000
);
throw new BusinessException(ErrorCode.INSUFFICIENT_BALANCE, "잔액이 부족하여 결제에 실패했습니다.", details);
GlobalExceptionHandler
RestControllerAdvice로 전역 예외 처리
검증 오류 / JSON 파싱 오류 / 404 / 500 등을 같은 JSON 모양으로 응답

테스트: MockMvc로 응답 JSON 스키마를 한 번 검증


git commit 링크
https://github.com/chlwlsguszz/backend-engineering/commit/c329f849e25aeb3680b2047fb03d8bd5508b074c
'백엔드 엔지니어링 일지' 카테고리의 다른 글
| 마켓 백엔드 엔진 5 : product DB 구체화, 대용량 더미 데이터 생성, 검색 기능 개발 (0) | 2026.04.24 |
|---|---|
| 마켓 백엔드 엔진 4 : Next.js 프론트 생성, Docker Compose로 통합 배포, 더미 데이터 생성 (0) | 2026.04.23 |
| 마켓 백엔드 엔진 3 : flyway, JPA, CRUD API, Swagger, Filter (0) | 2026.04.22 |
| 마켓 백엔드 엔진 2 : Github Actions 테스트 자동화 및 Docker Compose로 local PostgreSQL DB 설정 (0) | 2026.04.21 |
| 마켓 백엔드 엔진 0 : 대용량 트래픽에서 성능 최적화 및 데이터 무결성 보장 (0) | 2026.04.17 |