2025-09-19
오늘 배운 것
Servlet
Front Controller Pattern
기존 서블릿 방식 문제
- 요청마다 Servlet 생성 필요 → 중복/복잡성 증가
- 공통 처리(로그, 예외, 응답 등) 코드가 각 Servlet에 흩어짐
- 유지보수와 생산성 저하
Front Controller
- 모든 요청을 단일 Servlet(Front Controller)이 처리
- 장점
- 단일 진입점 → 일관성 확보
- 공통 기능 일괄 처리(인증, 권한, 로깅 등)
- 구조 변경 최소화로 확장성↑
- Servlet 개수 감소 → 코드 간결화
요청 구분 방법
- URL 파라미터(
?action=...)
- 와일드카드 기반 URL 매핑 (
.do, /app/*)
Filter
개념
- Servlet 실행 전/후에 요청·응답을 가로채 기능 추가하는 웹 컴포넌트
- 여러 개 연결되어 Filter Chain 형성
주요 용도
- 인증/권한 확인 (로그인·권한 체크 후 redirect)
- 로깅 (요청/응답 추적)
- 보안 (XSS 방지:
<→<, >→>)
작성 및 등록
HttpFilter 상속 구현
- 매핑 방법
- Servlet 대상 지정
- URL 패턴 지정 (경로 기반/확장자 기반)
- Dispatcher 옵션 (request, forward, include, error)
- 등록 방법:
@WebFilter 또는 web.xml
Listener
개념
- 웹 애플리케이션에서 발생하는 이벤트 감지 객체
- 예: 애플리케이션 생성/소멸, 세션 생성/종료 등
ServletContextListener
- 애플리케이션 생명주기 모니터링
- 공용 자원 초기화/정리 작업에 사용
등록
Servlet과 Multi-Thread
특징
- Servlet은 하나의 객체만 생성 → 멀티스레딩 지원
- 요청이 동시에 처리되므로 성능 우수
- BUT, 공유자원 문제 발생
공유 자원 동기화
- Mutex: 하나만 접근 (synchronized)
- Semaphore: 여러 개 접근 가능 (ex. connection pool)
주의점
- Servlet은 Thread-Safe하지 않음
- 멤버 변수로 상태를 관리하면 데이터 손상 위험
- 동기화(synchronized) 남용 시 성능 저하 → Servlet에 상태 저장 금지