개발자

자바 ㅡ 인터셉터와 필터 사용

2023년 09월 14일조회 4,010

현재 자바로 진행 중인 프로젝트에서 필터에서는 로그인 체크 및 user 각각을 분류하고 ex) 의료진이라면 의사,임상병리사,연구자 등으로 분리하고, 인터셉터에서는 각 컨트롤러에 들어오는 Api요청들의 허가 관리를 하려고 합니다. 필터와 인터셉터는 실행시점이 servlet 이전, 이후 시점이라는 것이 다르다는 것만 알고, 구체적으로 이렇게 실행했을 때 어떤 이득이 생길지, 이득의 여부조차도 쉽게 판단하기 어렵네요. 큰 이득이 없을 경우 인터셉터에서 전부 처리하려 하는데 조언 좀 부탁드립니다.ㅠㅠ

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 2

인기 답변

이양일님의 프로필 사진

안녕하세요! 개인적으로 필터는 서비스 기능 혹은 비지니스 로직과 상관없는 범용적인 기능, 예를 들어 XSS, CORS, ACL, Access Logging 등을 구현하면 좋고 인터셉터는 서비스 기능과 관계된 혹은 Spring Container 에서 관리되는 Bean 이나 스레드풀 등을 사용해야할 때, 예를 들어 사용자 정보 조회를 통한 권한 혹은 서비스 기능과 관계된 체크(금지된 사용자, 신고받은 사용자 등), 커스텀 어노테이션을 사용한 기능 동작 등이 있을거 같습니다. 필터를 전혀 안쓰신다면 인터셉터로만 구성하시는것도 방법이지만, 혹여 유지보수 과정에서 필터를 사용하게 될 경우 예상치 못한 이슈를 경험하실 수 있습니다. 예를 들어 Access logging 기능을 인터셉터에서 구현하였는데 추후 유지보수 과정에서 어떤 필터를 추가하게 되면 해당 필터에서 오류나 reject 처리될 경우 인터셉터까지 요청이 전달되지 않아 로깅기능이 정상적으로 수행되지 못해 요청이 유입되었는지 알수가 없습니다. 그래서 유지보수 과정에서 이러한 이슈를 피하고자 한다면 범용적인 기능에 대해서는 필터로 구현하시는게 좋을 수 있습니다. 필터를 구현했을때 (좀 억지스러울수 있습니다만) 추가적인 장점으로 서블릿 기반 웹 컨테이너 프레임워크가 변경되더라도 동일하게 사용할 수 있다는 장점도 있습니다. 저의 짧은 지식이 작게나마 도움이 되시길 바랍니다.

인기 답변

연양갱님의 프로필 사진

안녕하세요. 구현 방법에 정답은 없다지만 제가 가진 생각을 말씀드리겠습니다. 필터와 인터셉터의 차이는 주로 Servlet(Web Container)에서 실행되냐 아니면 Spring Context(Spring Container)에서 실행되냐의 차이와 함께 영역이 다르다보니 연관된 데이터가 살짝 다릅니다. 전체적으로보면 Request에서 Response의 데이터를 중간데 가로채 작업하는것은 같으나 필터는 웹애플리케이션의 전체적인 HTTP 요청과 응답에 대한 처리를 담당하지만 인터셉터는 Spring의 DispatchServlet에서 동작하는 만큼 API요청에서 호출하는 Controller의 호출 전후의 repuest와 response의 값을 작업해주는 역할을 하고있습니다. 이러한 이유로 필터와 인터셉터의 기능은 동일해보이나 각각의 역할을 나눠주고있습니다. 주로 필터에서 구현하는 기능은 XSS fillter, 서버 접근 인가, 인코딩 과 같은 작업을 주로 하고있습니다. 해당 작업은 MVC Controller전후의 Repuest Response의 데이터 보단 웹 어플리케이션의 전체적인 HTTP 요청 응답과 관련되어 있다보니 필터에서의 구현이 적합하다고 생각합니다. 반면 인터셉터에서 구현하는 기능은 Api의 로깅이나 세부 api의 권한 인가등 Controller의 request와 response에 관련된 작업을 주로 이룹니다. 기능은 비슷하지만 각각의 연관된 작업에 대한 역할과 책임을 명확하게 나누는것이 유지보수 측면에도 많은 도움이 될것같아 보입니다. 도움이 되셨으면 좋겠네요 :)

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2023년 09월 14일

필터(Filter)와 인터셉터(Interceptor) 모두 HTTP 요청에 대한 사전 처리를 하는데 사용되지만, 그 사이에는 약간의 차이가 있습니다. 1. Filter는 Servlet specification에 정의된 것으로 Java web application에서 사용됩니다. 이것은 HTTP 요청과 응답에 대한 일련의 미리 정의된 작업을 수행하고, 이러한 작업은 보안(인증 및 인가), 로깅, 이미지 압축, URL 재작성 등이 될 수 있습니다. 2. 반면 Interceptor는 Spring MVC framework에 특화되어 있습니다. 이것은 Filter와 비슷하지만 더욱 많은 작업을 수행하여 보다 고급 기능을 제공합니다. 예를 들어, HandlerMapping을 시작으로 특정 컨트롤러 전/후로 동작하거나 페이지 랜더링 전/후에도 동작할 수 있으며, 전역적 예외 처리 등 다양한 설정이 가능합니다. 따라서 로그인 체크 및 user 분류와 같은 기능은 필터에서 처리하고, 각 컨트롤러에서 API 요청의 체크등을 인터셉터에서 처리하는 것이 자연스럽습니다. 하지만 결국 사용하는 프레임워크와 개발 환경, 그리고 개발자의 선호에 따라 어떤 것을 사용할지 결정하게 됩니다. 필터와 인터셉터 모두 동일한 역할을 수행할 수 있지만, 서로 다른 문맥에서 최적화 되었으므로, 각각의 기능과 특징을 이해하고 적절하게 사용하는 것이 중요합니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!