컴퓨터과학/Spring

[Spring] 예외 발생은 어디서 해야할까?

waspy 2021. 8. 27. 15:38

스프링에서 예외발생은 어느 계층에서 이루어져야할까?

Controller? Service? Repository? ...

 

결론부터 말하자면

모든 계층에서 발생할 수 있다.

 

단, 예외의 유형을 정의하는것은 바람직하다.

가령 권한(401)에 대한 검증은 컨트롤러, 유효성(404)에 대한 검증은 서비스 처럼 말이다.

객체지향적 관점으로 봤을 때 해당 클래스가 객체로써 올바르게 작동할 수있는가? 를 따져보아 개발자가 직접 선택하면 된다.

 

Question.만약 권한에 대한 검증을 서비스에서 한다면?

Answer. 권한에 대한 검증을 서비스에서 진행한다면 해당 서비스를 다른 컨트롤러 또는 서비스에서 이용함에 있어 권한문제를 통과하지 못할 수 있다는 불확실성이 생긴다. 반드시 권한이 있는 유저가 그 서비스 메소드를 호출한다면 문제가 없겠지만, 이를 보장할 수 없고 결국 코드를 수정하게 될 가능성이 매우 높다. 차라리 이 예외처리를 컨트롤러로 넘김으로써 각 기능에 개별적인 권한 예외처리를 하는것이 더 적합하다.

 

위의  질문-답변은 예시일 뿐 실제로 그렇게 적용해야할지 말아야할지는 개발자가 본인의 프로젝트에 적합한지 아닌지를 따져서 직접 결정해야한다. 핵심은 본인 프로젝트를 이해하고 어떤 구조가 더 적합할지 심도있게 고민을 해보아야 한다는 것이다.

 

 

 

 

 

반응형