토스, Docker와 Github Actions를 활용한 Mock 서버 기반 통합 테스트 자동화 및 데이터 마이그레이션 전략

🤖 AI 추천

신용대출 서비스의 E2E 테스트 자동화에 어려움을 겪고 있거나, Mock 서버 운영 시 발생하는 데이터 유지보수 비용 절감 및 자동화 방안을 모색하는 백엔드 개발자, DevOps 엔지니어, QA 엔지니어에게 이 글을 추천합니다.

🔖 주요 키워드

토스, Docker와 Github Actions를 활용한 Mock 서버 기반 통합 테스트 자동화 및 데이터 마이그레이션 전략

핵심 기술

토스 Financial Marketplace Platform Team에서 신용대출 서비스의 Mock 서버를 활용하여 통합 테스트 자동화 및 데이터 마이그레이션을 효율화한 경험을 공유합니다. Docker 환경에서 Mock 서버를 구동하고 Github Actions를 통해 통합 테스트를 실행하며, 제휴사 코드 변경 시 발생하는 데이터 마이그레이션 부담을 줄이기 위한 자동화 전략을 제시합니다.

기술적 세부사항

  • Mock 서버 환경 구성: Docker를 활용하여 Mock 서버를 격리된 환경에 배포하고, Github Actions에서 통합 테스트를 수행합니다.
  • Spring Cloud Config와 Multi Profile 활용: 기존 Spring Cloud Config 환경에서 mockServerTest라는 새로운 Profile을 정의하여, Docker 환경에 맞는 인프라 정보를 Mock 서버 테스트에 맞게 오버라이드합니다.
  • 데이터 중복 문제 해결: 멀티 모듈 프로젝트 구조에서 발생하는 패키지 경로 중복으로 인한 Entity 중복 문제를 spring.jpa.generate-ddl=false, spring.jpa.hibernate.ddl-auto=none, spring.sql.init.mode=always 설정과 init.sql을 사용하여 해결합니다.
  • 테스트 순서 의존성 관리: 순서에 민감한 통합 테스트 시나리오를 위해 JUnit 5의 @Suite@SelectClasses를 활용하여 클래스 간의 테스트 순서를 보장합니다.
  • 테스트 결과 가시성 확보: Github Actions에서 테스트 실패 시 PR 작성자에게 알림을 주고, 배포 파이프라인에서 테스트 성공 여부 및 제휴사 코드 변경 여부를 알리는 정책을 수립합니다.
  • 자동 데이터 마이그레이션: 제휴사 코드 변경 시 E2E 테스트용 데이터 마이그레이션과 통합 테스트용 init.sql을 자동으로 수정하고 PR을 생성하는 파이프라인을 구축합니다.
    • git diff를 사용하여 변경 감지
    • Kotlin Reflections와 @GenerateSchema 어노테이션을 활용한 스키마 추출
    • Jackson 라이브러리로 JSON Schema 생성 및 S3 업로드
    • JSON Schema 기반 샘플 데이터 생성 및 기존 데이터 병합
    • 생성된 샘플 데이터로 E2E 테스트 데이터 마이그레이션 및 init.sql 업데이트
    • JGit 라이브러리를 사용하여 GitHub App 인증 기반 자동 PR 생성

개발 임팩트

  • Mock 서버 기반 통합 테스트 자동화를 통해 수동 테스트 의존성을 줄이고 테스트 정확도를 향상시킵니다.
  • 데이터 마이그레이션 자동화를 통해 Mock 서버 운영 및 유지보수 비용을 절감하고, 테스트 데이터 관리의 번거로움을 해소합니다.
  • CI/CD 파이프라인에 통합하여 개발 생산성과 배포 안정성을 증대시킵니다.
  • 새로운 서비스의 Mock 서버 연동 시 발생할 수 있는 생산성 저하 문제를 방지합니다.

커뮤니티 반응

(원문에서 직접적인 커뮤니티 반응 언급은 없으나, 토스의 기술 블로그 특성상 개발자들 사이에서 높은 관심과 피드백을 받을 것으로 예상됩니다.)

📚 관련 자료