Spring Boot는 구성을 외부화하여 같은 jar가 모든 환경에서 실행되게 합니다. 설정을 application.yml(또는 .properties)에 넣고, 코드로 읽어 들이며, profile로 환경마다 동작을 전환합니다.
application.yml과 @Value
yaml
Spring Boot는 구성을 외부화하여 같은 jar가 모든 환경에서 실행되게 합니다. 설정을 application.yml(또는 .properties)에 넣고, 코드로 읽어 들이며, profile로 환경마다 동작을 전환합니다.
@Component
public class SearchService {
// Inject a single property; :20 is the fallback if it is missing.
@Value("${app.page-size:20}")
private int pageSize;
}
값이 한두 개를 넘어서는 것은 무엇이든, @Value를 흩뿌리는 대신 타입이 있는 객체에 바인딩하세요:
@Component
@ConfigurationProperties(prefix = "app") // binds app.* into these fields
public class AppProps {
private int pageSize;
private Map<String, Boolean> featureFlags;
// getters/setters — Boot relaxed-binds page-size -> pageSize
}
이것은 타입 안전성, IDE 자동 완성, 그리고 검증(@Validated + 제약 추가)을 제공합니다.
spring:
config:
activate:
on-profile: prod # only when 'prod' is active
server:
port: 80
application-dev.yml, application-prod.yml 같은 파일은 기본(base) 위에 겹쳐집니다. --spring.profiles.active=prod나 SPRING_PROFILES_ACTIVE 환경 변수로 하나를 활성화합니다. 우선순위가 중요합니다: 명령줄 인자와 환경 변수가 파일을 덮어쓰므로, 비밀 값은 jar 밖에 둡니다.
면접관은 여러분이 다시 빌드하지 않고 하나의 아티팩트를 dev/staging/prod에 걸쳐 출시할 수 있는지 확인합니다. 흩어진 @Value보다 @ConfigurationProperties를 언급하고, 비밀 값을 위해 환경 변수가 파일을 덮어쓴다고 언급하는 것은, Boot 앱을 로컬에서만이 아니라 프로덕션에서 운영해 봤다는 것을 보여 줍니다.
주니어부터 시니어까지 상세한 답변이 포함된 IT 면접 질문 라이브러리.
후원하기