▫️ 커스텀 예외

@Getter
public class ValidationException extends RuntimeException {

	private final ErrorCode errorCode;

	private ValidationException(ErrorCode errorCode) {
		super(errorCode.getMessage());
	}
}
@Getter
@RequiredArgsConstructor
public enum ProductError implements ErrorCode {

	INVALID_PRICE_ATTRIBUTE("상품 가격 정보가 올바르지 않습니다.", "P_001"),
	PRODUCT_NOT_FOUND("상품 정보를 찾을 수 없습니다.", "P_002"),
	INVALID_PRODUCT_MAIN_IMAGE("상품 메인 사진 정보를 찾을 수 없습니다.", "P_003"),
	INVALID_PRODUCT_DESCRIPTION("상품 설명 정보가 올바르지 않습니다.", "P_004"),
	TOO_LONG_PRODUCT_DESCRIPTION("상품 설명 정보가 제약조건 이상의 길이입니다.", "P_005"),
	INVALID_PROMOTION("상품 프로모션 정보가 올바르지 않습니다.", "P_006"),
	MINUS_APPLIED_PROMOTION_PRICE("상품 프로모션 할인 적용가는 음수일 수 없습니다.", "P_007");

	private final String message;
	private final String code;
}

▫️ 예외 응답 스펙

public record ErrorResponse(
	String message,
	String code
) {
}

▫️ 예외 핸들링

▫️ 예외 로깅

▫️ 예외 메세지 관리