0522 수업
17회차. API를 활용한 데이터 수집 — DART로 금융지주 비교 리포트 만들기
📌 핵심 내용 요약
Part 1. API란 무엇인가
API는 코드가 아니라 '약속'이다.
식당 비유로 이해하면 쉽다.
| 식당 | API 세계 |
|---|---|
| 메뉴판 | API (Application Programming Interface) |
| 주방 | 서버 (DART의 데이터베이스) |
| 음식 | 응답 데이터 (JSON 형식) |
| 주문서 | 우리가 보내는 요청 (URL + Parameter) |
API의 4가지 구성요소
- URL — 어느 식당으로 갈 것인가 (주소)
- Method — 무엇을 하러 왔는가 (GET: 보여주세요 / POST: 저장해주세요)
- Parameter — 주문 옵션 (엑셀 필터 조건과 동일)
- Response — 받은 음식 (JSON 형태로 반환)
오늘 우리가 쓸 것은 99% GET. 데이터를 "받아오는" 것이니까.
Part 2. JSON 문법 — 데이터의 모양
JSON을 못 읽으면 받은 데이터를 못 쓴다.
3가지 핵심 문법
- 키-값 쌍 (Key-Value) — "엑셀의 컬럼명: 값"
{ "회사명": "KB금융", "설립연도": 2008, "상장여부": true }- 중첩 (Object 안의 Object) — "표 안에 또 표"
{ "회사": { "이름": "KB금융", "주소": { "시": "서울", "구": "영등포구" } } }- 배열 (Array / List) — "엑셀의 여러 행"
{ "금융지주": ["KB금융", "신한지주", "하나금융지주", "우리금융지주"] }
JSON은 사실 중첩된 표. 키만 알면 값을 꺼낼 수 있다.
Part 3. Python 기초 5가지 — 엑셀·SQL과 매핑
"엑셀·SQL로 했던 것을 Python으로 다시 한다고 생각하세요. 새로운 언어가 아니라, 익숙한 개념의 '다른 표기법'입니다."
| 개념 | 엑셀 | Python |
|---|---|---|
| 변수 | A1 셀에 2024 입력 | year = 2024 |
| 딕셔너리 | — | params = {"key": "value"} |
| 함수 호출 | =VLOOKUP(A1, B:D, 2, FALSE) |
requests.get(url, params=params) |
| 반복문 | 수식을 아래로 드래그 | for x in [...] |
| import | "분석 도구 추가" | import requests |
Part 4. DART API 실습 — 셀 단위로
DART의 3가지 핵심 API
| API | URL 끝부분 | 무엇을 주나 |
|---|---|---|
| 공시검색 | list.json |
회사 공시 목록 |
| 기업개황 | company.json |
회사 기본 정보 |
| 재무제표 | fnlttSinglAcntAll.json |
수익·영업이익·자산 등 핵심 재무 ⭐ |
자주 발생하는 오류 코드
| status 코드 | 의미 | 해결 |
|---|---|---|
| "000" | 정상 | 성공! |
| "010" | 등록되지 않은 키 | API Key 오타 확인 |
| "011" | 사용할 수 없는 키 | 일일 호출 한도 초과 → 다음날 재시도 |
| "013" | 조회된 데이터 없음 | bgn_de / end_de 날짜 범위 확대 |
| "020" | 요청 제한 초과 | time.sleep(1) 추가 |
| "100" | 필드 부적절한 값 | corp_code 8자리 숫자 확인 |
Part 5. 금융지주 4사 비교 리포트 — 핵심 데이터 결과
분석 대상: KB금융 / 신한지주 / 하나금융지주 / 우리금융지주
분석 기간: 2023 ~ 2025 (최근 3개 사업연도)
회사별 요약 통계 (대표 수치)
| 회사명 | 평균_수익_억 | 최대_영업이익_억 | 평균_당기순이익_억 | 최근_자산총계_조 |
|---|---|---|---|---|
| KB금융 | 543,333 | 68,000 | 49,747 | 780 |
| 신한지주 | 518,333 | 64,000 | 48,000 | 730 |
| 하나금융지주 | 378,333 | 51,000 | 37,333 | 605 |
| 우리금융지주 | 303,333 | 40,000 | 29,333 | 485 |
PM 관점 4가지 핵심 포인트
- 시장 1위는 KB금융, 2위는 신한지주, 격차는 좁음 — 2025 KB 580,000억 vs 신한 555,000억 (격차 4.5%). 2023~25 동안 1·2위 순서 변동 없음
- 영업이익률은 4사가 거의 동일 — 약 11~12%대
- 3·4위(하나·우리)는 KB·신한 대비 70%·55% 규모 — 단순 인수합병으로 1·2위에 도전하기 어려운 격차
- 시장 전체가 '완만한 우상향' — 4사 모두 매년 4~10% 성장
🗝️ 오늘 기억해야 할 가장 중요한 내용
"오늘 배운 것은 DART 사용법이 아닙니다."
오늘 진짜 배운 것:
- API라는 게 무엇인지 친구에게 설명할 수 있게 됐다
- JSON과 Python 코드를 '읽을 줄' 알게 됐다
- 외부 데이터를 가져와서 분석 리포트 1장 완성하는 패턴을 손에 익혔다
이 패턴은 DART뿐만 아니라 ECOS, 마이데이터, 카카오 API 등 모든 API에 동일하게 적용된다.
오늘의 산출물
| # | 산출물 | 형태 |
|---|---|---|
| 1 | 채워진 Colab 노트북 (셀 1~14 모두 실행) | .ipynb |
| 2 | ⭐ 비교 분석 리포트 1장 | 노트북 안의 마크다운 셀 |
| 3 | 시각화 차트 3개 (영업수익/영업이익/성장률) | 노트북 안 출력 |
| 4 | CSV 데이터 파일 | financial_holdings_2023_2025.csv |
🔗 관련 링크
- DART OpenAPI 공식: https://opendart.fss.or.kr
- API Key 발급: https://opendart.fss.or.kr → 회원가입 → 인증키 신청
- Python 무료 학습: https://wikidocs.net/book/1 (점프투파이썬)
- 공공데이터포털: https://data.go.kr — 금융 관련 데이터셋 다수
- ECOS (한국은행): 환율, 기준금리, 통화량 등 거시경제 데이터
'구름 핀테크 교육' 카테고리의 다른 글
| [18일차] 기술 동향과 핀테크 산업 (0) | 2026.05.27 |
|---|---|
| [17일차] 기술 사업/예측과 로드맵, 비즈니스 모델 (0) | 2026.05.26 |
| [15일차] 데이터 수집전략, 데이터 수집 기획안 작성 (0) | 2026.05.21 |
| [14일차] 데이터 파이프라인 개념 (0) | 2026.05.20 |
| [13일차] 파이프라인 AB테스트 (0) | 2026.05.19 |