alt/docs/kis-live-secret-guide.md
toki ee01990117 refactor: organize operator-ui phase and update roadmap structures
- Move flutter operator console and push notification milestones to operator-ui phase
- Archive kis-live-data-collection-pipeline milestone
- Add command-first operator workflow milestone
- Add operator-ui phase definition
- Add paper-trading-command-workflow milestone
- Update phase documentation and dependencies
2026-06-03 18:10:52 +09:00

3.5 KiB

KIS Live Secret Guide

한국투자증권 Open API 기반 quant agent가 사용할 장기 비밀값은 SOPS + age로 관리한다.

1. repo 위치로 이동

원격 host의 ALT repo에서만 진행한다.

cd /Users/toki/docker/services/code-server/data/volume/workspace/alt

2. SOPS 파일 열기

SOPS_AGE_KEY_FILE="$HOME/.config/sops/age/keys.txt" \
EDITOR="${EDITOR:-nano}" \
sops secrets/kis.live.sops.yaml

3. 템플릿 붙여넣기

2번 명령으로 열린 편집기 안에서 secrets/kis.live.sops.yaml의 전체 내용을 아래 형태로 맞춘다. 각 값 설명을 실제 값으로 바꾼 뒤 저장하고 편집기를 종료한다.

KIS_REAL_APP_KEY: "<한국투자증권 실전 Open API 앱키>"
KIS_REAL_APP_SECRET: "<한국투자증권 실전 Open API 앱시크릿>"
KIS_REAL_CANO: "<실전 증권계좌번호 8자리>"
KIS_REAL_ACNT_PRDT_CD: "01"
KIS_PAPER_APP_KEY: "<한국투자증권 모의투자 Open API 앱키>"
KIS_PAPER_APP_SECRET: "<한국투자증권 모의투자 Open API 앱시크릿>"
KIS_PAPER_CANO: "<모의투자 증권계좌번호 8자리>"
KIS_PAPER_ACNT_PRDT_CD: "01"

국내주식 종합계좌 기준 ACNT_PRDT_CD01로 둔다. 한국투자증권 공식 샘플도 증권계좌 8자리와 my_prod: "01"을 분리해서 사용한다.

실제 값은 문서, 채팅, 로그에 쓰지 않는다.

nano 기준 저장은 Ctrl+O, Enter, 종료는 Ctrl+X다.

4. 입력 확인

값을 출력하지 않고 필요한 key가 모두 들어왔는지만 확인한다.

SOPS_AGE_KEY_FILE="$HOME/.config/sops/age/keys.txt" \
bin/kis-sops-env bash -lc '
for key in \
  KIS_REAL_APP_KEY KIS_REAL_APP_SECRET KIS_REAL_CANO KIS_REAL_ACNT_PRDT_CD \
  KIS_PAPER_APP_KEY KIS_PAPER_APP_SECRET KIS_PAPER_CANO KIS_PAPER_ACNT_PRDT_CD
do
  test -n "${!key}" || exit 1
done
echo "KIS SOPS secrets are ready"
'

5. 모의/실전 테스트 실행 준비 확인

모의테스트 command는 KIS_ACTIVE_ENV=paper를 일반 환경변수로 주고, secret은 SOPS에서 주입한다.

KIS_ACTIVE_ENV=paper \
SOPS_AGE_KEY_FILE="$HOME/.config/sops/age/keys.txt" \
bin/kis-sops-env bash -lc '
test "$KIS_ACTIVE_ENV" = "paper"
test -n "$KIS_PAPER_APP_KEY"
test -n "$KIS_PAPER_APP_SECRET"
test -n "$KIS_PAPER_CANO"
test -n "$KIS_PAPER_ACNT_PRDT_CD"
echo "paper smoke env is ready"
'

실전 테스트 command는 KIS_ACTIVE_ENV=real을 일반 환경변수로 주고, secret은 SOPS에서 주입한다.

KIS_ACTIVE_ENV=real \
SOPS_AGE_KEY_FILE="$HOME/.config/sops/age/keys.txt" \
bin/kis-sops-env bash -lc '
test "$KIS_ACTIVE_ENV" = "real"
test -n "$KIS_REAL_APP_KEY"
test -n "$KIS_REAL_APP_SECRET"
test -n "$KIS_REAL_CANO"
test -n "$KIS_REAL_ACNT_PRDT_CD"
echo "real smoke env is ready"
'

첫 smoke는 삼성전자 005930 일봉 조회로 실행한다. 토큰과 secret은 출력하지 않고 결과 요약만 출력한다.

모의:

KIS_ACTIVE_ENV=paper \
SOPS_AGE_KEY_FILE="$HOME/.config/sops/age/keys.txt" \
bin/kis-sops-env bin/kis-paper-daily-smoke \
  --symbol 005930 \
  --start 20240527 \
  --end 20240528

실전:

KIS_ACTIVE_ENV=real \
SOPS_AGE_KEY_FILE="$HOME/.config/sops/age/keys.txt" \
bin/kis-sops-env bin/kis-paper-daily-smoke \
  --symbol 005930 \
  --start 20240527 \
  --end 20240528

6. 확인 체크리스트

  • SOPS에는 실전/모의 8개 값만 있다.
  • secret 값이 문서, 로그, 테스트 fixture에 출력되지 않았다.
  • 모의 일봉 smoke가 통과했다.
  • 실전 일봉 smoke가 통과했다.