본문으로 바로가기

공통 프로세스에 대한 고민

 

공통업무에 관련된 코드를 모든 페이지 마다 작성 해야한다면 중복된 코드가 많아지게 되고 

서버에 과부하는 기본이고 관리하기 쉽지 않습니다.

 

즉, 공통 부분은 따로 관리하는 것을 권장합니다.

이러한 공통업무를 프로그램 흐름의 앞, 중간, 뒤에 추가하여 자동으로 처리할 수 있는 방법이 있습니다.

 


Filter, Interceptor, AOP의 개념

 

1. Filter(필터)

말 그대로 요청과 응답을 거릅니다.

 

서블릿 필터는 DispatcherServlet 이전에 실행이 되는데 필터가 동작하도록 지정된 자원의 앞단에서 요청 내용을 변경하거나, 여러가지 체크를 수행할 수 있습니다.

 

또한, 자원의 처리가 끝난 후 응답내용에 대해서도 변경을 수행할 수 있습니다.

보통 web.xml에 등록하고, 일반적으로 인코딩 변환 처리, XSS방어 등의 요청에 대한 처리로 사용됩니다.

 

 

 

EX)

<!-- 한글 처리를 위한 인코딩 필터 -->

<filter>

    <filter-name>encoding</filter-name>

    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

    <init-param>

        <param-name>encoding</param-name>

        <param-value>UTF-8</param-value>

    </init-param>

</filter>

<filter-mapping>

    <filter-name>encoding</filter-name>

    <url-pattern>/*</url-pattern>

</filter-mapping>

필터의 이름은 encoding, 값은 UTF-8인 파라미터를 정의하고 있습니다.

필터의 url-pattern을  /*로 정의하면 servlet, jsp뿐만 아니라 이미지와 같은 모든 자원의 요청에도 호출됩니다.

 

필터의 실행 메서드

init() - 필터 인스턴스 초기화

doFilter() - 전/후 처리

destroy() - 필터 인스턴스 종료

 


2. Interceptor(인터셉터)

요청에 대한 작업 전/후로 가로챈다고 보면 됩니다.

 

필터는 스프링 컨텍스트 외부에 존재하여 스프링에 무관한 자원에 대해 동작합니다.

하지만 인터셉터는 스프링의 DispatcherServlet이 컨트롤러를 호출하기 전, 후로 끼어들기 때문에 스프링 컨텍스트 영역(Context, 영역)내부에서 Controller(Handler)에 관한 요청과 응답에 대해 처리합니다.

 

스프링의 모든 빈 객체에 접근할 수 있습니다.

 

인터셉터는 여러 개를 사용할 수 있고 로그인 체크, 권한체크, 프로그램 실행시간 계산작업 로그확인 등의 업무처리

 

인터셉터의 실행 메서드

preHandler() - 컨트롤러 메서드가 실행되기 전

postHandler() - 컨트로러 메서드 실행직 후 View페이지 렌더링 되기 전

afterCompletion() - view페이지가 렌더링 되고 난 후

 


3. AOP

OOP를 보완하기 위해 나온 개념

 

객체 지향의 프로그래밍을 했을 때 중복을 줄일 수 없는 부분을 줄이기 위해 관점에서 바라보고 처리합니다.

 

주로 로깅, 트랜잭션, 에러처리 등 비즈니스단의 메서드에서 조금 더 세밀하게 조정하고 싶을 때 사용합니다.

 

Interceptor와 Filter와는 달리 메소드 전후의 지점에 자유롭게 설정이 가능합니다.

Interceptor와 Filter는 주소로 대상을 구분해서 걸러내야하는 반면, AOP는 주소, 파라미터, 애노테이션 등 다양한 방법으로 대상을 지정할 수 있습니다.

 

2020/11/29 - [1. 웹개발/1_2_2 Spring Framework] - [Spring] AOP 총정리 및 예제

 

[Spring] AOP 총정리 및 예제

  1. AOP(Aspect Oriented Programming)란? 공통 관심 기능을 분리하여 반복되는 부분을 추출해 핵심 로직에 영향을 미치지 않고 소스의 중복을 줄이는 방법으로 기존 OOP에서 공통 관심 기능을 여러 모듈

itprogramming119.tistory.com