개요
spring-boot에서 속성값을 바인딩 시키기 위하여 일반적으로 설정파일(application.yml)에 속성값을 정의하고 이를 로드해오도록 실행 인자를 추가시켜 많이 사용할 것 이다.
속성 값에는 민감하지 않은 정보들만 있다면 괜찮겠지만 민감한 정보들이 있다면 고민이 생길 것이다.
- ex) DB 계정 및 암호, API 키값 등..
일반적으로 Git에 업로드하여 사용하는데 Git에 이런 민감한 정보들이 업로드 된다면?
이는 보안에 좋지 않은 구성일 것이다.
파일에 직접 정의하는 방법 말고도 여러가지 방법이 존재하지만 해당 포스트에서는 Spring을 실행시키는 OS의 환경변수에서 속성값을 로드하는 방법을 알아본다.
환경변수에서 바인딩
예를 들어서 기존에 아래와 같은 설정파일(application.yml)을 사용했다고 치자.
server:
port: 8080
spring:
datasource:
url: jdbc:postgresql://example.aws.com:5432/example
username: postgres
password: example
session:
store-type: none
profiles:
active: develop
이를 환경변수로 전환하는 방법은 아주 간단하다. 다음의 규칙을 맞춰서 변환해주면 된다.
- .을 _ 로 변환한다.
- 대시를 제거한다.
- 대문자로 변환한다.
규칙에 맞춰서 변환하면 다음과 같이 변환을 할 수 있다.
SERVER_PORT=8080
SPRING_DATASOURCE_URL=jdbc:postgresql://example.aws.com:5432/example
SPRING_DATASOURCE_USERNAME=postgres
SPRING_DATASOURCE_PASSWORD=example
SPRING_SESSION_STORETYPE=none
SPRING_PROFILES_ACTIVE=develop
변환된 위의 환경변수를 Spring을 실행시킬 쉘 환경에 주입시킨 후 Spring을 실행하면 이상없이 속성값을 로드해온다.
Use Case
- Docker(Container)
- AWS ECS
: 애플리케이션이 ECS 환경에서 구동된다면 민감한 변수들은 AWS의 Secret Manager or SSM Parameter를 사용하여 안전하게 주입할 수 있음.
Reference
'Etc..' 카테고리의 다른 글
[Spring] AWS Credentials 설정 (0) | 2022.09.15 |
---|