DateP

📌 Firebase Functions에서 플랜별 장소 검색 API 개선 계획

Solo.dev 2025. 2. 19. 00:32

📌 현재 상황 정리

현재 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을 자동으로 설정하고, 클라이언트가 해당 엔드포인트를 선택해서 요청하는 방식으로 설계하면 해결됨!