대니
danny's blog@dannywon_dev
발행 41 · 대기 77

1인 개발자. 클로드 코드를 팀처럼 굴린다. 매일 겪은 것만 쓴다.

버그와 함정

순위 변동 표시에 스냅샷 테이블을 안 만들었다

매일 순위를 저장해두는 게 나중을 위한 선택 같았는데, 확인해보니 반대였다

「어제보다 몇 계단 올랐나」를 화면에 붙이려면 어제 순위가 어딘가 있어야 한다. 그래서 보통 제일 먼저 떠오르는 건 매일 자정에 그날 순위를 표에 적어두는 방식이다. 조회 한 번이면 비교가 끝나니까.

2026-08-06, 전시 관람 통계 화면에 멜론 차트처럼 순위 변동을 표시하기로 했다. 내가 먼저 방향을 냈다.

"가장 좋은건 매일 스냅샷을 저장하는 방식인데, 나중을 생각한다면 스냅샷으로 가는게 맞지않을까?"

확인 하나에 답이 뒤집혔다

클로드가 답하기 전에 하나를 확인했다. 원천 데이터를 지우는 정책이 있나.

없었다. 스캔 기록은 계속 남고, 각 행에 찍힌 시각이 붙어 있었다.

시각이 남아 있으면 「8월 3일 자정 기준 순위」를 오늘 계산해도 정확히 같은 값이 나온다. 스냅샷은 그걸 미리 굳혀두는 것뿐이다. 원본이 아니라 파생물이다.

그리고 파생물에는 방향이 있다.

  • 원천이 있으면 스냅샷은 언제든 만들 수 있다 — 과거까지 소급해서
  • 스냅샷으로 시작하면 그 이전은 영영 없다 — 첫 저장이 도는 내일까지 화면이 비어 있고, 이미 쌓인 이틀치는 못 쓴다

여기에 두 가지가 더 붙었다. 정해진 시각에 도는 작업이 하루 빠지면 그날 비교가 끊긴다. 이미 세 개가 돌고 있는 상태였다. 그리고 그 구멍을 메우려면 결국 원천에서 다시 계산해야 하는데, 그럴 거면 처음부터 그렇게 하면 된다.

그래서 뭘 바꿨나

테이블을 안 만들었다. 대신 집계 함수 안에서 「오늘 0시 이전까지의 기록」만 걸러 순위를 한 번 더 매기고, 지금 순위와 뺐다.

결과로 이미 쌓여 있던 이틀치로 그 자리에서 변동이 나왔다. 스냅샷으로 갔으면 내일까지 빈 화면을 봤을 것이다.

대신 갈아탈 조건을 세 개 적어 두었다.

  • 저장 기간 정책이 생겨 원천을 지우게 될 때
  • 데이터가 커져 매번 계산하기 버거울 때
  • 순위를 매기는 규칙 자체를 바꿔서 「그때의 순위」를 보존해야 할 때

판정 한 줄

저장하려는 값이 원천에서 다시 만들어지는 것인지 먼저 본다.

다시 만들어진다면 미루기가 공짜다. 필요해진 날 만들면 되고, 그때는 과거까지 채울 수 있다. 반대로 미리 저장하면 그 결정을 시작한 날부터의 데이터만 갖게 된다. 「나중을 위해 지금 쌓아두자」가 오히려 나중을 좁히는 경우가 있다.

← 목록으로