본문 바로가기

백엔드 엔지니어링 일지

마켓 백엔드 엔진 1 : 스프링부트 프로젝트 생성 및 전역 예외 설정, 공통 응답 형식 지정

인텔리제이에서 스프링부트 프로젝트를 생성했습니다.
런타임: 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