프로젝트를 수행하며, SecurityConfiguration 클래스를 생성하여 하위 4가지 기능을 구현.
1. 로그인 방식(OAuth2, JWT),
2. Request에 담기는 JWT의 검증하는 역할,
2. 인증 실패 시 응답 할 클래스 설정,
3. CORS 설정,
4. HTTP Method 별 권한 설정 등을 처리했었다.
하지만 SecurityConfiguration 하나의 클래스에서
여러 역할을 맡은 클래스들을 모두 사용하다보니
Security Configuration 클래스에서 [순환 참조] 에러가 발생
[원인]
최초 패키지 구조를 설계할 당시, Spring Bean 으로 등록한다는 것이 무슨 의미인지 모르는 채로
학습 컨텐츠에 있는 애너테이션을 무지성으로 사용한 것이 원인이 되었다.
즉, Bean 등록 후 DI 사용 VS 생성자 객체 생성 가 중복으로 발생되어 [순환 참조] 에러가 발생했음.
[해결]
1. @Component 애너테이션 사용으로 Spring Bean으로 등록되어 있는 클래스들 분류
2. SecurityConfiguration 클래스에서 구현하려는 기능에 필요한 클래스를 분류
3. DI 받아서 사용하는 클래스와 생성자를 통해 생성한 클래스 객체의 중복 확인
내가 마주쳤었던 에러의 원인은
인증 성공 이후 Request에 담긴 JWT의 유효성을 검증하는 역할인 JwtVerificationFilter 클래스가
Bean으로 등록되어 있고, DI받도록 되어 있으나, 실제 사용하는건 생성자를 통해 새로운 객체를 생성하여
새롭게 생성된 JwtVerificationFilter의 인스턴스를 사용하여 검증을 하려고 했었다.
[결론]
Spring Bean 으로 등록한다는 것은
특정 클래스를 Spring Container에 등록하여 필요한 곳에서
DI 받아 해당 클래스의 인스턴스를 활용할 수 있도록 하기 위함.
반면 생성자를 통해 생성한 인스턴스는 DI 받은 객체와 개별적인 인스턴스가 되므로 사용에 주의가 필요.
'마주쳤던 이슈 기록' 카테고리의 다른 글
#5 Mapper: Dto -> Entity 변환 시 Null 에러 (0) | 2023.05.09 |
---|---|
#4. @Value 애너테이션 미인식 에러 (0) | 2023.05.02 |
#2. OAuth2 구현시 CORS 에러 (0) | 2023.05.01 |
#1. 초기 SQL 파일 - duplicate Error (0) | 2023.04.03 |
제네릭 Integer vs Int 차이 (0) | 2022.11.22 |