채널톡 아이콘

H2 테스트는 전부 통과, 운영 버그는 6개 — Testcontainers로 MySQL·Redis·Kafka 통합 테스트

H2·목 테스트는 전부 통과하는데 운영 MySQL·Redis·Kafka 에서만 깨지는 버그 6개를, Testcontainers 통합 테스트로 하나씩 재현하고 잡습니다. 컨테이너 싱글턴·재사용, CI, flaky 진단까지.

수강 후 이런걸 얻을 수 있어요

  • H2·목이 놓치는 버그(문법·정렬 규칙·격리 수준·TTL·메시지 키·중복 수신)를 진짜 엔진에서 재현하는 통합 테스트를 씁니다.

  • @ServiceConnection·이미지 고정·Flyway 검증으로 운영과 같은 조건의 테스트 환경을 만듭니다.

  • Awaitility(until·during)·Clock 주입·데이터 정리로 비동기·시간 의존 테스트를 안정적으로 만듭니다.

  • 싱글턴 컨테이너·재사용·병렬 실행의 효과와 함정을 숫자로 확인하고 CI 에서 돌립니다.

  • flaky 테스트를 반복 실행으로 숫자로 만들고 원인별로 고칩니다.

단위 테스트는 다 초록불인데 운영에서 깨진다면, 테스트가 운영과 다른 것을 보고 있는 겁니다.

H2·목 테스트는 전부 통과하는데 운영 MySQL·Redis·Kafka 에서만 깨지는 버그 6개를, Testcontainers 통합 테스트로 하나씩 재현하고 잡습니다. 컨테이너 싱글턴·재사용, CI, flaky 진단까지.

저장소 하나·이야기 하나로 끝까지 갑니다. 강마다 깨진 증상으로 시작해 빨간불 → 초록불을 실제 실행 화면으로 보여 주고, 체크포인트 태그(step-00~41)로 어느 강에서든 바로 시작할 수 있습니다.

이 강의를 마치면

  • H2·목이 놓치는 버그(문법·정렬 규칙·격리 수준·TTL·메시지 키·중복 수신)를 진짜 엔진에서 재현하는 통합 테스트를 쓴다

  • @ServiceConnection·이미지 고정·Flyway 검증으로 운영과 같은 조건의 테스트 환경을 만든다

  • Awaitility(until·during)·Clock 주입·데이터 정리로 비동기·시간 의존 테스트를 안정적으로 만든다

  • 싱글턴 컨테이너·재사용·병렬 실행의 효과와 함정을 숫자로 확인하고 CI 에서 돌린다

  • flaky 테스트를 반복 실행으로 숫자로 만들고 원인별로 고친다

이런 분께 추천합니다

  • 단위 테스트는 쓰는데 운영에서만 깨지는 버그를 겪은 스프링 백엔드 개발자

  • H2·목으로 만든 테스트 묶음을 진짜 DB·Redis·Kafka 로 옮기고 싶은 팀

  • Testcontainers 를 써 봤지만 느리고 가끔 깨져서 포기했던 분

커리큘럼 (7섹션 · 42강 · 약 316분)

  • 섹션 0. 시작 — 초록불인데 운영에서 깨진다 — 완성 데모: 초록불 9개가 놓친 운영 버그 6개, 5분 만에 첫 버그: 구매 금액이 0원, 실습 저장소와 체크포인트 태그, Docker 29 함정: client version 1.32 is too old, H2·목 테스트가 증명하는 것과 못 하는 것, 첫 컨테이너 테스트 해부: 수명·로그·대기

  • 섹션 1. 실제 MySQL 에서만 깨지는 것 — 문법 차이: IN 서브쿼리 안의 LIMIT, 콜레이션: H2 테스트의 기대값이 틀렸다, 트랜잭션 격리: REPEATABLE READ 스냅숏, 이미지 태그 고정과 운영 버전 맞추기, PostgreSQL 컨테이너로 같은 테스트 돌리기, @ServiceConnection 과 @DynamicPropertySource

  • 섹션 2. 스키마와 테스트 데이터 — Flyway 마이그레이션을 테스트가 먼저 검증, 마이그레이션 실패를 테스트에서 재현, 테스트 데이터 세 가지: SQL·빌더·리포지토리, @Sql 과 초기화 스크립트, 많은 고정 데이터가 필요할 때, 로컬 실행도 같은 컨테이너로

  • 섹션 3. Redis·Kafka 에서만 깨지는 것 — Redis: SET 이 TTL 을 지운다, 만료를 기다리지 않고 검증하기, Kafka 컨테이너 띄우기(KRaft), 메시지 키와 파티션: 순서가 깨진다, 중복 수신: 포인트가 두 번 쌓였다, 오류·재시도·DLT 검증

  • 섹션 4. 시간·비동기·테스트 격리 — Awaitility: sleep 없이 기다리기, during: 더 일어나지 않음을 검증, 시간에 기대는 코드: Clock 주입, 테스트 격리: 데이터 정리 전략, 테스트 순서 의존 찾기, 병렬 실행과 컨테이너 충돌

  • 섹션 5. 속도와 CI — 왜 느린가: 시간을 나눠 잰다, 스프링 컨텍스트 캐시와 컨테이너 수명, 싱글턴 컨테이너 패턴, 컨테이너 재사용: 로컬 전용, GitHub Actions 에서 Testcontainers 돌리기, CI 시간 줄이기: 캐시와 이미지

  • 섹션 6. flaky 진단과 캡스톤 — flaky 진단 ①: 반복 실행으로 재현율 재기, flaky 진단 ②: 원인별 고치기, 전후 총정리: 잡은 버그와 실행 시간, 캡스톤 ①: 처음 보는 버그 — 증상과 단서, 캡스톤 ②: 풀이와 비교, 마무리: 점검표와 다음 단계

실습 환경

실습 ZIP 에는 가상 회사 「루프마켓」의 주문 서비스 저장소(강별 Git 태그 42개)와 강별 재현 시나리오 42개, 점검표가 들어 있습니다. 화면의 숫자는 제작 노트북에서 실제로 실행한 값이며 환경에 따라 다를 수 있습니다.

선수 지식

  • 단위 테스트와 목(mock)을 써 본 적 있음

  • 스프링 부트로 API 를 만들어 본 경험

  • JDK 21 · Docker 가 동작하는 PC

이 강의에서 다루지 않는 것

  • JUnit·Mockito 문법 입문

  • 캐시·메시지 큐 설계(Outbox 등)

  • 부하·성능 테스트

  • Kubernetes·컨테이너 운영

안내

이 강의의 음성은 합성 음성(TTS)으로 만들었습니다. 모든 데이터는 교육용 가상 데이터이며, 숫자는 실행 환경에 따라 달라질 수 있습니다.

이런 분들께
추천드려요

학습 대상은
누구일까요?

  • 단위 테스트는 쓰는데 운영에서만 깨지는 버그를 겪은 스프링 백엔드 개발자

  • H2·목으로 만든 테스트 묶음을 진짜 DB·Redis·Kafka 로 옮기고 싶은 팀

  • Testcontainers 를 써 봤지만 느리고 가끔 깨져서 포기했던 분

선수 지식,
필요할까요?

  • 단위 테스트와 목(mock)을 써 본 적 있음

  • 스프링 부트로 API 를 만들어 본 경험

  • JDK 21 · Docker 가 동작하는 PC

안녕하세요
데이터장인입니다.

커리어인증

20년 이상 데이터베이스와 IT 분야에서 경력을 쌓아온 데이터장인입니다. DBA 및 DB Platform 팀 매니저로 데이터베이스 플랫폼을 다루며, MySQL·PostgreSQL·Oracle·MongoDB와 SQL 튜닝, AWS·Terraform·Python을 전문 분야로 삼고 있습니다. 게임·금융·IT 서비스 분야의 경력을 바탕으로 데이터베이스와 클라우드 아키텍처를 설명합니다. 『오라클 실무튜닝 SQL 패턴 학습』과 『Oracle Pro*C 실무프로젝트 활용서』를 출간했으며, AWS Summit 2018·2019와 데이터야 놀자 2020에서 서버리스·데이터베이스 선택·멀티데이터베이스 전략을 발표했습니다. 최근에는 Bedrock LLM을 이용한 슬로우 쿼리 분석·튜닝 권고, DB 스펙 산정 자동화, DB 메타 MCP 서버와 Slack 봇을 통한 조회 흐름을 다루고 있습니다. 개발자를 위한 데이터베이스 자동화와 비개발자를 위한 AI 업무 활용을 각 과정의 대상과 목적에 맞는 실습으로 설명합니다. AI 제안을 그대로 적용하기보다 결과 동일성·실행 계획·관측 조건을 확인하고, 근거가 부족하면 보류하는 판단 기준을 전달합니다. 회사 운영 데이터와 인증값은 강의 자료에 포함하지 않습니다.

더보기

커리큘럼

전체

42개 ∙ (5시간 15분)

해당 강의에서 제공:

수업자료
강의 게시일: 
마지막 업데이트일: 

수강평

아직 충분한 평가를 받지 못한 강의입니다.
모두에게 도움이 되는 수강평의 주인공이 되어주세요!

데이터장인님의 다른 강의

지식공유자님의 다른 강의를 만나보세요!

비슷한 강의

같은 분야의 다른 강의를 만나보세요!

얼리버드 할인 중

월 ₩231,880

5개월 할부 시

20%

₩70,400

₩1,159,399

평생교육이용권 지원 강의