새로운 내용을 공부할 때
새로운 내용의 공부를 시작할 때 용어의 정의를 이해하지 못하거나 정확하게 알지 못한다면 그 용어가 포함된 문장을 이해하지 못합니다.
작은 단어 하나가 내용을 이해하지 못하게 하기 때문에 용어를 정확하게 이해하는 것이 중요합니다.
filter와 전처리 후처리
목표 D-day : 40 일
학습
- 필터에 대해서 간단한 정리
서블릿 컨테이너의 HTTP 요청 처리 과정
- 서블릿 컨테이너는 사용자의 HTTP 요청을 읽습니다.
- HTTP 요청 정보를 조회하기 편하게
HttpRequest
인스턴스에 데이터를 바인딩합니다. - 서블릿 컨테이너는
HTTP 요청 인스턴스
를 서블릿에 전달합니다.
개발자가 수행하는 작업
서블릿 컨테이너가 HTTP 요청
을 서블릿에 전달하면, 개발자는 아래와 같은 작업을 수행합니다:
- 요청 객체에서 필요한 정보를 조회합니다.
- 클라이언트가 요청한 정보를 확인합니다.
- 요청 정보 중에서 인증 정보를 조회합니다.
- 인증 정보에 리소스 접근 권한을 확인합니다
- 권한이 없는 경우 응답 객체에 접근 권한 실패 에러를 넣고 비즈니스 로직을 종료합니다.
- 이후 비즈니스 로직을 실행합니다.
- 프로세스가 종료되고 응답을 반환합니다.
위에서 설명한 1~5번의 과정은 모든 서블릿이나 메서드에 공통적으로 필요한 로직으로, 인증 및 권한 확인이 필요한 작업입니다. 예를 들어:
- 회원가입
- 결제
- 회원 정보 수정
등의 리소스 접근 시 반복적인 인증 과정이 필요합니다. 이렇게 인증 과정이 변동될 경우, 관련된 모든 메서드를 수정해야 하는 문제가 있습니다.
웹 컴포넌트 기능의 추상화
- HTTP 요청
- 서블릿 컨테이너 데이터 바인딩
- 인증 정보 확인
- 비즈니스 로직
- 응답 반환
위와 같은 흐름으로 동작합니다. 인증 정보 확인이나 로깅과 같은 반복적인 작업은 관심사 분리(SoC)를 통해 공통 처리 메서드로 분리하는 것이 좋습니다. 이는 유지보수하기 편해집니다.
코드가 복잡하지 않으면 하나의 프로세스로 관리하는 것이 가능하지만, 인증 확인이나 로깅 로직등이 코드를 간단하게 작성하기 위해 다른 코드에 의해 오염될 수 있습니다. 이렇게 되면 나중에 수정하거나 개선하기 어려워지므로 역할을 분리하는 방식이 좋다고 생각합니다.
필터의 역할
서블릿 컨테이너는 서블릿에 요청 객체를 전달하기 전에 공통 로직을 실행할 수 있는 코드 구역인 필터를 제공합니다.
- 필터는
인증 정보 확인
,로깅
,데이터 필터링
등의 작업을 체이닝으로 수행할 수 있습니다. - 예를 들어, 필터 A → 필터 B → 필터 C → 서블릿 순으로 순차적 처리 가능합니다.
관심사 분리(SoC)
관심사 분리를 위한 대표적인 세 가지 방법이 있습니다: 필터, 인터셉터, AOP.
스프링 부트가 제공하는 AOP
기능은 주로 트랜잭션 관리, 로깅, 인증 등 특정 로직을 메서드에 적용할 때 사용되며 HTTP 요청,응답의 전처리, 후처리보다는 세부적인 기능에 사용되기 때문에 적합하지 않다고 생각합니다.
필터와 인터셉터 비교
필터와 인터셉터의 위치 차이
필터의 위치
WAS → 필터 → 디스패처 서블릿
인터셉터의 위치
디스패처 서블릿 → 인터셉터 → 컨트롤러
필터의 장점과 단점
- 장점:
- 서블릿 표준 스펙으로 웹 애플리케이션 서버에 종속되지 않습니다.
- 요청과 응답의 전처리, 후처리 모두 가능.
- 단점:
- 스프링 컨텍스트에 직접 접근할 수 없습니다.
- 낮은 수준의 처리가 필요할 때 사용되며, 스프링의 고급 기능을 사용할 수 없습니다.
인터셉터의 장점과 단점
- 장점:
- 스프링 컨텍스트가 제공하는 의존성 주입이나 기타 기능을 사용할 수 있습니다.
- 스프링 MVC 패턴에 매핑된 요청에만 적용됩니다.
- 스프링 기능이므로 스프링에 의존적입니다.
- 예외가 발생할 경우 별도 예외에 대한 로직을 분리할 수 있습니다.
- 핸들러 전처리, 후처리, 예외 처리를 구체적으로 나누어 처리할 수 있습니다.
- 단점:
- 응답 처리와 전체적인 흐름을 처리할 수 없습니다.
- 후처리는 응답을 보내고 인터셉터가 동작하므로 응답 객체에 손댈 수 없습니다.
필터와 인터셉터의 비유
-
필터는 톨게이트와 같습니다.
지나가는 차량의 경로를 확인하고 모든 출입을 검사할 수 있습니다. -
인터셉터는 검문소와 같습니다.
암구호를 묻고 몸 수색 등 검증을 수행할 수 있지만, 검문소를 통과한 후에는 더 이상의 후처리가 불가능합니다.
댓글남기기