강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

김정숙님의 프로필 이미지
김정숙

작성한 질문수

Jenkins를 이용한 CI/CD Pipeline 구축

yml 파일 db 접속정보 수정 후 배포 시 미반영

작성

·

40

0

안녕하세요

application-dev.yml 파일에 rds end-point url 변경 후

deploy to container plugin 으로 배포하면 바로 반영이 안되고

systemctl restart tomcat.service 처리 후 반영이 됩니다.

혹시 바로 반영되게 할 수 있는지 문의드립니다.

고맙습니다.

답변 2

0

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

안녕하세요, 이도원입니다.

Spring Boot 애플리케이션이 Tomcat 위에서 war 파일로 배포되면, Tomcat은 해당 war 파일의 압축을 풀고 내부의 Spring Application Context를 로드하여 실행합니다. Spring Boot는 부팅 시 최초 한 번만 application.yml 파일을 읽어 모든 Bean과 환경 설정(Environment)을 초기화하게 되는데, Tomcat이 war 파일을 다시 덮어쓸 때와 같이, 단순히 파일을 덮어쓰는 것만으로는 이미 메모리에 로드되어 실행 중인 기존의 Spring Application Context를 자동으로 종료하고 새 컨텍스트로 교체하지 않습니다. RDS 접속 정보나, 서버 포트, JPA/Hibernate (영속성 관련 핵심 Bean 초기화 정보) 등은 application.yml 파일을 수정해도, 이미 메모리에 있는 Bean을 재구성해야 하므로 Tomcat의 재시작(또는 웹 애플리케이션 컨텍스트의 재로드)이 필요합니다. 이렇게 Tomcat의 재시작을 하지 않더라도 일부 설정은 Spring Boot의 핵심 Bean 초기화와는 관계없이, 해당 정보를 주기적으로 다시 읽도록 설계된 라이브러리나 Spring Actuator 기능을 통해 실시간으로 변경될 수 있습니다. 예를 들어, 로깅 레벨(logging.level.*)이나 외부 라이브러리 설정 등의 일부 정보는 가능합니다.

말씀하신것처럼, 동적으로 설정으로 변경하기 위해서는,

  1. Tomcat Manager에서 Undeploy 후에 Redeploy를 다시 해 보시기 바랍니다. Jenkins 작업에서도 단순하게 교체하는 작업 외에 이전에 등록 된 웹 애플리케이션을 삭제하고 다시 재로드하는 방법이 필요합니다.

  1. Tomcat의 conf/Catalina/localhost/[your_context_name].xml 파일이나 META-INF/context.xml 파일에 <Context reloadable="true"> 속성을 추가하면, Tomcat은 웹 애플리케이션의 클래스나 설정 파일 변경을 감지하고 자동으로 애플리케이션 컨텍스트를 재로드가 가능합니다.

위와 같은 방법으로 테스트해 보시고, 추가 문의사항 있으시면 다시 글 남겨 주시기 바랍니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. 김정숙님.

yml 파일을 수정한 후 배포 시 변경 사항이 바로 반영되지 않는 문제를 해결하기 위해서는 애플리케이션 내의 주요 설정을 변경한 후 동적으로 반영할 수 있도록 하는 기능을 사용해야 합니다. 일반적으로 Spring Boot 같은 프레임워크에서는 Actuator의 /refresh endpoint를 이용해 설정 변경 사항을 반영할 수 있습니다.

Dynamic Configuration Refresh하는 방법

  1. Spring Actuator 사용: Spring 설정에 actuator 기능을 추가하고, /actuator/refresh endpoint로 POST 요청을 보내어 설정을 갱신할 수 있습니다. 이는 application.yml 파일의 설정을 동적으로 갱신하는 데 사용됩니다.

  2. Spring Cloud Config 사용: Spring Cloud Config를 사용하면 원격 저장소에서 설정 파일을 가져와 서비스에 반영할 수 있고, 변경 사항을 실시간으로 갱신할 수 있습니다.

  3. Jenkins Scripted Pipeline: Jenkins에서 배포 시 자동으로 관련 서비스를 재시작하는 스크립트를 추가할 수 있습니다.

자동 갱신이 어려운 경우에는 현재처럼 수동으로 서비스를 재시작하여 변경 사항을 반영해야 할 수도 있습니다. 그러나 위의 방법으로 구성함으로써 시스템 운영의 유연성을 크게 향상시킬 수 있습니다.

더 많은 구체적인 설정 방법과 코드 예시가 필요하다면 아래의 관련 질문들을 참조해 보시기 바랍니다:
- user-service.yml의 username / password 바뀌었을 때 h2-console 접속 관련
- actuator 방법이 안됩니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

김정숙님의 프로필 이미지
김정숙

작성한 질문수

질문하기