좋아, 쉽게 설명할게.


SecurityFilterChain이 뭐야?

HTTP 요청이 들어오면 체인 형태로 필터들을 순서대로 통과하는 구조야.

요청 → [Filter1] → [Filter2] → [Filter3] → Controller

SecurityFilterChain은 이 필터 묶음을 하나의 체인으로 정의하는 거야.


왜 여러 개 만들 수 있어?

예를 들어

/api/**        → JWT 인증 필요한 일반 체인
/admin/**      → JWT + 관리자 권한 체인
/public/**     → 인증 없는 퍼블릭 체인

요청 경로마다 다른 보안 규칙을 적용할 수 있어.


그래서 분리하는 이유가 뭐야?

configureCommonSecurity에 oauth2, jwt필터까지 넣으면

// 어드민 체인 만들 때
public SecurityFilterChain adminFilterChain(HttpSecurity http) {
    configureCommonSecurity(http); // oauth2, jwt필터가 여기 들어있으면
                                   // 원하든 원하든 어드민에도 적용됨 ❌
}

공통 설정 = 어떤 체인이든 항상 똑같이 적용되는 것

csrf disable
session stateless
formLogin disable

체인별 설정 = 체인마다 다를 수 있는 것

oauth2 설정
jwt 필터
permitAll 경로
exceptionHandling

이걸 섞어놓으면 나중에 체인 추가할 때 의도치 않은 설정이 같이 딸려와서 버그가 생길 수 있어.