PERSONAL / AI · TRADING SYSTEM
AI Manager
Multi-Broker · Isolated LLM · Paper Trading
여러 증권사 계좌를 하나의 보고로 정규화하고, 자연어 지시의 접수부터 계획 검증·모의 체결·결과 보고까지 서버에서 처리하는 개인 투자 관리 시스템입니다.
- 기간
- 2026.06 — 진행 중
- 담당 역할
- 설계 · 전체 개발
프로젝트 배경
개인 프로젝트. SwiftUI iPhone 앱, Python 서버, 격리된 LLM 계획기로 구성했습니다. 아이폰은 SSH로 서버에 직접 연결하고, 서버의 작업 상태는 앱 연결과 독립적으로 보존합니다. 현재 자동 실행은 모의(paper) 운용만 지원합니다.
01
증권사별 차이를 공통 모델로
구현
KIS REST·WebSocket과 토스증권 REST 어댑터를 공통 시세·포지션·주문 모델로 연결하고, 브로커별 원장을 분리했습니다.
같은 JSON으로 앱·CLI·HTML·Markdown 보고를 만들고, 일부 조회가 실패해도 실패 항목과 기준 시각을 함께 표시합니다.
02
끊겨도 두 번 실행되지 않게
구현
지시마다 영속 요청 ID를 두고 접수·처리·취소·결과 이력을 저장해, 요청 직후 네트워크가 끊겨도 같은 요청을 재확인합니다.
주문 전송 전에 상태를 먼저 기록하고, 결과가 불명확한 주문은 재제출을 막은 뒤 조회·대사로 복구합니다. 외부 주문 전체의 exactly-once를 보장하는 구조는 아닙니다.
03
LLM에 실행 권한을 주지 않는다
구현
LLM 계획기는 브로커 인증·계좌 DB·Docker 소켓을 마운트하지 않은 별도 컨테이너에서 실행하고, 파일 스풀로 JSON 요청·응답만 교환합니다.
응답은 JSON 스키마와 정책 검증을 통과해야 모의 실행 계층으로 넘어갑니다. 총 주식 비중 상한은 결정론적 코드가 정하고, LLM은 종목 구성을 조언하거나 상한 이하로 축소만 제안합니다. 판단은 추가 전용 원장에 기록합니다.
04
알림과 배포
구현
영속 아웃박스로 알림의 중복을 억제하고 재시도합니다. Discord·APNs 어댑터를 제공하며, APNs 실제 기기 수신 검증은 별도 과제입니다.
테스트를 통과한 릴리스로만 전환하고, 코드와 영속 데이터를 분리해 실패 시 이전 실행 버전으로 복구합니다.
05
iPhone 앱
구현
SwiftUI로 보고함·지시함·위험 계기판·SSH PTY 터미널을 만들었습니다. 호스트 공개키를 고정해 서버를 검증하고, 개인키는 기기 전용 Keychain에 보관합니다.
결과
공개본 새 환경에서 Python 테스트 296개(Core 176 · KIS 82 · Toss 38), 계좌 없는 CLI 데모, iOS 시뮬레이터 빌드를 확인했습니다. 실계좌 통합 원장·NAV와 전체 주문 경로의 통제 통합은 다음 과제입니다.