Docker Compose 테스트 자동화 완벽 가이드! CI Pipeline에서 Container 안정성 검증하기

Production 서버에 코드를 배포하기 전에 반드시 확인해야 하는 과정이 있습니다.

바로 테스트입니다.

자동 배포 시스템에서 가장 위험한 상황은 다음과 같습니다.

개발자가 코드 수정

↓

자동 배포 실행

↓

Production 반영

↓

서비스 오류 발생

테스트 과정이 없다면 작은 코드 변경도 전체 서비스 장애로 이어질 수 있습니다.

CI/CD 환경에서는 배포 전에 자동 테스트 단계를 추가합니다.

기본 구조:

Git Push

↓

CI 실행

↓

Docker Build

↓

Container 실행

↓

Test 진행

↓

성공

↓

Deploy

이번 글에서는 Docker Compose 테스트 환경 구성부터 Container 테스트, Database 테스트, Healthcheck 검증, CI Pipeline 연결까지 알아보겠습니다.

Docker Compose 테스트 자동화란?

테스트 자동화는 사람이 직접 확인하던 과정을 Pipeline이 대신 실행하는 방식입니다.

기존 방식:

개발자

↓

서버 실행

↓

직접 확인

↓

배포

자동화 방식:

Git Push

↓

자동 Test

↓

결과 확인

↓

배포 결정

테스트 대상:

  • Docker Build 성공 여부
  • Container 실행 여부
  • Application 동작
  • Database 연결
  • API 응답
  • Service 상태

Docker Compose Test 환경 구조

운영 환경과 테스트 환경은 분리해야 합니다.

구조:

Development

↓

Test Environment

↓

Production

예:

docker-compose.yml

공통 설정


docker-compose.test.yml

테스트 설정


docker-compose.prod.yml

운영 설정

Docker Compose Test Compose 파일 작성

docker-compose.test.yml:

services:

  app:

    image: my-app:test

    environment:

      NODE_ENV: test


  database:

    image: mysql:8

    environment:

      MYSQL_DATABASE: test

구조:

Test Application

↓

Test Database

Production Database와 완전히 분리합니다.

Docker Compose Container 실행 테스트

첫 번째 테스트:

Container 정상 실행 확인

실행:

docker compose -f docker-compose.test.yml up -d

확인:

docker compose ps

성공:

app

running

실패:

Exited (1)

Docker Compose Healthcheck 테스트

Healthcheck는 자동 테스트의 기본입니다.

설정:

healthcheck:

  test:

    - CMD

    - curl

    - localhost:3000

  interval: 10s

  retries: 3

검증:

docker compose ps

결과:

healthy

Docker Compose API 테스트 자동화

Application이 정상 응답하는지 확인합니다.

예:

curl http://localhost:3000/api/health

정상:

{
 "status":"ok"
}

실패:

500 Error

CI에서는 실패 처리:

exit 1

Docker Compose Database 연결 테스트

Application과 Database 연결을 확인합니다.

테스트:

Application

↓

Database Connection

↓

Query 실행

확인:

  • Connection 성공
  • Migration 실행
  • Table 생성

예:

npm run migration:test

Docker Compose Migration 테스트

Database 변경 작업도 테스트해야 합니다.

구조:

Migration File

↓

Test Database 적용

↓

오류 확인

예:

npm run migrate

성공:

Migration Complete

실패:

Migration Error

Docker Compose Unit Test 연결

Application 코드 테스트도 함께 실행합니다.

예:

npm test

구조:

Source Code

↓

Unit Test

↓

Container Test

↓

Deploy

Docker Compose GitHub Actions 테스트 Pipeline

Workflow 예:

name: Test


on:

  pull_request:


jobs:

  test:

    runs-on: ubuntu-latest


    steps:

      - uses: actions/checkout@v4


      - name: Start Container

        run: docker compose up -d


      - name: Test

        run: npm test

동작:

Pull Request 생성

↓

Test 실행

↓

성공 여부 확인

Docker Compose Build 테스트

Image Build 오류도 배포 전에 확인합니다.

실행:

docker compose build

확인:

  • Dockerfile 오류
  • Package 설치 오류
  • Build 실패

Docker Compose Security Test

Production 배포 전 보안 검사도 가능합니다.

확인:

  • 취약한 Image
  • 노출 Port
  • Secret 포함 여부

예:

docker scout cves

Docker Compose 테스트 실패 대응

테스트 실패:

Pipeline 실패

↓

Deploy 중단

확인:

  1. Build Log
docker compose build
  1. Container Log
docker compose logs
  1. Test Result
  2. Code 수정

Docker Compose Test와 Production 배포 연결

최종 구조:

Developer

↓

Git Push

↓

CI Test

↓

Build

↓

Health Check

↓

Production Deploy

중요:

Test 성공 전에는 Production 배포를 하지 않습니다.

Docker Compose 테스트 Best Practice

운영 추천:

  • Test 환경 분리
  • Database 별도 구성
  • Healthcheck 사용
  • API Test 추가
  • Migration 검증
  • Build Test 실행

권장 Pipeline:

Code Commit

↓

Unit Test

↓

Docker Build

↓

Container Test

↓

Security Test

↓

Deploy

자주 묻는 질문

테스트 없이 자동 배포하면 안 되나요?

가능하지만 Production 장애 위험이 크게 증가합니다.

Test Database는 운영 Database와 같이 사용해도 되나요?

권장하지 않습니다.

테스트 전용 Database를 사용하는 것이 안전합니다.

Docker Compose도 자동 테스트가 가능한가요?

가능합니다.

CI/CD Pipeline과 연결하면 자동 검증할 수 있습니다.

테스트가 모두 통과하면 안전한가요?

테스트는 오류 가능성을 줄이는 과정이며 Monitoring과 Backup도 함께 필요합니다.

마무리

Docker Compose 테스트 자동화는 안정적인 CI/CD 환경을 만드는 핵심 단계입니다.

최종 Pipeline:

Git Push

↓

자동 Test

↓

Docker Build

↓

Container 검증

↓

Health Check

↓

Production Deploy

이 구조를 적용하면 문제가 있는 코드가 Production 서버에 배포되는 것을 방지할 수 있습니다.

다음 글에서는 서비스 중단을 최소화하는 배포 방식인 Docker Compose Blue Green 배포 전략을 알아보겠습니다.

댓글 남기기