ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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분 내외로 줄어들었다!

Designed by Tistory.