[NestJS] 네이버 뉴스 카테고리 지정하기 (1)

2026. 3. 28. 11:22·Development/Back-end

네이버 API 를 사용해 뉴스를 크롤링하고 반환 데이터를 보니 카테고리가 포함되지 않았다.

뉴스를 카테고리별로 조회하는 기능을 구현하기 위해 우선 뉴스를 카테고리별로 분류해야 했다.

이번 포스트에서는 Groq API로 뉴스에 카테고리를 지정하는 기능을 구현하는 과정을 작성해보겠다.

 

사실 처음은 Gemini 였다

처음엔 Gemini API 무료 티어를 사용했었다.

const response = await fetch(
  `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${apiKey}`,
  {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      contents: [{
        parts: [{
          text: `다음 뉴스를 카테고리 중 하나로 분류해주세요.
카테고리: POLITICS, ECONOMY, SOCIETY, LIFE, IT_SCIENCE, WORLD
제목: ${title}
내용: ${description}
카테고리 이름만 반환하세요.`,
        }],
      }],
    }),
  },
);

 

그런데 429가 발생했다. 뉴스 10개를 Promise.all()로 병렬처리 하면서 한도 초과가 뜬 것이다.

※ Gemini의 무료 티어 한도는 분당 15회이다.

 

임시적으로 Promise.all를 for...of 순차 처리로 바꾸고 딜레이를 적용했더니 응답이 느려져서 Gemini를 Groq으로 바꾸기로 결정했다.

 

Groq AI 를 사용한 카테고리 지정 구현

Groq 무료 티어는 Gemini와 달리 분당 30회까지 요청 가능하며 하루 한도가 14,400회이기 때문에 병렬 처리가 가능하다. 응답 속도도 LPU 기반이라 더 빠르다고 한다.

const response = await fetch('https://api.groq.com/openai/v1/chat/completions', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${apiKey}`,
  },
  body: JSON.stringify({
    model: 'llama-3.3-70b-versatile',
    max_tokens: 20,
    messages: [
      {
        role: 'system',
        content: '당신은 뉴스 카테고리 분류기입니다. 반드시 주어진 카테고리 중 하나만 반환하세요.',
      },
      {
        role: 'user',
        content: `카테고리: POLITICS, ECONOMY, SOCIETY, LIFE, IT_SCIENCE, WORLD
제목: ${title}
내용: ${description}
카테고리 이름만 반환하세요.`,
      },
    ],
  }),
});

 

최종 흐름

뉴스 10개 병렬 처리 (Promise.all)

→ 각 뉴스 제목/내용을 Groq API로 전송

→ llama-3.3-70b 모델이 카테고리 분류

→ Category enum 값으로 변환 (실패 시 SOCIETY 기본값)

→ NewsItem에 category 포함하여 반환

 

 

 

다음 포스트에서 카테고리별 뉴스 조회를 구현하겠다.

 

감사합니다 ( ̄﹃ ̄)

'Development > Back-end' 카테고리의 다른 글

[NestJS] 네이버 뉴스 카테고리 지정하기 (3)  (0) 2026.03.28
[NestJS] 네이버 뉴스 카테고리 지정하기 (2)  (0) 2026.03.28
[NestJS] Pipe 사용하기  (1) 2026.02.26
[Spring Boot] 어댑터 패턴 구현하기(with. JPA, Redis)  (0) 2025.12.26
[Spring Boot] @Data 알고 쓰기  (0) 2025.11.26
'Development/Back-end' 카테고리의 다른 글
  • [NestJS] 네이버 뉴스 카테고리 지정하기 (3)
  • [NestJS] 네이버 뉴스 카테고리 지정하기 (2)
  • [NestJS] Pipe 사용하기
  • [Spring Boot] 어댑터 패턴 구현하기(with. JPA, Redis)
knhye
knhye
  • 전체
    오늘
    어제
  • knhye
    3n1hye_
    knhye
  • 링크

    • GitHub
    • 분류 전체보기 (61)
      • Development (28)
        • Back-end (21)
        • DB (3)
        • CS (4)
      • Algorithm (6)
      • DevOps (10)
        • git (1)
        • Cloud Platform (5)
        • CICD (1)
        • Cloud Native (2)
      • Internet (2)
      • 매일메일 (6)
      • 회고 (5)
        • Capstone (2)
        • Hackathon (1)
        • 2025 (2)
      • 자격증 (1)
      • 블로그 리딩 (3)
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
knhye
[NestJS] 네이버 뉴스 카테고리 지정하기 (1)
상단으로

티스토리툴바