업무 관련 뉴스레터 자동화 프로젝트 (최종 업데이트!!)

업무 관련 뉴스레터 자동화 프로젝트 (최종 업데이트)

소개

이번 GPTERS 스터디의 일환으로, AI 도구를 활용하여 뉴스레터 자동화 시스템을 구축하였습니다. 업무 중 새로운 분야나 이슈에 빠르게 적응하기 위해서는 관련 업계의 최신 뉴스를 지속적으로 접하는 것이 중요합니다.

하지만 매일 여러 사이트를 방문하고, 영어로 된 기사를 일일이 번역하는 것은 상당한 시간과 노력이 필요하죠. 이러한 번거로움을 해소하고자, 원하는 키워드만 설정하면 자동으로 관련 뉴스가 뉴스레터 형식으로 전달되는 시스템을 만드는 것을 목표로 하였습니다.

최근에는 newsdata.io API를 추가로 통합하고, Gemini API를 활용하여 번역 품질을 개선하였으며, AI 요약 기능을 더욱 전문화하고 구조화하였습니다. 또한, 웹앱 형태로 시스템을 개발하여 주변인들도 뉴스레터를 구독할 수 있도록 하였으며, 웹앱에서 키워드, 주기, 이메일을 입력하면 자동으로 환영 메일과 뉴스레터 발송이 시작되도록 설정하였습니다.

목표 설정

1. 목표 설정 : 뉴스레터 자동화 시스템 구축

  • 목표: 특정 키워드를 기반으로 뉴스 기사 제목, 요약, 번역, 이미지 등을 자동으로 수집하여 이메일로 발송하는 시스템 구현.

  • 필요성: 새로운 업무 영역에 대한 빠른 적응과 정보 습득을 위한 효율적인 도구 필요.

2. 사용 도구 및 기술

  • ChatGPT o1 preview: 초기 코드 작성 및 아이디어 생성.

  • Claude 3.5: 문제 해결 및 코드 최적화.

  • Google Apps Script: 자동화 코드 작성, 메일 발송 기능 구현, 웹앱 개발.

  • NewsAPI 및 네이버 뉴스 API: 뉴스 데이터 수집.

  • newsdata.io API: 추가적인 뉴스 소스 확보를 위해 통합.

  • Gemini API: 번역 품질 개선 및 AI 요약 기능 강화.

  • Google Apps Script 번역 기능: 초기 번역 기능 구현.

  • HTML/CSS/JavaScript: 웹앱 인터페이스 개발.

  • o1 preview : 초기 코드 작성 및 아이디어 생성.

진행 과정

1. 초기 시스템 설계 및 코드 작성

  • ChatGPT o1 preview와 Claude 3.5 sonnet를 활용하여 Google Apps Script 기반의 초기 코드를 작성했습니다.

  • o1 preview에 입력한 프롬프트는 아래와 같습니다.

한국어 문자 메시지 스크린샷
  • 특정 키워드를 입력하면 해당 키워드에 대한 기사 제목을 자동으로 가져오는 방식을 활용했습니다.

    • 코드 예시 및 결과물: 아래 이미지는 초기 코드 작성 후 실행한 결과로, 입력한 키워드에 대한 기사 제목 리스트를 보여줍니다.

      웹사이트 홈페이지 스크린샷

2. 뉴스레터 제목 자동화

  • 뉴스레터의 제목이 발송 날짜에 따라 자동으로 변경되도록 코드를 수정하였습니다.

  • 날짜 자동화 코드 추가: getFormattedDate() 함수를 작성하여 날짜를 동적으로 반영하였습니다.

  • 코드 수정 부분

    • function getFormattedDate() { var date = new Date(); var year = date.getFullYear(); var month = date.getMonth() + 1; var day = date.getDate(); return year + "년 " + month + "월 " + day + "일"; }

  • 결과물: 아래 이미지는 날짜가 자동으로 반영된 뉴스레터 제목입니다.

    한국 뉴스 웹사이트 스크린샷

3. 기사 요약 및 번역 기능 추가

  • 기사 요약 기능 개선: 초기에는 기사 제목만 가져오는 것에 그쳐서, 각 기사의 주요 내용을 한 줄로 요약하도록 기능을 추가했습니다.

  • 자동 번역 기능 구현: 대부분의 기사가 영어로 제공되기 때문에, 구글 앱스 스크립트의 번역 기능을 활용하여 기사를 자동으로 한글로 번역하였습니다.

    • 코드 개선 부분:

      function translateText(text) { return LanguageApp.translate(text, 'en', 'ko'); }

    • 코드 예시 및 결과물: 아래 이미지는 번역 기능이 추가된 코드의 실행 결과로, 영어 기사와 그 번역본이 함께 표시됩니다.

      한국 뉴스 웹사이트 스크린샷

4. 기사별 이미지 포함 시도

  • 이미지 포함의 필요성: 뉴스레터의 가독성과 시각적 효과를 높이기 위해 각 기사에 관련 이미지를 포함하고자 하였습니다.

  • 구글 뉴스 RSS 활용 시도: 처음에는 구글 뉴스 RSS를 활용하여 이미지를 가져오려 했으나, 이미지 URL을 추출하는 데 어려움이 있었습니다.

    • 문제점: RSS 피드에서는 이미지 정보가 충분히 제공되지 않음.

Google 로고가 표시된 이메일의 스크린샷
  • NewsAPI로 전환: 이미지 문제를 해결하기 위해 NewsAPI를 활용하기로 결정하고, 코드를 수정하였습니다.

  • 코드 수정 부분:

    • var imageUrl = article.urlToImage;

  • 코드 예시 및 결과물: 아래 이미지는 이미지 포함 기능이 추가된 뉴스레터의 모습입니다.

    배달 트럭을 가진 남자의 사진

5. AI 활용 기능 추가

  • AI 요약 기능 도입: 기사의 핵심 내용을 보다 효과적으로 전달하기 위해 AI 기반 요약 기능을 추가하기로 하였습니다.

  • Gemini API 활용: 무료로 사용할 수 있는 Gemini API를 활용하여 각 기사를 AI가 요약한 내용을 포함하였습니다.

  • 코드 추가 부분:

    • function getSummary(text) { // Gemini API 호출 코드 return summary; }

  • UI 디자인 개선: 뉴스레터의 디자인을 개선하기 위해 아이콘과 스타일을 추가하였습니다.

  • 코드 예시 및 결과물: 아래 이미지는 AI 요약 기능과 개선된 디자인이 적용된 뉴스레터입니다.

    배달 트럭을 가진 남자의 사진

6. 한글 기사 추가 및 다중 소스 활용

  • 한글 기사 수집의 필요성: 영어 기사뿐만 아니라 한글 기사도 함께 제공하여 정보의 다양성을 높이고자 하였습니다.

  • 네이버 뉴스 API 통합: 뉴스 API가 한글 기사 소스가 부족하므로, 네이버 뉴스 API를 추가로 통합하였습니다.

  • 키워드별 소스 분기 처리:

    • if (isKoreanKeyword(keyword)) { // 네이버 뉴스 API 호출 } else { // NewsAPI 호출 }

  • 코드 예시 및 결과물: 아래 이미지는 한글 키워드로 검색하여 한글 기사와 요약을 제공하는 뉴스레터입니다.

    쿠팡뉴스 홈페이지 화면 캡처

추가 진행 사항

7. 뉴스 소스 다양화: newsdata.io API 추가

  • 뉴스 소스 확대 필요성: 더욱 다양한 기사를 제공하기 위해 추가적인 뉴스 소스를 통합하고자 하였습니다.

  • newsdata.io API 통합: newsdata.io API를 추가로 통합하여 뉴스 수집 범위를 넓혔습니다.

코드 수정 부분:

function getNewsdataArticles(keywords, apiKey) { // newsdata.io API를 활용한 기사 수집 코드 return articles; }

  • 영문 기사 수집 강화: 영문 기사의 경우 NewsAPI와 newsdata.io API를 모두 활용하여 더 많은 기사를 수집할 수 있게 되었습니다.


9. 번역 품질 개선: Gemini API 활용

  • 번역 품질 향상의 필요성: 기존의 구글 앱스 스크립트 번역 기능은 호출 제한과 번역 품질에 한계가 있었습니다.

  • Gemini API를 통한 번역 개선: Gemini API를 활용하여 번역 품질을 높이고 자연스러운 번역을 제공하였습니다.

코드 수정 부분:

function translateTextWithGemini(text) { // Gemini API를 활용한 번역 코드 return translatedText; }

  • 결과물: 번역 품질이 개선되어 구독자들이 기사를 더욱 이해하기 쉽게 되었습니다.

한국의 배달 트럭에 관한 뉴스 기사

10. AI 요약 기능 전문화 및 구조화

  • AI 요약의 중요성: 구독자가 본문을 읽지 않아도 핵심 내용을 파악할 수 있도록 AI 요약을 개선하였습니다.

  • 요약 구조화: 요약을 3~4개의 핵심 포인트로 구조화하여 가독성을 높였습니다.

코드 수정 부분:

function getStructuredSummary(text) { // AI 요약을 구조화하여 반환하는 코드 return structuredSummary; }

  • 결과물: 좀 더 세부적인 AI SUMMARY를 제공해 줍니다.

한 남자가 배달 트럭 옆에 서 있다

11. 웹앱 형태로 시스템 확장

  • 웹앱 개발 필요성: 나만 사용하는 것이 아니라 주변인들도 뉴스레터를 구독하여 활용할 수 있도록 시스템을 확장하고자 하였습니다.

  • 웹앱 개발: Google Apps Script와 HTML/CSS를 활용하여 웹앱 형태의 구독 페이지를 만들었습니다.

웹앱 기능:

  • 키워드, 주기, 이메일 입력 기능: 사용자가 관심 키워드와 수신 주기, 이메일을 입력하면 구독 신청이 완료됩니다.

  • 자동 환영 메일 및 뉴스레터 발송 시작: 구독 신청 시 자동으로 환영 메일이 발송되고, 설정된 주기에 따라 뉴스레터 발송이 시작됩니다.

  • 구독자 관리: 입력된 구독자 정보는 Google 스프레드시트에 저장되어 관리됩니다.

웹앱 화면 예시:

한국 AI 기술 지원서


12. 최종 테스트 및 배포

  • 전체 시스템 테스트: 사용자가 웹앱을 통해 구독 신청을 하고, 뉴스레터를 정상적으로 수신하는 것을 확인하였습니다.

  • 피드백 수집 및 개선: 초기 사용자들의 피드백을 반영하여 웹앱과 뉴스레터의 디자인 및 기능을 개선하였습니다.

  • 결과물 : 구독 신청시 자동으로 환영 이메일과 뉴스레터를 발송하게 됩니다.

두 가지 유형의 텍스트를 보여주는 화면의 스크린샷
이 단어가 적힌 한국 명함

13. 추가

  • 구독확인/취소 기능: 사용자가 웹앱을 통해 구독 확인 및 추소 가능한 기능을 추가 했습니다.

  • 결과물 : 구독 확인 가능하고, 취소시 취소 메일도 발송됩니다.

한국어 텍스트와 가입 페이지를 가리키는 화살표가 있는 화면
한글이 적힌 하얀 페이지

결과와 배운점

성공한 부분

  • 자동화 시스템의 완성도 향상: 뉴스 수집부터 요약, 번역, 이미지 포함, 이메일 발송까지 전체 프로세스를 더욱 완성도 높게 자동화하였습니다.

  • 사용자 확장성 확보: 웹앱을 통해 주변인들도 쉽게 뉴스레터를 구독하고 활용할 수 있게 되었습니다.

  • 번역 품질 및 요약 개선: Gemini API를 활용하여 번역 품질을 향상시켰고, AI 요약을 구조화하여 구독자의 이해도를 높였습니다.

  • 뉴스 소스 다양화: newsdata.io API를 추가로 통합하여 더 풍부하고 다양한 기사를 제공할 수 있게 되었습니다.

어려웠던 부분 및 해결 방법

  • API 통합의 복잡성 증가: 다양한 API를 통합하면서 발생하는 호환성 문제와 오류를 해결하는 데 시간이 소요되었으나, 철저한 테스트와 디버깅을 통해 해결하였습니다.

  • 웹앱 개발의 난이도: 웹앱 개발 경험이 부족하여 초기에는 어려움이 있었으나, 구글의 문서와 커뮤니티를 참고하여 해결하였습니다.

  • 구독자별 맞춤형 발송 관리: 각 구독자의 설정에 따라 뉴스레터를 발송하는 로직을 구현하는 데 어려움이 있었으나, 스프레드시트와 트리거를 효과적으로 활용하여 해결하였습니다.


향후 개선 사항

  • 뉴스 소스 추가 다양화: 현재의 뉴스 소스 외에 Bing News API 등 다양한 API를 추가로 통합하여 더 풍부한 기사를 제공할 예정입니다.

  • 번역 서비스 개선: DeepL API 등 다른 번역 서비스를 활용하여 번역 품질을 더욱 향상시킬 계획입니다.

  • AI 요약 기능 강화: ChatGPT API 등을 활용하여 더욱 정교한 요약과 인사이트 제공 기능을 추가할 예정입니다.

  • 사용자 인터페이스 개선: 뉴스레터의 디자인을 더욱 개선하고, 웹앱의 사용자 경험을 향상시킬 예정입니다.

  • 개인화 기능 추가: 구독자들이 자신만의 키워드와 관심사에 맞는 뉴스를 받아볼 수 있도록 개인화 기능을 강화할 계획입니다.


결론

이번 프로젝트를 통해 코딩 지식이 부족한 사람이라도 AI와 자동화 기술을 활용하여 업무 효율성을 크게 향상시킬 수 있음을 경험하였습니다. 특히, 무료로 제공되는 다양한 API와 도구들을 활용하여 비용을 최소화하면서도 원하는 기능을 구현할 수 있었습니다. 또한, 웹앱을 통해 주변인들과 공유하고 함께 활용할 수 있는 확장성 있는 시스템을 구축하였습니다. 앞으로도 지속적인 개선을 통해 더 완성도 높은 뉴스레터 자동화 시스템을 고도화할 예정입니다

7

👉 이 게시글도 읽어보세요