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๋ฅผ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์ ‘๊ทผํ•˜๋Š” ๋ฌธ์ œ)์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.