OpenDART API 키는 소스 코드나 Git에 올리지 않습니다. 프로젝트 폴더에서 다음 중 한 가지 방식으로 설정합니다.
# 현재 터미널에서만 사용
export DART_API_KEY="발급받은_API_키"또는 프로젝트 루트에 .dart_key 파일을 만들고 키만 한 줄로 저장합니다. .dart_key는 .gitignore에 포함되어 있습니다.
발급받은_API_키
서버 실행:
source .venv/bin/activate
python -m pip install -r requirements.txt
python -m uvicorn main:app --reload브라우저에서 http://127.0.0.1:8000에 접속하면 다음 기능을 사용할 수 있습니다.
- DART 상장기업 이름 검색
- 현재 연도부터 최근 10개 사업연도 동적 선택
- 사업·반기·1분기·3분기 보고서 조회
- 현재 연도 자료가 미공시된 경우 최근 5년 내 최신 자료 자동 탐색
- 연결재무제표 우선 조회 및 별도재무제표 대체 조회
- 재무비율, 100점 건전성 점수와 규칙 기반 자동 분석
관련 API:
GET /api/dart/configPOST /api/dart/company-searchPOST /api/dart/financial-analysis
| 솔루션 | 공식 사이트 또는 문서 |
|---|---|
| Markdown | Markdown Guide |
| VS Code | code.visualstudio.com |
| Claude Code | Claude Code Docs |
| OpenAI Codex | Codex 공식 문서 |
| AWS | aws.amazon.com |
| Google Cloud (GCP) | cloud.google.com |
| Microsoft Azure | azure.microsoft.com |
| WSL | Microsoft WSL 문서 |
| Ubuntu | ubuntu.com |
| FastAPI | fastapi.tiangolo.com |
| Uvicorn | uvicorn.org |
| ApexCharts | apexcharts.com |
| Git | git-scm.com |
| GitHub | github.com |
Markdown (.md)
Markdown은 문서를 간단한 기호로 작성하는 방식입니다. 확장자가 .md인 파일에 주로 사용하며, GitHub나 VS Code에서 보기 좋게 표시됩니다.
# 가장 큰 제목
## 한 단계 작은 제목
- 목록 항목#의 개수가 적을수록 더 큰 제목입니다. 이 README도 Markdown으로 작성되어 있습니다.
**Visual Studio Code(VS Code)**는 Microsoft가 제공하는 무료 코드 편집기입니다. 파일을 열고 수정하는 기능뿐 아니라 다음 작업을 한곳에서 할 수 있습니다.
- 프로젝트 파일 탐색
- 코드 안의 단어 검색
- Git을 이용한 변경 이력 관리
- 확장 프로그램 설치
- 내장 터미널에서 명령 실행
AI 코딩 에이전트: Claude Code와 Codex
Claude Code와 Codex는 개발 작업을 돕는 AI 에이전트입니다. VS Code나 터미널과 연결하면 현재 프로젝트 파일을 바탕으로 코드 설명, 수정, 오류 확인 같은 일을 도울 수 있습니다.
웹 브라우저에서 AI와 대화하는 것과 달리, 개발 도구에 연결하면 필요한 파일을 직접 참고하며 작업할 수 있어 복사·붙여넣기가 줄어듭니다. 서비스별로 계정, 사용 가능 지역, 요금 정책은 다를 수 있습니다.
**CSP(Cloud Service Provider)**는 서버, 저장 공간, 데이터베이스 같은 컴퓨팅 자원을 인터넷으로 빌려 주는 회사입니다. 대표적으로 AWS(Amazon), Google Cloud(GCP), Microsoft Azure가 있습니다.
직접 컴퓨터를 구매·관리하는 대신, 필요한 만큼만 서버를 만들고 사용량에 따라 비용을 내는 방식입니다. 웹 화면에서 자원을 관리하는 곳은 보통 콘솔(Console), 터미널 명령으로 관리하는 방식은 **CLI(Command Line Interface)**라고 합니다.
- VM(Virtual Machine, 가상 머신): 한 대의 실제 컴퓨터 안에 소프트웨어로 만든 또 하나의 컴퓨터입니다. 클라우드 서버에서 널리 사용됩니다.
- WSL(Windows Subsystem for Linux): Windows에서 Linux 명령과 개발 환경을 사용할 수 있게 해 주는 기능입니다.
- Ubuntu: 많이 사용하는 Linux 운영체제 중 하나입니다.
처음부터 Linux 명령어를 외울 필요는 없습니다. 자주 쓰는 명령부터 사용하며 익히고, 필요할 때 공식 문서나 AI의 도움을 받아 확인하는 편이 효율적입니다.
| 구분 | 쉬운 설명 | 이 프로젝트에서의 예 |
|---|---|---|
| 프론트엔드(FE) | 사용자가 보는 화면과 버튼, 표를 만드는 부분 | index.html |
| 백엔드(BE) | 화면 뒤에서 데이터와 규칙을 처리하는 부분 | main.py |
| 풀스택 | 프론트엔드와 백엔드를 모두 다루는 개발 방식 또는 개발자 | 화면과 서버를 함께 수정 |
예를 들어 “백엔드는 Python으로, 프론트엔드는 바닐라 JavaScript로 만들어 줘”라고 요청할 수 있습니다. 여기서 바닐라 JavaScript는 별도 프레임워크 없이 기본 JavaScript를 사용한다는 뜻입니다.
**API(Application Programming Interface)**는 프로그램끼리 정보를 요청하고 전달하는 약속입니다. 식당에 비유하면, 메뉴를 받아 주방에 주문을 전달하고 음식을 가져오는 직원과 비슷합니다.
- JSON: 데이터를
"이름": "값"형태로 정리하는 표준 형식입니다. - REST API: 웹 주소와 HTTP 요청 방식을 이용해 데이터를 주고받는 API 설계 방식입니다.
- HTTP 메서드: 요청의 목적을 나타내는 단어입니다.
GET은 조회,POST는 생성,PUT/PATCH는 수정,DELETE는 삭제에 주로 사용합니다. - OPTIONS: 브라우저가 실제 요청 전에 서버에 허용 여부를 확인할 때 주로 쓰는 메서드입니다.
- CORS: 다른 웹사이트가 내 서버의 API를 브라우저에서 호출할 수 있는 범위를 정하는 보안 규칙입니다. 모든 요청을 막는 기능이 아니라, 허용할 출처를 정하는 기능에 가깝습니다.
데이터 시각화는 숫자나 표를 차트·그래프 등으로 바꾸어 흐름을 빠르게 이해하도록 돕는 방법입니다. 프론트엔드에서는 ApexCharts 같은 차트 라이브러리를 사용할 수 있습니다. 데이터가 무엇을 의미하는지 확인한 뒤, 목적에 맞는 차트를 고르는 것이 중요합니다.
- Git: 코드와 문서의 변경 이력을 기록하고 되돌릴 수 있게 해 주는 버전 관리 도구입니다.
- GitHub: Git 저장소를 온라인에 보관하고 팀원과 공유하는 서비스입니다.
- 저장소(Repository, Repo): 프로젝트 파일과 변경 이력을 담는 공간입니다.
- 브랜치(Branch): 원본 작업에 영향을 주지 않고 기능을 따로 개발할 수 있는 작업 줄기입니다.
GitHub 저장소를 처음 내려받을 때는 git clone 저장소_주소를 사용합니다. Git에 변경 기록을 남기려면 이름과 이메일도 설정합니다.
git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"
git clone 저장소_주소공개 저장소(Public)는 누구나 볼 수 있고, 비공개 저장소(Private)는 권한을 받은 사람만 볼 수 있습니다. 인증키, 비밀번호, 개인 정보는 저장소에 올리지 않아야 합니다.
웹 주소 http://127.0.0.1:8000에는 두 가지 정보가 들어 있습니다.
| 요소 | 비유 | 의미 |
|---|---|---|
IP 주소 (127.0.0.1) |
건물의 주소 | 어느 컴퓨터로 갈지 나타냅니다. |
포트 (8000) |
건물 안의 호수 또는 내선번호 | 그 컴퓨터의 어떤 프로그램으로 갈지 나타냅니다. |
하나의 컴퓨터에서는 여러 서버 프로그램이 동시에 실행될 수 있습니다. 포트 번호가 다르면 같은 컴퓨터에서도 서로 다른 프로그램에 연결할 수 있습니다. 127.0.0.1은 내 컴퓨터를 뜻하는 특별한 IP 주소입니다.
github 의 채널로는 https://github.com/stacksimplify 가 유명 합니다.
kosis_rss.py는 KOSIS가 제공하는 공지사항 RSS를 읽는 독립 실행 스크립트입니다. 별도 패키지 설치 없이 Python 표준 라이브러리만 사용합니다.
# 최근 공지 10건을 콘솔에 표시
python3 kosis_rss.py
# 최근 5건을 JSON으로 표시
python3 kosis_rss.py --limit 5 --json
# RSS 전체 결과를 JSON 파일로 저장
python3 kosis_rss.py --output kosis_notices.json
# 특정 게시물 번호를 RSS(XML) 파일로 다운로드
python3 kosis_rss.py --board-idx 2553 --rss-output notice_2553.xmlboardIdx는 공지 URL의 ?boardIdx=2553처럼 표시되는 번호입니다. 위 명령은 해당 게시물 한 건만 포함하는 표준 RSS 2.0 XML 파일을 만듭니다.
RSS 원본: https://kosis.kr/rss/notice_rss.jsp
이 프로젝트는 KRX OpenAPI에서 유가증권 일별매매정보를 받아 웹 화면에 표시하는 작은 예제입니다. Python으로 만든 서버가 KRX에 데이터를 요청하고, 브라우저는 그 결과를 표로 보여 줍니다.
인증키는 서버에서만 사용합니다. 따라서 화면이나 GitHub 저장소에 키가 노출되지 않도록 구성되어 있습니다.
| 파일 | 역할 |
|---|---|
main.py |
FastAPI 서버입니다. KRX에 요청하고 그 결과를 브라우저에 전달합니다. |
index.html |
종목 시세를 화면에 표시하는 웹 페이지입니다. |
.key |
KRX 인증키를 보관하는 로컬 파일입니다. Git에 올리지 않습니다. |
데이터는 다음 순서로 이동합니다.
브라우저 → 이 프로젝트의 FastAPI 서버 → KRX OpenAPI
브라우저 ← 시세 데이터 ← KRX OpenAPI 응답
브라우저가 KRX에 직접 요청하지 않고 서버를 거치는 이유는 인증키를 안전하게 보호하기 위해서입니다.
기준일을 선택하면 KOSPI 종목의 종가, 전일 대비, 등락률, 거래량, 시가총액을 확인할 수 있습니다.
Ubuntu 또는 WSL 터미널에서 Python 버전을 확인합니다.
python3 --version처음 개발 환경을 준비하는 경우에는 아래 패키지를 설치합니다.
sudo apt update
sudo apt install -y python3-pip python3-venv git curl가상환경은 이 프로젝트에 필요한 Python 패키지를 다른 프로젝트와 분리해 보관하는 전용 상자입니다.
python3 -m venv .venv
source .venv/bin/activate터미널 앞에 (.venv)가 표시되면 활성화된 상태입니다. 작업을 마칠 때는 deactivate로 빠져나올 수 있습니다.
pip install fastapi "uvicorn[standard]"
uvicorn main:app --reload--reload는 main.py를 저장할 때 서버를 자동으로 다시 시작하는 개발용 옵션입니다.
같은 컴퓨터에서 실행했다면 브라우저에서 아래 주소를 엽니다.
http://127.0.0.1:8000/
먼저 KRX OpenAPI에서 유가증권 일별매매정보 (stk_bydd_trd) 이용을 신청하고 승인을 받아야 합니다.
인증키는 다음 두 방법 중 하나로 설정합니다.
프로젝트 최상위 폴더에 .key 파일을 만들고, 발급받은 키를 한 줄로 입력합니다.
발급받은_인증키
.key는 .gitignore에 포함되어 있으므로 GitHub에 업로드되지 않습니다. 인증키를 코드, README, 화면에 붙여 넣지 마세요.
export KRX_AUTH_KEY='발급받은_인증키'이 설정은 현재 터미널에서만 유지됩니다. 새 터미널을 열면 다시 설정해야 할 수 있습니다.
인증키가 없거나 API 이용 승인이 만료된 경우 화면에 오류 안내가 표시됩니다. KRX에서 401 또는 403 오류가 반환되면 API의 이용 기간과 승인 상태를 확인하세요.
서버는 아래 주소로 시세 데이터를 제공합니다.
GET /api/krx/stocks?bas_dd=YYYYMMDD
예를 들어 2026년 7월 31일 데이터를 요청하려면 다음 주소를 사용합니다.
http://127.0.0.1:8000/api/krx/stocks?bas_dd=20260731
bas_dd는 기준일이며 YYYYMMDD 형식으로 입력합니다. 날짜를 생략하면 서버는 기본적으로 전날을 조회하며, 주말에는 직전 금요일을 사용합니다. 공휴일에는 해당 날짜의 데이터가 없을 수 있으므로, 필요하면 실제 거래일을 직접 입력하세요. 이 API는 장중 실시간 시세가 아니라 하루 단위로 정리된 매매정보를 반환합니다.
서버를 WSL, 가상 머신 또는 원격 컴퓨터에서 실행하고 내 PC 브라우저로 접속하는 경우에는 아래처럼 실행합니다.
python3 -m uvicorn main:app --host 0.0.0.0 --port 8000서버의 내부 IP는 다음 명령으로 확인할 수 있습니다.
hostname -I표시된 주소 중 하나를 사용해 http://서버_IP:8000/으로 접속합니다. 127.0.0.1은 접속을 시도한 바로 그 컴퓨터 자신을 뜻하므로, 브라우저와 서버가 다른 컴퓨터에 있다면 사용할 수 없습니다.
외부 인터넷에 공개하려면 방화벽과 접근 제어를 별도로 설정해야 합니다. 테스트 목적이라면 신뢰할 수 있는 내부 네트워크에서만 열어 두는 것이 안전합니다.





