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
-
-
Run/Debug Configuration ์ฐฝ ์ด๊ธฐ
-
-
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๋ก ํ์ฑํํ ํ๋กํ์ผ์ ์ง์ ํ๋ฉด ๋ฉ๋๋ค.
- ์ด์ ํ๊ฒฝ์์๋ ๋ณด์์ ๊ณ ๋ คํด ๋ฏผ๊ฐ ์ ๋ณด๋ฅผ ํ๊ฒฝ ๋ณ์๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค.