slowlp
← 프로젝트
LAB · 개인 실험 (본인전용 집서버 배포)

주식앱 (마이폴리오)

개별 종목 분석 없이 포트폴리오 단위로 투자하는 앱 — KIS 계좌 연동 실주문까지, 본인 계좌 전용으로 운영 중.

서비스 바로가기 ↗
주식앱 (마이폴리오)
OVERVIEW

개별 종목을 고르는 대신 포트폴리오를 만들고, 앱이 주문 계획을 계산해주는 투자 관리 앱입니다. 한국투자증권(KIS) 계좌를 연동해 실제 주문까지 처리합니다. FastAPI 백엔드와 Expo(React Native) 모바일 앱으로 구현했고, Celery 워커가 뒤에서 KIS 체결 확인·손익 갱신·알림 발급을 담당합니다. 집 서버(Ubuntu + Docker Compose)에서 `folio.slowloop.app`으로 서비스 중입니다.

도메인은 6개 모듈(member·account·portfolio·trading·market·notification)로 분리했고, "여러 계좌를 한 번에 보여주는 대시보드" 대신 지금 운용할 계좌 하나를 중심으로 UX를 설계했습니다. 단위 테스트 1521건이 그린이어도 실KIS·실매매·실기기 검증은 사람 몫이라는 걸 이 프로젝트에서 직접 확인했습니다.

QUICK FACTS
상태개인 운영 (집 서버, 본인 계좌 전용)
URLfolio.slowloop.app (개인 접근)
백엔드FastAPI · SQLModel · PostgreSQL · Redis · Celery
모바일Expo(React Native) · expo-router · Clerk 인증
연동한국투자증권(KIS) Open API
배포Docker Compose · Caddy · Cloudflare · GitHub Actions(self-hosted runner)
보안Fernet at-rest 암호화 · Google 단독 로그인 · 이메일 allowlist
제약KIS API 규제로 외부 공개 불가
folio.slowloop.app (개인 접근)
핵심 기능
01 포트폴리오
종목을 모아 비중을 정하고, 전략(주문 방식)을 붙여 운용
02 주문 계획 → 실주문
전략 기반으로 주문 계획을 계산해 보여주고 KIS로 실주문 실행
03 손익·체결
Celery 워커가 KIS 체결 확인 → 매입가 기준 손익 갱신
04 알림
조건 평가 배치로 매매·체결 알림 발급
05 재연결 흐름
KIS 자격증명 무효 시 재연결 배너 + 앱키·시크릿 재입력 안내
관련 글 — 만든 과정
시리즈 전체 →
이야기 주식 대신 주식앱을 만들기로 했다 주식은 1도 몰랐지만 만들고 싶었다, 1년의 공백 끝에 다시 잡으니 2주 방법 주식 앱 코드에 저스티스 리그가 살았다 BaseSqlModel·BaseRepository와 15챕터 가이드로 패턴을 통일한 법 교훈 AI가 못한 게 아니라 내가 서툴렀다 구현·검증 분리, 문서 동기화, 머지 충돌까지 다섯 번 데이고 바꾼 순서 교훈 집 서버에 주식 앱 배포하다 겪은 삽질 3가지 iptime CAA 차단, DB 포트 충돌, 수동 체크아웃까지 배포 삽질 3가지 교훈 다 만들고 나서 약관을 읽었다 주식 포트폴리오 앱 개발기, KIS API 규제 삽질과 막판 방향 전환까지 방법 모델에 로직을 넣으면 중복이 사라진다 ORM 도메인 모델로 같은 수정 규칙을 모델 메서드 한 곳에 모아 중복 없애기 방법 같은 코드를 두 번 쓰지 않으려고 도메인 셋째쯤 반복되는 코드를 공통 모듈·Base 클래스·명명 규칙으로 모으기 방법 라우터는 HTTP만, 로직은 서비스로: 계층 분리 라우터·서비스·리포지토리로 계층마다 책임을 한 줄씩 깔끔하게 나눈 이유와 효과 방법 폴더가 곧 설계다: 도메인 기반 프로젝트 구조 기능이 아니라 도메인 기준으로 프로젝트 폴더를 나눈 이유와 그 효과 정리 방법 데이터 접근은 리포지토리로만 제네릭 BaseRepository로 쿼리를 가둬 고칠 곳을 한 군데로 모으는 법 이야기 다들 ORM이 처음이라, 백엔드 개발 가이드를 썼다 복붙 중복을 막으려고 직접 쓴 17개 섹션짜리 백엔드 설계 스터디 가이드 방법 경계마다 검증한다: 스키마(DTO)와 다층 방어 스키마(DTO)로 모델을 그대로 내보내지 않고 계층마다 다른 책임으로 검증하기 방법 처리할 수 있는 예외만 잡는다: 예외 처리 전략 복구 가능한 예외만 잡고 못 하면 위로 넘기는, 계층별 예외 처리 전략 정리
댓글