application.properties를 application.yml로 변경
application.properties 파일을 application.yml 파일로 변경합니다.
| 구분 | properties | yml(YAML) |
| Key 포맷 | 점(.)으로 계층 구분 | 들여쓰기(Space 2칸)와 콜론(:)으로 계층 구분 |
| Value 구분 | 이콜(=)로 구분 Key=Value |
콜론(:)으로 구분 Key: Value |
| 설명 | 데이터의 계층이 깊어질수록 상위 계층을 매번 반복해서 입력해야 하기 때문에 복잡해지고 가독성이 떨어집니다. | 들여쓰기를 기반으로 데이터의 계층 구조를 명확하게 구분하기 때문에 복잡하지 않아 가독성이 좋습니다. |
- 파일 확장자를 properties에서 yml로 변경합니다.
- 점(.)으로 구분된 데이터의 계증 구조를 콜론(:)으로 변경하고 들여쓰기(Space 2칸)합니다.
- 이콜(=)를 콜론(:)으로 변경하여 Value를 구분합니다.
- 동일한 계층은 제거하면 됩니다.
application.properties 파일
spring.application.name=transmission
# Server
server.port=8080
# Spring
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
# DataSource
spring.datasource.url=jdbc:mysql://localhost:3307/testdb
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=kiki@2000
# mybatis
mybatis.mapper-locations=classpath:/mapper/mariadb/*Mapper.xml
# Log
logging.level.org.hibernate.type.descriptor.sql=trace
# Redis
spring.data.redis.host=localhost
spring.data.redis.port=6379
spring.data.redis.password=kiki@2000
spring.data.redis.ssl.enabled=false
spring.data.redis.timeout=5000ms
spring.data.redis.lettuce.shutdown-timeout=100ms
spring.data.redis.lettuce.pool.max-active=5
spring.data.redis.lettuce.pool.max-idle=5
spring.data.redis.lettuce.pool.min-idle=3
spring.data.redis.lettuce.pool.max-wait=2000ms
# Redisson
spring.redis.redisson.file=classpath:redisson.yml
application.yml 파일
# Spring
spring:
application:
name: transmission
mvc:
view:
prefix: /WEB-INF/views/
suffix: .jsp
datasource:
url: jdbc:mysql://localhost:3307/testdb
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: kiki@2000
data:
redis:
host: localhost
port: 6379
password: kiki@2000
ssl:
enabled: false
timeout: 5000ms
lettuce:
shutdown-timeout: 100ms
pool:
max-active: 5
max-idle: 5
min-idle: 3
max-wait: 2000ms
redis:
redisson:
file: classpath:redisson.yml
# mybatis
mybatis:
mapper-locations: classpath:/mapper/mariadb/*Mapper.xml
# Log
logging:
level:
org:
hibernate:
type:
descriptor:
sql: trace
# Server
server:
port: 8080
위에 있는 username과 password는 저의 테스트 계정과 비밀번호이므로 변경하셔야 합니다.
실행 환경(Environment)별로 분리
- 로컬 환경 (Local Environment) : 개발자 PC에서 개발 및 테스트를 위한 환경 (로컬 DB 사용)
- 개발 환경 (Development Environment) : 작업한 코드들을 통합하여 서버에서 테스트하는 환경 (개발 DB 사용, 일부 외부 연동) - 스테이징 서버에 반영하기 전에 통합(Integration) 테스트 진행
- 스테이징 환경 (Staging Environment) : 운영 환경과 동일한 환경으로 운영에서 사용되는 데이터로 테스트하는 환경 (운영 DB의 데이터 비식별화(마스킹)하여 사용, 외부 연동) - 운영 서버에 반영하기 전에 QA(Quality Assurance) 테스트 진행
- 운영 환경(Production Environment) : 실질적으로 운영하는 서버 환경 (운영 DB 사용, 외부 연동, 시스템 환경 변수 사용, 보안 적용)
application.yml 파일을 공통과 환경별로 분리합니다.
[공통] 기본 설정 - application.yml
[로컬 환경] 개발 PC 환경 설정 - application-local.yml
[개발 환경] 개발 서버 환경 설정 - application-dev.yml
[스테이징 환경] 스테이징 환경 서버 설정 - application-stag.yml
[운영 환경] 운영 서버 환경 설정 - application-prod.yml
application.yml (공통)
# Spring
spring:
application:
name: transmission
mvc:
view:
prefix: /WEB-INF/views/
suffix: .jsp
profiles:
active: local
# mybatis
mybatis:
mapper-locations: classpath:/mapper/mariadb/*Mapper.xml
application-local.yml (로컬 환경)
# Spring
spring:
datasource:
url: jdbc:mysql://localhost:3307/testdb
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: kiki@2000
data:
redis:
host: localhost
port: 6379
password: kiki@2000
ssl:
enabled: false
timeout: 5000ms
lettuce:
shutdown-timeout: 100ms
pool:
max-active: 5
max-idle: 5
min-idle: 3
max-wait: 2000ms
redis:
redisson:
file: classpath:redisson-local.yml
# Log
logging:
level:
org:
hibernate:
type:
descriptor:
sql: trace
# Server
server:
port: 8080
application-dev.yml (개발 환경)
# Spring
spring:
datasource:
url: jdbc:mysql://<개발 DB URL/IP>:3307/testdb
driver-class-name: com.mysql.cj.jdbc.Driver
username: <개발 DB username>
password: <개발 DB password>
data:
redis:
host: <개발 Redis URL/IP>
port: <개발 Redis port>
password: <개발 Redis password>
ssl:
enabled: false
timeout: 5000ms
lettuce:
shutdown-timeout: 100ms
pool:
max-active: 50
max-idle: 50
min-idle: 25
max-wait: 2000ms
redis:
redisson:
file: classpath:redisson-dev.yml
# Log
logging:
level:
org:
hibernate:
type:
descriptor:
sql: trace
# Server
server:
address: 0.0.0.0
port: 80
application-stag.yml (스테이징 환경)
# Spring
spring:
datasource:
url: jdbc:mysql://<스테이징 DB URL/IP>:3307/testdb
driver-class-name: com.mysql.cj.jdbc.Driver
username: <스테이징 DB username>
password: <스테이징 DB password>
data:
redis:
host: <스테이징 Redis URL/IP>
port: <스테이징 Redis port>
password: <스테이징 Redis password>
ssl:
enabled: true
timeout: 5000ms
lettuce:
shutdown-timeout: 100ms
pool:
max-active: 100
max-idle: 100
min-idle: 50
max-wait: 2000ms
redis:
redisson:
file: classpath:redisson-stag.yml
# Log
logging:
level:
org:
hibernate:
type:
descriptor:
sql: error
# Server
server:
address: 0.0.0.0
port: 80
application-prod.yml (운영 환경)
# Spring
spring:
datasource:
url: jdbc:mysql://<운영 DB URL/IP>:3307/testdb
driver-class-name: com.mysql.cj.jdbc.Driver
username: <운영 DB username>
password: <운영 DB password>
data:
redis:
host: <운영 Redis URL/IP>
port: <운영 Redis port>
password: <운영 Redis password>
ssl:
enabled: true
timeout: 5000ms
lettuce:
shutdown-timeout: 100ms
pool:
max-active: 100
max-idle: 100
min-idle: 50
max-wait: 2000ms
redis:
redisson:
file: classpath:redisson-prod.yml
# Log
logging:
level:
org:
hibernate:
type:
descriptor:
sql: error
# Server
server:
address: 0.0.0.0
port: 80
개발 환경, 스테이징 환경, 운영 환경에 address를 0.0.0.0으로 한 이유는 도커 컨테이너나 클라우드 환경에서는 컨테이너 내부 IP와 외부 호스트 IP가 다릅니다. 이때 address를 0.0.0.0으로 열어두지 않으면 외부에서 보내는 트래픽을 서버가 수신하지 못하고 거부할 수 있기 때문입니다.
# Server
server:
address: 0.0.0.0
redisson.yml 파일도 분리합니다.
redisson-local.yml (로컬 환경)
singleServerConfig:
address: "redis://127.0.0.1:6379"
password: "kiki@2000"
connectionPoolSize: 16
connectionMinimumIdleSize: 6
idleConnectionTimeout: 10000
connectTimeout: 10000
timeout: 3000
application-dev.yml (개발 환경)
singleServerConfig:
address: "redis://<개발 Redis URL/IP>:<개발 Redis port>"
password: "<개발 Redis password>"
connectionPoolSize: 32
connectionMinimumIdleSize: 12
idleConnectionTimeout: 10000
connectTimeout: 10000
timeout: 3000
application-stag.yml (스테이징 환경)
singleServerConfig:
address: "redis://<스테이징 Redis URL/IP>:<운영 Redis port>"
password: "<스테이징 Redis password>"
connectionPoolSize: 64
connectionMinimumIdleSize: 24
idleConnectionTimeout: 10000
connectTimeout: 10000
timeout: 3000
application -prod.yml (운영 환경)
singleServerConfig:
address: "redis://<운영 Redis URL/IP>:<운영 Redis port>"
password: "<운영 Redis password>"
connectionPoolSize: 64
connectionMinimumIdleSize: 24
idleConnectionTimeout: 10000
connectTimeout: 10000
timeout: 3000
IntelliJ에서 실행(Run/Debug)하면 application에서 profiles.active로 설정된 [local] 환경으로 정보를 가져와 실행됩니다.

INFO 2568 --- [transmission] [ main] c.example.transmission.DemoApplication :
The following 1 profile is active: "local"
IntelliJ IDEA에서 실행 환경(local/dev/stag/prod)별로 선택하여 빌드 및 실행하는 방법
1. pom.xml 파일에 profile를 추가합니다.
<project> 내부에 실행 환경별로 추가합니다. <profile>은 하나의 실행 환경입니다.
<activeByDefault>true</activeByDefault>는 Profile를 선택하지 않으면 기본으로 선택되게 합니다.
<profiles>
<profile>
<id>Local</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<activatedProperties>local</activatedProperties>
</properties>
</profile>
<profile>
<id>Development</id>
<properties>
<activatedProperties>dev</activatedProperties>
</properties>
</profile>
<profile>
<id>Staging</id>
<properties>
<activatedProperties>stag</activatedProperties>
</properties>
</profile>
<profile>
<id>Production</id>
<properties>
<activatedProperties>prod</activatedProperties>
</properties>
</profile>
</profiles>
pom.xml 파일에 profile를 추가되면 우측 Maven 탭 → {Profiles}에 노출됩니다.

2. application.yml 파일에서 Maven이 선택한 프로필로 active 되도록 수정합니다.
@activatedProperties@이 우측 Maven 탭 → {Profiles}에서 선택된 프로필 값(<properties>의 <activatedProperties>)입니다.
# Spring
spring:
application:
name: transmission
mvc:
view:
prefix: /WEB-INF/views/
suffix: .jsp
profiles:
active: @activatedProperties@
# mybatis
mybatis:
mapper-locations: classpath:/mapper/mariadb/*Mapper.xml
우측 Maven 탭 → {Profiles}에서 선택된 프로필(실행 환경)로 IntelliJ에서 실행(Run/Debug)하고 Maven Bulid를 할 수 있습니다.