격리 정의 너머로, Spring의 세 전략을 비용과 운영 충실도 축으로 비교하고 트랜잭션 롤백의 함정까지 짚는지를 가른다. "무조건 @Transactional" 같은 단정 답변이 나오면 깊이가 부족하다고 본다.
테스트 격리는 실행 순서나 다른 테스트의 잔여 상태와 무관하게 같은 결과를 내도록 만드는 원칙이다. Spring에서는 컨텍스트 분리(@DirtiesContext), DB 초기화(@Sql/Testcontainers), 트랜잭션 롤백(@Transactional) 세 축을 조합해 달성한다. 어느 하나만 강하게 걸면 비용이 폭주하거나 운영과 달라지므로, 테스트 종류별로 격리 강도를 다르게 가져간다.
flaky 테스트 원인을 추적해 @Transactional에서 Testcontainers + truncate로 옮긴 경험이 있다면 비용/충실도 트레이드오프와 묶을 수 있다
@DirtiesContext 남용으로 CI가 늘어진 걸 슬라이스 테스트로 쪼개 줄인 경험이 있다면 컨텍스트 비용 감각으로 연결할 수 있다
@Async 후속 처리가 롤백되지 않아 테스트가 거짓 양성을 낸 사건이 있다면 트랜잭션 경계 이야기로 자연스럽게 이어진다
테스트 병렬화하면서 DB 충돌이 나 스키마 분리로 옮긴 경험이 있다면 격리와 병렬성의 충돌을 직접 보여줄 수 있다
아직 공개된 답변이 없어요. 첫 공개 답변을 남겨보세요.