Spring Boot에서는 개발을 진행할 때 OAuth2 ClientId, ClientSecret, RedirectUri, JwtSecret 등과 같이
개인 정보와 관련된 민감한 정보들은 application.yml에 특정 변수를 작성하고
실제 값들은 시스템-환경 변수 혹은 AWS-parameterStore 같은 웹 서비스에 담아 보관하며,
애플리케이션을 실행할 때, 내부 로직에 의해 환경 변수에 보관하는 실제 값들을 호출하여 사용한다.
application.yml에 등록해둔 환경 변수의 이름들은 클래스 내부에서 필드로 생성하고
해당 필드에 @Value 애너테이션을 붙여서 application.yml 내의 경로를 입력하면
시스템-환경 변수 혹은 AWS ParameterStore 웹 서비스에 저장된 실제 값들을 호출해야한다.
Ex) 클래스 내 필드 @Value
@Value("${mail.address.admin}")
private String oauth2Login;
Ex) application.yml 내 경로
mail:
address:
admin: han2041126@gmail.com
[에러]
프로젝트 개발 당시, 특정 정보를 시스템 환경 변수에 저장해두고
application.yml 의 설정대로 불러와서 사용하도록 하려했으나
@Value 애너테이션이 붙은 필드 값이 환경 변수로 부터 불러와지지 않는 에러 발생.
[원인]
@Value 애너테이션을 사용하고자 하는 클래스는 반드시 Spring Bean 으로 등록되어 있어야 한다.
ex) @Component
1. 그렇다..
당시 내가 @Value 애너테이션을 사용한 필드가 존재하는 클래스에는 @Component 혹은 @Controller, @Service, @Repository, @RestController 등과 같이 Spring Bean으로 등록하는 애너테이션이 없었다.
2. SecurityConfiguration 클래스에서 사용할 때 Spring Bean 으로 등록했으니
그대로 DI를 받아 사용하면 됬으나, 해당 클래스의 인스턴스를 '생성자'를 통해 생성하여 사용하고 있었다.
[결론]
Spring Bean으로 등록하여 관리하는 것과,
DI 받아 사용하는 것 or 생성자를 통한 새로운 생성의 차이점을 깨달을 수 있는 경험이었다.
'마주쳤던 이슈 기록' 카테고리의 다른 글
#6. 유저의 행동 횟수 조건 reset = Spring Data JPA 자동메서드 (0) | 2023.05.11 |
---|---|
#5 Mapper: Dto -> Entity 변환 시 Null 에러 (0) | 2023.05.09 |
#3. Spring Security 순환 참조 에러 (0) | 2023.05.01 |
#2. OAuth2 구현시 CORS 에러 (0) | 2023.05.01 |
#1. 초기 SQL 파일 - duplicate Error (0) | 2023.04.03 |