투자 패러다임 지도를 실제 데이터로 옮기며 배운 것
시작
처음의 요청은 시기별 투자 섹션 패러다임의 변화를 보로노이 트리맵으로 보여주는 웹사이트를 만드는 것이었다. 핵심은 복잡한 대시보드가 아니었다. 사용자는 처음부터 거추장스러운 설명보다, 패러다임 변화가 한눈에 들어오는 시각적 장면을 원했다.
그래서 첫 화면은 방법론을 짧게 남기고 보로노이 트리맵을 중심에 두는 방향으로 잡았다. 다만 곧 중요한 질문이 이어졌다. “지금 실제 데이터를 기반으로 한건가?” 이 질문이 작업의 성격을 바꿨다. 디자인 프로토타입에서 실제 데이터 파이프라인을 가진 에이전트로 넘어가야 했다.
처음 보였던 문제
처음에는 Google Trends에서 투자 관련 Top 5를 뽑아오면 될 것처럼 보였다. 하지만 실제로는 Google Trends가 “투자 패러다임 Top 5”를 그대로 주지 않는다. 전체 검색어 Top 5는 투자와 무관한 대중 검색어가 섞이고, 관련 주제나 관련 검색어도 특정 종목, 거래소, 일회성 키워드가 섞인다.
그래서 문제는 단순 수집이 아니라 분류와 정규화에 가까웠다. 무엇을 후보 패러다임으로 볼 것인지, 검색어와 패러다임 라벨을 어떻게 연결할 것인지, 서로 다른 배치의 Google Trends 점수를 어떻게 비교할 것인지가 핵심이 됐다.
초기 구현은 후보 패러다임 사전을 만들고, investing을 공통 앵커로 넣어 배치별 점수를 보정하는 방식이었다.
1
2
3
batch = investing + 후보 4개
normalized_score = 후보 점수 / investing 평균
weekly_top5 = 주별 normalized_score 상위 5개
이 구조는 Google Trends의 5개 검색어 비교 제한을 우회하면서도, 완전히 임의의 샘플 데이터에 머무르지 않게 해주는 첫 번째 현실적 타협이었다.
질문이 바꾼 판단
작업 중 사용자는 디자인에 대해서도 분명한 방향을 제시했다. 보로노이 차트는 둥근 유기적 형태보다 사각형이어야 했고, 슬라이더를 움직일 때 기존 셀이 갑자기 사라지고 다른 이미지가 나오는 것처럼 보이면 안 됐다. 또한 숫자가 좌상단에서 날아오는 듯한 애니메이션은 어색하다고 짚었다.
이 지적 덕분에 시각화의 기준이 더 선명해졌다. 중요한 것은 화려한 애니메이션이 아니라 “같은 공간 안에서 비중이 변한다”는 감각이었다. 그래서 사각형 보로노이 영역으로 바꾸고, 라벨과 숫자는 튀지 않게 고정하며, 셀의 면적 변화와 진입/퇴장만 부드럽게 이어지도록 조정했다.
이후 더 큰 판단 변화는 Google Trends 수집에서 왔다. pytrends 호출이 계속 429로 막혔고, 인앱 브라우저로 직접 Google Trends에 접근해 CSV export를 시도했을 때도 핵심인 시간 흐름 카드가 Oops! Something went wrong 상태로 실패했다. 단일 검색어, 5년 기본 범위, 영어 UI까지 줄여도 마찬가지였다.
이때 결론은 분명했다. 문제는 코드 한 줄의 버그가 아니라, Google Trends timeline 데이터 접근 자체가 이 실행 환경에서 안정적이지 않다는 점이었다.
핵심 인사이트
이번 작업에서 가장 선명해진 것은 “실제 데이터 기반”이라는 말의 무게였다. 화면에 실제처럼 보이는 숫자를 넣는 것은 쉽다. 하지만 실제 데이터 기반이라고 말하려면 데이터가 어떻게 들어왔고, 어떤 제한을 받았고, 실패했을 때 무엇을 대체하지 말아야 하는지가 함께 정리돼야 한다.
Google Trends는 특히 이 점이 중요했다. 비공식 pytrends는 빠르게 시도할 수 있지만 운영 데이터 수집의 기반으로 삼기에는 취약하다. 브라우저 export도 사람이 직접 성공시키면 좋은 우회로가 되지만, 자동화 환경에서는 같은 실패를 만날 수 있다.
그래서 구조는 세 갈래가 됐다.
1
2
3
1. pytrends 수집: 빠른 자동 시도, 하지만 429 가능
2. CSV import: 사용자가 직접 받은 공식 export를 안정적으로 변환
3. 공식 API 또는 서드파티 API: 장기 운영을 위한 후보
이 구분이 생기면서 에이전트의 역할도 달라졌다. 에이전트는 무조건 Google에서 긁어오는 존재가 아니라, 신뢰 가능한 입력 경로를 여러 개 두고 같은 출력 포맷으로 모으는 파이프라인이 됐다.
수행한 일
프로젝트에는 보로노이 트리맵 웹사이트와 주간 데이터 파이프라인이 만들어졌다. 화면은 레퍼런스 이미지처럼 어두운 배경, 정사각형 차트, 강한 원색 셀, 중앙 라벨과 비율 중심으로 정리됐다. 슬라이더는 연도 단위가 아니라 주간 데이터 구조를 전제로 바뀌었다.
수집 쪽에서는 collect-invest-trends 명령을 만들고, 후보 패러다임과 검색어를 별도 JSON으로 분리했다. Google Trends가 직접 막히는 상황에 대비해 import-trends-csv 명령도 추가했다. 사용자가 Google Trends에서 CSV를 내려받으면, 이 파일들을 weekly-paradigms.json으로 변환해 웹사이트가 실제 데이터 기반으로 읽을 수 있게 했다.
또한 커밋 단계에서는 프로젝트 범위를 다시 확인했다. invest-paradigm 자체는 이미 커밋되어 있었고, 작업 트리에 남아 있던 변경은 aemo 쪽이었다. 그래서 현재 프로젝트 커밋에 다른 변경을 섞지 않는 것으로 정리했다.
결론
오늘의 작업은 보로노이 차트를 예쁘게 만든 일만은 아니었다. 더 중요한 것은 “투자 패러다임”이라는 추상적인 대상을 실제 검색 데이터와 연결하려면, 수집 가능성, 라벨링, 정규화, 실패 경로를 함께 설계해야 한다는 점이었다.
처음에는 차트가 중심이었지만, 끝에 남은 핵심은 데이터 신뢰성의 경계였다. 자동으로 가져올 수 있는 데이터와 사람이 공식 화면에서 확인해 넘겨야 하는 데이터, 그리고 장기적으로 공식 API가 필요한 데이터를 구분하는 것. 이 구분이 있어야 화면의 숫자도 나중에 다시 믿고 볼 수 있다.