레오폴드 앱 개발로그 · 1화
레오폴드 기업 438개를 핀비즈형 지도로 깔고 이틀 만에 맥 앱으로 묶었다
9월 2일, 레오폴드가 모아 둔 기업과 근거를 한 장의 시장 지도로 보는 웹 앱을 만들었다. 다음 날 macOS 앱으로 묶고, 12개 대분류와 37개 세부 업종, 시가총액 면적, 2,522건짜리 뉴스 데스크까지 붙였다. 원본은 읽기만 한다.
레오폴드 앱의 정식 이름은 AI Supercycle Observatory다. Leopold가 모아 둔 기업 지도, 가격 원장, 근거, 뉴스를 읽어 와서 한 장의 시장 지도와 뉴스 데스크로 보여 주는 macOS 앱이다. 원본은 고치지 않는다. 이 연재는 9월 2일부터 29일까지 이 앱이 웹 화면 하나에서 다섯 화면짜리 앱이 된 기록이다. 근거는 앱 저장소의 인수인계 기록이다.
Leopold 개발로그는 가설을 세우고 추적하는 쪽 이야기였다. 이쪽은 그 데이터를 매일 열어 보는 창을 만든 이야기다.
첫날: 438개 기업을 타일로 깔았다
9월 2일, 빈 폴더에서 시작했다. 미리 써 둔 개발 제안서와 전에 만든 AI 산업 네트워크 원형을 참고 자료로 읽고, Node.js로 정적 웹 앱과 데이터 생성·검증 구조를 만들었다. 레오폴드의 한국·미국 438개 기업과 기업·가설 연결 638개를 읽기 전용으로 가져온다.
화면은 핀비즈의 시장 지도처럼 기업 하나가 타일 하나다. 색은 등락률, 면적은 기업 크기다. 시장, 가설, 관련성, 검색, 관심 종목으로 거르고, 타일을 누르면 그 기업에 연결된 근거가 옆 패널에 열린다.
다음 날: 맥 앱이 됐다
9월 3일에 macOS 앱으로 묶었다. AppKit 창 안에 WebKit을 띄우고, 앱 전용 주소 체계로 로컬 파일을 읽는다. 작업 폴더의 최신 데이터를 먼저 읽고, 없으면 앱에 넣어 둔 스냅샷을 쓴다. 데이터 갱신, 검색, 새로고침 단축키를 달았다. 기사 링크를 누르면 앱 화면을 덮지 않고 기본 브라우저로 연다.
같은 날 지도를 두 단계로 다시 짰다. 처음엔 인프라 사이클 8개로만 나뉘었는데, 그 위에 12개 대분류와 37개 세부 업종을 얹었다. 첫 화면은 대분류 전체 지도이고, 대분류를 누르면 세부 업종 지도로 들어간다. 시장은 국내와 미국 둘만 두고, 한 지도에 섞지 않는다.
타일 면적도 바꿨다. 활성 기업 435개의 시가총액을 받아 면적으로 썼는데, 시가총액을 그대로 쓰면 초대형 기업 몇 개가 화면 대부분을 차지한다. 그래서 기본값을 “상징 시총”으로 바꿨다. 시가총액의 네제곱근으로 면적을 정해 순서는 지키고 격차는 줄인다. 실제 비율로 보는 옵션은 남겼다. 예전 설정이 새 기본값을 가리지 않게 설정 버전도 올렸다.
같은 날: 뉴스 데스크
지도 옆에 뉴스 화면을 붙였다. 새로 크롤링하지 않고, 이미 돌고 있는 원장 세 곳을 합친다. 레오폴드의 최근 30일 피드, Hermes의 뉴스 셔틀, 중국 AI 원장이다. 그날 스냅샷은 2,522건이었다. 주소에 붙은 추적용 꼬리를 떼고 같은 기사는 하나로 묶었다. 기사마다 여덟 개 분야, AI와의 관련성, 레오폴드 가설 태그, 관찰 기업 언급을 붙였다.
같은 날 상위 탭을 AI 투자, AI 연구 및 활용, 중국 AI 셋으로 나누고, 출처와 분야 버튼은 그 탭에 실제로 있는 값만 보이게 했다. 앱이 켜져 있으면 12시간마다 뉴스 원장을 조용히 다시 읽는다.
배운 것
이틀 동안 화면은 빠르게 늘었지만 지킨 원칙은 하나였다. 앱은 레오폴드의 원본을 읽기만 한다. 지도도 뉴스도 다른 파이프라인이 이미 모아 둔 것을 다시 보여 줄 뿐이다. 덕분에 앱이 잘못돼도 원장은 다치지 않는다. 대신 원장이 멈추면 앱도 같이 멈춘다는 걸 2화에서 겪는다.