Home > Development tools and environments > πŸ› οΈ[개발 도ꡬ 및 ν™˜κ²½] Spring Bootμ—μ„œ Profile을 ν™œμš©ν•˜μ—¬ 개발 ν™˜κ²½ λΆ„λ¦¬ν•˜κΈ°.

πŸ› οΈ[개발 도ꡬ 및 ν™˜κ²½] Spring Bootμ—μ„œ Profile을 ν™œμš©ν•˜μ—¬ 개발 ν™˜κ²½ λΆ„λ¦¬ν•˜κΈ°.
Development tools Enviroments

πŸ› οΈ[개발 도ꡬ 및 ν™˜κ²½] Spring Bootμ—μ„œ Profile을 ν™œμš©ν•˜μ—¬ 개발 ν™˜κ²½ λΆ„λ¦¬ν•˜κΈ°.

1️⃣ ν”„λ‘œνŒŒμΌ 뢄리 방법.

방법 1: application.yml νŒŒμΌμ—μ„œ 뢄리.

  • application.yml νŒŒμΌμ€ μ—¬λŸ¬ ν”„λ‘œνŒŒμΌμ„ ν•˜λ‚˜μ˜ 파일둜 관리할 수 μžˆλ„λ‘ μ§€μ›ν•©λ‹ˆλ‹€.
  • ν™˜κ²½λ³„λ‘œ 섀정을 λ‚˜λˆ„κΈ° μœ„ν•΄ --- κ΅¬λΆ„μžλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ: application.yml

# κΈ°λ³Έ μ„€μ • (spring.profiles.activeλ₯Ό μ§€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ 이 섀정이 μ‚¬μš©λ¨)
spring:
    profiles:
        default: local
    datasource:
        url: jdbc:h2:mem:localdb
        username: local_user
        password: local_pass

---
# 개발 ν™˜κ²½(dev) μ„€μ •.
spring:
    profiles: dev
    datasource:
        url: jdbc:mysql://dev.example.com:3306/devdb
        username: dev_user
        password: dev_pass
        
---
# 운영 ν™˜κ²½(prod) μ„€μ •.
spring:
    profiles: prod
    datasource:
        url: jdbc:mysql://prod.example.com:3306/proddb
        username: prod_user
        password: prod_pass

방법 2: applicatioon-{profile}.yml 파일둜 뢄리.

  • 각 ν”„λ‘œνŒŒμΌμ„ 별도 파일둜 관리할 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
  • 파일 이름에 {profile} 뢀뢄을 ν”„λ‘œνŒŒμΌ μ΄λ¦„μœΌλ‘œ μ§€μ •ν•©λ‹ˆλ‹€.

파일 ꡬ쑰

src/main/resources/
β”œβ”€β”€ application.yml        # κΈ°λ³Έ μ„€μ • 파일
β”œβ”€β”€ application-local.yml  # local ν”„λ‘œνŒŒμΌ μ„€μ •
β”œβ”€β”€ application-dev.yml    # dev ν”„λ‘œνŒŒμΌ μ„€μ •
β”œβ”€β”€ application-prod.yml   # prod ν”„λ‘œνŒŒμΌ μ„€μ •

application.yml(곡톡 μ„±μ • 및 ν™œμ„±ν™” ν”„λ‘œνŒŒμΌ μ§€μ •)

spring:
    profile:
        active: local # κΈ°λ³Έ ν™œμ„±ν™” ν”„λ‘œνŒŒμΌ μ„€μ •

application-local.yml

spring:
    datasource:
        url: jdbc:h2:mem:localdb
        username: local_user
        password: local_pass

application-dev.yml

spring:
    datasource:
        url: jdbc:mysql://dev.example.com:3306/devdb
        username: dev_user
        password: dev_pass

application-prod.yml

spring:
    datasource:
        url: jdbc:mysql://prod.example.com:3306/proddb
        username: prod_user
        password: prod_pass

2️⃣ μ‹€ν–‰ μ‹œ ν”„λ‘œνŒŒμΌ μ§€μ • 방법.

방법 1: λͺ…λ Ήμ–΄ μ˜΅μ…˜μœΌλ‘œ ν”„λ‘œνŒŒμΌ μ§€μ •.

java -jar library-app-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

방법 2: ν™˜κ²½ λ³€μˆ˜λ‘œ ν”„λ‘œνŒŒμΌ μ§€μ •.

SPRING_PROFILES_ACTIVE=dev java -jar library-app-0.0.1-SNAPSHOT.jar

방법 3: IDEλ₯Ό 톡해 ν”„λ‘œνŒŒμΌ μ§€μ •

server:
  port: 8080
spring:
  config:
    activate:
      on-profile: local
  datasource:
    url: "jdbc:h2:mem:library;MODE=MYSQL;NON_KEYWORDS=USER"
    username: "sa"
    password: ""
    driver-class-name: org.h2.Driver
  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        show_sql: true
        format_sql: true
        dialect: org.hibernate.dialect.H2Dialect
  h2:
    console:
      enabled: true
      path: /h2-console
---
server:
  port: 8080
spring:
  config:
    activate:
      on-profile: dev
  datasource:
    url: "jdbc:mysql://localhost/library"
    username: "root"
    password: ""
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: none
    properties:
      hibernate:
        show_sql: true
        format_sql: true
        dialect: org.hibernate.dialect.MySQL8Dialect
    1. Run/Debug Configuration μ°½ μ—΄κΈ°
    1. Active profiles에 μ§€μ •ν•  ν™˜κ²½ μΆ”κ°€

3️⃣ μ½”λ“œλ‘œ ν”„λ‘œνŒŒμΌ 확인 및 적용.

  • Spring Boot μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œμ—μ„œ ν˜„μž¬ ν™œμ„±ν™”λœ ν”„λ‘œνŒŒμΌμ„ ν™•μΈν•˜κ±°λ‚˜ νŠΉμ • λ‘œμ§μ„ ν™˜κ²½μ— 따라 λΆ„κΈ°ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

ν™œμ„± ν”„λ‘œνŒŒμΌ 확인.

import org.springframework.core.env.Enviroment;
import org.springframework.stereotype.Component;

@Component
public class ProfileChecker {
    
    private final Environment environment;
    
    public ProfileChecker(Environment environment) {
        this.environment = this.environment;
    }
    
    public void printActiveProfiles() {
        String[] activeProfiles = environment.getActiveProfiles();
        System.out.println("Active Profiles: " + String.join(", ", activeProfiles));
    }
}

νŠΉμ • ν”„λ‘œνŒŒμΌμ—μ„œλ§Œ λ™μž‘ν•˜λŠ” μ½”λ“œ.

import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;

@Service
@Profile("dev") // dev ν™˜κ²½μ—μ„œλ§Œ ν™œμ„±ν™”
public class DevOnlyService {
    public void run() {
        System.out.println("This service runs only in the dev environment!");
    }
}

4️⃣ μ£Όμ˜μ‚¬ν•­.

1️⃣ ν™˜κ²½ λ³€μˆ˜ μš°μ„  μˆœμœ„.

  • Spring BootλŠ” ν”„λ‘œνŒŒμΌ μ„€μ •μ—μ„œ μ•„λž˜ μˆœμ„œλ‘œ μš°μ„ μˆœμœ„λ₯Ό λ”°λ¦…λ‹ˆλ‹€.
    • λͺ…령쀄 인수
    • SPRING_PROFILES_ACTIVE ν™˜κ²½ λ³€μˆ˜
    • appilcation.yml λ˜λŠ” applicatioon.properties의 spring.profiles.active κ°’

2️⃣ 운영 ν™˜κ²½μ— λŒ€ν•œ λ³΄μ•ˆ

  • 운영 ν™˜κ²½μ—μ„œλŠ” application-prod.yml 같은 νŒŒμΌμ— λ―Όκ°ν•œ 정보λ₯Ό ν¬ν•¨ν•˜μ§€ μ•Šκ³  μ™ΈλΆ€ μ„€μ • νŒŒμΌμ΄λ‚˜ ν™˜κ²½ λ³€μˆ˜λ₯Ό ν™œμš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

3️⃣ ν”„λ‘œνŒŒμΌμ— λ”°λ₯Έ 빈(Bean) 생성 관리.

  • νŠΉμ • ν”„λ‘œνŒŒμΌμ—μ„œλ§Œ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” λΉˆμ€ @Profile μ• λ„ˆν…Œμ΄μ…˜μ„ μ‚¬μš©ν•΄ κ΄€λ¦¬ν•©λ‹ˆλ‹€.

5️⃣ κ²°λ‘ .

  • Spring Boot의 ν”„λ‘œνŒŒμΌμ„ 톡해 개발 ν™˜κ²½μ— λ”°λ₯Έ 섀정을 효과적으둜 λΆ„λ¦¬ν•˜κ³  관리할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • application.yml λ‚΄μ—μ„œ λΆ„λ¦¬ν•˜κ±°λ‚˜ 별도 파일둜 λΆ„λ¦¬ν•˜μ—¬ μ„€μ •ν•˜λ©°, μ‹€ν–‰ μ‹œ –spring.profiles.active둜 ν™œμ„±ν™”ν•  ν”„λ‘œνŒŒμΌμ„ μ§€μ •ν•˜λ©΄ λ©λ‹ˆλ‹€.
  • 운영 ν™˜κ²½μ—μ„œλŠ” λ³΄μ•ˆμ„ κ³ λ €ν•΄ 민감 정보λ₯Ό ν™˜κ²½ λ³€μˆ˜λ‘œ κ΄€λ¦¬ν•˜λŠ” 것이 ꢌμž₯λ©λ‹ˆλ‹€.