MyStock은 처음에는 개인 계좌의 투자 현황을 확인하기 위한 도구로 시작했지만 실제 사용 과정에서 보유 자산뿐 아니라 현재 시장 분위기까지 함께 확인하고 싶다는 필요가 생겼고, 시황분석 기능 개발로 확장되었다. 처음에는 시장 지수와 몇 가지 지표를 추가하면 충분하다고 생각했다. 하지만 실제 구현 과정에서는 API 조회 속도, 데이터 구조 차이, 차트 표현 방식, Qt Thread 안정성 문제까지 연속적으로 발생했다.
결과적으로 이번 작업은 단순 UI 추가가 아니라 "어떤 정보를 보여줄 것인가"와 "어떻게 안정적으로 제공할 것인가"를 다시 고민하는 과정이 되었다.
미장 & 국장 지수 정보
Codex가 시황분석 템플릿으로 생성한 S&P500, NASDAQ, KOSPI 정보이면 시장 기본흐름은 충분하였으나, 국내 KOSDQA 누락되어 추가하였다. 그리고 시장 데이터 추이는 그래프로 표현하면 직관적이고 단타나 스윙을 목적으로 보는 것이 아니니 기간은 1M, 3M, 6M, 1Y로 설정하였다.
미국 10년물 제거와 VKOSPI 선택
초기 시장 환경에는 미국 10년물 국채금리를 포함했다. 하지만 실제 사용 과정에서 해당 데이터 조회 시간이 다른 지표보다 길었고, 장기 ETF 투자 관리라는 목적에서 이 정보가 정말 필요한지 다시 검토하게 되었다. ChatGPT와 VIX, VXN, 변동성 지표를 확인하고 최종적으로 미국 시장은 VIX, 국내 시장은 VKOSPI를 활용하는 방향으로 변경 결정하였다. 그리고 심리지수도 함께 보여주면 좋을 것 같아 추가하였다.
VIX / Fear & Greed Dual Chart
VIX와 Fear & Greed는 서로 다른 방식으로 시장 심리를 보여주지만 함께 확인하는 것이 더 직관적이라고 판단했다.
- VIX: Amber (#FFB000), 왼쪽 Y축
- Fear & Greed: Cyan (#39C6FF), 오른쪽 Y축
색상, marker, hover, summary 표현 과정에서 여러 UI 문제가 발생했고, 기존 단일 차트와 동일한 사용 경험을 유지하는 방향으로 조정했다.
앱이 멈추는 문제와 Codex 디버깅 과정
시황분석 기능 추가 이후 빠른 기간 변경이나 차트 전환 과정에서 앱이 멈추거나 macOS segmentation fault가 발생했다. 처음에는 API 지연, Python 3.14 환경, PySide6/Qt 버전 문제 등 여러 가능성을 생각했다. 단순히 "앱이 죽는다"라고 전달하는 것이 아니라 실행 환경과 재현 조건을 정리했다. 참고로 나는 Python 개발자는 아니지만 임베디드 개발 경험이 있어, 문제가 발생했을 때 증상, 재현 조건, 실행 환경을 정리하고 원인을 좁혀가는 방식에는 익숙했다.
- Python 3.14.6
- PySide6 6.10.3 / Qt 6.10.3
- macOS arm64 환경
- 시황분석 탭 전환 및 기간 변경 과정
- 종료 시점 crash 발생 여부
이 정보를 기반으로 문제 상황을 정리해 ChatGPT와 함께 원인 후보를 좁혔고, 이후 Codex에게 실제 코드 흐름과 재현 조건 검증을 요청했다. 이후 Codex에게 실제 코드 분석과 검증을 요청했다. Codex는 테스트 환경에서 재현 가능성을 확인하고, MyStock 내부 worker 흐름과 Qt 객체 정리 과정을 분석했다. 최소 PySide 환경에서는 문제가 재현되지 않는 것을 확인했고, MyStock 내부 worker 흐름과 Qt 객체 정리 과정을 중심으로 분석했다.
한 번 수정한 뒤에도 실제 환경에서 다시 segmentation fault가 발생하면서 문제가 단일 worker가 아니라 공통 thread cleanup 과정일 가능성을 다시 검토했다. 결과적으로 QThread 종료와 QObject 정리 시점이 겹치는 lifecycle race 가능성을 확인했고, persistent worker 구조, request ID 기반 stale 결과 폐기, cancellation, timeout 적용 방향으로 개선했다.
자동 새로고침과 Cache 문제
자동 새로고침을 추가했지만 실제 데이터가 갱신되지 않는 문제가 발생했다. 처음에는 Timer 문제라고 생각했지만 refresh 흐름을 추적하면서 Timer는 정상이고 cache 반환 때문에 실제 조회가 발생하지 않는 구조임을 확인했다. 일반 화면 진입은 cache를 활용하고, 사용자가 의도한 새로고침과 자동 갱신은 force refresh를 사용하는 방식으로 분리했다.
이번 시황분석 개발은 단순 기능 추가가 아니었다. 문제를 정확하게 설명하고, ChatGPT와 함께 가설을 세우고, Codex를 통해 재현과 검증을 진행하며 방향을 결정하는 AI 협업 개발 과정이었다.
MyStock은 단순 잔고 조회 프로그램에서, 실제 투자 판단에 필요한 시장 정보까지 함께 확인하는 개인 투자 Dashboard 형태로 진화하면서 확장되고 있다. 초기 Codex가 제시안 구성을 위 논의 과정을 걸쳐 이렇게 변경되었다.


