Spring Boot

Spring Boot 강좌 07강 — 설정·프로파일·빌드와 실행

🎯 학습 목표

  • 외부 설정(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” 전체 스택이 완성됩니다.