Springboot

Exception처리(기본개념)

25G 2021. 7. 20. 17:54

try라는 스택과 catch스택이 있는 이유는 프로그램은 컴파일 시 오류와 런타임 오류(클라이언트와 통신)가 있다. 기본적으로 웹서버는 웹서버 시 오류가 발생할 수 있다.

통신을 하는 코드는 전부다 try/catch로 묶어야 한다. 클라이언트랑 하는 것도 통신 db에 있는 데이터를 가져오는 것도 통신이다. 메모리에 있는 데이터를 하드에 저장하는 것도 통신이다. 

위와 같이 통신이 있는 코드는 전부 try/catch로 묶어야 한다.

근데 스프링에선 파일을 리턴하는 컨트롤러와 데이터를 리턴하는 컨트롤러가 있는데 try/catch는 string데이터를 리턴한다. 결국 구조적으로 컨트롤러에서 Exception 처리를 할 수 없다. 프레임워크의 규칙 때문에 Exception처리를 할 수 없는 것이다. 그래서 스프링이 만들어준 기법이 있다.

위와 같이 오류가 났을대 저런 페이지가 뜨는 이유는 내부적으로 저런 페이지가 나오도록 짜져 있기 때문이다.

 

Exception처리

보통 Exception처리는 한 곳에 모아서 처리를 하는데 handler라는 이름을 많이 사용한다.

주석을 꼭 공부한다.

어떤 Exception이 발생할지 예측할 수 없기 때문에 제일 상위에 있는 Exception을 걸어준다.

그럼 이제 이 서버에서 생기는 모든 오류는 다 이 컨트롤러를 찾아오는 것이다.

위와같은 방식으로 하면 내부적으로 AOP가 돌아간다.

그래서 이렇게하면 오류가 터질때 마다 여기로 오게 할수 있는것이다.

 

@RestController를 붙여서 데이터를 리턴하는 경우도 있고

@Controller를 사용해서 에러 페이지를 리턴하도록 설계할 수도 있다.