"뉴스를 자동으로 가져오는 건 어렵지 않아요. 근데 가져온 내용이 너무 지저분해서 쓸 수가 없더라고요."

맞아요. 인터넷상의 데이터는 대부분 정제되지 않은 **원석(Raw Data)**입니다. 우리는 이 거친 원석에서 **보석(정보)**만 캐내야 해요.

개발자들은 이 작업을 **파싱(Parsing)**이라고 부릅니다. 생선 가시를 발라내고 살코기만 남기는 작업과 같죠.

RSS 데이터 파싱 과정

오늘 우리는:

  1. RSS로 뉴스를 안전하게 수집하고 (재료 구하기)
  2. 파싱으로 제목과 링크만 뽑아내고 (손질하기)
  3. GPT에게 3줄 요약을 시킬 거예요. (요리하기)

이 글을 읽고 나면

  • RSS가 뭔지, 왜 크롤링보다 안전하고 편한지 알 수 있어요.
  • 노드(Node.js) 환경에서 데이터를 가져오는 코드를 실행할 수 있어요.
  • 지저분한 데이터에서 원하는 정보만 쏙 빼내는 법을 배우게 돼요.

1. 재료 구하기: 크롤링 vs RSS

데이터를 수집하는 방법은 크게 두 가지가 있습니다.

1) 크롤링 (Crawling): "도둑" 🥷

남의 사이트(HTML)를 몰래 긁어가는 방식입니다.

  • 장점: 화면에 보이는 건 다 가져올 수 있음.
  • 단점: 사이트 구조가 바뀌면 에러 남. 주인이 싫어해서 차단될 수 있음.

2) RSS: "전단지" 📄

"제발 우리 소식 좀 가져가주세요" 하고 사이트 주인이 대문 앞에 놔둔 정리된 문서입니다.

  • 장점: 구조가 안 바뀜(XML 표준). 합법적이고 안전함.
  • 단점: RSS를 제공하는 사이트만 가능함. (다행히 구글 뉴스는 제공합니다!)

우리는 초보자에게 안전하고 확실한 RSS를 쓸 거예요.


2. 실전: 뉴스 수집기 만들기

자, 이제 코드를 짤 시간입니다. 이번 프로젝트는 브라우저가 아니라, 내 컴퓨터 내부(터미널)에서 돌아가는 Node.js 프로그램이에요.

1단계: 프로젝트 세팅

터미널을 열고 새 폴더를 만들어서 시작해봅시다.

mkdir my-news-bot
cd my-news-bot
npm init -y

그리고 RSS를 읽어주는 도구(rss-parser)를 설치합니다.

npm install rss-parser

2단계: AI에게 코드 요청하기

이제 AI(신입사원)에게 일을 시켜봅시다. **"RSS 주소에서 데이터를 가져와서, 제목과 링크만 보여줘"**라고 할 거예요.

🧑🏻‍💻 나 (팀장)

"Node.js로 짤 거야. rss-parser 라이브러리를 써서 구글 뉴스 RSS('인공지능' 검색 결과)를 읽어오는 코드를 index.js에 짜줘. 가져온 기사 중 최신 3개의 제목링크만 콘솔에 깔끔하게 출력해줘."

🤖 AI (신입사원)

"네! rss-parser로 구글 뉴스 RSS를 파싱하는 코드를 작성할게요. output은 이렇게 나올 거예요."

// AI가 짜준 코드 예시 (index.js)
const Parser = require('rss-parser');
const parser = new Parser();

(async () => {
  // 구글 뉴스 RSS 주소 (인공지능 검색)
  const feed = await parser.parseURL('https://news.google.com/rss/search?q=인공지능&hl=ko&gl=KR&ceid=KR:ko');

  console.log(`=== '${feed.title}' 최신 뉴스 ===`);
  
  // 최신 3개만 반복
  feed.items.slice(0, 3).forEach(item => {
    console.log(`[제목] ${item.title}`);
    console.log(`[링크] ${item.link}`);
    console.log('-------------------');
  });
})();

3단계: 실행 및 확인 (휴먼터치 ✋)

코드를 저장했다면 직접 실행해봐야죠.

node index.js

터미널에 뉴스가 쫙 뜨나요? 축하합니다! 여러분은 방금 **인터넷상의 데이터를 내 컴퓨터로 납치(?)**해온 거예요.


3. 요리하기: GPT로 요약까지?

자, 제목만 가져오니까 좀 아쉽죠? 내용을 3줄로 요약까지 해주면 완벽할 것 같아요.

여기서는 OpenAI API를 써야 하는데, 이건 유료(물론 아주 쌉니다)라서 아직 카드를 등록하지 않은 분들을 위해 개념만 먼저 잡고 갈게요.

🧑🏻‍💻 나 (팀장)

"좋아. 이제 이 제목이랑 링크를 가지고 GPT한테 요약을 시키고 싶어. openai 라이브러리를 써서, 각 기사 제목을 3줄로 요약하는 코드를 추가해줘."

🤖 AI (신입사원)

"네, feed.items를 돌면서 각 제목을 GPT 프롬프트에 넣으면 됩니다. '다음 뉴스 제목을 보고 핵심 내용을 3줄로 요약해줘: [제목]' 이렇게요."

[!TIP] 왜 본문을 안 긁어와요? 뉴스 사이트마다 본문 구조가 달라서, 본문을 긁어오려면 훨씬 복잡한 크롤링(Puppeteer 등)이 필요해요. 초보 때는 **'제목을 보고 내용을 추측해서 요약해줘'**라고만 해도 충분히 쓸만합니다. (가성비 최고!)


오늘의 핵심 정리

크롤링 vs RSS: 훔쳐오기(크롤링)보다 받아오기(RSS)가 훨씬 편하고 안전하다. ✅ 파싱(Parsing): 복잡한 데이터(feed)에서 내가 필요한 알맹이(.title, .link)만 골라내는 기술. ✅ Node.js: 브라우저 없이 내 컴퓨터에서 자바스크립트를 실행하는 환경.


셀프체크

□ 웹사이트의 데이터를 합법적이고 구조적으로 가져오는 방법은? (힌트: 전단지) □ 가져온 데이터에서 필요한 정보만 추출하는 과정을 뭐라고 부르나요? □ npm install 명령어는 무엇을 할 때 쓰나요?

정답 보기
  1. RSS
  2. 파싱 (Parsing)
  3. 외부 라이브러리(도구) 설치

다음 글 예고

재료(뉴스 데이터)는 준비됐습니다. 이제 이걸 나한테 배달해줄 배달원이 필요하겠죠?

다음 시간에는 **[27편: 슬랙 봇 만들기]**를 통해, 방금 가져온 뉴스를 내 슬랙 채널로 "띠링!" 하고 보내는 법을 배울 거예요. **웹훅(Webhook)**의 마법을 직접 경험해보세요!


이 시리즈 로드맵

PART 6: 자동화 프로젝트
[ 25편 ] 자동화 아이디어
   ↓
[ 26편 ] 데이터 수집/정리 (재료 준비 완료! ✅)
   ↓
[ 27편 ] 슬랙 봇 만들기 (다음 편)
   ↓
[ 28편 ] 정기 실행

여러분이 오늘 수집한 뉴스 첫 번째 제목은 뭐였나요? 댓글로 알려주세요!