오락실 수정 이력에서 '가격 수정'이라는 설명을 읽었다고 생각해 보자. 가격이 바뀌었다는 것은 알지만 어느 게임의 값이 얼마에서 얼마로 달라졌는지는 여전히 확인해야 한다. 공동 편집이 늘면서 이런 확인을 수정자의 짧은 설명에만 맡기기 어려워졌다. 3월에는 수정 전후 데이터를 비교해 실제 변경 내용을 이력에 담도록 바꿨다.
수정 설명은 작업의 이유를 전하는 데 유용하다. 그러나 '정보 갱신'처럼 짧게 적으면 가격과 함께 수량도 바뀌었는지 알 수 없고, 설명이 없으면 결과 데이터에서 차이를 직접 찾아야 한다. 이용자가 글을 자세히 쓰는지에 따라 검토에 필요한 정보량도 달라지는 방식이었다.
이전 티켓은 “보유 게임 영역 수정”과 작성자가 남긴 설명을 표시했다.
이력은 운영자만 읽는 자료가 아니다. 같은 오락실의 최근 상태를 확인하려는 이용자도 어떤 항목이 달라졌는지 알아야 한다. 설명의 언어나 문장 길이가 달라도 전후 값은 같으므로, 설명을 보완할 수 있는 비교 자료를 서비스가 직접 만들기로 했다.
여기서 비교하는 단위는 이름이나 주소처럼 뜻이 정해진 필드, 그리고 보유 게임처럼 여러 개가 모인 항목이다. 앞서 기본 정보와 영업시간 및 게임 데이터를 각각 나누고, 오락실이 현재 값을 참조하도록 정리해 두었다. 수정 전과 후의 데이터를 읽을 수 있어 이 두 상태를 비교하는 데 활용했다.
변경 전후를 비교해 추가·수정·삭제된 항목을 나눈 이력.
예를 들어 게임 수량을 2대에서 3대로 바꿨다면 이력에는 그 게임과 수량의 전후 값이 남는다. 필드는 바뀐 값을 저장하고, 여러 항목을 가진 영역은 추가와 변경 및 삭제를 나눈다. 수정자가 설명에서 수량 변경을 빠뜨려도 데이터에서 생긴 차이는 확인할 수 있다.
서버는 수정을 반영할 때 해당 영역의 이전 상태와 다음 상태를 연결한다. 이름과 주소는 필드별로, 게임 묶음은 항목별로 비교한다. 그대로인 값까지 새 변경으로 나열하지 않고 차이가 있는 부분을 이력으로 만드는 방식이다.
화면에서는 영역과 항목을 나누어 전후 값을 보여 준다. 비교 결과를 자료로 저장하고 설명 문장은 화면 언어에 맞춰 만들면, 한국어와 영어 및 일본어에서 같은 수정을 읽을 수 있다. 자유롭게 적힌 문장을 자동 번역하거나 그 안에서 변경 사실을 추출하는 과정은 필요하지 않다.
이제 짧은 수정 설명을 읽고도 실제 차이를 함께 확인할 수 있다. 여러 게임을 한 번에 고쳤더라도 추가된 항목과 수정 또는 삭제된 항목을 나누어 검토한다. 잘못된 변경을 발견했을 때는 이전 상태를 읽어 어느 부분을 복원할지도 판단할 수 있다.
다만 전후 비교가 가격이나 주소의 정확성을 증명하지는 않는다. 현장의 자료와 대조하는 과정은 여전히 필요하며, 자유로운 문장에 담긴 모든 의미를 요약할 수도 없다. 데이터 구조가 달라지면 비교와 표시도 함께 고쳐야 한다. 이력에서 차이를 찾는 수고를 줄인 만큼, 검토자는 그 값이 맞는지 확인하는 데 집중할 수 있다.
관련 기록: 뮤즈캣 개발 과정