[SPRING] AOP, Filter, Interceptor, DI, IOC 비교 정리

Q0. 개요

오늘 알아볼 키워드 AOP, Filter, Interceptop, DI, IOC는 소프트웨어 개발을 할 때, 다양한 관점에서 사용되는 개념들이다.
크게 보면 키워드는 아래의 내용으로 정리된다. 간혹 
1. 반복적인 공통 업무와 관련된 AOP, Filter, Interceptor
2. 의존성 주입과 관련된 DI, IOC

각 키워드는 무엇이고, 언제 어디서 사용해야하는지 알아보자.


Q1. 각 키워드 개념 정리

1. Filter

- 개념: 웹 어플리케이션에서 HTTP의 Request(요청), Response(응답)을 조작하는데 사용한다.
- 위치 : 서블릿 컨테이너
- 용도 : HTTP 요청과 응답에 대한 전/후 처리.
- 예 : ① 요청/응답의 문자 인코딩 처리하는 필터.
         ② 인증/권한과 같은 특정 리소스에 대한 접근 제어하는 필터

2. Interceptor

- 개념 : 프레임워크 또는 라이브러리에서 특정 작업의 전/후에 추가 작업을 수행한다.
- 위치 : 스프링 컨테이너
- 용도 : (AOP와 비슷한 목적으로 공통 관심 사항을 위해) HTTP 요청, 메서드 호출 등의 전/후 처리 


3. AOP

(관점 지향 프로그래밍. Aspect-Oriented Programming)
- 개념 : 어플리케이션의 여러곳에 반복적으로 사용되는 핵심적인 비즈니스 로직을 별도 모듈화시켜서 재사용 용도.
- 위치 : 스프링 컨테이너
- 용도 : 핵심 비즈니스 로직, 부가적인 로직 등 코드를 모듈화하여 재사용성 향상.
- 예 : ① 로깅 - 메서드 실행 전후에 로그를 기록한다.
         ② 트랜잭션 관리 - 메서드 실행 전후에 트랜잭션을 시작하거나 완료한다.

4. DI

(의존성 주입. Dependency Injection)
- 개념 : 객체(빈)들을 직접 생성하지 않고, 외부에서 의존성을 주입받아 생성,관리하는 패턴
- 위치 : 스프링의 IOC 컨테이너
- 용도 : 객체 간의 결합도를 낮추어 재사용에 좋고 유지보수성과 테스트 용이성을 향상.

5. IOC

(제어 반전. Inversion of Control)
- 개념 : 객체(빈)의 생성,생명주기,관리가 역전.
            프로그램 흐름을 개발자가 아닌 실제 작업을 하는 프로그램이나 프레임워크에서 제어하는 것을 의미.
- 위치 : 스프링의 IOC 컨테이너
- 용도 : DI와 동일.

Q2.  각 키워드들의 비교 정리