개발자
현재 자바로 진행 중인 프로젝트에서 필터에서는 로그인 체크 및 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에 관련된 작업을 주로 이룹니다. 기능은 비슷하지만 각각의 연관된 작업에 대한 역할과 책임을 명확하게 나누는것이 유지보수 측면에도 많은 도움이 될것같아 보입니다. 도움이 되셨으면 좋겠네요 :)
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!