응답 데이터
| 응답 id | 응답 시간 | 집계 여부 |
|---|---|---|
| 1 | 13:59:53 | O |
| 2 | 13:59:54 | O |
| 3 | 13:59:55 | O |
| 4 | 13:59:56 | O |
| 5 | 13:59:57 | X |
| 6 | 13:59:59 | X |
스케줄링
스케줄러 동작 시간
14:00:00 스케줄러
집계 데이터 범위 (응답 시간 기준)
13:59:50 ~ 14:00:00
실제 집계된 응답 데이터 id
[1, 2, 3, 4]
응답 데이터의 트랜잭션 커밋 시점과 스케줄러 동작 시점 사이의 경합 상태(race condition) 발생.

응답 데이터 처리시간이 길어질 때, 트랜잭션이 지연되며 응답 데이터가 commit되지 않는 상태가 길어짐
13:59:57에 생성된 응답 데이터가 실제 응답 시간은 13:59:59로 기록.
응답 시각을 설문의 응답 시간(트랜잭션 시작 시간)이 아닌, DB의 커밋 시각을 기록하여 모든 데이터가 스케줄러의 조회 범위에 포함되도록 시도
TransactionSynchronization 활용
Hibernate 이벤트 리스너 사용