본문 바로가기

Spring

[Spring] application-{환경}.yml 과 @Value

@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