🎯 학습 목표
- 외부 설정(application.yml)과 @Value/@ConfigurationProperties를 쓴다.
- 환경별 프로파일(dev/prod)을 분리한다.
- 실행 가능한 jar를 빌드하고 실행한다.
📖 개념 설명
코드를 고치지 않고 환경마다 동작을 바꾸려면 설정을 외부로 빼야 합니다. 스프링은 application.yml과 환경변수, 그리고 프로파일로 이를 지원합니다. 개발(dev)에서는 H2, 운영(prod)에서는 MySQL을 쓰는 식으로 한 코드에서 환경을 전환할 수 있습니다.
💻 설정 주입
# application.yml
app:
greeting: "안녕하세요"
max-items: 50
// 단일 값
@Value("${app.greeting}")
private String greeting;
// 묶음 (권장)
@ConfigurationProperties(prefix = "app")
public record AppProps(String greeting, int maxItems) {}
💻 프로파일 분리
# application-dev.yml / application-prod.yml 로 분리
# 활성 프로파일 지정 방법:
# 1) application.yml: spring.profiles.active: dev
# 2) 실행 옵션: --spring.profiles.active=prod
# 3) 환경변수: SPRING_PROFILES_ACTIVE=prod
💻 빌드 & 실행
# 실행 가능한 jar 생성
./gradlew clean bootJar # build/libs/앱-0.0.1-SNAPSHOT.jar
# (Maven) ./mvnw clean package
# 실행 (프로파일 지정)
java -jar build/libs/demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
# 환경변수로 설정 덮어쓰기 (배포에서 흔함)
SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/appdb java -jar app.jar
🧭 다음 단계
- 컨테이너화: Docker 강좌 5·6강으로 이 jar를 이미지로 만들고 MySQL과 함께 배포.
- 보안: Spring Security로 인증/인가 추가.
- 테스트: JUnit5 + @SpringBootTest, @WebMvcTest로 계층별 테스트.
- 문서화: springdoc-openapi로 Swagger UI 자동 생성.
💡 팁
- 환경변수는 yml 설정을 덮어씁니다(
SPRING_DATASOURCE_URL형식). 배포 시 비밀값 주입에 유용합니다. - 이 강좌 jar를 Docker 강좌의 compose에 그대로 얹으면 “Spring Boot + MySQL” 전체 스택이 완성됩니다.