TIL

[24.08.12] AOP, Filter, interceptor 차이가 뭐지?

DongHo 2024. 8. 13. 07:57

AOP란?

AOP는 관점 지향 프로그래밍(Aspect Oriented Programming)의 약자이다.
중복되는 공통 코드를 분리하고, 코드 실행 전이나 후의 시점에 해당 코드를 삽입함으로써 소스 코드의 중복을 줄이고, 필요할 때마다 쓸 수 있도록 객체화하는 기술이다. 
ex) 로그인시 인증/인가, 핵심 비즈니스 로직에 적용하는 가능

인데, 내가 보기엔 java가 OOP(Object Oriented Programming)인데, 이 OOP를 더 잘 사용하게끔 도와주는 하나의 방법론 이라고 생각한다. 그리고, 관점 지향 프로그래밍 이라는 말 부터 너무 추상적이다. 어떤 관점으로 보느냐에 따라 달라진다는 것인데,,
더 이야기 해보겠다.

Aspect(관점)

어떤 기능을 구현할 때 그 기능을 '핵심 기능' & '부가 기능'으로 구분해 각각을 하나의 관점으로 보는 것을 의미한다.
그럼 '핵심 기능'과 '부가 기능'이란 무엇인가?

핵심 기능 : 비즈니스 로직을 구현하는 과정에서 비즈니스 로직이 처리하려는 목적 기능
ex) 클라이언트로부터 상품 정보 등록 요청을 받아 DB에 저장하고, 저장된 상품 정보 데이터를 보여주는 코드

부가 기능 : 핵심 기능인 비즈니스 로직 사이에 로깅 처리를 하거나 트랜잭션을 처리하는 코드

 

그래서 AOP가 뭔가

-> 여러 비즈니스 로직에서 반복되는 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화해 삽입하는 방식
Aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것

- 컴파일 과정에 삽입하는 방식
- 바이트코드를 메모리에 로드하는 과정에 삽입하는 방식
- 프락시 패턴을 이용한 방식

AOP 핵심 개념

  • Aspect : 핵심 비즈니스 로직과는 별도로 수행되는 횡단 관심사
  • Advice : Aspect의 실제 기능
  • Join Point : Advice가 적용될 수 있는 위치
  • PointCut : Join Point 중에서 Advice가 적용될 가능성이 있는 부분들을 선별하는 것
  • Weaving : Advice를 핵심 비즈니스 로직에 적용하는 과정을 의미

 

Advice 종류

  • Before : 대상 메소드가 실행되기 전에 실행되는 Advice
  • After-returning : 대상 메소드가 정상적으로 실행된 이후에 실행되는 Advice
  • After-throwing : 예외가 발생했을 때 실행되는 Advice
  • After : 대상 메소드가 실행된 이후, (정상, 예외 상관없이) 실행되는 Advice
  • Around : 대상 메소드 실행 전/후에 모두 적용되는 Advice

 

 

Filter

 

Servlet Container란?

  • 웹 서버 또는 응용 프로그램 서버의 일부로, 웹 서버에서 온 요청을 받아 Servlet class를 관리하는 역할(= 생명 주기 관리)을 한다.
  • Servlet에 대한 Container 설정은 Deployment Descriptor(web.xml) 파일을 이용한다.

(추가 설명)

  1. 쉽게 말해 Servlet을 포함하고 있는 Container가 Servlet Container이다.
  2. Tomcat의 핵심이 바로 이 Servlet Container이다.
  3. 작성한 Servlet class를 보관하고, 특정 요청에 따라 Servlet을 결정해서 객체를 생성하거나 이미 생성된 경우 service() method를 호출하여 Servlet이라는 작은 프로그램을 실행한다.
  4. Tomcat을 종료하면 Servlet이 전부 소멸하기 때문에 자동으로 destroy() method를 호출한다.

 

  1. 쉽게 말해 Servlet을 포함하고 있는 Container가 Servlet Container이다.
  2. Tomcat의 핵심이 바로 이 Servlet Container이다.
  3. 작성한 Servlet class를 보관하고, 특정 요청에 따라 Servlet을 결정해서 객체를 생성하거나 이미 생성된 경우 service() method를 호출하여 Servlet이라는 작은 프로그램을 실행한다.
  4. Tomcat을 종료하면 Servlet이 전부 소멸하기 때문에 자동으로 destroy() method를 호출한다.

 

요청 및 응답에 따른 서블릿 수행 전후에 지정한 필터를 거치며 데이터를 가공하는 역할을 한다.

 

Servlet 구동 방식

 

 

Interceptor

Interceptor 사용 목적

로그인 체크, 권한 체크, 프로그램 실행 시간 계산 작업 로그 처리, 업로드 파일 처리, 로케일(지역) 설정 등

MVC에서의 Fliter & Interceptor

Interceptor는 필터와 다르게 스프링 컨데이너에 있어 빈을 다룰 수 있다.