
백엔드
JUnit5에 병렬화를 도입한 이야기 - 클래스 단위
두줄요약
JUnit5 Vintage 엔진에 클래스 단위 병렬 실행을 도입한 과정을 설명했습니다. ForkJoinPool 대신 fixed thread pool과 CompletableFuture를 사용해 5.12 버전에 반영했습니다.
핵심 내용
- JUnit5 Vintage 엔진에 클래스 단위 병렬 실행을 도입한 과정
- Jupiter 엔진과 달리 Vintage 엔진에는 기본 병렬 실행 기능이 없어 순차 실행 구조였던 점
- 메인테이너 피드백을 반영해 ForkJoinPool 대신 fixed thread pool과 CompletableFuture 기반 비동기 실행으로 전환한 점
- JUnit5 5.12 버전부터 해당 기능을 사용할 수 있다는 안내
구조와 흐름
- JUnit Platform, TestEngine, Jupiter, Vintage 역할 구분
- 테스트 요소를 반복문으로 순차 처리하던 기존 실행 흐름
- RunnerExecutor 호출을 병렬화 대상으로 선정한 기준
선택 이유
- ForkJoinPool은 하위 작업 분할 구조에서 효과적이지만, 클래스 단위 독립 작업에는 이점이 제한적이라는 판단
- 고정 크기 스레드 풀로 안정적인 병렬 실행 구성
- 메서드 단위 병렬화가 더 유리할 수 있다는 추가 제안과 확장 가능성
적용해볼 점
- 테스트 실행 구조가 독립 작업인지, 분할 작업인지에 따라 스레드 풀 전략 조정
- CompletableFuture와 ExecutorService로 병렬 실행과 종료 처리를 명확히 분리
- 오픈소스 기여 시 메인테이너 피드백을 반영해 설계 재검토
