Node.js와 Gemini API로 비교 데이터 자동으로 추출하고 Excel로 만들기

린린린·2026년 1월 14일

장기렌트 랜딩 페이지를 진행하면서 새로운 업무에 도전해보고자
ai를 이용하여 비교 분석 데이터를 추출해서 보다 보기 쉽게 차량 비교하는 파트를 구현
초기구현 문제점!!
페이지별 api를 호출 -> 비용, 로딩 문제 발생
수정!!
초기 데이터 1회 추출 -> 파일로 저장 -> 디비 삽입

1. 개요

자동차 비교 콘텐츠를 만들 때 가장 번거로운 부분은
차량마다 조건을 조사해서 표로 정리하는 작업이다.

이 글에서는
Gemini API를 이용해 차량명을 던지면
AI가 비교 데이터를 JSON으로 만들고
Node.js가 이를 엑셀로 저장하는 자동화 파이프라인을 구현한다.

차량 리스트 → Gemini API → JSON → Excel(xlsx)

2. 개발 환경

  • Node.js 18+
  • Gemini API Key
  • npm 또는 yarn
npm install axios xlsx

3. 프로젝트 구조

  • index.js
project/
│── index.js
│── carList.js
│── .env
└── package.json

.env

GEMINI_API_KEY=YOUR_API_KEY
MODEL=gemini-2.5-flash

4. 차량 목록 (carList.js)

module.exports = [
  { id: 1, name: "아반떼" },
  { id: 2, name: "쏘나타" },
  { id: 3, name: "그랜저" }
];

5. Gemini API 호출 함수

async function callGemini(carName) {
  const prompt = `
  "${carName}" 차량에 대해 다음 항목들의 '장기렌트 vs 자동차리스' 비교 데이터를
  JSON 형식으로 만들어줘.

  형식:
  {
    "항목명": {
       "장기렌트": "내용",
       "자동차리스": "내용"
    }
  }

  항목 목록:
  - 초기비용
  - 번호판
  - 보험료
  - 차량관리
  - 만기 후
  - 세제혜택
  - 총평

  규칙:
  - JSON만 출력
  - 설명/문장/불필요한 텍스트 금지
  - 아이콘(✅,❌,🚗,🏢 등) 간단히 사용
  `;

  const url = `https://generativelanguage.googleapis.com/v1beta/models/${MODEL}:generateContent?key=${GEMINI_API_KEY}`;

  const body = {
    contents: [
      {
        parts: [{ text: prompt }]
      }
    ]
  };

  const res = await axios.post(url, body, {
    headers: { "Content-Type": "application/json" }
  });

  const text = res.data?.candidates?.[0]?.content?.parts?.[0]?.text ?? "";
  return text.replace("```json", "").replace("```", "");
}

6. 차량별 반복 호출 및 데이터 수집

async function run() {
  const rows = [];

  for (const car of carList) {
    console.log(`처리중: ${car.name}`);

    const jsonText = await callGemini(car.name);

    let parsed;
    try {
      parsed = JSON.parse(jsonText);
    } catch (e) {
      console.error("JSON 파싱 오류:", jsonText);
      continue;
    }

    rows.push({
      model_id: car.id,
      model_name: car.name,
      summary_contents: JSON.stringify(parsed, null, 2),
    });

    await new Promise((res) => setTimeout(res, 1200)); // API 부하 방지
  }
  /* 엑셀 파일 생성 */
  const worksheet = XLSX.utils.json_to_sheet(rows);
  const workbook = XLSX.utils.book_new();
  XLSX.utils.book_append_sheet(workbook, worksheet, "CarData");

  XLSX.writeFile(workbook, "car_summary1.xlsx");

  console.log("car_summary1.xlsx 생성 완료!");
}

run();

8. 생성된 엑셀 구조

model_idmodel_namesummary_contents
1아반떼{ "초기비용": {...}, ... }
2쏘나타{ ... }

Gemini를 그냥 채팅용으로 쓰지 말고 구조화된 데이터 생성기로 쓰면 업무 자동화에 바로 연결 가능합니다.

이 패턴은 견적서, 상품 비교, 요금표, 스펙표 등
모든 정형 데이터 생성에 그대로 적용 가능

이 글과 코드를 보시고 개선할 부분이나 궁금한 점이 있으면 편하게 댓글이나 메시지로 알려주세요.💪
여러분의 피드백 덕분에 더 나은 콘텐츠를 만들 수 있습니다.
함께 성장해 나가요!

profile
개발은모르겠고일단기록

0개의 댓글