고정된 컬럼 인덱스에 묶인 저장 버튼
데이터 그리드의 저장 버튼이 하드코딩된 컬럼 인덱스를 읽고 있었다. 컬럼 레이아웃이 바뀌자 엉뚱한 컬럼을 저장했다.
데이터 그리드 화면의 저장 버튼이 고정된 컬럼 인덱스에 묶여 있었다. 항상 4번 컬럼을 읽었다.
그리드는 현장에서 작업자가 입력하는 값을 십여 개 컬럼으로 보여주는 화면이었고, 한 교대에 라인 전체에서 수백 번씩 저장이 일어나는 종류였다. 저장은 편집 가능한 컬럼의 값을 되써야 했다. 편집 컬럼이 마침 인덱스 4에 있었고 화면을 처음 만들 때부터 그 자리였기 때문에, 동작했다.
그러다 레이아웃이 바뀌었다 — 왼쪽에 컬럼이 하나 추가되면서 전체가 오른쪽으로 한 칸 밀렸다. 저장은 그대로 인덱스 4를 읽었다. 이제 인덱스 4는 다른 필드였다. 저장은 엉뚱한 컬럼의 값을 썼고, 저장된 숫자가 작업자가 입력한 값과 어긋나기 시작하고 나서야 드러났다.
코드는 레이아웃이 바뀌지 않으리라 가정하고 있었다. 어느 컬럼이 그 필드인지를 물은 적이 없었다. 몇 번째 자리인지를 물었고, 그 자리가 그대로 있을 거라고 믿었다.
저장은 자리 인덱스가 아니라 안정적인 필드 키에 묶는다.
수정은 그게 전부다. 그리드는 각 컬럼의 필드 키를 알고 있다. 키로 읽으면 순서가 바뀌어도 영향이 없다. 자리와 필드가 어긋난 걸 배포 전에 잡아낼 검사는 없었다. 그땐 그 단계가 없었다.