프로그래밍/팁

🎯 서버 개발 시 예외 처리는 어떻게 해야 할까? CustomException이란?

dandev 2025. 7. 3. 13:03
728x90
반응형

— InvalidCoordinateException, NotFoundException, CustomException 무엇이 다를까?

개발을 하다 보면 필연적으로 예외 처리를 하게 된다.

최근 공간 정보 기반 POI 프로젝트를 진행하면서 다양한 예외를 처리해야 했는데,

이 과정에서 "도메인별 예외"와 "공통 예외 처리 방식"의 차이를 깊게 이해하게 되었다.

이번 포스팅에서는 개별 예외 클래스(InvalidCoordinateException, NotFoundException)통합 예외 처리 방식(CustomException 패턴)의 차이를 비교하고, 어떤 상황에서 어떤 스타일이 적합한지 정리해보았다.

 


💥 문제 상황: 좌표가 잘못 들어왔을 때

예를 들어 사용자가 잘못된 위도를 입력한 경우:

{
  "latitude": 123.456, // ❌ 실제 위도 범위 초과
  "longitude": 126.9769
}

이럴 때 다음 두 가지 방식으로 예외 처리를 할 수 있다.

 


1️⃣ 개별 Exception: 의미를 명확히 전달

코드 예시

class InvalidCoordinateException(message: String) : RuntimeException(message)

throw InvalidCoordinateException("위도는 -90 ~ 90 사이여야 합니다.")

 

Handler

@ExceptionHandler(InvalidCoordinateException::class)
fun handleInvalidCoordinate(e: InvalidCoordinateException): ResponseEntity<ErrorResponse> {
    return ResponseEntity
        .badRequest()
        .body(ErrorResponse("C001", e.message ?: "잘못된 좌표입니다."))
}

 

장점

  • 예외 이름만 봐도 어떤 문제인지 직관적
  • 작은 규모의 프로젝트에서는 오히려 명확함.

단점

  • 예외 클래스 수가 많아지면 중복과 관리의 어려움이 생김.
  • 공통 응답 포맷 맞추기 어려움.

 


2️⃣ 통합 예외 처리: CustomException + ErrorCode

ErrorCode Enum

enum class ErrorCode(
    val code: String,
    val message: String,
    val status: HttpStatus
) {
    INVALID_COORDINATE("C001", "위도/경도가 잘못되었습니다.", HttpStatus.BAD_REQUEST),
    POI_NOT_FOUND("P001", "POI를 찾을 수 없습니다.", HttpStatus.NOT_FOUND)
}

 

예외 클래스

class CustomException(val errorCode: ErrorCode) : RuntimeException(errorCode.message)

 

사용 예

throw CustomException(ErrorCode.INVALID_COORDINATE)​

 

GlobalExceptionHandler

@ExceptionHandler(CustomException::class)
fun handleCustomException(e: CustomException): ResponseEntity<ErrorResponse> {
    val error = e.errorCode
    return ResponseEntity
        .status(error.status)
        .body(ErrorResponse(error.code, error.message))
}

 

장점

  • 응답 포맷을 통일할 수 있어 프론트와 협업에 유리
  • API 문서화 및 정합성 유지가 쉬움.
  • 비즈니스 예외 추가도 Enum만 늘리면 끝!

단점

  • 초기 세팅이 약간 귀찮음.
  • 익숙하지 않으면 오히려 불편하다고 느껴질 수 있음.

 


 

상황 추천 방식
프로젝트가 작고 예외가 몇 개 없음 개별 Exception (직관적)
예외가 많아지고 응답 통일 필요 CustomException + ErrorCode 패턴
여러 팀/플랫폼과 협업 반드시 통합 방식 추천

 


예외 처리는 단순히 오류 메시지를 던지는 기능이 아니라, 서비스의 신뢰도사용자 경험을 좌우하는 중요한 부분이다.

  • 예외의 의도를 분명히 하고
  • 응답 포맷을 통일하며
  • 유지보수가 쉬운 방향으로 선택하자!

 

728x90
반응형