🧹 공통 관심 사항(cross-cutting concerns)이란?
- 핵심 기능과 직접 관련은 없지만,
여러 위치에서 공통적으로 필요한 부가 기능Filter가 나오게된 이유는 공통 관심사(Cross Cutting Concern)의 처리 때문
🔑 핵심 기능

✨ 부가 기능

📌 요구 사항 예시
🧑🎓 로그인한 유저만 게시글 API에 접근 가능해야 함
📝 해결 방법 → 핵심은 언제나 수정에 있음
1. 화면에서 로그인하지 않으면 API를 사용하지 못하도록 막음
→ 유저가 HTTP 요청을 마음대로 조작할 수 있음
2. Controller에서 로그인 여부를 체크하는 Logic을 작성
→ 실제로는 인증이 필요한 모든 컨트롤러에 공통으로 로그인 여부를 체크해야 함
→ 로그인 로직이 변경될 때마다 로그인 여부를 체크하는 Logic 또한 변경될 가능성이 높음
@RestController
@RequestMapping("/post")
public class PostController {
@PostMapping
public PostResponseDto create(PostCreateRequestDto request) {
// 로그인 여부 확인 로직
// 생성 로직
}
@PutMapping("/{postId}")
public void update(
@PathVariable Long postId,
PostUpdateRequestDto request
) {
// 로그인 여부 확인 로직
// 수정 로직
}
@DeleteMapping("/{postId}")
public void delete(@PathVariable Long postId) {
// 로그인 여부 확인 로직
// 삭제 로직
}
}
로그인 여부 확인 로직 -> 공통 관심사 (인증 : 로그인)
→ 공통 관심사는 로그인뿐만 아니라 더 큰 범위를 의미함
👉 이런 중복 인증 코드를 없애기 위한 게 Filter의 존재 이유
3. Spring AOP를 활용할 수 있음
4. Web과 관련된 공통 관심사는 Servlet Filter나 Spring Intercepter를 사용함
→ HttpServletRequest 객체를 제공하기 때문에 HTTP 정보나 URL 정보에 접근하기 용이함
⚙️ 공통 관심사 문제 해결을 위한 선택지
| 시도 | 문제점 |
|---|---|
| 화면 단에서 막기 | 유저가 브라우저 도구로 요청 조작 가능 |
| Controller에서 매번 인증 로직 작성 | 중복 코드 발생 + 유지보수 어려움 |
| ✅ 필터(Filter) 또는 인터셉터(Interceptor) 사용 | 공통 로직을 중앙 집중 관리 가능 |
🚦 Servlet Filter란?
- 모든 HTTP 요청이 Servlet에 도달하기 전에 먼저 거치는 사전 처리기
🔍 주요 특징
| 항목 | 설명 |
|---|---|
| 🧩 공통 로직 분리 | 인증, 로깅, 인코딩 등을 필터로 분리 |
| 🔗 요청/응답 감시 | HttpServletRequest, HttpServletResponse를 조작 가능 |
⛓️ Filter Chain | 여러 필터를 순차적으로 실행 가능 |
| 🧭 실행 위치 | Controller 호출 전에 실행됨 |
| ⚙️ 핵심 메서드 | doFilter() 안에서 로직 정의 및 다음 필터 호출 여부 결정 |
🔁 Filter 동작 구조

[클라이언트 요청]
↓
[🔍 Filter 1]
↓
[🔍 Filter 2]
↓
[🚪 DispatcherServlet (Spring 핵심)]
↓
[🧠 Controller]
➕ Filter 추가 및 순서 지정 가능
🧪 인증 필터 동작 예시
✅ 로그인 성공 시

Filter를 통과 → DispatcherServlet → Controller 정상 호출❌ 로그인 실패 시

Filter에서 요청 차단 → Controller 호출되지 않음⛓️ Filter Chain 구조

📥 요청 흐름 요약
클라이언트 요청 →
☑️ 필터에서 공통 로직 실행 (인증 등)
✅ 통과되면 DispatcherServlet → Controller 실행
⛔ 실패 시 Controller 호출 없이 필터에서 응답 종료
🧠 요약 정리
| 항목 | 설명 |
|---|---|
| 📌 공통 관심사 | 인증, 로깅 등 중복되는 부가기능 |
| 🧹 Filter | 요청 전후에 실행되는 HTTP 레벨의 인터셉터 |
| 🔄 doFilter() | 필터 동작 정의 + 다음 필터로 넘길지 결정 |
| ⛓️ FilterChain | 다중 필터 구성 가능 |
| 🎯 장점 | 중앙 집중 처리, 중복 코드 제거, 유지보수 쉬움 |