그알것 — 그럼에도 알아야 할 것들
홈질문커뮤니티
로그인
그알것 — 그럼에도 알아야 할 것들

Service

  • 홈
  • 소개
  • 질문
  • 커뮤니티

My

  • 내 워크스페이스
  • 저장한 질문
  • 작성한 답변

Policy

  • 이용약관
  • 개인정보처리방침
  • 문의

© 2026 그알것 · What Still Matters

질문 목록Testing
Testing

테스트 격리란 무엇이며 Spring에서 어떻게 보장하나요?

실무5/5
설계4/5
인간4/5
기초2/5

면접관의 질문 의도

격리 정의 너머로, Spring의 세 전략을 비용과 운영 충실도 축으로 비교하고 트랜잭션 롤백의 함정까지 짚는지를 가른다. "무조건 @Transactional" 같은 단정 답변이 나오면 깊이가 부족하다고 본다.

큐레이션 답변

학습 자료

테스트 격리는 실행 순서나 다른 테스트의 잔여 상태와 무관하게 같은 결과를 내도록 만드는 원칙이다. Spring에서는 컨텍스트 분리(@DirtiesContext), DB 초기화(@Sql/Testcontainers), 트랜잭션 롤백(@Transactional) 세 축을 조합해 달성한다. 어느 하나만 강하게 걸면 비용이 폭주하거나 운영과 달라지므로, 테스트 종류별로 격리 강도를 다르게 가져간다.

좋은 답변 구조

  1. 01테스트 격리가 깨졌을 때 CI에서 어떤 증상이 나오는지부터 묘사한다
  2. 02컨텍스트 분리·DB 초기화·트랜잭션 롤백 세 전략을 비용 축으로 비교한다
  3. 03트랜잭션 롤백이 운영과 달라지는 경계(@Async, REQUIRES_NEW, 커밋 후 훅)를 짚는다
  4. 04단위/슬라이스/통합 테스트 층별로 격리 강도를 다르게 가져가는 기준을 제시한다

자주 실수하는 포인트

@Transactional 롤백 테스트가 통과했다고 운영 동작도 같다고 단정한다
느려진 CI 원인을 안 보고 모든 통합 테스트에 @DirtiesContext를 붙인다
@Async·별도 스레드 테스트에서도 메인 트랜잭션 롤백이 적용된다고 착각한다
병렬 실행을 켜면서 스키마/DB는 한 개로 공유한다

실무 맥락

  • 통합 테스트가 늘어나면서 CI 시간이 15분을 넘어가기 시작한 환경
  • 한 PR에서는 통과한 테스트가 다른 PR에서 간헐적으로 깨지는 flaky 상황
  • @Async/이벤트 리스너로 후속 처리가 갈라지는 도메인의 통합 테스트
  • 병렬 빌드를 켜면서 공유 DB 한 개를 여러 잡이 동시에 쓰는 파이프라인

본인 경험에 녹이는 힌트

flaky 테스트 원인을 추적해 @Transactional에서 Testcontainers + truncate로 옮긴 경험이 있다면 비용/충실도 트레이드오프와 묶을 수 있다

@DirtiesContext 남용으로 CI가 늘어진 걸 슬라이스 테스트로 쪼개 줄인 경험이 있다면 컨텍스트 비용 감각으로 연결할 수 있다

@Async 후속 처리가 롤백되지 않아 테스트가 거짓 양성을 낸 사건이 있다면 트랜잭션 경계 이야기로 자연스럽게 이어진다

테스트 병렬화하면서 DB 충돌이 나 스키마 분리로 옮긴 경험이 있다면 격리와 병렬성의 충돌을 직접 보여줄 수 있다

커뮤니티 인기 답변

전체 0개

아직 공개된 답변이 없어요. 첫 공개 답변을 남겨보세요.

관련 꼬리 질문

Q1단위·슬라이스·통합 테스트에서 격리 강도를 어떤 기준으로 다르게 가져가나요
Q2@Transactional 롤백으로 잡히지 않는 케이스를 예로 들고 어떻게 대안을 설계했나요
Q3테스트 병렬 실행을 켤 때 DB 격리는 어떻게 설계하나요
Q4Testcontainers 기반 통합 테스트의 실행 시간을 줄이기 위해 어떤 전략을 썼나요
아직 답을 쓰지 않았어요.
큐레이션 답변과 다른 사람 답변을 보고, 자기 언어로 답을 정리해보면 학습 효과가 가장 큽니다.
목차
  • 01면접관의 질문 의도
  • 02큐레이션 답변
  • 03좋은 답변 구조
  • 04자주 실수하는 포인트
  • 05실무 맥락
  • 06본인 경험에 녹이는 힌트
  • 07커뮤니티 인기 답변준비중
  • 08관련 꼬리 질문