에러 레이어별 분리로 사용자 친화적 오류 메시지 제공
목차
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
첫 댓글 달아줘.