개발 환경 + 키움 REST API 키 발급 — 32비트도 GUI도 필요 없다
REST라서 평범한 파이썬이면 된다. 키움 REST API 키(appkey/secretkey) 발급과 모의/실전 도메인, 설정 파일 구조.
REST로 넘어오면서 제일 먼저 사라진 건 번거로운 제약이다. 예전 GUI 자동화 버전은 "영웅문이 32비트라 파이썬도 32비트여야 하고, 관리자 권한이 필요하고…" 같은 함정이 많았다. REST 버전은 그냥 평범한 파이썬이면 된다.
필요한 것
- Python 3.10 이상 (32비트 아니어도 됨)
- 키움증권 계좌 + 해외주식 거래 신청
- 키움 REST API 사용 신청 (appkey/secretkey)
- (선택) 텔레그램 봇 — 체결 알림용
핵심 REST 클라이언트는 파이썬 표준 라이브러리 urllib 만 쓴다. 즉 pip install 없이도 토큰 발급·주문이 된다. (GUI·그리드 같은 주변 기능엔 PyQt5, pandas_market_calendars 등이 들어가지만, API 호출 자체는 무의존이다.)
1) 키움 REST API 키 발급
- 키움 REST API 포털(
openapi.kiwoom.com)에 접속해 로그인 - API 사용 신청 — 신청이 승인되면
- appkey와 secretkey 두 개를 발급받는다
이 두 값이 프로그램의 신분증이다. 절대 코드에 하드코딩하거나 깃허브에 올리지 말 것. 설정 파일로 분리하고 그 파일은 .gitignore 처리한다.
현실 체크: API 사용 신청은 증권사 정책에 따라 조건(계좌 개설·약관 동의 등)과 승인 시간이 다르다. 최신 조건은 포털 공지에서 확인하자. 그리고 키가 없으면 코드가 한 줄도 못 돈다 — 그래서 이 발급이 진짜 첫 관문이다. 승인이 오래 걸리면, 먼저 모의(mock)로 흐름만 익혀두면 된다.
2) 실전 vs 모의 — 도메인이 다르다
키움은 두 개의 서버를 준다.
REAL_BASE = "https://api.kiwoom.com" # 실전 (실제 주문)
MOCK_BASE = "https://mockapi.kiwoom.com" # 모의 (연습)
반드시 모의(mock)부터 시작하자. 코드가 실제로 주문을 넣기 전에, 모의 서버에서 토큰 발급·시세 조회·주문 흐름을 충분히 검증하는 게 정석이다.
3) 설정 파일 (settings.json)
인증정보와 옵션을 한 파일에 모은다.
{
"kiwoom_rest": {
"appkey": "발급받은 APPKEY",
"secretkey": "발급받은 SECRETKEY",
"mock": true,
"min_interval_sec": 1.0,
"exchange_map": { "QLD": "NY", "NVDA": "ND" }
},
"telegram": {
"bot_token": "봇 토큰",
"chat_id": "채팅 ID"
}
}
mock: true— 처음엔 모의로. 검증 끝나면false.min_interval_sec— TR 호출 최소 간격(초). 키움은 초당 약 1회 제한이 있어 이걸로 간격을 지킨다(3편에서).exchange_map— 종목이 어느 거래소인지(ND=나스닥,NY=NYSE,NA=아멕스). 미지정 시 자동 탐지도 되지만, 운영 종목은 명시하는 게 안전하다.
⚠️
settings.json은 인증정보를 담으므로 절대 커밋 금지..gitignore에 추가하고, 저장소엔 값이 빈settings.example.json만 올린다.
4) 폴더 구조 (권장)
myauto/
├── config/
│ ├── settings.example.json ← 저장소에 올림(빈 값)
│ └── settings.json ← 실제 값 (gitignore)
├── hero/
│ ├── kiwoom_rest.py ← REST 클라이언트 (3~5편)
│ └── rest_controller.py ← 도메인 래퍼
└── main.py
✅ 확인
config/settings.json을 만들고, 파이썬에서 값이 읽히는지부터 확인하자.
import json, pathlib
cfg = json.loads(pathlib.Path("config/settings.json").read_text("utf-8"))
print("appkey 앞 4자리:", cfg["kiwoom_rest"]["appkey"][:4], "…")
print("mock:", cfg["kiwoom_rest"]["mock"])
appkey 앞자리와 mock: True가 출력되면 준비 끝. (실제 토큰 발급은 3편에서.)
다음 편 예고
3편에서는 이 키로 토큰을 발급받고, 첫 TR 호출을 성공시킵니다. OAuth2 흐름, 토큰 캐싱, rate limit, 그리고 실전에서 겪은 "토큰이 갑자기 죽는" 함정(8005) 까지 — 여기가 REST 자동매매의 진짜 시작입니다.
질문은 아래 댓글로 남겨주세요. 키 발급 과정에서 막히는 부분도 편하게 물어봐 주세요.
아래 자료에서 본인에게 적용되는 최신 조건을 다시 확인하세요. 링크는 특정 상품 가입을 권하는 제휴 링크가 아닙니다.
- 키움증권 REST API 포털 ↗토큰 발급·TR 호출·미국주식 주문/조회 스펙
- Python 표준 라이브러리 · urllib.request ↗외부 의존성 없는 HTTP 호출
이 글은 교육·정보 제공 목적이며 개인별 투자자문이나 특정 금융상품의 매수·매도 권유가 아닙니다.
이 글이 포함된 외벌이 재무 워크북(PDF)을 이메일로 무료로 받아보세요. 글과 도구는 계속 무료입니다.
함께 생각해요
이 글을 읽고 생긴 질문이나 직접 실행한 경험을 나눠주세요.
댓글을 불러오는 중입니다…