Home > Spring > πŸƒ[Spring] Profileμ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

πŸƒ[Spring] Profileμ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?
Spring Framework

πŸƒ[Spring] Profileμ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

  • Profile은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ‹€ν–‰ ν™˜κ²½(예: 개발, ν…ŒμŠ€νŠΈ, 운영)에 따라 λ‹€λ₯Έ 섀정을 μ μš©ν•  수 μžˆλ„λ‘ ν•˜λŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€.
    • 이λ₯Ό 톡해 ν™˜κ²½μ— 따라 μ ν•©ν•œ μ„€μ •κ°’(예: λ°μ΄ν„°λ² μ΄μŠ€ URL, λ‘œκΉ… μˆ˜μ€€ λ“±)을 κ°„λ‹¨ν•˜κ²Œ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

1️⃣ Profile의 μ£Όμš” κ°œλ….

1️⃣ ν™˜κ²½λ³„ μ„€μ • 뢄리.

  • 개발(Development), ν…ŒμŠ€νŠΈ(Test), 운영(Production) λ“± μ„œλ‘œ λ‹€λ₯Έ μ‹€ν–‰ ν™˜κ²½μ— 따라 섀정값을 λΆ„λ¦¬ν•˜κ³ , νŠΉμ • ν™˜κ²½μ— λ§žλŠ” 섀정을 μ‰½κ²Œ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2️⃣ μ„€μ • 파일 관리.

  • application.properties λ˜λŠ” application.yml νŒŒμΌμ—μ„œ ν™˜κ²½λ³„ 섀정을 μž‘μ„±ν•  수 있으며, ν”„λ‘œνŒŒμΌλ³„λ‘œ νŒŒμΌμ„ 뢄리해 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

3️⃣ μœ μ—°ν•œ μ‹€ν–‰.

  • spring.profiles.active 속성을 톡해 μ‹€ν–‰ μ‹œ ν™œμ„±ν™”ν•  ν”„λ‘œνŒŒμΌμ„ μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2️⃣ Profile μ„€μ • 방법.

1️⃣ κΈ°λ³Έ μ„€μ • 파일 μ‚¬μš©.

  • λͺ¨λ“  ν™˜κ²½μ—μ„œ κ³΅ν†΅μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 섀정은 application.properties λ˜λŠ” application.yml νŒŒμΌμ— μž‘μ„±ν•©λ‹ˆλ‹€.
  • ν”„λ‘œνŒŒμΌλ³„ 섀정은 application-{profile}.properties λ˜λŠ” application-{profile}.yml 파일둜 μž‘μ„±ν•©λ‹ˆλ‹€.

2️⃣ μ˜ˆμ‹œ.

  • application.properties(곡톡 μ„€μ •)
    server.port=8080
    spring.datasource.username=root
    spring.datasource.password=common-password
    
  • application-dev.properties(개발 ν™˜κ²½)
    server.port=8081
    spring.datasource.url=jdbc:mysql://localhost:3306/dev_db
    
  • application-prod.properties(운영 ν™˜κ²½)
    server.port=8082
    spring.datasource.url=jdbc:mysql://prod-db-example.com:3306/prod_db
    spring.datasource.password=prod-password
    

3️⃣ ν™œμ„±ν™”ν•  Profile μ§€μ •.

  • spring.profiles.activeλ₯Ό μ‚¬μš©ν•˜μ—¬ μ‹€ν–‰ μ‹œ ν™œμ„±ν™”ν•  ν”„λ‘œνŒŒμΌμ„ μ§€μ •ν•©λ‹ˆλ‹€.

1️⃣ application.propertiesμ—μ„œ μ§€μ •.

spring.profiles.active=dev

2️⃣ JVM μ˜΅μ…˜μœΌλ‘œ μ§€μ •.

java -jar -Dspring.profiles.active=prod myapp.jar

3️⃣ ν™˜κ²½ λ³€μˆ˜λ‘œ μ§€μ •.

export SPRING_PROFILES_ACTIVE=dev

4️⃣ IDEμ—μ„œ μ§€μ •.

μ‹€ν–‰ μ„€μ •μ—μ„œ -Dspring.profile.active=devλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.

4️⃣ ν”„λ‘œνŒŒμΌλ³„ Bean μ •μ˜

  • Springμ—μ„œλŠ” ν”„λ‘œνŒŒμΌλ³„λ‘œ Bean을 λ‹€λ₯΄κ²Œ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

1️⃣ μ˜ˆμ‹œ.

@Configuration
public class DataSourceConfig {
    
    @Bean
    @Profile("dev")
    public DataSource devDataSource() {
        return DataSourceBuilder.create()
                .url("jdbc:mysql://localhost:3306/dev_db")
                .username("dev_user")
                .password("dev-password")
                .build();
    }
    
    @Bean
    @Profile("prod")
    public DataSource prodDataSource() {
        return DataSourceBuilder.create()
                .url("jdbc://prod-db.example.com:3306/prod_db")
                .username("prod-user")
                .password("prod-password")
                .build();
    }
}

5️⃣ Profile의 ν™œμš© μ˜ˆμ‹œ.

1️⃣ ν™˜κ²½λ³„ λ°μ΄ν„°λ² μ΄μŠ€ μ„€μ •.

  • 개발 ν™˜κ²½μ—μ„œλŠ” 둜컬 DB, 운영 ν™˜κ²½μ—μ„œλŠ” ν΄λΌμš°λ“œ DBλ₯Ό μ‚¬μš©ν•˜λ„λ‘ 뢄리.

2️⃣ λ‘œκΉ… μˆ˜μ€€.

  • 개발 ν™˜κ²½μ—μ„œλŠ” DEBUG 레벨의 상세 둜그λ₯Ό 좜λ ₯ν•˜κ³ , 운영 ν™˜κ²½μ—μ„œλŠ” ERROR μˆ˜μ€€μ˜ 둜그만 좜λ ₯.

3️⃣ API ν‚€λ‚˜ 민감 정보 관리.

  • ν…ŒμŠ€νŠΈ ν™˜κ²½μ—μ„œλŠ” Mock API ν‚€λ₯Ό μ‚¬μš©ν•˜κ³ , 운영 ν™˜κ²½μ—μ„œλŠ” μ‹€μ œ API ν‚€λ₯Ό 적용.

4️⃣ μ„œλ²„ 포트 λ³€κ²½.

  • 각 ν™˜κ²½μ— 따라 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ‹€ν–‰ 포트λ₯Ό λ‹€λ₯΄κ²Œ μ„€μ •.

6️⃣ Profile의 μž₯점.

1️⃣ μœ μ§€λ³΄μˆ˜μ„± ν–₯상.

  • μ„€μ • νŒŒμΌμ„ ν™˜κ²½λ³„λ‘œ 뢄리해 μ½”λ“œμ™€ μ„€μ • κ°„μ˜ μ˜μ‘΄λ„λ₯Ό 쀄이고, λ³€κ²½ 사항을 μ‰½κ²Œ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

2️⃣ 배포 μžλ™ν™”μ— 유리.

  • CI/CD νŒŒμ΄ν”„λΌμΈμ—μ„œ ν™˜κ²½μ— λ§žλŠ” ν”„λ‘œνŒŒμΌμ„ ν™œμ„±ν™”ν•˜μ—¬ 배포λ₯Ό μžλ™ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3️⃣ μ•ˆμ •μ„±

  • ν™˜κ²½λ³„λ‘œ 섀정을 κ²©λ¦¬ν•¨μœΌλ‘œμ¨ 잘λͺ»λœ μ„€μ •(예: 운영 DBλ₯Ό 개발 ν™˜κ²½μ—μ„œ μ ‘κ·Όν•˜λŠ” 문제)을 λ°©μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.