-
[spring boot] 도커 사용시 DevTools 적용하기spring 2025. 1. 5. 22:24
도커 기반에서 스프링부트 프로젝트 개발을 하게 되었다.
그런데 도커로 빌드 한번 하는데에 3분이 걸렸다.
맥 환경에서는 빌드하는데에 이정도로 걸리지 않는데 윈도우 환경에서는 매우 느렸다.
수정할때마다 재빌드해야했기 때문에 이 문제를 해결해야 했다.
이를 위해 spring boot에서 지원하는 DevTools을 활용하기로 했다.
DevTools란? - 자동 재시작 기능에 대하여
도커로 빌드하면 프로젝트에 관련된 모든 파일을 재빌드하기 때문에 시간이 오래걸린다.
만약 수정한 리소스 파일만 로드하면 빌드 시간이 대폭 줄게 될것이다.
이런 기능을 지원하는것이 DevTools다.
DevTools의 다양한 기능 중 자동 재시작 기능이라는게 있다.
이는 프로젝트의 코드를 수정하면 변경 사항을 감지하여 그 부분만 재시작해주는 기능이다.
Spring boot에 DevTools 연결하기
일단 Spring boot에 DevTools 의존성을 추가하자.
build.gradle 수정
dependencies { implementation 'org.springframework.boot:spring-boot-devtools' }
도커에 DevTools 연결하기
dockerfile 수정
ENTRYPOINT ["./gradlew", "bootRun"]
위 코드를 추가하자.
이 코드는 소스 코드 기반 실행을 위한 코드다.
소스 코드가 변경될 때마다 컨테이너 안에서 테스트하거나 실행할 수 있도록 한다.
docker-compose.yml 수정
services: app: environment: - SPRING_DEVTOOLS_RESTART_ENABLED=true volumes: - ./src:/app/src
위 코드를 추가하자.
- SPRING_DEVTOOLS_RESTART_ENABLED 변수값을 true로 둠으로써 자동 재시작 기능을 확성화 한다.
- volumes 코드는 코드 변경시 감지해주는 역할을 한다.
호스트와 도커 컨테이너 간의 파일 시스템 동기화가 완벽하지 않을 수 있다.
이 때문에 DevTools가 호스트 시스템의 파일 변경을 인식하지 못할 수 있는데 이를 방지하는 설정이다.사용해보기
# 1. 컨테이너 시작하기 docker-compose up # 2. 코드 수정 # 3. 새 터미널을 생성해 아래 코드 실행, 프로젝트의 NAMES 확인 docker ps # 4. 아래 코드 입력하여 프로젝트 재실행 docker restart [프로젝트 NAMES]
4번을 실행하고 조금 기다리면 스프링부트가 자동으로 재실행되는걸 볼 수 있다.
결과
한번 실행하는데 3분 걸렸던 것이 1분 내외로 줄어들었다!
'spring' 카테고리의 다른 글
테스트코드에 별도의 yml 연결하는 법 (0) 2025.01.30 intelliJ에서 .env 파일 적용법 (1) 2025.01.29 [spring boot] QueryDSL 세팅하기 (0) 2025.01.03 [spring boot] 'Parameter 0 of constructor in ~ ', 'Consider defining a bean of type ~' 오류 해결 (0) 2024.11.20 react와 spring boot 간 연동하기 / 통신하기 (0) 2024.11.07