chore: 조회 엔드포인트 공개화, write 만 키 필요 #49

Merged
xhh merged 1 commit from chore/public-read-api into main 2026-04-23 02:27:20 +09:00
Owner

Summary

read 엔드포인트는 전부 공개, write 만 X-API-Key + write 스코프 로 보호. FRED/SEC/FINRA 기반 퍼블릭 데이터라 공개에 문제 없고, Streamlit 배포 흐름의 복잡도 대폭 감소.

  • main.py 에서 _AUTH_DEPS 제거 (9개 라우터 전부 평문으로)
  • write 엔드포인트는 기존 require_scope("write") 가 담당 → 없으면 401, 스코프 부족이면 403
  • Streamlit utils/api.py 에서 DEFAULT_READ_API_KEY 폴백 제거
  • docker-compose.yml / .env.example 에서 관련 env 삭제
  • README.md 'API 인증' 섹션 재작성, curl 예시 read/write 분리, Cloudflare 와일드카드 전제 반영
  • 회귀 테스트 5건 추가 (test_public_read.py): AUTH_DISABLED 를 0 으로 덮어 실 인증 플로우 재현

Test plan

  • ruff clean
  • 85 tests pass (80 → 85)
  • 신규 회귀 테스트가 _AUTH_DEPS 복구 시 빨간불을 보장

태그 찍기 전에 병합해서 #44 배포 플로우에서 read-only 키 발급 단계를 제거.

## Summary read 엔드포인트는 전부 공개, write 만 `X-API-Key + write 스코프` 로 보호. FRED/SEC/FINRA 기반 퍼블릭 데이터라 공개에 문제 없고, Streamlit 배포 흐름의 복잡도 대폭 감소. - `main.py` 에서 `_AUTH_DEPS` 제거 (9개 라우터 전부 평문으로) - write 엔드포인트는 기존 `require_scope("write")` 가 담당 → 없으면 401, 스코프 부족이면 403 - Streamlit `utils/api.py` 에서 `DEFAULT_READ_API_KEY` 폴백 제거 - `docker-compose.yml` / `.env.example` 에서 관련 env 삭제 - `README.md` 'API 인증' 섹션 재작성, curl 예시 read/write 분리, Cloudflare 와일드카드 전제 반영 - 회귀 테스트 5건 추가 (`test_public_read.py`): AUTH_DISABLED 를 0 으로 덮어 실 인증 플로우 재현 ## Test plan - [x] ruff clean - [x] 85 tests pass (80 → 85) - [x] 신규 회귀 테스트가 `_AUTH_DEPS` 복구 시 빨간불을 보장 태그 찍기 전에 병합해서 #44 배포 플로우에서 read-only 키 발급 단계를 제거.
chore: 조회 엔드포인트 공개화, write 만 키 필요
All checks were successful
Tests (PR) / pytest (pull_request) Successful in 29s
e73dc3386f
라우터 전역 `_AUTH_DEPS = [Depends(require_api_key)]` 를 제거. 이제
조회 엔드포인트는 키 없이 공개, write 는 개별 엔드포인트에 이미 붙은
`require_scope("write")` 가 내부적으로 require_api_key 를 호출해 401/403.

이 플랫폼이 FRED/SEC/FINRA 같은 퍼블릭 소스를 가공한 데이터라 read 공개에
법적·윤리적 문제 없음. Streamlit 컨테이너의 read 폴백 키 복잡도를 제거해
배포 플로우가 깨끗해진다.

정리
----
- `main.py` — `_AUTH_DEPS` 삭제. 라우터 9개 전부 깨끗하게 include.
  `require_api_key` import 도 제거.
- `frontend/streamlit/utils/api.py` — `_api_key()` 가 더 이상
  `DEFAULT_READ_API_KEY` 를 참조하지 않음. 사이드바 입력 설명도
  "write 전용" 으로 명시.
- `docker-compose.yml` — streamlit 서비스의 `DEFAULT_READ_API_KEY` env 제거.
- `.env.example` — `DEFAULT_READ_API_KEY` 섹션 삭제.
- `README.md` — "API 인증" 섹션 재작성 (read 공개 / write 키). curl 예시
  read/write 로 분리. Streamlit 배포 섹션에서 read-only 키 발급 절차 제거.
  Cloudflare 와일드카드 라우팅 전제 반영.
- `tests/api/test_public_read.py` 신규 회귀 테스트 5건:
  read 공개 / write 401 / admin 401 / public routes 항상 오픈.
  API_AUTH_DISABLED=0 을 monkeypatch 로 설정해 실 인증 플로우 재현.

85 tests pass (80 → 85).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
xhh merged commit 06de53b965 into main 2026-04-23 02:27:20 +09:00
xhh deleted branch chore/public-read-api 2026-04-23 02:27:20 +09:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
xhh/financial-data-platform!49
No description provided.