300===Dev Framework/Spring

Spring Properties & Profiles 완벽 가이드 🎯

블로글러 2024. 11. 14. 12:33

Properties가 뭔가요? 🤔

Properties는 애플리케이션의 설정 값들을 외부 파일로 분리하여 관리하는 방식입니다.

예를 들어볼까요?

  • 개발 환경: db.url=localhost:3306
  • 운영 환경: db.url=prod.company.com:3306

이렇게 환경별로 다른 설정값들을 손쉽게 관리할 수 있답니다!

Properties 설정 방법 💡

1. application.properties 생성

# src/main/resources/application.properties
db.url=localhost:3306
db.username=dev
db.password=1234

2. @PropertySource 설정

@Configuration
@PropertySource("classpath:/application.properties")
public class AppConfig {
    // 설정 코드
}

3. 값 사용하기

@Service
public class UserService {

    private final String dbUrl;

    public UserService(@Value("${db.url}") String dbUrl) {
        this.dbUrl = dbUrl;
    }
}

Profiles은 뭔가요? 🌈

Profiles은 환경별로 다른 설정과 빈을 활성화할 수 있게 해주는 기능입니다.

예시 상황:

  • 개발 환경: 더미 데이터 필요
  • 테스트 환경: 테스트용 설정 필요
  • 운영 환경: 실제 운영 설정 필요

Profiles 사용법 🛠

1. Profile별 설정 파일

# application-dev.properties
server.port=8080
logging.level.root=DEBUG

# application-prod.properties
server.port=80
logging.level.root=INFO

2. Profile별 빈 설정

@Component
@Profile("dev")
public class DevDataInitializer {

    @PostConstruct
    public void init() {
        // 개발환경 초기 데이터 설정
    }
}

3. Profile 활성화

# VM 옵션으로 설정
-Dspring.profiles.active=dev

# 또는 application.properties에 설정
spring.profiles.active=dev

Properties & Profiles 함께 사용하기 🎨

1. 공통 설정 (application.properties)

app.name=MyApp
app.version=1.0

2. Profile별 설정 (application-{profile}.properties)

# application-dev.properties
db.url=dev-db:3306

# application-prod.properties
db.url=prod-db:3306

3. 설정 우선순위

  1. application-{profile}.properties
  2. application.properties
  3. 기본값

실전 예제 📱

@Service
public class EmailService {

    private final String smtpHost;
    private final String smtpPort;

    public EmailService(
        @Value("${email.smtp.host}") String smtpHost,
        @Value("${email.smtp.port}") String smtpPort
    ) {
        this.smtpHost = smtpHost;
        this.smtpPort = smtpPort;
    }

    public void sendEmail() {
        System.out.println("Sending email using " + smtpHost + ":" + smtpPort);
    }
}

주의사항 ⚠️

  1. Properties 파일 위치

    • classpath 루트 (src/main/resources/)에 위치해야 함
    • 파일명은 application.properties 권장
  2. Profile 활성화 순서

    • 애플리케이션 시작 전에 설정해야 함
    • 런타임에 변경 어려움
  3. 민감정보 관리

    • 비밀번호 등은 환경변수나 외부 설정으로 관리
    • Properties 파일에 직접 입력은 피하기

활용 팁 💡

  1. 여러 Profile 동시 활성화

    spring.profiles.active=dev,logging,oauth
  2. 기본 Profile 설정

    spring.profiles.default=dev
  3. 조건부 빈 등록

    @Configuration
    @Profile("dev")
    public class DevConfig {
     // 개발 환경 전용 빈 설정
    }

마치며 🎁

Properties와 Profiles을 잘 활용하면 환경별 설정 관리가 한결 수월해집니다. 특히 MSA 환경에서는 필수적인 기능이니 꼭 마스터하세요!


References:

728x90