- Published on
결정론적 시뮬레이션 테스트(DST)는 클럭, 스레드 인터리빙, 난수처럼 비결정성이 흘러 들어오는 출처를 시뮬레이터 안에 가두어, 재현이 안 되던 heisenbug를 시드 하나로 다시 불러올 수 있게 만드는 기법입니다. 2026년 3월 Aiven은 Kafka의 Diskless Topics 구현체를 Antithesis에 넣고 약 2,200 논리 시간을 돌렸고, 결과는 버그 0건이었습니다. 정작 버그는 대조군에서 나왔습니다 — 검증 삼아 돌린 업스트림 Apache Kafka에서 KAFKA-19880, 즉 멱등 프로듀서를 켜도 프로듀서 에폭의 첫 배치가 순서를 어긴 채 수용될 수 있다는 이슈가 나왔고, 보고자는 그걸 결정론적 유닛 테스트로 축소해 냈습니다. 이 글은 DST가 실제로 무엇을 하는지, Aiven의 셋업과 불변식, 그 버그의 정확한 메커니즘, 그리고 정직한 한계 — 상태 공간 탐색이 멈추는 지점, 외부 의존성을 모킹해야 한다는 제약, 상용 제품이라는 점, 무엇보다 "버그 0건"이 무엇을 증명하고 무엇을 증명하지 않는지 — 를 정리합니다. 덤으로, 그 이슈가 8개월째 Open으로 남아 있는 이유가 왜 도구의 한계가 아니라 사람의 문제인지도 다룹니다.