Spring Office Hours Podcast: S5E19 - Docker, Compose, Testcontainers, Oh My!

Spring Blog · 2026.08.06

Docker, Testcontainers, 그리고 Spring Boot의 통합 흐름

Spring Office Hours 팟캐스트 시즌 5 에피소드 19에서는 Dan Vega와 DaShaun Carter가 Docker, Docker Compose, Testcontainers를 중심으로 Spring 생태계의 최신 변화를 다뤘다. 에피소드에서 언급된 주제들은 단순한 기능 소개를 넘어, 로컬 개발 환경과 테스트 환경을 어떻게 선언적으로 관리할 것인가라는 실무적 고민과 직결된다.

특히 주목할 만한 키워드는 "Clone. Run. Done."이다. 새로운 팀원이 프로젝트를 클론한 뒤 별도의 환경 설정 없이 바로 실행할 수 있는 개발 경험, 즉 재현 가능한 개발 환경이 핵심 가치로 부각되고 있다. Spring Boot의 Docker Compose 지원과 Testcontainers 통합은 이 목표를 실현하는 데 중요한 역할을 한다.

Spring Boot의 Docker Compose & Testcontainers 지원이 중요한 이유

Spring Boot 3.1 이후 spring-boot-docker-compose 의존성을 추가하면, 애플리케이션 기동 시 프로젝트 루트의 docker-compose.yml을 자동으로 감지하고 컨테이너를 띄워준다. 개발자가 별도로 docker compose up을 실행하지 않아도 되며, 애플리케이션 종료 시 컨테이너도 함께 정리된다.

<!-- build.gradle 또는 pom.xml -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-docker-compose</artifactId>
  <scope>runtime</scope>
</dependency>

Testcontainers 통합은 테스트 환경에서 한발 더 나아가, 실제 DB나 메시지 브로커를 컨테이너로 띄워 통합 테스트를 수행할 수 있게 해준다. Spring Boot 3.1부터는 @ServiceConnection 애노테이션을 통해 컨테이너 연결 정보를 자동으로 주입받을 수 있어, 별도의 application-test.yml 설정 없이도 통합 테스트를 구성할 수 있다.

@SpringBootTest
class OrderServiceIntegrationTest {

    @Container
    @ServiceConnection
    static PostgreSQLContainer<?> postgres =
        new PostgreSQLContainer<>("postgres:16");

    @Test
    void 주문_저장_및_조회() { ... }
}

Paketo Buildpacks와 Spring Boot Plugin의 연계

에피소드에서는 Spring Boot Maven/Gradle 플러그인의 새로운 기능도 함께 다뤄졌다. Paketo Buildpacks를 활용하면 Dockerfile 없이도 ./mvnw spring-boot:build-image 한 줄로 프로덕션 수준의 컨테이너 이미지를 생성할 수 있다.

이는 4년차 이상 백엔드 개발자에게 특히 의미 있다. CI/CD 파이프라인에서 Dockerfile 관리 부담을 줄이고, 레이어 캐싱과 보안 패치가 자동으로 적용되는 빌드팩 기반 이미지 전략으로 전환할 수 있기 때문이다. 팀 전체가 동일한 이미지 빌드 방식을 공유하면 환경 차이로 인한 배포 이슈도 줄어든다.

정리

  • Spring Boot의 Docker Compose 자동 통합으로 로컬 개발 환경 설정 비용이 크게 줄고, 팀 온보딩이 단순해진다.
  • @ServiceConnection을 활용한 Testcontainers 통합은 외부 인프라 의존 테스트를 선언적이고 간결하게 작성할 수 있게 해준다.
  • Paketo Buildpacks 기반 이미지 빌드는 Dockerfile 없이 표준화된 컨테이너 이미지를 생성하여 CI/CD 파이프라인을 단순화한다.
Source
Spring Blog
원문 보기 →
← 목록으로 돌아가기