헤르메스 LIFE

[Spring Boot] Spring Boot 배포전략 본문

Spring Boot Framework

[Spring Boot] Spring Boot 배포전략

헤르메스의날개 2023. 1. 31. 00:44
728x90

프로젝트 개발 후 소스의 배포라는 문제에 맞닥뜨리게 됩니다. 이때, 설정파일에 개발, 스테이지, 운영( 서버가 한대 이상인 경우가 많습니다. ) 등의 환경에 맞는 설정을 분리해서 관리합니다. 그런데, 배포하고 나면 그 분리된 설정파일이 적용되지 않아서 문제를 발생시키는 경우를 많이 접하게 됩니다. 하드코딩은 않하는게 정답이고, 그러한 설정들을 그래서 설정파일로 빼냈는데...

배포시스템을 갖춘 프로젝트라면, 셋팅만 잘하면 아마도 배포 프로세스에 의해 무리없이 적용될 것 같습니다. 하지만 소규모 시스템에서는 개발자가 직접 개발, 운영서버에 배포해야 합니다. 이런 경우 실수가 발생할 수 있습니다.

많은 개발자분들이 고민하신 것 같습니다. 저의 생각도 다른분들과 별반 다르지 않습니다.

문제의 핵심은 간단합니다. 단 한번의 셋팅으로 모든 설정이 한방에 반영되면 해결입니다. ㅎㅎ


설정파일들.

1. logback.xml 파일

2. application.yml 또는 application.properties

3. properties 파일


1. VM arguments ( -Dspring.profiles.active=dev )

2. application.yml 또는 application.properties

application-local.yml

application-dev.yml

application-prod.yml

yml 파일을 properties로 변환하는 페이지 입니다.

https://env.simplestep.ca/

 

Environment Variable Generator

 

env.simplestep.ca

3. Logback

Spring Boot 에서 logback 설정을 하는 방법은 여러가지가 있습니다. logback.xml 과 logback-spring.xml 로 관리하는 방법이 대표적일 것 같습니다. 하지만 Spring Boot를 기준으로 개인적인 생각으로는 spring.profile.active 옵션으로 설정하는게 가장 이상적으로 생각됩니다.

logback-local.xml : 일반적으로 Console 로그만 출력하면 될 듯 합니다. SQL Logging 에 대해 고민 필요합니다.

logback-dev.xml : 파일로 로그를 남기면 됩니다.

logback-prod.xml : 파일로 로그를 남기면 됩니다.

이 방법외에 lombok을 사용하는 경우는 application.yml 설정으로 정리할 수 있을 것 같습니다. SQL 출력의 경우를 생각해 봐야 할 듯 합니다.

application.xml >> logging 샘플

# Logging
logging:
  level:  # 각 package 별로 로깅 레벨을 지정할 수 있다.
    root : info
    com.study : debug
    org.springframework: WARN
  pattern:
    console: "%-5level %d{yy-MM-dd HH:mm:SSS}[%thread] %logger[%method:%line] - %msg%n"
    file: "%-5level %d{yy-MM-dd HH:mm:SSS}[%thread] %logger[%method:%line] - %msg%n"
  file:
    name: ${user.dir}/log/app_log.log  # 로깅 파일 위치이다.
  logback:
    rollingpolicy:
      max-file-size: 1MB                #default 10M 로그 파일 하나당 최대 파일 사이즈이다.
      max-history: 31                   #default 7 로그 파일 삭제 주기이다. 7일 이후 로그는 삭제한다.
      file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz
      
spring:
  datasource:
    url: jdbc:h2:tcp://localhost/~/jpashop
    username: sa
    password:
    driver-class-name: org.h2.Driver

  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        #show_sql: true
        format_sql: true
        highlight_sql: true
        use_sql_comments: true
        format_sql: true
        SQL: debug
        type:
          descriptor.sql=trace
      jakarta:
        persistence:
          sharedCache:
            mode: ALL

    open-in-view: false

logging:
  level:
    org:
      hibernate:
        SQL: debug
        type:
          descriptor:
            sql: trace

show_sql:true는 sout을 sql 로그만 출력합니다.

이보단 org.hibernate.SQL옵션을 통해 SQL을 남기고, 실제 수행되는 시각도 출할 수 있습니다.

 

4. properties 파일

properties 파일은 생각을 못해봤습니다.

application.yml 파일에 몰아 넣어야 하지 않을까요..?

 


https://hermeslog.tistory.com/663

 

[Spring Boot] Spring Boot + Logback

개발환경 1. STS 버전 : 4.13.1 2. JDK 버전 : OpenJDK 11.0.14_9_x64 3. Tomcat 버전 : 9.0.71 4. Maven 버전 : 3.8.4 5. Spring 버전 : Spring Boot 2.7.8 6. Thymeleaf 3.0.15 pom.xml 4.0.0 org.springframework.boot spring-boot-starter-parent 2.7.8 sim

hermeslog.tistory.com

https://rutgo-letsgo.tistory.com/118

 

Spring Logback Profile 조합 전략

Spring Logback profile 조합 전략 예제코드 이전 코드 최근 프로젝트를 진행하면서 Logback 관련 공부를 하다가 조합을 이용한 Profile 전략 방식을 발견했다. 전에는 아래와 같이 각 프로파일마다 파일을

rutgo-letsgo.tistory.com

https://devlog-wjdrbs96.tistory.com/343

 

[Spring] yml 파일 dev, prod, local 환경으로 간단하게 분리하기

application.yml dev, prod, local 환경 분리하는 법 이번에 프로젝트를 진행하면서 마무리가 되었을 쯤에 개발, 운영, 로컬 환경으로 분리시키는 작업이 필요했습니다. 그래서 이번 글에서 application.yml을

devlog-wjdrbs96.tistory.com

 

728x90