Skip to content
isdnetworks
Go back

의미의 정본은 코드다

(수정됨)

common_codes 마스터를 다른 시스템에서 옮겨 심는 작업을 일차로 끝냈다. 끝낸 뒤에 원본 프로젝트 셋을 grep -rn 으로 다시 전수로 훑으니 어긋난 것이 다섯 나왔다.

Table of contents

Open Table of contents

배경 — 옮긴 뒤 원본을 다시 훑은 이유

두 가지 방법이 있었는데 옮긴 결과 쪽에서 한 번 더 검토하는 것과 원본 프로젝트 쪽에서 거꾸로 훑는 것이다. 뒤쪽을 골랐다. 이유는 옮기는 동안에는 옮기는 것에 집중하므로 무엇이 빠졌는지가 잘 안 보여서다. 대신 원본 셋의 switch 와 where 를 전부 다시 읽는 하루를 감수했다. 원본 쪽에서 거꾸로 보면 이것은 왜 안 옮겨졌는지가 드러난다.

옮기는 방향과 검증하는 방향을 반대로 잡는 것이 이 재분석의 조건이었다. 같은 방향으로 한 번 더 보면 같은 것만 다시 보게 된다.

원인 — 의미가 반대로 들어간 코드 그룹

BANNER_TARGET 코드 그룹에서 _self 와 _blank 두 값의 뜻이 서로 바뀌어 들어가 있었다. Vue 화면이 실제로 분기하는 조건과 code_name 에 적힌 이름이 반대였다.

이 오류는 아무것도 깨뜨리지 않는데 배너를 누르면 열리기는 열리고 여는 방식만 뒤집힌다. 로그에도 안 남고 예외도 없으므로 사용자가 말해 주기 전에는 알 방법이 없다.

조치 — 문서가 아니라 분기하는 코드

이 값의 의미를 확인한 곳은 설계 문서가 아니라 그 값을 비교해 동작을 가르는 if 조건문이었다. 문서는 낡을 수 있고 code_name 컬럼은 사람이 적은 것이다.

실제로 그 값에 따라 행동이 갈리는 자리가 의미의 정본이다. 이름과 문서와 코드가 어긋날 때 어느 쪽을 믿을지가 여기서 정해졌다.

검증 — 마스터 있음과 하위 있음

세 그룹은 code_groups 에 마스터가 아예 없었고 두 그룹은 마스터는 있는데 common_codes 하위가 하나도 없었다. 앞의 것은 관리 화면의 빈 선택지로만 드러나고 뒤의 것은 마스터 존재만 세면 통과한다.

그래서 점검을 마스터가 없는 그룹과 마스터는 있으나 COUNT(*) = 0 인 그룹으로 나눠서 각각 셌다. 하나의 조회로 둘을 함께 세면 뒤쪽이 통과로 잡힌다.

주의 — 이름과 컬럼 목록의 어긋남

한 그룹은 원본 셋 모두에서 쓰는 이름과 다르게 옮겨져 있었는데 옮기면서 더 명확해 보이는 이름으로 바꾼 것으로 보였다. 이름은 사용처를 따르는 것이므로 임의로 고치면 그 뒤의 대조가 전부 어긋난다.

common_codes 의 CREATE TABLE 에는 name_en 같은 다국어 이름 컬럼이 있는데 INSERT 문에는 그 컬럼들이 빠져 있었다. 정의의 컬럼 목록과 적재의 컬럼 목록을 나란히 놓고 봐야 잡히는 종류였다.

정리


Share this post on:

Previous Post
범위를 적고 시작하는 스윕
Next Post
중복되는 말단 코드