LMS 프로젝트에 시큐리티 컴포넌트를 적용하는 과정에서 Application failed to start 및 BearerAuthenticationFilter 주입 실패 에러가 발생했습니다. 💥
이 에러는 스프링의 다이나믹 프록시 생성 방식(CGLIB 또는 인터페이스 기반)과 관련된 문제로 파악되었습니다. 🕵️♂️
초기 해결 시도로 proxyTargetClass 옵션 변경이나 EnableAsync 제거를 시도했으나, 문제 해결에 직접적인 도움이 되지 않았습니다. 🚧
첫 번째 문제 해결책으로 BearerAuthenticationFilter를 빈으로 등록하는 대신 SecurityConfig 내에서 직접 new 연산자로 생성하고 필요한 의존성을 주입하는 방식을 사용했습니다. 🛠️
이 해결책으로 프록시 문제는 해결되었으나, Modulith 적용 프로젝트에서 package-info.java의 allowed-dependencies 설정과 패키지 구조로 인해 SecurityConfig가 SignJWT 컴포넌트 외부의 config 패키지에 있을 때 접근 문제가 발생했습니다. 📦
최종 해결책은 SecurityConfig를 SignJWT 컴포넌트 패키지 안으로 옮겨, 모든 필요한 서비스에 대한 접근성을 확보하는 것이었습니다. 🚀
개발 시 복합적인 문제가 발생할 수 있으며, 특정 상황(예: 필터)에서는 스프링 빈 주입 대신 직접 객체를 생성하는 방식도 고려할 수 있음을 시사합니다. 🤔
발표자는 LMS 프로젝트에 Modulith를 적용하며 시큐리티 컴포넌트를 재사용 가능한 형태로 만들고 있으며, 이 과정에서 발생한 실제 이슈를 공유했습니다. 💡