📌 현재 상황 정리
현재 functions/src/handlers/searchPlacesHandler.ts와 functions/src/utils/getGPTanalysis.ts를 생성하여
**3개의 엔드포인트 (/search/free, /search/basic, /search/premium)**를 만들고 있음.
현재 index.ts에서 searchPlacesHandler를 그대로 호출하는 방식인데,
이를 개선하여 공통 로직을 분리하고, 핸들러가 각 플랜을 자동으로 인식하도록 변경할 계획.
📌 내일 해야 할 일 (리팩토링 계획)
✅ 1. 공통 로직을 별도 유틸 파일로 분리
핸들러에서 직접 처리하던 로직을 유틸 함수로 분리하여 유지보수성을 향상
- fetchPlacesFromGoogle.ts → Google Places API 요청 전담
- filterPlacesData.ts → 응답 데이터를 필터링하여 필요한 정보만 유지
- processPlanWithAI.ts → AI 기반 추천 적용 (basic과 premium 플랜에서만 사용)
✅ 2. searchPlacesHandler.ts에서 중복 로직 제거
- 분리된 유틸 함수들을 가져와서 호출하는 역할만 수행
- API 요청, 데이터 필터링, AI 분석 등의 구체적인 작업은 분리된 유틸 함수에서 처리
✅ 3. index.ts에서 searchPlacesHandler 호출 시 플랜 값을 자동으로 전달기존:

- 각 엔드포인트에서 자동으로 plan을 설정하여 전달
- 클라이언트가 plan 값을 조작할 수 없도록 보안 강화
✅ 4. 테스트 진행
- Firebase Emulator에서 /search/free, /search/basic, /search/premium 테스트
- Basic과 Premium 플랜에서 AI 분석이 정상 작동하는지 확인
📌 내일 작업 순서 (Step-by-Step)
✅ 1️⃣ functions/src/utils/fetchPlacesFromGoogle.ts 생성
- Google Places API 요청을 담당하는 함수 분리
✅ 2️⃣ functions/src/utils/filterPlacesData.ts 생성
- API 응답을 정리하는 필터링 함수 분리
✅ 3️⃣ functions/src/utils/processPlanWithAI.ts 생성
- AI 분석이 필요한 경우 실행하는 함수 분리
✅ 4️⃣ searchPlacesHandler.ts 리팩토링
- 분리된 유틸 함수들을 사용하여 핸들러가 단순해지도록 변경
✅ 5️⃣ index.ts 수정
- searchPlacesHandler를 호출할 때 플랜을 명확하게 지정하여 호출
✅ 6️⃣ Firebase Emulator에서 API 테스트
- 각 플랜별로 올바르게 응답이 오는지 확인

📌 리팩토링 후 기대 효과
✔ 코드 재사용성 증가 → API 호출, 데이터 필터링, AI 적용을 분리하여 관리 가능
✔ 핸들러가 단순해짐 → searchPlacesHandler.ts는 필요한 함수를 호출하는 역할만 수행
✔ 클라이언트는 엔드포인트만 변경하면 됨 → /search/free, /search/basic, /search/premium 자동 적용
✔ 보안성과 유지보수성 증가 → plan 값이 클라이언트에서 변경되는 것을 방지하고, 서버에서 엔드포인트별로 확실하게 처리
✔ 테스트 및 디버깅 용이 → 분리된 유틸 함수 덕분에 각각의 기능을 독립적으로 테스트 가능
🎯 결론
💡 엔드포인트에서 plan을 자동으로 설정하고, 클라이언트가 해당 엔드포인트를 선택해서 요청하는 방식으로 설계하면 해결됨!
'DateP' 카테고리의 다른 글
| 🔥 DateP 개발일지: Free Plan에서 장소별 대표 이미지 가져오기 (0) | 2025.02.22 |
|---|---|
| 2025 02 20 (1) | 2025.02.20 |
| ✅ 📌 오늘 작업한 내용 정리 (2025-02-11) (0) | 2025.02.12 |
| ✅ 2025 02 11 Datep 수정사항 정리 (0) | 2025.02.11 |
| ProfileSeup,placeProvider 구현 다양한 문제 직면 (0) | 2025.02.08 |