외부 연동 정비 PRD
Background
sports-application은 이미 상당한 외부 연동 모킹 인프라와 그 전환 메커니즘을 갖추고 있다. mock-pg/는 kakao·toss·naver·danal·bank_transfer·card 6개 PG사를 스키마 준수 수준으로 모킹하며 멱등성 테스트까지 갖췄다. mock-servers/README.md는 이미 mock 대상별 매핑 표를 문서화하고 있다 — kakao-local은 Kakao Local REST(주소→좌표, 실 API dapi.kakao.com)를, data-go-kr은 공공체육시설 + 기상청 단기예보 2개 서비스(실 API apis.data.go.kr/1360000/VilageFcstInfoService_2.0 등)를, solapi는 SOLAPI SMS 발송을 모사한다. 전환 메커니즘도 이미 구현돼 있다 — 백엔드 Gateway는 base-url+api-key를 env로 받아 키가 없으면 mock host(localhost:910x)를, 키가 있으면 실 API host를 바라본다. 코드 변경 없이 env만 교체하면 mock→실연동이 전환된다.
domain/facility.PublicSportsFacilityGateway·GeocodingGateway, domain/weather.WeatherGateway는 이미 이 메커니즘을 사용한다. infrastructure/weather/gateway/KmaWeatherGatewayImpl이 기상청 단기예보 연동 구현체로 이미 존재하며, data-go-kr mock 서버가 서빙하는 2개 서비스(공공체육시설, 기상청 단기예보)는 동일 호스트·동일 인증키(DATA_GO_KR_SERVICE_KEY)를 공유한다 — 즉 공공데이터포털 키 발급 1건으로 facility와 weather 두 도메인의 실연동이 동시에 가능해진다.
요구사항은 “가급적 무료로 외부 API를 연동하되 안 되면 mock 서버로 대체”를 원칙으로 제시한다. 이미 구현·문서화된 전환 메커니즘이 있으므로, 이 과제의 실체는 “구현체를 새로 만드는 것”이 아니라 **“실제 키를 발급받아 env를 설정하고, 실 API 응답이 기존 mock 스키마와 일치하는지 검증하는 것”**이다. 또한 요구사항이 언급한 “체육관, 공원, 날씨, 맵 등 외에 과제 진행 중 필요한 외부 데이터”에 대한 추가 발굴도 아직 이뤄지지 않았다.
Problem Definition
- 실제 키 발급·env 설정·실 API 응답 검증이 수행된 적이 없다 — 전환 메커니즘은 존재하지만 “실행”된 적이 없다.
- 발급 주체 기준으로 무엇이 전환 가능한지 정리된 적이 없다 —
kakao-local(카카오 계정 발급)과data-go-kr(공공데이터포털 계정 발급, facility+weather 공유)은 서로 다른 발급 주체이며,solapi는 사업자 발신번호가 필요해 개인 프로젝트에서 전환이 사실상 불가능하다는 점이 문서화된 적이 없다. - 전환 판정 기준(요청 한도가 어느 수준이면 전환하는지)이 수치화된 적이 없다.
- 스포츠앱 유즈케이스에 도움이 될 수 있는 추가 외부 데이터(대중교통, 대기질, 지역 행사 등)가 발굴된 적이 없다.
Goals / Non-Goals
Goals
- 발급 주체(카카오, 공공데이터포털, SOLAPI) 3곳 각각의 실제 무료 API 요청 한도·인증 방식을 조사한 표를 작성한다 —
mock-servers/README.md의 기존 매핑 표를 조사표의 출발점으로 삼는다. - 전환 판정 기준을 수치화한다: 무료 API의 일일 요청 한도가 1,000건 이상이면 실연동으로 전환하고, 미만이면 mock을 유지하며 사유를 기록한다.
- 전환 가능 판정된 발급 주체는 실제 키를 발급받아 env(
KAKAO_REST_API_KEY,DATA_GO_KR_SERVICE_KEY등)를 설정하고, 실 API 응답이 기존 mock 스키마와 일치하는지 검증한다. - 전환이 불가능한 항목(SOLAPI, 결제 PG)은 mock 유지 사유를 문서로 남긴다.
- 현재 다루지 않는 신규 외부 데이터 소스 후보를 3개 이상 발굴하고 스포츠앱 유즈케이스 연계 아이디어와 함께 문서화한다.
Non-Goals
- 결제 PG(토스페이먼츠·네이버페이·카카오페이) 실계약 연동 — 개인 프로젝트 특성상 사업자 계약이 불가능하므로 mock을 유지한다.
- 발굴한 신규 외부 데이터 소스의 실제 기능 개발 — 이 과제는 발굴·문서화까지이며, 기능 개발은 별도 과제로 검토한다(Open Questions).
- [상시 트래픽 시뮬레이터](../상시 트래픽 시뮬레이터/PRD.md)가 발생시키는 대량 조회 트래픽을 실연동 API로 흘려보내는 것 — 무료 API의 일일 요청 한도를 보호하기 위해, 상시 트래픽 시뮬레이터의 대량 조회는 실연동 전환 여부와 무관하게 계속 mock을 사용한다(아래 NFR 참조).
User Scenarios
페르소나: 백엔드 개발자(본인).
- 해피 패스 — 조사표 활용:
facility도메인을 개발하다가 “이 데이터가 실제 API인지 mock인지” 궁금할 때mock-servers/README.md+ 본 과제 조사표를 확인해 즉시 판단한다. - 해피 패스 — 실연동 전환: 공공데이터포털 키(
DATA_GO_KR_SERVICE_KEY) 1건을 발급받아 env에 설정하면, 코드 변경 없이facility(공공체육시설)와weather(기상청 단기예보) 두 도메인이 동시에 실연동으로 전환된다. - 예외 — 요청 한도 부족: SOLAPI처럼 실연동에 사업자 발신번호가 필요해 개인 프로젝트에서 전환 불가능한 경우, mock 유지 사유로 기록하고 결제 PG와 함께 분류한다.
- 빈 상태: 아직 조사되지 않은 신규 데이터 소스 후보는 “발굴 대기” 상태로 표에 기록된다.
Benchmarking
| 제품명 | 카테고리 | 참조 패턴 | URL |
|---|---|---|---|
| Kakao Local REST (dapi.kakao.com) | 주소→좌표 지오코딩 Open API | REST API Key 발급 후 무료로 사용 가능하며, mock-servers/kakao-local이 모사하는 실 API의 정확한 대상 — EXTERNAL_GEOCODING_BASE_URL env 전환의 실체 | Kakao 지도 Web API |
| 공공데이터포털 기상청 단기예보(VilageFcstInfoService_2.0) | 정부 공공데이터 Open API | 인증키(DATA_GO_KR_SERVICE_KEY) 1건으로 공공체육시설·기상청 단기예보 2개 서비스를 함께 사용할 수 있으며, 무료로 제공되고 상업적 활용도 조건부 허용 — mock-servers/data-go-kr이 모사하는 실 API의 정확한 대상 | 공공데이터포털 활용법 |
Functional Requirements
| ID | 요구사항 | 우선순위 |
|---|---|---|
| FR-1 | mock-servers/README.md의 매핑 표를 출발점으로, 발급 주체 3곳(카카오, 공공데이터포털, SOLAPI) 각각의 일일 요청 한도·인증 방식·발급 절차를 조사한 표를 작성한다 | P0 |
| FR-2 | 전환 판정 기준(일일 요청 한도 1,000건 이상 → 전환, 미만 → mock 유지)을 적용해 카카오·공공데이터포털 키를 발급받고, KAKAO_REST_API_KEY/DATA_GO_KR_SERVICE_KEY env를 설정한 뒤 실 API 응답이 기존 mock 스키마와 일치하는지 검증한다(구현체 신규 개발이 아니라 키 발급+env 설정+응답 검증이다) | P0 |
| FR-3 | 공공데이터포털 키 전환이 facility(공공체육시설)와 weather(기상청 단기예보) 두 도메인에 동시 적용됨을 확인한다(동일 키 공유) | P0 |
| FR-4 | 신규 외부 데이터 소스 후보를 3개 이상 발굴해 스포츠앱 유즈케이스 연계 아이디어와 함께 문서화한다 | P1 |
| FR-5 | SOLAPI(사업자 발신번호 필요)는 전환 불가 항목으로 분류하고, 결제 PG와 함께 “mock 유지 사유” 표에 기록한다 | P1 |
Non-Functional Requirements
- 실연동으로 전환한 API는 개발·정합성 검증 목적의 저빈도 호출에 한정한다 — [상시 트래픽 시뮬레이터](../상시 트래픽 시뮬레이터/PRD.md)의 대량 조회 트래픽은 무료 API 요청 한도를 보호하기 위해 계속 mock을 사용한다(Non-Goals 참조).
- API 키는
.zshrc등 환경변수로만 주입한다 — 코드·문서에 평문 노출 0건을 유지한다.
Operations
- 실연동 전환된 외부 API 호출(개발용 저빈도 호출)의 실패율·레이턴시를 [옵저버빌리티 스택 도입](../옵저버빌리티 스택 도입/PRD.md) 대시보드에 노출한다.
- 무료 API의 일일 요청 한도 80% 도달 시 알림을 발송한다([지능형 장애 알림](../지능형 장애 알림/PRD.md) 채널 활용 여부는 해당 과제와 조율).
Success Metrics
- 조사표가 발급 주체 3곳(카카오, 공공데이터포털, SOLAPI) 전체를 커버한다.
- 공공데이터포털 키 발급으로
facility·weather2개 도메인이 동시에 실연동 전환 완료. - 카카오 키 발급으로
facility의 지오코딩이 실연동 전환 완료. - 신규 발굴 외부 데이터 소스 3개 이상 문서화 완료.
Milestones
- M1: 발급 주체 3곳 조사표 작성(FR-1).
- M2: 전환 판정 기준 적용, 카카오·공공데이터포털 실연동 전환(FR-2, FR-3).
- M3: SOLAPI mock 유지 분류, 신규 데이터 소스 발굴(FR-4, FR-5).
의존 없음 — [도메인 경계 재설계](../도메인 경계 재설계/PRD.md)와 독립적으로 병행 가능하다.
Open Questions
- 신규 발굴 데이터 소스를 실제 기능으로 개발할지 여부와, 개발한다면 어느 과제로 편입할지 결정이 필요하다.
- 전환 판정 기준(일일 요청 한도 1,000건)이 향후 실제 사용량 대비 적정한지, 실연동 이후 재조정이 필요한지는 M2 진행 중 재검토한다.
Document History
| 날짜 | 변경 내용 |
|---|---|
| 2026-07-03 | 최초 작성 |
| 2026-07-03 | 재검수 1차 반영: AS-IS 대량 정정(KmaWeatherGatewayImpl 기존 구현, mock-servers/README.md 기존 매핑 문서, data-go-kr의 공공체육시설+기상청 2종 서빙, facility·weather 키 공유 확인), FR-2를 “구현체 전환”에서 “키 발급+env 설정+응답 검증”으로 재정의, 조사 단위를 “mock 5개”에서 “발급 주체 3곳”으로 재구성, 전환 판정 기준 수치화(일 한도 1,000건), SOLAPI를 PG와 함께 mock 유지 후보로 선분류, Benchmarking을 실제 전환 대상(dapi.kakao.com, VilageFcstInfoService)에 맞게 수정 |