NEW코딩일지 · 11.05코퍼스 메인에 주장 연구실을 세웠다: 사유고2 주장 29만 개를 자동 등록하고 스파크 두 대가 반증 조건까지 검토한다
← 개발로그
·3분

레오폴드 앱 개발로그 · 2화

가설별 지도 11장을 붙였고, 종가 동기화는 한글 인자 하나에 멈췄다

9월 4일 하루에 가설 H01~H11마다 독립 지도를 붙이고, 기간별 상승·하락 순위와 섹터·가설 성과판을 만들었다. 그다음 나흘은 데이터가 멈추는 문제였다. 국내만 갱신되던 종가, 다른 프로젝트의 잠금 파일에 막힌 뉴스, 분해형 한글 인자에 걸린 자동 수집.

▸ Leopold#leopold#treemap#data-freshness#unicode

9월 4일은 화면을 가장 많이 붙인 날이다. 하루에 버전이 0.4.0부터 0.7.1까지 아홉 번 나왔다.

버튼 하나가 지도 하나다

시장 선택에 “레오폴드”를 넣었다. 누르면 가설 H01부터 H11까지 버튼 11개가 나온다. 전체 버튼은 일부러 두지 않았다. 버튼 하나가 그 가설에 걸린 기업만으로 그린 독립 지도 하나다. 버튼마다 기업 수, 미국과 국내 수, 고른 기간의 수익률 중앙값이 붙는다. 같은 날 레오폴드 지도에도 미국과 국내 선택기를 달아 두 시장을 섞지 않게 했다.

뉴스 데스크에는 네 번째 탭 “레오폴드”를 만들었다. H01~H11 태그가 하나라도 붙은 기사는 이 탭으로 모이고, 제목 옆에 “H03 · 반도체 스택” 같은 금색 가설 배지가 붙는다.

지도 아래에는 순위와 성과판을 붙였다. 분류별로 이번 주, 이번 달, 1년 동안 가장 많이 오른 기업과 내린 기업을 다섯 개씩 보여 준다. 실제로 오른 기업만 상승 목록에, 실제로 내린 기업만 하락 목록에 넣는다. 하락한 기업이 없으면 오른 기업으로 자리를 채우지 않고 “하락 종목 없음”이라고 적는다. 1년 수익률의 기준일은 연초가 아니라 최신 가격일과 같은 날짜의 작년이고, 그날이 휴장이면 직전 거래일이다. 일반 지도에서는 12개 섹터의 기간별 수익률 중앙값이, 레오폴드 지도에서는 가설별 성과판이 나온다.

국내 종가가 하루씩 늦었다

같은 날, 국내 장이 끝났는데도 지도에는 전날 종가가 떠 있었다. 레오폴드의 가격 원장은 아침 7시 50분에 갱신되고, 앱의 새로고침은 시가총액만 다시 받고 있었다. 그래서 앱 전용 국내 종가 수집기를 따로 만들었다. 코스피 거래일로 장이 끝난 날을 판별하고, 장중의 덜 끝난 봉은 쓰지 않는다. 장이 끝난 뒤 최신 거래일 종가를 받은 기업이 85%가 안 되면 갱신을 실패로 처리한다. 오래된 데이터가 성공한 척하지 않게 하려는 장치다.

다음 날 보니 이번엔 미국이 9월 3일에 멈춰 있었다. 새 수집기가 국내만 처리하고 있었다. 한국과 미국을 한 수집기로 합쳤다. 미국은 S&P 500의 완료된 거래일을 기준으로, 뉴욕 시각 오후 4시 15분 전에는 당일 봉을 종가로 쓰지 않는다.

뉴스가 멈춘 이유는 다른 프로젝트에 있었다

9월 7일에는 뉴스가 이상했다. 화면 머리에는 9월 7일이 찍혀 있는데, AI 투자 탭의 최신 기사는 9월 5일이었다. 뉴스 셔틀 원장은 9월 4일 낮 이후 갱신되지 않았다.

거슬러 올라가 보니 원인은 AC POST였다. 9월 4일에 남은 실행 잠금 파일이 지워지지 않아, 그 뒤 매일 아침 신문 파이프라인이 “이미 다른 실행이 돌고 있다”며 바로 끝나고 있었다. 신문이 멈추니 그 신문을 나르는 뉴스 셔틀이 멈추고, 그 원장을 읽는 레오폴드 앱도 멈췄다. 화면 쪽에서는 전체 뉴스 중 가장 최신 시각과 파일을 읽었다는 사실만으로 신선하다고 판단하던 표시를 고쳤다. 이제는 탭마다 따로 신선도를 본다.

겉으로 같은 “한국”이 컴퓨터에는 다른 글자였다

9월 8일에는 자동 종가 수집이 아예 돌지 않았다. 구버전 앱의 오류 메시지를 보니, 앱이 수집기에 넘긴 시장 이름 “한국”이 분해형 한글(NFD)이었다. 수집기는 완성형(NFC) “한국”만 받도록 되어 있어서 인자 검사에서 바로 끝났다. 겉으로는 똑같은 두 글자가 컴퓨터에는 다른 문자열이었다. 이 블로그 파일 이름을 영문으로만 쓰는 이유와 같은 문제다.

예약 로직의 구멍도 하나 찾았다. 당일 장 마감 시각 이후에만 확인하는 조건이라, 마감 시각을 놓치고 다음 날 아침에 맥을 열면 전날 거래일을 따라잡지 못했다. 시장 이름은 완성형으로 맞추고 영문 별칭도 받게 했다. 앱은 이제 한글 인자를 보내지 않고, 두 시장 모두 필요한지 스스로 확인하게 했다. 그날 국내 최신 거래일은 9월 7일, 미국은 노동절 휴장이라 9월 4일이었다. 두 시장의 날짜를 같게 맞추지 않는다.

배운 것

화면을 붙이는 데는 하루면 충분했다. 오래 걸린 건 그 화면의 데이터가 언제 것인지를 지키는 일이었다. 남이 모은 데이터를 읽는 앱은 원장이 멈추면 같이 멈추고, 겉보기에는 멀쩡하다. 그래서 출처마다 따로 신선도를 재고, 모자라면 성공이라고 쓰지 않게 했다.

레오폴드 앱 개발로그 · 전 3화

  1. 1화레오폴드 기업 438개를 핀비즈형 지도로 깔고 이틀 만에 맥 앱으로 묶었다
  2. 2화가설별 지도 11장을 붙였고, 종가 동기화는 한글 인자 하나에 멈췄다
  3. 3화시장의 말들, 생태계 지도, 가격 렌즈를 붙였다: 화면은 다섯 개가 됐고 판단은 여전히 사람이 한다