정지용
기술스택 목록
테스트

Testcontainers

프로젝트 2에서 사용했습니다. 각 프로젝트에서 어떤 역할로 썼는지 아래에 정리했습니다.

이 기술은 무엇인가요?

Docker 컨테이너를 테스트 코드 안에서 프로그래밍 방식으로 실행하는 라이브러리

Testcontainers는 JUnit, pytest 등 테스트 프레임워크 안에서 데이터베이스, 메시지 큐, 웹 브라우저 같은 외부 의존성을 실제 Docker 컨테이너로 띄워 테스트하는 라이브러리입니다. 테스트 실행 시 컨테이너를 자동으로 시작하고, 테스트가 끝나면 정리해 격리된 환경을 보장합니다. 인메모리 DB나 Mock 객체 대신 실제 환경과 동일한 소프트웨어를 사용해 통합 테스트의 신뢰도를 높입니다.

이럴 때 사용합니다

  • 인메모리 DB로는 재현할 수 없는 실제 DB의 고유 기능(트리거, 프로시저, 확장)을 테스트할 때
  • Mock 객체 대신 실제 Kafka, Redis, Elasticsearch 같은 외부 시스템과의 통합을 검증하고 싶을 때
  • CI 환경에서도 별도 인프라 설정 없이 독립적으로 실행 가능한 테스트가 필요할 때
  • 팀원마다 로컬 환경이 달라도 동일한 테스트 환경을 보장하고 싶을 때

핵심 개념

Container
테스트에 필요한 PostgreSQL, Redis, Kafka 같은 서비스를 담은 Docker 컨테이너. Testcontainers가 테스트 시작 시 자동으로 띄우고 종료 시 제거합니다.
GenericContainer
임의의 Docker 이미지를 실행할 수 있는 기본 컨테이너 클래스. 포트, 환경변수, 볼륨 등을 코드로 설정할 수 있습니다.
Module
특정 기술 스택에 최적화된 사전 구성 컨테이너. PostgreSQLContainer, MySQLContainer처럼 JDBC URL, 드라이버 등을 자동으로 설정해줍니다.
Lifecycle
컨테이너의 시작과 종료 시점을 테스트 생명주기에 맞춰 관리하는 메커니즘. 테스트 클래스 단위 또는 메서드 단위로 컨테이너를 재사용하거나 격리할 수 있습니다.
Wait Strategy
컨테이너가 실제로 사용 가능한 상태가 될 때까지 기다리는 전략. 특정 포트 개방, 로그 메시지 출력, HTTP 응답 등을 조건으로 설정합니다.

PostgreSQL 컨테이너를 사용한 JUnit 5 테스트

테스트 클래스 실행 시 PostgreSQL 컨테이너를 시작하고, JDBC URL을 받아 실제 DB에 연결해 테스트합니다. 모든 테스트가 끝나면 컨테이너는 자동으로 정리됩니다.

Java
@Testcontainers
class UserRepositoryTest {

    @Container
    static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:15-alpine")
        .withDatabaseName("testdb")
        .withUsername("test")
        .withPassword("test");

    @Test
    void shouldSaveAndFindUser() {
        String jdbcUrl = postgres.getJdbcUrl();
        // jdbcUrl로 실제 PostgreSQL에 연결해 테스트 수행
        // 테스트 종료 후 컨테이너는 자동으로 제거됨
    }
}

처음 쓸 때 흔한 함정

  • Docker 데몬이 실행 중이어야 하므로, CI 환경에서 Docker-in-Docker 또는 DinD 설정이 필요할 수 있음
  • 컨테이너 시작 시간 때문에 단위 테스트보다 느리므로, 빠른 피드백이 필요한 경우 Mock과 혼용해야 함
  • 테스트마다 컨테이너를 새로 띄우면 매우 느려지므로, 클래스 레벨 static 컨테이너로 재사용하는 것이 일반적

위 개요는 기술 학습을 돕기 위해 자동 생성된 일반 설명입니다. 정확한 사양과 최신 정보는 공식 문서를 확인하세요.

프로젝트별 활용 방식

위 개념이 실제 프로젝트에서 어떻게 쓰였는지 보여줍니다.

  1. 01백엔드
    2026년 7월

    KYB 기업심사 REST API

    Go + Echo 기반 멀티테넌트 KYB(Know Your Business) 심사 플랫폼. 기업 등록부터 3단계 심사, WLF 스크리닝, 재제출 워크플로까지 지원.

    이 프로젝트에서의 Testcontainers 활용

    PostgreSQL 통합 테스트 환경

함께 사용한 기술

위 프로젝트들에서 같이 쓰인 다른 기술입니다.