개발 slecs

에러 레이어별 분리로 사용자 친화적 오류 메시지 제공

목차

fix: 사용자 친화적 오류 메시지 처리 개선

에러 처리는 사용자 경험에 직결됨. 스택 트레이스 그대로 보여주거나, 의미 없는 "오류가 발생했습니다" 메시지는 지양함.

에러 레이어별 처리

BusinessException → 400/422 + 구체적 메시지
AuthException → 401/403 + 리다이렉트
NotFoundException → 404
Exception → 500 + 내부 로그 (사용자엔 일반 메시지)

GlobalExceptionHandler

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(BusinessException.class)
    public ResponseEntity<ErrorResponse> handleBusiness(BusinessException e) {
        return ResponseEntity.status(e.getStatus())
            .body(ErrorResponse.of(e.getCode(), e.getMessage()));
    }

    @ExceptionHandler(Exception.class)
    public ResponseEntity<ErrorResponse> handleGeneral(Exception e) {
        log.error("Unhandled exception", e);
        return ResponseEntity.internalServerError()
            .body(ErrorResponse.of("INTERNAL_ERROR", "잠시 후 다시 시도해주세요"));
    }
}

사용자 친화적 메시지

기술적 오류 사용자 표시 메시지
DB timeout "서비스가 일시적으로 불안정합니다"
잔액 부족 "잔액이 부족합니다. 충전 후 이용해주세요"
재고 소진 "현재 재고가 없습니다"

댓글 0

첫 댓글 달아줘.