성적 집계 배치의 설정을 batch_config 한 표에 담고 있었는데 언제 어떤 설정으로 돌았는지를 알 방법이 없었다. 설정을 바꾸면 그 자리를 덮어쓰므로 이전 값이 남지 않았다.
Table of contents
Open Table of contents
증상 — 한 표에 담긴 두 가지
이 표는 threshold 같은 지금 설정이 무엇인지를 담는 동시에 last_run_at 과 last_result 로 마지막 실행 결과도 담고 있었다. 두 가지가 한 행에 섞여 있으니 어느 쪽을 갱신해도 다른 쪽이 함께 낡는다.
문제가 났을 때 그때 어떤 설정으로 돌았는지를 묻게 되는데 그 답이 어디에도 없었다. 지금 설정을 보고 짐작하는 수밖에 없었고 그 사이에 설정이 바뀌었으면 틀린다.
원인 — 성격이 다른 두 기록
정리해 보니 설정과 실행 기록은 바뀌는 빈도부터 달랐다. 설정은 몇 달에 한 번 바뀌고 실행 기록은 하루에도 여러 번 쌓인다.
남겨야 할 것도 달라서 설정은 changed_by 와 reason 처럼 누가 왜 바꿨는지가 중요하고 실행은 started_at·elapsed·processed 처럼 언제 얼마나 걸려서 무엇을 처리했는지가 중요하다. 성격이 다른 것을 한 표에 두면 어느 쪽에도 안 맞는 구조가 된다.
조치 — 실행할 때 그때 설정을 남긴다
한 표에 이력 컬럼을 더하는 것과 표를 나누는 것 두 가지 방법 중 뒤쪽을 골랐다. 이유는 성격이 다른 것을 한 표에 두면 어느 쪽에도 안 맞는 구조가 돼서다. 그래서 batch_config 와 batch_config_history 와 batch_runs 로 나눴다. 그리고 batch_runs 에 그때 쓰인 설정 값을 config_snapshot 으로 함께 남기게 했다.
이렇게 하면 나중에 설정이 바뀌어도 그 실행이 어떤 값으로 돌았는지가 그대로 남는다. 실행 기록만 열어도 그 회차의 조건이 나오므로 다른 표를 안 봐도 된다.
결과 — 나뉜 표와 갈린 조회
표가 나뉘고 나니 조회도 자연스럽게 갈렸는데 지금 어떻게 돌고 있는지를 보는 조회와 무엇이 언제 바뀌었는지를 보는 조회가 서로 다른 곳을 본다. 전에는 같은 표를 조건만 달리해서 조회하고 있었다.
화면에서도 두 가지를 나누어 보여 주게 바꿨다. 한 화면에 섞어 놓으면 지금 상태를 보러 온 사람이 이력까지 훑게 된다.
설정 — 보존 기간과 원인 추적
보존 기간도 다르게 뒀는데 batch_runs 는 양이 많아서 90일이 지나면 정리하고 batch_config_history 는 양이 적어서 계속 남긴다. 한 표일 때는 어느 한쪽에 맞출 수밖에 없었다.
나눈 뒤에 실제로 도움이 된 것은 실행 기록이 쌓이면서 처리 시간의 흐름이 보인 것이었다. 그리고 어느 날부터 결과가 달라진 원인을 batch_config_history 에서 그 날짜의 threshold 변경으로 바로 찾았다.
정리
- 설정과 실행 기록은 성격이 다르다
- 바뀌는 빈도도 남길 것도 다르다
- 한 표에 두면 마지막 것만 남는다
- 지금 설정과 바뀐 이력과 실행 기록을 나눈다
- 실행할 때 그때 설정을 같이 남긴다
- 표가 나뉘면 조회도 갈린다
- 보존 기간을 다르게 둔다
- 설정 이력이 결과가 달라진 원인을 알려 준다