본문 바로가기

Spring Boot/Security

커스텀 필터 구현 : 구현해보기

리포지토리

https://github.com/B1uffer/customFilterTest

 

1. 시나리오

  • 요청 / 응답 로깅 필터 : 모든 요청의 메서드 / URL / 상태 / 소요시간을 기록하고, 민감정보는 마스킹함
  • 감사(Audit) 필터 : 누가(사용자 or 익명) 언제 어떤 자원에 접근했는지 기록함
  • 성능 모니터링 필터 : 처리 시간을 측정하고 임계값 초과시 경고 로그를 남김
  • 테스트용 API : 공개 API, 인증 필요 API, 일부러 지연되는 API 설계

설계에 따른 흐름 구조

 

 

2. 실행, 테스트

1. Postman 테스트 시나리오

  • 공개 API(로깅 / 성능 / 감사 로그 확인)
    • Method : GET
    • URL : http://localhost:8080/public/hello?name=neo&password=secret
    • 설명 : 인증이 필요 없는 API로, 요청 / 응답 로그와 성능, 감사 로그가 필터에서 기록됨
  • 보호 API : 인증 없음(401 나와야함)
    • Method : GET
    • URL : http://localhost:8080/api/secure/hello
    • 인증 없이 호출하면 401 Unauthorized 응답이 뜬다
  • 보호 API : Basic 인증으로 접근 (200 나와야함)
    • Method : GET
    • http://localhost:8080/api/secure/hello
    • Authorization:
      • Type : Basic Auth
      • Username : user
      • Password : password (Security 기본 비밀번호 찾아서 입력)
    • 올바른 인증 정보를 제공하면 200 OK 응답을 받는다
  • 느린 API : 슬로우 경고 로그 확인
    • Method : GET
    • URL : http://localhost:8080/api/slow
    • Authorization : Basic Auth(user / Security 기본 password)
    • 2초 이상 대기 후 응답하는 API로 설계되어있음, 로그에 슬로우 경고 메시지가 출력된다

  • 로그 마스킹 전략
    • 파라미터 / 헤더 / 본문에서 password, token, authorization 등 키워드는 정규식으로 마스킹한다
    • PII(개인식별정보)는 로그에 남기지 않거나, 암호화 / 토큰화 후 저장한다
  • 추적 ID와 상관관계
    • MDC에 traceId, userId 등을 저장하고 로그 패턴에 포함시키면 시스템 전반 추적에 용이하다
    • 게이트웨이 / 프록시가 X-Request-Id를 내려줄 경우 해당 값을 우선 사용한다
import org.slf4j.MDC;

// Trace ID 발급 (요청 단위 추적)
String traceId = UUID.randomUUID().toString();
MDC.put("traceId", traceId); // MDC

 

  • 슬로우 임계값 설계
    • SLO에 맞춰 엔드포인트별 임계값을 분리함(읽기 500ms, 쓰기 1000ms)
    • 슬로우 누적 횟수 / 백분위수 기반 경보를 운영 모니터링과 연계한다
  • 다중 SecurityFilterChain 병행
    • /api/secure/** 에는 인증 / 감사 / 성능 필터를 모두 적용, /public/** 에는 로깅만 적용하는 것처럼
      체인별 필터 묶음을 다르게 가져가면 성능과 가독성이 좋아진다

구성 요소  역할 포인트
RequestLoggingFilter 요청 / 응답 로그, Trace ID, 마스킹 OncePerRequestFilter, 전구간 로깅
AuditFilter 사용자 / 리소스 접근 기록 GenericFilterBean, 사후 분석 / 컴플라이언스
PerformanceMonitoringFilter 처리시간 측정, 슬로우 경고 임계값 / 경보 연계
SecurityConfig 필터 삽입 / 보안 규칙 addFilterBefore / After, URL 권한
Controllers 테스트 엔드포인트 제공 공개 / 보호 / 지연 시나리오