Verity's Daily Logs_

[Spring Boot]개발-운영환경 설정 나누기(Gradle) 본문

Spring Framework

[Spring Boot]개발-운영환경 설정 나누기(Gradle)

johye0 2021. 1. 6. 16:43
반응형

서비스 제공 목적의 애플리케이션을 개발하다 보면 개발용 설정과 실제 서비스용 설정이 다른 경우가 빈번히 발생한다. 데이터베이스 정보, 로깅 레벨 설정이 그 대표적인 예이다. 그때그때 필요에 따라 스프링 부트 설정 파일(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 입력 후 적용

 

반응형
Comments