공통 코드 마스터를 다른 시스템에서 옮겨 심는 작업을 일차로 끝냈다. 끝낸 뒤에 원본 프로젝트 셋을 다시 전수로 훑으니 어긋난 것이 다섯 나왔다.
Table of contents
Open Table of contents
옮긴 뒤 원본을 다시 훑은 이유
옮기는 동안에는 옮기는 것에 집중하므로 무엇이 빠졌는지가 잘 안 보인다. 끝난 뒤에 원본 쪽에서 거꾸로 보면 이것은 왜 안 옮겨졌는지가 드러난다.
옮기는 방향과 검증하는 방향을 반대로 잡는 것이 이 재분석의 조건이었다. 같은 방향으로 한 번 더 보면 같은 것만 다시 보게 된다.
의미가 반대로 들어간 코드 그룹
배너 링크를 여는 방식을 정하는 코드 그룹에서 두 값의 뜻이 서로 바뀌어 들어가 있었다. 화면 코드가 실제로 분기하는 조건과 데이터베이스에 적힌 이름이 반대였다.
이 오류는 아무것도 깨뜨리지 않는데 배너를 누르면 열리기는 열리고 여는 방식만 뒤집힌다. 로그에도 안 남고 예외도 없으므로 사용자가 말해 주기 전에는 알 방법이 없다.
문서가 아니라 분기하는 코드
이 값의 의미를 확인한 곳은 설계 문서가 아니라 그 값을 비교해 동작을 가르는 조건문이었다. 문서는 낡을 수 있고 데이터베이스의 이름 컬럼은 사람이 적은 것이다.
실제로 그 값에 따라 행동이 갈리는 자리가 의미의 정본이다. 이름과 문서와 코드가 어긋날 때 어느 쪽을 믿을지가 여기서 정해졌다.
마스터 있음과 하위 있음
세 그룹은 마스터가 아예 없었고 두 그룹은 마스터는 있는데 하위 코드가 하나도 없었다. 앞의 것은 관리 화면의 빈 선택지로만 드러나고 뒤의 것은 마스터 존재만 세면 통과한다.
그래서 점검을 마스터가 없는 그룹과 마스터는 있으나 하위가 0인 그룹으로 나눠서 각각 셌다. 하나의 조회로 둘을 함께 세면 뒤쪽이 통과로 잡힌다.
이름과 컬럼 목록의 어긋남
한 그룹은 원본 셋 모두에서 쓰는 이름과 다르게 옮겨져 있었는데 옮기면서 더 명확해 보이는 이름으로 바꾼 것으로 보였다. 이름은 사용처를 따르는 것이므로 임의로 고치면 그 뒤의 대조가 전부 어긋난다.
하위 코드 테이블의 정의에는 다국어 이름 컬럼이 있는데 적재 문장에는 그 컬럼들이 빠져 있었다. 정의의 컬럼 목록과 적재의 컬럼 목록을 나란히 놓고 봐야 잡히는 종류였다.
정리
- 옮기는 방향과 검증하는 방향을 반대로 잡는다
- 옮기는 중에는 빠진 것이 안 보인다
- 공통 코드의 의미는 그 값을 분기하는 코드에 있다
- 문서도 이름 컬럼도 정본이 아니다
- 의미가 반대면 오류 없이 기능만 뒤집힌다
- 마스터 존재와 하위 존재를 따로 센다
- 옮기면서 이름을 임의로 고치지 않는다
- 정의의 컬럼 목록과 적재의 컬럼 목록을 대조한다