[Listener, Filter] Spring에서 필수적으로 알아야 할 서블릿, 리스너, 필터의 역할과 차이점
✅ 웹 애플리케이션
: 개발과정에서 다양한 방식으로 요청을 처리, 데이터를 관리, Application의 흐름을 제어하는 도구를 사용
: Servlet, Listener, Filter는 중요한 역할을 함
: 특히 Spring과 같은 프레임워크에서는 기본적으로 도구들이 탑재되어 있어, 사용자가 모르고 사용하는 경우도 많음
1️⃣ Servlet
: 자바 기반의 웹 애플리케이션에서 HTTP 요청과 응답을 처리하는 클래스
: 서버에서 실행
: 클라이언트의 요청을 받고 적절한 응답을 만들어 보내는 역할
✔️ Spring Framework는 Servlet을 사용하여 HTTP 요청을 처리
• Spring Boot → 개발자가 직접 서블릿을 작성하지 않아도 Spring이 내장 서블릿 컨테이너를 자동으로 설정하고 관리
• 대부분의 개발자는 서블릿을 잘 사용하지 않거나 그 존재 자체를 모를 수 있음
• Spring 내부에서 서블릿은 중요한 역할을 함
2️⃣ Listener
: Application, Session, Request의 특정 이벤트를 감지하고, 그 이벤트에 따라 자동으로 동작하는 클래스
: Server Lifecycle에 맞춰 시작 시점, 종료 시점, 속성 변경 등을 모니터링하고 처리
✔️ 역할
• Application 시작/종료 : 어플리케이션이 시작 또는 종료될 때 수행할 작업을 정의
• Session 시작/종료 : 사용자 세션이 시작 또는 종료될 때 특정 작업을 수행
• Attribute 변경 감지 : 어플리케이션이나 세션 속성이 변경될 때 마다 동작할 수 있도록 설정 가능
✔️ 크롤링과 리스너
• 크롤링을 최적화하는데 리스너 사용 가능
• 장바구니와 같은 세션 기반 데이터가 필수적으로 존재한다고 가정 → 리스너에서 장바구니 데이터를 관리하고, 세션이 생성될 때 자동으로 초기화 하는 방법으로 크롤링을 최적화
3️⃣ Filter
: 요청과 응답을 가로채서 처리하는 클래스
: Servlet과 유사하게 HTTP 요청과 응답을 다루지만, Servlet보다 낮은 레벨에서 작동
: 여러 Filter를 체인으로 연결하여 작업을 순차적으로 처리 가능
✔️ 역할
• 인증 및 인가 : 요청이 특정 조건을 만족하는지 확인한 후, 인증되지 않으면 접근을 차단하거나 로그인 페이지로 리다이렉션하는 등의 작업 수행
• 인코딩/디코딩 : 요청이나 응답의 문자 인코딩을 처리
• 로깅/모니터링 : 요청에 대한 로그를 남기거나, 성능 모니터링을 수행
✔️ 인증과 필터
• 웹 애플리케이션에서 인증 및 인가는 매우 중요한 부분
• 은행권과 같은 보안이 중요한 웹 애플리케이션에서는 필터를 사용하여 모든 요청을 가로채서, 사용자 로그인 여부, 권한 보유 여부 등을 확인
• 인코딩 및 디코딩 작업도 필터에서 처리하는 경우가 많음
→ 요청의 문자 인코딩을 UTF-8로 설정, 응답의 인코딩을 다시 처리하는 등의 작업
4️⃣ Filter & Servlet
• 필터는 서블릿처럼 매핑을 설정하여 요청에 따라 특정 필터가 동작하도록 함
→ 특정 URL 패턴에 대해 인증 필터를 적용 또는 로깅 필터 설정 가능