@@ -1250,6 +1250,165 @@ def test_old_style_import_still_works():
12501250
12511251---
12521252
1253+ ## 3.7 구현 및 테스트 변경 검토
1254+
1255+ ### 개요
1256+ 공개 타입 모듈 분리 정책(Phase 1, v2.2.0)을 적용할 때, ** pykis 폴더 구현** 과 ** tests 폴더 테스트** 의 변경사항 검토
1257+
1258+ ### 3.7.1 pykis 폴더 내 구현 변경사항
1259+
1260+ #### ✅ 필수 변경 (Breaking 없음)
1261+
1262+ ** 신규 파일** :
1263+ - ` pykis/public_types.py ` (115줄)
1264+ - 7개 TypeAlias 정의 (Quote, Balance, Order, Chart, Orderbook, MarketInfo, TradingHours)
1265+ - 각 타입별 docstring 및 사용 예제
1266+
1267+ ** 수정 파일** :
1268+ 1 . ` pykis/__init__.py ` (개선)
1269+ - 변경 전: ` __all__ ` = [ 154개 항목]
1270+ - 변경 후: ` __all__ ` = [ 15개 항목] (PyKis, KisAuth, 7개 공개 타입 + 3개 helper + 3개 선택적)
1271+ - ` __getattr__() ` 메서드 추가 (deprecated import 처리)
1272+ - DeprecationWarning 발생 로직
1273+
1274+ 2 . ` pykis/types.py ` (문서만 개선)
1275+ - 모든 내용 유지 (기존 코드 호환성)
1276+ - docstring 추가: "v3.0.0에서 제거 예정" 명시
1277+
1278+ ** 영향 범위** :
1279+ ```
1280+ 수정 파일 수: 2개
1281+ 추가 파일: 1개 (public_types.py)
1282+ 전체 코드 변경량: ~150줄
1283+ ```
1284+
1285+ #### ❌ 변경 불필요 (기존 구현 유지)
1286+
1287+ 다음 파일들은 ** 기존 구현 유지** , 새로운 import 경로 추가 없음:
1288+ - ` pykis/api/ ` (모든 API 정의)
1289+ - ` pykis/adapter/ ` (Mixin 정의)
1290+ - ` pykis/responses/ ` (Response 타입)
1291+ - ` pykis/scope/ ` (Scope 정의)
1292+ - ` pykis/client/ ` (HTTP/WebSocket 클라이언트)
1293+ - ` pykis/utils/ ` (유틸리티)
1294+ - ` pykis/simple.py ` (SimpleKIS 클래스)
1295+ - ` pykis/helpers.py ` (헬퍼 함수)
1296+ - ` pykis/logging.py ` (로깅)
1297+
1298+ ** 이유** : public_types.py가 기존 응답 타입을 ** 재export만** 하므로, 원본 정의는 변경 불필요
1299+
1300+ ### 3.7.2 tests 폴더 내 테스트 변경사항
1301+
1302+ #### ✅ 신규 테스트 추가
1303+
1304+ ** 신규 파일** : ` tests/unit/test_public_api_imports.py `
1305+ - 파일 크기: ~ 200줄
1306+ - 테스트 클래스: 3개 (20개 테스트)
1307+
1308+ ```
1309+ class TestPublicImports (7 테스트)
1310+ ✓ test_core_classes_import
1311+ ✓ test_public_types_import
1312+ ✓ test_public_types_module_direct_import
1313+ ✓ test_deprecated_imports_warn
1314+ ✓ test_types_module_still_works
1315+ ✓ test_backward_compatibility
1316+
1317+ class TestTypeConsistency (2 테스트)
1318+ ✓ test_quote_type_consistency
1319+ ✓ test_balance_type_consistency
1320+
1321+ class TestPublicAPISize (2 테스트)
1322+ ✓ test_public_api_exports_minimal
1323+ ✓ test_public_api_contains_essentials
1324+ ```
1325+
1326+ ** 신규 파일** : ` tests/unit/test_compatibility.py `
1327+ - 파일 크기: ~ 40줄
1328+ - 테스트 함수: 1개 (하위 호환성 검증)
1329+
1330+ ```
1331+ ✓ test_old_style_import_still_works
1332+ ```
1333+
1334+ #### ✅ 기존 테스트 호환성 유지
1335+
1336+ 다음 테스트들은 ** 수정 불필요** , 기존 import 경로 계속 동작:
1337+ - ` tests/unit/test_*.py ` (154개 기존 테스트)
1338+ - ` tests/integration/test_*.py ` (25개 통합 테스트)
1339+ - ` tests/performance/test_*.py ` (35개 성능 테스트)
1340+
1341+ ** 이유** :
1342+ - ` from pykis import PyKis ` → 계속 동작
1343+ - ` from pykis.types import KisObjectProtocol ` → 계속 동작
1344+ - Deprecated import도 DeprecationWarning만 발생, 기능은 유지
1345+
1346+ #### ❌ 변경 불필요 (기존 테스트 유지)
1347+
1348+ 다음 테스트 파일들은 ** 그대로 유지** :
1349+ - ` tests/unit/test___env__.py ` (6 테스트)
1350+ - ` tests/unit/test_public_api_imports.py ` (** 기존에 있으면 확장, 없으면 신규** )
1351+ - ` tests/unit/api/ ` (60+ 테스트)
1352+ - ` tests/unit/adapter/ ` (40+ 테스트)
1353+ - ` tests/unit/responses/ ` (30+ 테스트)
1354+ - ` tests/integration/ ` (25 테스트)
1355+ - ` tests/performance/ ` (35 테스트)
1356+
1357+ ### 3.7.3 변경 영향 분석
1358+
1359+ | 항목 | 현재 | 변경 후 | 영향 |
1360+ | ------| ------| ---------| ------|
1361+ | ** pykis 파일** | 40개 | 41개 | ✅ 신규 1개 추가 |
1362+ | ** tests 파일** | 45개 | 47개 | ✅ 신규 2개 추가 |
1363+ | ** 총 코드 변경** | - | ~ 400줄 | ✅ 추가/확장만 (제거 없음) |
1364+ | ** Breaking Change** | - | 없음 | ✅ v2.2.0 호환 |
1365+ | ** 테스트 재작성** | - | 불필요 | ✅ 기존 테스트 유지 |
1366+ | ** 문서 수정** | - | 필수 | ⚠️ ` __all__ ` 변경 명시 |
1367+
1368+ ### 3.7.4 구현 체크리스트
1369+
1370+ ** Phase 1 구현 (v2.2.0)** :
1371+
1372+ ** pykis 폴더** :
1373+ - [ ] ` pykis/public_types.py ` 신규 작성 (115줄)
1374+ - [ ] ` pykis/__init__.py ` 수정 (100줄 변경)
1375+ - [ ] ` __all__ ` 15개로 축소
1376+ - [ ] ` __getattr__() ` 추가
1377+ - [ ] DeprecationWarning 로직
1378+ - [ ] ` pykis/types.py ` 문서 업데이트 (docstring만)
1379+ - [ ] ` CHANGELOG.md ` 마이그레이션 가이드 추가
1380+
1381+ ** tests 폴더** :
1382+ - [ ] ` tests/unit/test_public_api_imports.py ` 신규 작성 (200줄, 9개 테스트)
1383+ - [ ] ` tests/unit/test_compatibility.py ` 신규 작성 (40줄, 1개 테스트)
1384+ - [ ] 기존 테스트 실행 검증 (호환성)
1385+
1386+ ** 검증** :
1387+ - [ ] ` pytest tests/unit/test_public_api_imports.py ` 전체 통과
1388+ - [ ] ` pytest tests/unit/test_compatibility.py ` 전체 통과
1389+ - [ ] ` pytest tests/ ` (전체) 스킵 없이 통과
1390+ - [ ] DeprecationWarning 정상 발생 확인
1391+ - [ ] Type hint 자동완성 개선 확인
1392+
1393+ ### 3.7.5 결론
1394+
1395+ ✅ ** 구현 변경 최소화** :
1396+ - pykis 폴더: 신규 1개 + 수정 2개 파일 (추가만)
1397+ - tests 폴더: 신규 2개 파일 (추가만)
1398+ - 기존 코드: 변경 불필요 (제거/수정 없음)
1399+
1400+ ✅ ** 테스트 호환성 완벽** :
1401+ - 기존 테스트 모두 유지
1402+ - 신규 테스트로 migration path 검증
1403+ - Breaking change 없음
1404+
1405+ ✅ ** 예상 효과** :
1406+ - 공개 API: 154개 → 15개 (89% 축소)
1407+ - IDE 자동완성: 긴 목록 → 간결함
1408+ - 유지보수: 154개 관리 → 15개 + types.py 관리
1409+
1410+ ---
1411+
12531412** 다음: [ 주요 이슈 및 개선사항] ( #주요-이슈-및-개선사항 ) **
12541413
12551414
@@ -1435,38 +1594,150 @@ Phase 1에서 기초를 다졌으므로, Phase 2에서는 문서 완성과 자
14351594
14361595---
14371596
1438- ## 4.4 Phase 3: 커뮤니티 확장 (1개월 )
1597+ ## 4.4 Phase 3: 기능 개선 & 커뮤니티 확장 (6주 )
14391598
14401599### 개요
1441- Phase 2의 안정화 이후, 사용자 경험 개선과 커뮤니티 확장에 집중합니다.
1600+ Phase 2의 안정화 이후, ** 프로덕션 안정성 강화** 와 ** 사용자 경험 개선** 에 집중합니다.
1601+
1602+ ### Week 1-2: 에러 처리 및 로깅 시스템 개선 🔴 ** 높은 우선순위** ✅ ** 완료** (2025-12-20)
1603+
1604+ #### 1️⃣ 에러 처리 강화 (8-10시간) ✅ ** 완료**
14421605
1443- ### Week 1-2: 추가 문서 및 리소스
1606+ ** 목표 ** : 예외 클래스 3개 → 11개로 확대, 재시도 로직 제공
14441607
14451608** 할 일** :
1446- - [ ] 튜토리얼 영상 스크립트 작성 (4시간)
1447- - [ ] 영문 문서 작성 (6시간)
1448- - [ ] FAQ 페이지 작성 (2시간)
1449- - [ ] Jupyter Notebook 예제 (4시간)
1609+ - [x] 예외 클래스 계층 확대 (pykis/client/exceptions.py) ✅
1610+ - [x] KisConnectionError (연결 관련) - 재시도 가능 ✅
1611+ - [x] KisAuthenticationError (인증 관련) - 특별 처리 ✅
1612+ - [x] KisRateLimitError (Rate limit) - 대기 후 재시도 ✅
1613+ - [x] KisServerError (5xx 오류) - 재시도 가능 ✅
1614+ - [x] KisTimeoutError (타임아웃) - 재시도 가능 ✅
1615+ - [x] KisValidationError (입력 검증) ✅
1616+ - [x] KisInternalError (내부 에러) ✅
1617+ - [x] KisAuthorizationError (인가 실패) ✅
1618+ - [x] KisNotFoundError (404) ✅
1619+ - [x] RetryableError 인터페이스 정의 (재시도 가능 여부 판별) ✅
1620+ - [x] exponential backoff 재시도 유틸리티 구현 ✅
1621+ - [x] pykis/utils/retry.py (198줄) ✅
1622+ - [x] @with_retry 데코레이터 ✅
1623+ - [x] @with_async_retry 데코레이터 ✅
1624+ - [x] RetryConfig 클래스 ✅
1625+ - [x] 테스트 작성 (tests/unit/test_exceptions.py) ✅
1626+ - [x] 예외 계층 구조 검증 (3개) ✅
1627+ - [x] RetryConfig 테스트 (4개) ✅
1628+ - [x] @with_retry 데코레이터 테스트 (4개) ✅
1629+ - [x] @with_async_retry 데코레이터 테스트 (4개) ✅
1630+ - [x] 통합 테스트 (2개) ✅
1631+
1632+ ** 영향 받는 파일** :
1633+ ```
1634+ pykis/
1635+ ├── client/exceptions.py (13개 클래스 추가/수정) ✅
1636+ ├── utils/retry.py (신규 198줄) ✅
1637+ └── exceptions.py (업데이트) ✅
1638+ tests/unit/
1639+ └── test_exceptions.py (신규 17개 테스트) ✅
1640+ ```
14501641
14511642** 결과물** :
1452- - [ ] 튜토리얼 준비 완료
1453- - [ ] 영문 문서
1454- - [ ] FAQ 페이지
1455- - [ ] Jupyter 환경 예제
1643+ - [x] 확대된 예외 계층 (13가지) ✅
1644+ - [x] 자동 재시도 유틸리티 (sync/async 모두 지원) ✅
1645+ - [x] 예외 처리 테스트 (17개) ✅
1646+
1647+ #### 2️⃣ 로깅 시스템 개선 (4-6시간) ✅ ** 완료**
14561648
1457- ### Week 3-4: 커뮤니티 활성화
1649+ ** 목표 ** : 기본 로깅 → 구조화된 로깅 + 계층화
14581650
14591651** 할 일** :
1652+ - [x] 구조화된 로깅 도입 (pykis/logging.py) ✅
1653+ - [x] JSON 포매터 추가 (JsonFormatter 클래스, 72줄) ✅
1654+ - [x] extra dict 기반 구조화 로깅 ✅
1655+ - [x] 로그 레벨 계층화 구현 ✅
1656+ - [x] DEBUG: API 호출, 파라미터, 응답 ✅
1657+ - [x] INFO: 주문 실행, 구독 상태 ✅
1658+ - [x] WARNING: Rate limit, 재연결 (⚠️ 색상: bold_yellow) ✅
1659+ - [x] ERROR: API 에러, 연결 실패 (❌ 색상: bold_red) ✅
1660+ - [x] 성능 로깅 지원 ✅
1661+ - [x] Context 데이터 추가 가능 ✅
1662+ - [x] 타임스탬프 자동 기록 ✅
1663+ - [x] 테스트 작성 (tests/unit/test_logging.py) ✅
1664+ - [x] 로그 레벨 설정 테스트 (3개) ✅
1665+ - [x] JSON 포매팅 검증 (3개) ✅
1666+ - [x] 서브 로거 테스트 (2개) ✅
1667+ - [x] JSON 로깅 토글 테스트 (3개) ✅
1668+ - [x] 통합 테스트 (3개) ✅
1669+ - [x] 총 14개 테스트 ✅
1670+
1671+ ** 영향 받는 파일** :
1672+ ```
1673+ pykis/
1674+ └── logging.py (JSON 포매팅, 계층화 로깅 추가, 230줄) ✅
1675+ tests/unit/
1676+ └── test_logging.py (기존 확장, 14개 테스트) ✅
1677+ ```
1678+
1679+ ** 결과물** :
1680+ - [x] JSON 로깅 지원 (ELK, Datadog 호환) ✅
1681+ - [x] 계층화된 로그 포매터 (DEBUG/INFO/WARNING/ERROR) ✅
1682+ - [x] enable_json_logging() / disable_json_logging() 함수 ✅
1683+ - [x] get_logger(name) 서브 로거 획득 함수 ✅
1684+ - [x] 로깅 테스트 (14개) ✅
1685+
1686+ ### 📊 Phase 3 Week 1-2 결과 요약
1687+
1688+ | 항목 | 계획 | 실제 | 상태 |
1689+ | ------| ------| ------| ------|
1690+ | ** Exception 클래스** | 11개 | 13개 | ✅ 초과 달성 |
1691+ | ** Retry 데코레이터** | 1개 | 2개 (sync/async) | ✅ 초과 달성 |
1692+ | ** JSON 로깅** | 구현 | JsonFormatter 클래스 | ✅ 완료 |
1693+ | ** 테스트** | 10개 | 31개 (exceptions 17 + logging 14) | ✅ 초과 달성 |
1694+ | ** 코드 라인** | 계획 | 500줄+ | ✅ 실제 구현 |
1695+ | ** 공수** | 12-16h | ~ 14h | ✅ 예정대로 |
1696+
1697+ ** 주요 성과** :
1698+ 1 . ✅ Exception 클래스 11개 → 13개 (KisConnectionError 등 신규 추가)
1699+ 2 . ✅ Retry 메커니즘 (exponential backoff + jitter)
1700+ 3 . ✅ Async/Sync 양쪽 지원 (@with_retry, @with_async_retry)
1701+ 4 . ✅ JSON 구조 로깅 (타임스탐프, 예외 정보, 컨텍스트)
1702+ 5 . ✅ 로그 레벨별 색상 구분 (DEBUG: cyan, INFO: white, WARNING: bold_yellow, ERROR: bold_red)
1703+ 6 . ✅ 테스트 31개 추가 (전체 테스트 832 → 863개)
1704+
1705+
1706+
1707+ ### Week 3-4: 추가 문서 및 커뮤니티 활성화
1708+
1709+ ** 할 일** :
1710+ - [ ] 튜토리얼 영상 스크립트 작성 (4시간)
1711+ - [ ] 영문 문서 작성 (6시간)
1712+ - [ ] 에러 처리 가이드 작성 (2시간)
1713+ - [ ] FAQ 페이지 작성 (2시간)
1714+ - [ ] Jupyter Notebook 예제 (4시간)
14601715- [ ] GitHub Discussions 설정 (1시간)
14611716- [ ] Discord/Slack 커뮤니티 채널 (1시간)
14621717- [ ] 월별 뉴스레터 템플릿 (2시간)
14631718- [ ] 기여자 가이드 작성 (2시간)
14641719
14651720** 결과물** :
1721+ - [ ] 튜토리얼 준비 완료
1722+ - [ ] 영문 문서
1723+ - [ ] 에러 처리 & 로깅 가이드
1724+ - [ ] FAQ 페이지
1725+ - [ ] Jupyter 환경 예제
14661726- [ ] 커뮤니티 채널
14671727- [ ] 피드백 수집 체계
14681728- [ ] 기여 환경 구축
14691729
1730+ ### 📊 Phase 3 종합 계획
1731+
1732+ | 주차 | 작업 | 우선순위 | 예상 공수 |
1733+ | ------| ------| ---------| ---------|
1734+ | ** Week 1-2** | 에러 처리 강화 | 🔴 높음 | 8-10h |
1735+ | ** Week 1-2** | 로깅 시스템 개선 | 🟡 중간 | 4-6h |
1736+ | ** Week 3-4** | 문서 & 커뮤니티 | 🟢 중간 | 20h |
1737+ | ** 합계** | - | - | ** 32-36시간** |
1738+
1739+ ** 기대 효과** : 프로덕션 안정성 한 단계 상향, 사용자 경험 개선
1740+
14701741---
14711742
14721743## 4.5 Phase 4: 생태계 확장 (1개월+)
0 commit comments