반응형 스케줄러를 다시 설계한 이유

서도현

1.3까지 루프킷의 스케줄러는 갱신을 발견한 순서대로 처리했습니다. 대부분의 화면에서는 문제가 없었지만, 하나의 이벤트가 여러 상태를 연달아 바꾸면 파생 값이 중간 상태를 한 번 보고 계산되는 경우가 있었습니다.

무엇이 문제였나

장바구니에서 수량과 총액을 함께 바꾸는 코드가 대표적이었습니다. 수량이 먼저 반영되면 총액 파생 값이 옛 단가로 한 번 계산되고, 곧바로 다시 계산됩니다. 결과는 맞지만 중간에 잘못된 값이 화면에 스치고, 이펙트는 두 번 실행됩니다.

어떻게 바꿨나

이제 갱신은 깊이 순으로 정렬된 큐에 들어가고, 같은 틱 안의 변경은 한 번에 비워집니다. 파생 값은 자신이 의존하는 모든 상태가 확정된 뒤에만 계산됩니다. 이 규칙 덕분에 중간 상태는 관측되지 않고, 이펙트도 틱당 한 번만 실행됩니다.

남은 것

큐를 비우는 시점을 사용자가 조정할 수 있게 열어 둘지는 아직 결정하지 않았습니다. 지금은 기본 동작만으로 충분하다고 보고, 실제 요청이 쌓이면 다시 다루겠습니다.