민감정보 등 은 env 파일에 따로 빼놓고, git에는 올리지 않는다. yaml을 통해 스프링부트 세부 설정을 할 수 있다.
코드레벨 혹은 yaml 에서 env 의 설정값을 가져와야 하는 경우가 있다.
1. @Value 어노테이션을 사용
- 타입이 반드시 일치해야 한다. 그렇지 않으면 오류 난다
- yaml 혹은 properties의 server.url = 값 으로 명시한 값을 가져오기
- "${..}" 는 값을 가져다 쓴다는 의미
...
@Value("${server.url}")
private String url;
...
//생성자 주입 - 가장 권장됨
public testClass(@Value("${server.url}) String value)
{
this.value = value;
}
...
//기본값 설정 가능 값이 없으면 localhost 를 기본값으로 한다
@Value("${server.url}:localhost")
pritave String url;
...
- SpEL
- @Value 에 동적 계산이나 문자열 조합등 을 가능하도록 하는 언어
- "#{...}" 로 사용
- "#{ 조건식 등 추가 ${...}}"
- 프로퍼티 값을 가져와서 연산 혹은 조합을 하여 변수에 배정하는 경우.
- 메서드 호출도 가능하다.
- 예 String의 split 메서드 호출 : "#{${server.id}.Split(',')}"
- Bean 참조 가능
- 예 : "#{@SystemProperties['java.version']}"
- 예 : "#{@SystemProperties['java.version']}"
2. ConfigurationProperties
- @Component 어노테이션이나 @EnableConfigurationProperties 어노테이션, 이 붙은 클래스에 사용할 수 있다.
- Validation 을 이용할 수 있다
- https://dean83.tistory.com/277 (이 페이지 하단부에 내용 있음)
- 클래스 자체에 설정값을 반영한다.
- 변수에 대응하는 getter, setter 가 있어야 한다.
- depth에 따라 클래스 내부에 내부 클래스를 만들어야 한다.
//설정파일
my:
storage:
path: /data/files
s3:
bucket: my-bucket
region: ap-northeast-2
-----
@Component
@ConfigurationProperties(prefix = "my.storage")
public class StorageProperties {
private String path;
private final S3 s3 = new S3();
public static class S3 {
private String bucket;
private String region;
// Getter/Setter 필요
}
// Getter/Setter 필요
}
- 리스트 항목이 있는 경우
my:
servers:
- host: 주소1
port: 8080
- host: 주소2
port: 80
- host: 주소3
port: 8888
@ConfigurationProperties(prefix = "my")
public class ServerListProperties {
private List<Server> servers;
public static class Server {
private String host;
private int port;
// Getter/Setter
}
// Getter/Setter
}
3. Environment
- environment 에 yaml 뿐 아니라 환경변수, 명령줄 인수, jvm 속성 등도 포함되어 있다.
- 단순히 읽는것 뿐 아니라 추가 할 수도 있다.
@Service
public class testService {
private final Environment environment;
public testService(Environment environment) {
this.environment = environment;
}
public void testMethod() {
String port = environment.getProperty("server.url");
}
}
4. env 파일의 내용을 yaml 에서 불러오기
- 중요정보 (비밀번호, API 키값등) 은 env에 적어두고, git에 올리지 말아야 한다. 해당 값을 yaml 설정파일에서 읽어서 사용하도록 해야 한다.
- env 파일은 properties 형식으로 작성해야 한다.
//env 파일
DB_URL=jdbc:mysql://localhost:3306/test
DB_USER=myuser
DB_PASS=secret
----
//docker-compose.yaml 파일
...
SPRING_DB_URL : ${DB_URL}
SPRING_DB_USER : ${DB_USER}
SPRING_DB_PASS : ${DB_PASS}
....
-------
//yaml 파일
spring:
config:
import: optional:file:.env[.properties]
spring:
datasource:
url: ${SPRING_DB_URL}
username: ${SPRING_DB_USER}
password: ${SPRING_DB_PASS}
- 위의 예제에서는 env 내용을 docker-compose 에서 읽고, docker-compose 내용을 yaml에 env 파일을 불러오도록 설정되었으나, 환경변수에 추가하거나 AWS 에서 추가 설정을 해주면 해당 작업 없이도 불러올 수 있다.
- 또는, implementation 'me.paulschwarz:spring-dotenv:3.0.0' 를 build.gradle 에 추가 하여 env -> application.yaml 에서 사용할 수 있게 한다.
'Backend > SpringBoot' 카테고리의 다른 글
| Controller 에서 각종 파라메터 받기 + Cookie (0) | 2025.09.12 |
|---|---|
| Main DB (Postgresql) + Cache (Redis) 사용하기 (0) | 2025.09.03 |
| 설정(Configuration) 오버라이딩 하기 (0) | 2025.09.02 |
| 커스텀 Event 발생 -> 수신 (0) | 2025.09.02 |
| NoSQL DB 사용 (0) | 2025.09.02 |