Skip to content
isdnetworks
Go back

자동으로 채워지지 않는 데이터

(수정됨)

MAPPING_NOT_FOUND 오류가 육백 건 넘게 났는데 coin_master.network 가 안 채워져 있어서였다. CoinSyncJob 수집 잡이 있으니 돌리면 될 것 같아서 돌렸는데 하나도 늘지 않았다.

Table of contents

Open Table of contents

증상 — 수집 명령을 돌려도 안 늘어난 값

CoinSyncJob 을 열어 시세 제공사에서 무엇을 받아 무엇을 저장하는지 봤다. 외부가 주는 것은 symbol 과 name 뿐이었다.

내가 필요한 network 는 응답 목록에 아예 들어 있지 않았다. 잡을 몇 번 돌려도 없는 것이 생기지는 않는다.

원인 — 저장 코드의 고정값이 신호였다

저장하는 자리를 보니 network 컬럼에 "MAINNET" 고정 문자열을 그대로 넣고 있었다. 응답에서 읽어 오는 값이 아니라 코드에 박힌 값이었다.

그 자리에 고정값이 들어 있다는 것은 외부가 그 구분을 안 준다는 뜻이다. 저장 코드의 하드코딩은 대개 상류가 그 값을 주지 않는다는 신호다.

검증 — 유일한 출처였던 시드

그런데 다른 코인의 network 값들이 MariaDB 에는 들어 있었다. 어디서 왔는지 grep -rn 'network' src/main/resources/ 로 찾아보니 data.sql 시드 파일에 수동으로 적혀 있었다.

누군가 상장 담당에게서 목록을 받아 손으로 넣은 것이고 그것이 유일한 출처였다. 그동안 CoinSyncJob 을 어떻게 고치면 이 값도 가져올지를 고민한 것이 왜 안 풀렸는지가 여기서 설명됐다.

조치 — 자동화 경로가 없는 데이터의 실무 경로

두 가지 방법이 있었다. 다른 시세 제공사 API 를 하나 더 붙여 network 를 받아오는 것과, 출처가 없다는 것을 받아들이고 실무 경로를 대신 정하는 것이다. 뒤쪽을 골랐다. 이유는 추가 제공사의 코인 목록이 우리 상장 목록과 안 맞아 결국 사람이 대조해야 하기 때문이다. 대신 상장할 때마다 손이 한 번 가는 것을 감수했다.

data.sql 로 이미 들어온 수천 건 중에서 맞는 것을 골라 매핑을 넣으면 대부분 해결됐다. 목록에 없는 것이 필요하면 상장 담당에게서 받아 시드에 추가한다. 둘 다 사람이 하는 일이고 자동 경로가 없다는 것 자체를 설계 문서에 못 박았다.

없다를 확인하는 방법

이 값이 어디서 오는지를 찾을 때는 그 컬럼에 값이 들어가는 코드를 전부 찾는 방식을 썼다. CoinSyncJob 과 data.sql 과 Flyway 마이그레이션과 관리 화면까지 넣을 수 있는 자리를 다 본다.

이 경우 시드뿐이었으므로 자동 경로가 없다는 것이 확정됐다. 없다는 결론은 있을 수 있는 자리를 전부 봤을 때만 성립하고 한두 군데만 보고 내리면 그것은 추측이다.

정리


Share this post on:

Previous Post
처리 단계의 모듈 구성
Next Post
로그의 경로를 바꾸면 없던 일이 생긴다