매핑이 없다는 오류가 육백 건 넘게 났는데 특정 코드가 안 채워져 있어서였다. 수집 명령이 있으니 돌리면 될 것 같아서 돌렸는데 하나도 늘지 않았다.
Table of contents
Open Table of contents
수집 명령을 돌려도 안 늘어난 값
수집 코드를 열어 외부에서 무엇을 받아 무엇을 저장하는지 봤다. 외부가 주는 것은 한 종류뿐이었다.
내가 필요한 종류는 목록에 아예 들어 있지 않았다. 명령을 몇 번 돌려도 없는 것이 생기지는 않는다.
저장 코드의 고정값이 신호였다
저장하는 자리를 보니 구분 컬럼에 고정 문자열을 그대로 넣고 있었다. 응답에서 읽어 오는 값이 아니라 코드에 박힌 값이었다.
그 자리에 고정값이 들어 있다는 것은 외부가 그 구분을 안 준다는 뜻이다. 저장 코드의 하드코딩은 대개 상류가 그 값을 주지 않는다는 신호다.
유일한 출처였던 시드
그런데 다른 종류의 값들이 데이터베이스에는 들어 있었다. 어디서 왔는지 찾아보니 시드 파일에 수동으로 적혀 있었다.
누군가 담당처에서 목록을 받아 손으로 넣은 것이고 그것이 유일한 출처였다. 그동안 수집 명령을 어떻게 고치면 이 값도 가져올지를 고민한 것이 왜 안 풀렸는지가 여기서 설명됐다.
자동화 경로가 없는 데이터의 실무 경로
출처가 없는 것은 자동화할 수 없으므로 실무 경로를 대신 정했다. 시드로 이미 들어온 수천 건 중에서 맞는 것을 골라 매핑을 넣으면 대부분 해결됐다.
목록에 없는 것이 필요하면 담당처에서 받아 시드에 추가한다. 둘 다 사람이 하는 일이고 자동 경로가 없다는 것 자체를 설계 문서에 못 박았다.
없다를 확인하는 방법
이 값이 어디서 오는지를 찾을 때는 그 컬럼에 값이 들어가는 코드를 전부 찾는 방식을 썼다. 수집과 시드와 마이그레이션과 관리 화면까지 넣을 수 있는 자리를 다 본다.
이 경우 시드뿐이었으므로 자동 경로가 없다는 것이 확정됐다. 없다는 결론은 있을 수 있는 자리를 전부 봤을 때만 성립하고 한두 군데만 보고 내리면 그것은 추측이다.
정리
- 수집 명령을 돌려도 안 늘어나는 값이 있다
- 외부가 안 주는 것은 명령을 고쳐도 오지 않는다
- 저장 코드의 고정값은 상류가 그 값을 안 준다는 신호다
- 값이 있는데 수집이 아니면 시드나 수동 경로에서 온 것이다
- 출처가 없으면 자동화 경로를 찾는 시도 자체가 무의미하다
- 실무 경로를 적재된 것 고르기와 사람이 받아 추가하기로 나눈다
- 자동 갱신 대상이 아님을 설계 문서에 적는다
- 없다는 결론은 있을 수 있는 자리를 전부 봐야 성립한다