[개발일지]2026-07-05]
차트 주석과 영역 선택 기능의 업스트림 포팅을 시작했다
지난번 업스트림 HTML 리포트 출력 포팅을 끝내고 남은 작업 목록 중에서 무엇을 먼저 처리할지 고민했는데, MarketView 페이지에 차트와 채팅 양방향 연동을 추가하는 작업을 최우선으로 진행하기로 했다. MarketView는 실시간 차트와 채팅이 결합된 페이지로, 여기에 에이전트가 직접 차트에 가격선이나 피보나치선, 뉴스 이벤트를 그릴 수 있는 기능(#276)과 사용자가 차트 영역을 드래그하거나 클릭해 컨텍스트를 전송하는 기능(#281)을 이식하기로 결정했다.
체리픽 과정에서의 충돌 해결과 마이그레이션 재넘버링
먼저 에이전트가 직접 차트에 드로잉을 할 수 있게 해주는 #276 스쿼시 커밋을 체리픽했다. 이 과정에서 세 건의 충돌이 발생했다. 주로 우리가 이미 구축해 둔 HITL(Human-In-The-Loop)이나 중단, 프리뷰 로직이 업스트림의 드로잉 툴 코드와 겹치면서 생긴 문제였는데, 다행히 로직 자체의 충돌은 없어서 두 코드가 공존할 수 있도록 병합했다.
그다음으로 데이터베이스 마이그레이션 파일의 충돌을 해결해야 했다. 업스트림에서 넘어온 마이그레이션 파일이 우리 프로젝트 체인의 번호와 겹쳤는데, 우리 포크의 히스토리가 업스트림과 갈라진 탓이었다. 마이그레이션이 꼬이지 않도록 파일 이름을 019_add_chart_annotations.py로 바꾸고 리비전 설정을 수정해 선형적인 순서를 유지했다. 로컬 환경에서 alembic 업그레이드가 에러 없이 정상적으로 잘 작동하는 것까지 확인하고 한숨 돌렸다.
차트 영역 선택 이식과 타입 중복 정리
이어 차트 영역 선택 기능인 #281의 커밋들을 순서대로 포팅했다. 17개의 커밋을 가져오는 동안 두 건의 가벼운 충돌만 있어서 작업이 비교적 수월했다. 이 과정에서 그동안 임시로 선언해 두었던 플레이스홀더 타입을 지우고, 실제로 쓰이게 된 구체적인 스토어 타입을 연동하여 messageHelpers.ts 내의 타입 중복 선언 문제를 깔끔하게 정리했다.
또다시 발생한 죽은 임포트 함정 탈출
하지만 순탄하던 도중 예전에도 겪었던 함정이 또 도사리고 있었다. AuthContext.tsx 파일의 충돌을 해결하는 과정에서 병합 툴이 가져온 변경 사항을 무심코 그대로 수용했더니, 우리 프로젝트에는 존재하지도 않는 OAuth 팝업 관련 모듈이 자동으로 임포트 라인에 추가되어 컴파일 오류를 냈다. 3-way 병합 시 전체 수용 방식이 가져오는 부작용인데, 똑같은 실수를 반복했다는 사실에 씁쓸했다. 다행히 빌드 검증 단계인 tsc --noEmit이 실패하는 것을 보고 즉시 원인을 파악해 사용하지 않는 죽은 임포트를 지워내어 해결했다. 앞으로 병합 후에는 컴파일 검증을 필수로 거쳐야 한다는 교훈을 다시 새겼다.
테스트 완료와 메인 브랜치 병합
마지막 검증 단계에서는 픽셀 기반으로 동작하는 차트 캔버스 영역의 특성상 브라우저에서 드래그 전체 플로우를 직접 마우스로 테스트하진 못했다. 대신에 스토어나 오버레이 컴포넌트에 대한 전용 테스트 코드를 꼼꼼히 돌려서 검증을 보완했다. 백엔드와 프론트엔드의 테스트를 무사히 통과시키고, 로컬 스모크 테스트까지 정상적으로 동작하는 것을 본 뒤에야 마음을 놓을 수 있었다. 작업 브랜치를 main에 머지하고 푸시하는 것으로 하루 일과를 마무리했다. 이제 다음에는 차트 선택 기능이 포팅되면서 해제된 토큰 절약 스킬 인젝션 작업을 이어서 진행해볼 생각이다.
오늘의 소감
주말동안 병합만 해서 조금 피곤한 주말이였던거 같다. 그리고 클로드, 안티그래비티등 스캐줄러 기능이 생겨서 사용해보고 있는데 아쉬운건 클로드는 ai가 해당 사항을 이미 잘 인지하고 있었으나, 재미나이는 안티그래비티랑 완전한 연동이 안 된것인지 등록해달라는 문구를 인지 하지 못했고, 오늘 아침에 기동된것을 보니 자동으로 안 돌아가고 승인팝업창이 떠서 정상작동을 안해서 클로드가 아직은 최고인거 같다. 토큰이 너무 비싸다는 단점만 빼곤..