Contents
1. 예외 처리1. 예외 처리
JVM에서 예외가 터졌을 때 console에 띄워준다.

1.1 java에서의 예외 처리 흐름

- Repository
- 데이터베이스와 상호작용 중 예외가 발생. try-catch 사용하지 않고 예외를 throw로 Service로 위임한다.
- 예:
DataAccessException
,SQLException
- Service
- 비즈니스 로직을 처리하는 단계에서 예외를 확인.
- 필요시 Custom Exception을 생성하거나, 발생한 예외를 throw로 위임.
- Controller
- 클라이언트 요청을 처리하는 계층으로, 예외를 감지하고 HTTP 상태 코드와 함께 응답을 반환.
- DispatcherServlet
- Spring MVC의 핵심으로, 모든 요청과 응답을 총괄 관리.
- ControllerAdvice
- 예외를 한 곳에서 처리하여, 통일된 HTTP 상태 코드와 메시지를 반환.
- 전역 예외 처리: 프로젝트 전체에서 발생하는 예외를 한 곳에서 관리.
- HTTP 상태 코드 설정: 예외 상황에 맞는 HTTP 상태 코드를 클라이언트에게 반환.
- 유지보수성 향상: 중복 코드 제거로 간결하고 일관된 코드 작성 가능.
- main → JVM
- 예외가 처리되지 않고 끝까지 전달되면 JVM이 이를 감지하고 애플리케이션이 비정상 종료됨.
1.2 예외 처리 방법
- try-catch : 오류가 발생한 곳에서 바로 예외를 처리한다.
public void route(String path){
try {
if (path.equals("/")) {
con.list();
} else if (path.equals("/board")) {
con.detail();
} else {
System.out.println("404 Not Found");
}
}catch (RuntimeException e) {
// 1. 컴포넌트 스캔 @ControllerAdvice
// 2. invoke(호출) RuntimeException 매개변수를 가진
controllerAdvice.process(e);
}
- throw : 상위 계층으로 예외처리 위임
public int findById() {
// 조회하다가 오류[숫자를 리턴]
// -1 오류 (안됨 - 타입이 달라질 수 있다)
// 오류가 난 곳에서 처리 (안됨 - 책임이 분리되어 있으니까)
throw new RuntimeException("디비에서 오류 남");
}
1.3 예외의 두 가지 유형
- Compile Exception(Checked Exception) - 컴파일 타임 예외 - jvm이 미리 예측
- 코드 작성시 빨간줄이 나는 오류로 발생 가능성이 있는 예외를 컴파일 시점에 미리 예측하여 강제로 처리하도록 요구한다.
- 예)
IOException
,SQLException
- Runtime Exception - 런타임 예외
- 실행 중에 발생하는 모든 예외는
RuntimeException
클래스의 하위 클래스로 예외를 처리하지 않아도 컴파일이 가능하지만 실행 중 애플리케이션이 예기치 않게 종료될 수 있다. - 필요에 따라 Custom Exception을 정의하여 사용한다.
- 예)
NullPointerException
,ArrayIndexOutOfBoundsException
Share article