일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- oracle
- Linux
- springboot
- REST
- 개발
- Web
- gitlab
- Jenkins
- Spring Boot
- maven
- java
- spring-framework
- jsp
- JAR
- 스프링프레임워크
- SpringFramework
- git
- hashcode
- Spring
- Pipeline
- mybatis
- 스프링부트
- Gradle
- Spring Framework
- War
- 웹프로젝트
- soap
- annotaion
- tomcat
- 이클립스
- Today
- Total
Verity's Daily Logs_
[Spring Boot]개발-운영환경 설정 나누기(Gradle) 본문
서비스 제공 목적의 애플리케이션을 개발하다 보면 개발용 설정과 실제 서비스용 설정이 다른 경우가 빈번히 발생한다. 데이터베이스 정보, 로깅 레벨 설정이 그 대표적인 예이다. 그때그때 필요에 따라 스프링 부트 설정 파일(application.yml)내용을 지웠다 썼다 할 수 있지만, 이건 너무 비효율적인 방법이다. 실행환경에 맞는 설정 파일을 사용할 수 있는 방법을 정리할 것이다.
1. resources 구성
스프링부트 프로젝트의 기존 resources 폴더를 개발환경별로 새로 생성해줌으로써 application.yml 파일도 각각 만들어 준다. 나는 개발환경(dev)과 운영환경(prod) 두 가지로 나눌 것이기 때문에 아래 이미지와 같이 resources-[환경명]으로 각각 생성했다. application.yml 외에도 환경별로 다르게 사용하고 싶은 파일이 있다면 해당 디렉터리 아래로 이동시켜주면 따로 사용이 가능하다.
2. application.yml 파일 작성
사용목적에 맞는 application.yml을 각각 작성한다. 파일 내 "---"라고 표시된 라인을 기준으로, 윗 부분은 공통 설정 부분, 아래는 별도 설정 부분이다. 아래 내용은 DB 연결 정보, JPA 설정, JSP로딩 설정, 서버 포트 설정을 다르게 지정한 경우인데, 설정 별 작성법은 넘어가도록 한다.
- resources-dev/application.yml
spring:
profiles:
active: dev
jpa:
show-sql: true
database: oracle
properties:
hibernate:
format_sql: true
mvc:
view:
prefix: /WEB-INF/jsp/
suffix: .jsp
contentnegotiation:
favor-parameter: true
favor-path-extension: true
media-types:
xls: application/vnd.ms-excel
xlxs: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
logging:
level:
root: INFO
com.example.demo.controller: DEBUG
org:
hibernate:
SQL: DEBUG
type:
descriptor:
sql:
BasicBinder: TRACE
---
spring:
profiles: dev
#datasource (oracle)
datasource:
driver-class-name: oracle.jdbc.OracleDriver
url: jdbc:oracle:thin:@테스트DB IP:포트/SID
username: 유저
password: 패스워드
jpa:
hibernate:
# 서버 restart 시 table 정보가 reset 되는 설정으로 create -> 개발은 validate 옵션으로 변경
ddl-auto: validate
devtools:
livereload:
#JSP 는 서버 재시작 없이 반영될 수 있도록 하는 설정, 개발시에는 true, 운영은 false 로 함. (페이지 로딩 속도 이슈)
enabled: true
server:
port: 8088
- resources-prod/application.yml
spring:
profiles:
active: prod
jpa:
show-sql: true
database: oracle
properties:
hibernate:
format_sql: true
mvc:
view:
prefix: /WEB-INF/jsp/
suffix: .jsp
contentnegotiation:
favor-parameter: true
favor-path-extension: true
media-types:
xls: application/vnd.ms-excel
xlxs: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
logging:
level:
root: INFO
com.example.demo.controller: DEBUG
org:
hibernate:
SQL: DEBUG
type:
descriptor:
sql:
BasicBinder: TRACE
---
spring:
profiles:
prod
#datasource (oracle)
datasource:
driver-class-name: oracle.jdbc.OracleDriver
url: jdbc:oracle:thin:@운영DB IP:포트/SID
username: 유저
password: 패스워드
jpa:
hibernate:
ddl-auto: none
devtools:
livereload:
enabled: false
server:
port: 80
3. build.gradle 파일 작성
애플리케이션 실행 시 profile을 지정하고, profile별로 어떤 리소스파일을 확인할 것인지 정의해주는 코드를 추가한다. profile에 지정된 값을 토대로 리소스 폴더를 지정해 주는 부분이다.
// Default는 dev 로 지정
ext.profile = (!project.hasProperty('profile') || !profile) ? 'dev' : profile
// 리소스 폴더 지정
sourceSets {
main {
resources {
srcDirs "src/main/resources", "src/main/resources-${profile}"
}
}
}
4. gradle 명령어 작성
gradle 명령어 실행(bootRun) 실행 시 원하는 profile 값을 지정해 줄 수 있는데, 위에서 Default 값으로 'dev' 를 주었기 때문에 개발 시에는 따로 지정 없이 실행해도 resources-dev/application.yml 파일을 찾아갈 수 있다.
- Gradle 실행
#개발: 아래 둘 다 가능
gradle clean bootRun
gradle clean bootRun -Pprofile=dev
#운영
gradle clean bootRun -Pprofile=prod
5. (부록) IntelliJ profile 설정 방법
개발환경이야 따로 지정없이 애플리케이션 실행해도 dev를 잘 찾아 가지만, 가끔 운영환경으로 실행시켜봐야 할 경우가 생기게 되면 IntelliJ 환경설정에 profile 값을 저장시켜놓을 수 있다.
- 아래화살표 클릭 > Edit Configurations... 선택
- + 클릭 > Gradle 선택 및 추가 > Arguments 입력 후 적용
'Spring Framework' 카테고리의 다른 글
[Spring-Framework]Spring Annotation (0) | 2022.02.07 |
---|---|
[Spring Boot]war로 배포하기 (Gradle + 내/외장 톰캣) (3) | 2020.12.23 |
[Spring Boot]JSP 제약사항 (3) | 2020.12.18 |
[Spring Boot]배포 방법 비교 (JAR vs WAR) (0) | 2020.12.17 |
[Spring Boot]JDBC+MyBatis 연결하기(2) (0) | 2020.10.14 |