JAVA · 디자인패턴
설정 외부화
애플리케이션 설정을 코드에서 분리하여 환경별로 관리합니다.
디자인패턴중급설정외부화Properties환경변수12Factor
핵심 설명
애플리케이션 설정을 코드에서 분리하여 환경별로 관리합니다.
Java code
import java.util.*;
import java.io.*;
import java.nio.file.*;
public class ExternalConfig {
// 설정 소스 계층: 환경변수 > 시스템 프로퍼티 > 파일 > 기본값
static class Config {
private final Properties props = new Properties();
Config(String configPath) {
// 1. 기본값 로드
props.setProperty("server.port", "8080");
props.setProperty("db.url", "jdbc:h2:mem:default");
// 2. 파일에서 로드
try {
if (Files.exists(Path.of(configPath))) {
props.load(new FileInputStream(configPath));
}
} catch (IOException e) {
System.err.println("설정 파일 로드 실패: " + e.getMessage());
}
}
String get(String key) {
// 3. 환경변수 우선 (KEY_NAME 형식)
String envKey = key.toUpperCase().replace('.', '_');
String envVal = System.getenv(envKey);
if (envVal != null) return envVal;
// 4. 시스템 프로퍼티
String sysVal = System.getProperty(key);
if (sysVal != null) return sysVal;
// 5. 파일 / 기본값
return props.getProperty(key, "");
}
int getInt(String key, int defaultVal) {
try { return Integer.parseInt(get(key)); }
catch (NumberFormatException e) { return defaultVal; }
}
}
public static void main(String[] args) {
Config config = new Config("application.properties");
System.out.println("포트: " + config.getInt("server.port", 8080));
System.out.println("DB: " + config.get("db.url"));
}
}학습 팁
Spring Boot는 이와 동일한 설정 우선순위를 사용합니다. @Value나 @ConfigurationProperties로 타입 안전하게 바인딩합니다.
주의할 점
설정 파일에 비밀번호를 평문으로 저장하지 마세요. 환경 변수, Vault, 암호화된 설정을 사용하세요.
자주 묻는 질문
설정 외부화란 무엇인가요?
애플리케이션 설정을 코드에서 분리하여 환경별로 관리합니다.
설정 외부화 학습 시 주의할 점은 무엇인가요?
설정 파일에 비밀번호를 평문으로 저장하지 마세요. 환경 변수, Vault, 암호화된 설정을 사용하세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.