인프런 커뮤니티 질문&답변

한봉훈님의 프로필 이미지
한봉훈

작성한 질문수

스프링 시큐리티

12) 예외 처리 및 요청 캐시 필터 : ExceptionTranslationFilter, RequestCacheAwareFilter

EntryPoint와 Handler의 차이가 궁금합니다.

작성

·

715

0

안녕하세요
인증이나 인가 예외가 터졌을 때 인증 예외의 경우에는 AuthenticationEntryPoint가 리다이렉트 등의 로직을 수행하고 AccessDeniedException의 경우에는 AccessDeniedHandler가 동작하는 것으로 이해하였습니다.

근데 둘다 결국 예외가 발생했을 때 처리를 하는 역할인데 굳이 하나는 엔트리포인트라는 객체를, 다른 하나는 핸들러 객체를 사용하는지 모르겠습니다.

저는 둘 다 엔트리포인트나 혹은 핸들러라고 할 수 있는 거 아닌가 생각이 들었는데 둘이 무슨 차이가 있는지 잘 모르겠어서요 ㅠㅠ 알려주시면 감사하겠습니다.

답변 1

2

정수원님의 프로필 이미지
정수원
지식공유자

이건 설계상의 문제입니다.

즉 인증예외를 처리하는 흐름과 인가예외를 처리하는 흐름 자체를 구분하도록 설계한 것이라 볼 수 있습니다.

흐름에 따라 클래스를 별도로 분리해서 처리한 것이고 클래스명도 흐름상 완전히 구분되는 성격이기 때문에 다르게 한 것이라 볼 수 있습니다.

하지만 질문하신 것처럼 두개의 흐름을 구분하지 않고 인증예외와 인가예외를 통합해서 처리하는 설계로 구현할 수도 있습니다.

하지만 객체지향적인 관점에서 보자면 이 두개는 당연히 나누어져야 맞습니다.

즉 인증예외를 처리하는 클래스가 인가예외까지 처리하게 되면 하나의 책임이 아닌 여러역할의 책임을 맞게 되어 단일책임의 원칙에서 벗어나게 되고 추후 어떤 오류나 문제가 발생할 경우 원인이 인증에 관한 것인지 인가에 관한 것인지 다시 분석해야 하고 명확한 흐름을 찾기가 어려울 수 있습니다.

그외에도 유지보수 측면에서도 여러 어려움들이 발생할 수 있습니다.

일반적으로 어떤 기능을 구현함에 있어 어떤 클래스를 만들고 이 클래스들은 어떤 관계를 가지고 서로간 통신할 것인지에 대해 설계를 하게 됩니다.

그건 DB 도 마찬가지이겠죠

하나의 테이블로 갈수도 있지만 정규화에 따라 테이블을 둘로 나눌 수도 있습니다.
구현에 앞서 설계 관점에서 바라보시면 좀 더 이해가 쉬울 수 있습니다.

한봉훈님의 프로필 이미지
한봉훈
질문자

상세한 답변 감사합니다. 시큐리티 내용이 잘 이해가 안되어서 인터넷 예제 코드 조금씩 수정하면서 쓴 게 다였는데 강의 덕분에 이해하면서 공부하는 느낌이 들어요 도움이 많이 돼요. 휴일 잘 보내세요!!

한봉훈님의 프로필 이미지
한봉훈

작성한 질문수

질문하기