@AuthenticationPrincipal을 사용해 Spring Security의 SecurityContextHolder에서 가져오기
@RequestHeader에서 직접 토큰을 파싱하여 사용자 정보 추출
둘 다 결국 토큰 검증을 수행하지만, 어떤 방식이 더 효율적일까? 하는 고민이 들었다
토큰 검증 여부: ✅ Security 필터(JwtAuthenticationFilter)에서 이미 검증됨
코드 가독성: ✅ SecurityContextHolder에서 바로 가져오므로 간결함
보안 유지: ✅ 필터에서 인증 정보를 한 번만 검증 후 재사용
성능: ✅ 캐싱된 인증 정보 사용 가능
토큰 검증 여부: 🟡 컨트롤러에서 직접 검증해야 함
코드 가독성: ❌ 매 API마다 토큰 파싱 및 검증 로직 필요
보안 유지: ❌ 인증 로직이 분산되어 유지보수가 어려움
성능: ❌ 매번 토큰 파싱 & 검증 수행
👉 대부분의 경우 @AuthenticationPrincipal을 사용하는 것이 더 낫다.
Spring Security 필터에서 한 번만 검증하고, 이후 요청에서는 SecurityContextHolder에서 바로 가져와 사용 가능
인증 로직이 컨트롤러에서 분리되어 코드가 깔끔하고 유지보수 쉬움
Spring Security 필터를 거치지 않는 API (예: permitAll 설정된 API)
단순한 토큰 유효성 검사 API (인증 없이 토큰만 검증할 경우)
Spring Security를 사용하고 있다면 @AuthenticationPrincipal을 사용해 통일하는 것이 최선
Security 필터를 타지 않는 API에서만 Authorization 헤더를 직접 파싱하도록 한다. (ex. WebSecurityConfigurer에서 특정 API를 permitAll 해버린 경우, JwtAuthenticationFilter를 안 타게 됨)