Stats4U 2에서 남은 칸 셋
이 글의 내용
여기 카운터 본 표에는 166,436줄이 있고, 중요해 보이는 칸이 여럿 있습니다. 그 가운데 셋이 lastdomain, firstdomain, userdomain입니다. 데이터가 들어 있습니다:
lastdomain | 15,525줄에서 비어 있지 않음 |
firstdomain | 15,457줄에서 비어 있지 않음 |
userdomain | 2,982줄에서 비어 있지 않음 |
아무것도 그것을 쓰지 않습니다. 코드 어디에도 셋 가운데 하나를 설정하는 문장이 없습니다. 값은 이 서비스의 이전 세대에서 온 것이고, 그것이 멈춘 시점 그대로 얼어 있으며, 그 뒤에 만들어진 모든 줄은 비어 있습니다.
왜 반쯤 채워진 칸이 빈 칸보다 읽기 어려운가
완전히 빈 칸은 죽은 것이 분명합니다. 아무도 그 위에 짓지 않고, 아무도 그것으로 보고하지 않고, 아무도 그것이 무슨 뜻인지 궁리하며 오후를 쓰지 않습니다.
줄의 9%가 채워진 칸은 덫입니다. 때로는 채워지고 때로는 아닌 항목처럼 보이는데, 칸으로서는 지극히 평범한 일입니다. 그것을 발견한 사람은 언제 설정되는지 정하는 규칙이 있으리라고 합리적으로 결론짓고 그 규칙을 찾기 시작합니다. 그런 것은 없습니다.
그리고 낡은 값들은 해를 끼칠 수 없는 잠든 줄에 얌전히 있지 않습니다. lastdomain을 지닌 줄 가운데 1,613개는 올해도 갱신되고 있던 카운터의 것입니다. 십 년 전에 기록된 도메인을 가진 살아 있는 카운터는 현재 도메인을 가진 살아 있는 카운터와 똑같아 보입니다.
더 나쁘게도 데이터가 그럴듯합니다. 도메인이고, 카운터의 도메인처럼 보이며, 그것으로 결합하는 조회는 줄을 돌려줍니다. 이미 지나가 버린 웹에 관한 물음에 답하는 셈입니다.
빠르게 알아보는 법
이름이 아니라 쓰기를 찾으십시오. 칸 이름은 SELECT 목록에도, 스키마 덤프에도, 옛 마이그레이션에도, 주석에도 나타나며, 그 무엇도 아무것도 증명하지 않습니다. 판가름하는 것은 어떤 INSERT나 UPDATE가 그것을 언급하느냐입니다. 그 찾기는 1분이면 되고, 코드를 둘러 읽는 것과 달리 결정적입니다.
두 번째 확인은 데이터 자체입니다. 값을 지닌 가장 새로운 줄이 몇 해 전 것이라면, 코드가 무엇이라고 말하는 듯 보이든 그 칸은 화석입니다.
왜 아직 거기 있는가
칸을 없애는 일은 값싸지만 공짜는 아닙니다. 이 줄 하나하나가 누군가의 카운터이고 일부는 2006년부터 끊임없이 돌아가고 있으며, 그런 표에서 스키마를 바꾸기 전의 안전한 단계는 그저 만들어만 본 것이 아니라 실제로 한 번 되돌려 본 덤프입니다. 그 연습은 그동안 해 두었습니다. 없애는 일 자체가 값어치를 갖기 전까지, 쓰이지 않는 칸 셋은 한순간의 혼란 말고는 아무 값도 치르지 않고, 아래에 적은 주석이 그 한순간마저 없앱니다.
그래서 대신 문서로 남겼습니다. 그 주석을 둘 뻔한 자리는 없습니다 — 이 데이터베이스의 스키마는 돌아가는 데이터베이스에만 있고 저장소의 어떤 파일에도 없습니다 — 그래서 사람이 실제로 걸려 넘어질 자리에 두었습니다. 카운터 줄을 읽는 클래스 안, 바로 그 칸들이 지나가는 자리입니다. 아무도 열지 않는 파일 속 주석은 문서가 아닙니다. 길 위에 놓여야만 덫을 각주로 바꿉니다.