@Value
Value 어노테이션은 .yml 파일이나 .properties 파일에 설정한 내용을 주입시켜주는 어노테이션입니다.
깃허브에 코드를 올리다보면 민감한 정보들까지 올려야되는 상황이 있는데요. 그럴때 사용할 수 있습니다.
RDB 엔드 포인트, OAuth client_secret과 같은 보안에 예민한 정보들을 yml 파일에 담을 수 있습니다.
위에 보이시는 그림과 같이 application-{환경}.yml 형식으로 만들어 사용하시면됩니다.
이때 보안의 목적을 위해 application-{환경}.yml 형식으로 만들었다면 .gitignore에 다음과 같이 파일명을 적어주셔야합니다.
위와 같이 마쳤다면 application-{환경}.yml 이 어두운 노란색으로 변했을겁니다.
@PropertySource
이제 다음과 같이 EL형식의 키값을 넣어주어 사용할 수 있게 됐습니다!!
@Value("${registration.kakao.client-id}")
private String client_id;
사실은 아직 안될겁니다. @Value는 주입을 위한 도구이지 찾아주는 도구는 아니기 때문에 값을 어떤 설정파일에서 가져올건지 알려줘야합니다.
그래서 다음과 같이 어노테이션을 사용하실 클래스 위에 붙혀주게되면 드디어 @Value를 사용할 수 있습니다.
@PropertySource("classpath:application-security.yml")
application-{환경}.yml
앞서 application.yml 파일을 나눠 보안을 지켰는데요. application.yml을 나누는 상황은 대표적으로 DB를 분리할 때도 이용됩니다. 예시를 들어볼게요.
문제 상황
Repository 단에서 "상품 전체조회" 라는 단위테스트를 할 때, 기존 디비에 있던 Default 값들이 테스트에 영향을 준다.
이는 테스트를 진행할 때 데이터베이스에 있는 값대로 비교를 해야하는데 데이터베이스에 있는 기본값이 변한다면 그에따라 테스트코드도 변해야하는 치명적인 문제점을 가지고 있습니다.
해결방안 1 (X)
로컬 디비를 비워놓고 테스트를 할 땐 로컬 디비를 사용하고, 그 외에 운영을 할 때는 RDS로 갈아끼는 방법
=> 테스트와 운영을 할때마다 yml 파일을 신경써야하고, 이는 곧 개발자의 실수를 유발합니다. 또한 젠킨스나 배포 시 빌드할때 테스트를 제외하고 빌드해야합니다.
해결방안 2 (O)
yml 파일을 분리하여 DB를 분리하는 방법을 사용해 테스트 시 H2를 사용하여 테스트를 진행, 그 외 운영 시에는 RDS를 사용
=> 다음과 같은 형식으로 DB의 Profile을 설정할 수 있습니다.
spring:
config:
activate:
on-profile: default
spring:
config:
activate:
on-profile: test
기존 test > resoures 안에 yml 파일이 있는경우 자동으로 인식하긴 합니다.
하지만 상황상 어노테이션을 통해 yml 파일을 지정해야한다면
@ActiveProfiles("test")
위 와 같이 테스트 할 클래스 위에 프로파일을 설정하면됩니다.
'Spring' 카테고리의 다른 글
[Spring] JPA? Hibernate? Persistence? (0) | 2023.04.30 |
---|---|
[Spring] Session (feat. 프로젝트 경험) (0) | 2023.04.28 |
[Spring] 단위 테스트 (0) | 2023.03.24 |
[Spring] Bean (0) | 2023.02.17 |
[Spring] Spring MVC (0) | 2023.02.16 |