DateP

DateP Project: 2025년 3월 17일 - 다국어 랜덤 추천 및 Perplexity API로 Free 플랜 업그레이드

Solo.dev 2025. 3. 18. 00:12

 

2025년 3월 18일에 진행한 DateP Project 작업을 요청하신 대로 정리해보겠습니다.

작업 내용은 두 가지 주요 업데이트로 나뉘며, 아래에 상세히 설명드립니다.


1. searchPlacesHandler.ts 수정: 언어별 랜덤 수식어 추가

  • 목적: Basic과 Premium 플랜에서 places 데이터를 관리하는 로직을 개선하여, 매번 동일한 데이터가 아닌 다양한 데이터를 반환하도록 함.
  • 수정 내용:
    • 언어별로 랜덤 수식어(Random Adjectives)를 정의.
    • 예를 들어, "good", "great", "cozy" 같은 수식어를 언어별로 설정(영어: "cozy", 한국어: "아늑한", 일본어: "居心地の良い" 등).
    • 이 수식어를 places 데이터 요청에 동적으로 추가하여 반환되는 결과에 변화를 줌.
  • 효과:
    • 동일한 장소 데이터가 반복되지 않고, 사용자에게 더 다채로운 추천을 제공.
    • 예: "Seoul 근처 맛집" → "Seoul 근처 아늑한 맛집", "Seoul 근처 훌륭한 맛집" 등.
  • 구현 예시 (의사 코드):
    const adjectives: Record<string, string[]> = {
      ko: ["아늑한", "훌륭한", "맛있는"],
      en: ["cozy", "great", "tasty"],
      ja: ["居心地の良い", "素晴らしい", "美味しい"]
    };

    const getRandomAdjective = (lang: string) => {
      const options = adjectives[lang] || adjectives["en"];
      return options[Math.floor(Math.random() * options.length)];
    };

    const query = `${meetingPlace} 근처 ${getRandomAdjective(language)} 데이트 장소`;

2. onlygpt.ts 수정: GPT 삭제 및 PERPLEXITY_API로 전환

  • 목적: Free 플랜에서 기존 GPT+Unsplash 기반의 장소 데이터를 PERPLEXITY_API로 대체하여 실시간, 실제 장소 정보를 가져오도록 개선.
  • 기존 문제점:
    • GPT는 실시간 데이터를 반영하지 못해 최신 장소 정보를 제공하지 못함.
    • 반환 데이터가 실제 장소와 맞지 않거나 부정확한 경우가 빈번.
  • 수정 내용:
    • GPT 삭제: GPT 호출 로직 제거.
    • PERPLEXITY_API 도입: sonar 모델을 사용하여 실시간 웹 데이터를 기반으로 장소 정보 수집.
    • 반환 필드: displayname, googlemapslink, rating, price, type, description을 PERPLEXITY_API로부터 받아옴.
    • Modal에 이 데이터를 띄우도록 UI 연결.
  • 장점:
    • 실시간으로 실제 장소 데이터를 가져와 정확성 향상.
    • 예: "Los Angeles 근처 맛집" 요청 시, 실제 존재하는 레스토랑 정보 반환.
  • PERPLEXITY_API 비용:
    • Sonar 기본 버전: 1회 요청당 약 $0.0002 ~ $0.0003.
    • 2025년 3월 환율($1 = 1,400원 가정) 기준: 약 0.28원 ~ 0.42원.
    • 저렴한 비용으로 Free 플랜에서도 충분히 활용 가능.

수정된 onlygpt.ts 일부 예시

export async function getPlaceInfoWithImage(
  meetingPlace: string,
  language: LanguageCode,
  userAge: number,
  userHobby: string
): Promise<GptPlace[]> {
  try {
    console.log("onlygpt.ts - API 키:", PERPLEXITY_API_KEY);
    const exampleResponse = exampleResponses[language] || exampleResponses["en"];

    const response = await axios.post(
      {
        model: "sonar",
        messages: [
          {
            role: "system",
            content: `
            `,
          },
          {
            role: "user",
            content: `Recommend 3 great dating spots near ${meetingPlace}. ,
            Respond strictly in **${language}** and in **valid JSON format only** (no additional text outside the JSON).`},
        ],
      },
      {
        headers: {
          "accept": "application/json",
          "content-type": "application/json",
          "Authorization": `Bearer ${PERPLEXITY_API_KEY}`,
        },
      }
    );

오늘(2025년 3월 18일) 작업 정리

  1. searchPlacesHandler.ts 업데이트:
    • 언어별 랜덤 수식어 도입.
    • 동일 places 데이터 반복 방지, 다양한 결과 제공.
  2. onlygpt.ts 업데이트:
    • GPT 제거, PERPLEXITY_API(sonar-pro)로 전환.
    • 실시간 장소 데이터(displayname, googlemapslink, rating, price, type, description) 반환.
    • price가 없을 경우 "None" 반환하도록 프롬프트 수정.
    • 비용: Sonar 기본 버전 기준 요청당 0.28원 ~ 0.42원 (2025년 3월 환율 기준).

결과

  • Basic/Premium 플랜: searchPlacesHandler.ts로 더 풍부한 데이터 경험 제공.
  • Free 플랜: PERPLEXITY_API로 실시간, 정확한 장소 정보 반환, Modal에 표시.
  • 비용 효율성: Sonar 모델의 저렴한 가격으로 Free 플랜 유지 가능.