목록 보기
Testcontainers에 의한 docker container 생성 폭발을 막아라
데브옵스

Testcontainers에 의한 docker container 생성 폭발을 막아라

flex
flex
2024년 7월 28일

두줄요약

Testcontainers로 생기는 컨테이너 폭증과 메모리 고갈 문제를 Gradle BuildService로 줄였습니다. 하나의 컨테이너를 재사용하고 스키마 초기화 방식을 정리해 CI 시간을 크게 단축했습니다.

문제 상황

  • Testcontainers 도입 후 integration test마다 컨테이너가 과도하게 생성되는 상황
  • Spring Boot 테스트의 dirty context, 다수 모듈의 분산된 테스트, 순차 실행으로 인한 메모리 고갈과 CI 지연

원인 분석

  • 테스트마다 개별 컨테이너를 띄우는 구조로 인한 중복 기동
  • reuse 기능의 재사용 범위 통제 한계와 종료 제어 부재
  • 스키마 초기화를 ddl-auto에 의존하던 방식이 재사용 컨테이너와 충돌

해결 방법

  • Gradle BuildService로 컨테이너 라이프사이클 공유 및 자동 정리 구성
  • 하나의 MySQL 컨테이너에 여러 database variant를 생성해 테스트 재사용
  • Liquibase 기반 스키마 초기화와 ddl-auto: validate로 전환

다음 읽기

#Testcontainers 주제를 이어서 읽기

[코드가 환경을 모르는 구조 6/7] 컨테이너는 왜 폭발하는가

실제 DB를 쓰는 통합 테스트는 신뢰도가 높지만, 컨텍스트 분화로 컨테이너가 복제되며 CI가 느려졌습니다. 이를 Gradle BuildService로 공유하고 스키마를 분리해 속도와 격리를 함께 확보했습니다.

flex
flex
데브옵스

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...