회원가입

[기획] ChatGPT 로 블로그 글 요약하기

Beany 2024-09-20

ChatGPT 요약

이 블로그는 ChatGPT를 활용하여 요약을 제공하는 기능을 다루고 있습니다. 요약 기능을 적용하기 위해 후속 작업이 필요하며, 위치, 디자인, 요약 내용 최신화 방법 등을 고민하고 있습니다. 요약 내용을 최신화하기 위해 OpenAI API를 활용하고, 관리자 페이지에서 Celery Task로 비동기 처리를 구현할 예정입니다. 또한, 게시글의 최신화를 위해 요약 테이블을 생성하여 사용자에게 편리한 서비스를 제공할 방침입니다.

최근 어떤 블로그를 봤는데, 그 블로그에는 대략적인 내용을 요약해주는 ChatGPT 영역이 따로 있는 것을 보았습니다.
(참고한 주소: https://devocean.sk.com/blog/techBoardDetail.do?ID=165522&boardType=techBlog)

이걸 보고 제 블로그에도 적용하면 좋겠다는 생각이 들었습니다.

이 기능을 넣기 위해서는 다음과 같은 준비가 필요했습니다:

  1. 어느 위치에 넣을 것인가?
  2. 디자인은 어떻게 할 것인가?
  3. 요약 내용을 언제, 어떻게 최신화할 것인가?

 

1. 어느 위치에 넣을 것인가?

  • 대부분의 경우 요약본은 본문 바로 위에 정리되어 있어서, 아래 이미지에 빨간색 부분에 넣으려고 계획 중입니다.

 

2. 디자인은 어떻게 할 것인가?

  • 디자인은 제가 참고한 블로그의 아이디어를 기반으로 벤치마킹하여 적용할 생각입니다.

 

3. 요약 내용을 언제, 어떻게 최신화할 것인가?

두 가지 방안을 고려해 보았습니다.

  1. 사용자가 게시글을 조회할 때마다 OpenAI API를 호출한다.
  2. 게시글을 생성 및 수정할 때 OpenAI API를 호출하고, 받은 응답을 테이블에 저장한다.

 

방안 1: 사용자가 게시글을 조회할 때마다 OpenAI API를 호출한다.

이 방안은 UX 측면에서 좋지 않을 것 같았습니다. 이유는 매번 다른 요약본이 표시될 가능성이 있고, 매번 요약하는 데 걸리는 시간이 사용자를 불편하게 만들 것이라 생각했습니다. 또한 OpenAI API를 반복적으로 호출해야 하므로 비용도 부담스러워서 이 방안은 기각되었습니다.

 

방안 2: 게시글을 생성 및 수정할 때 OpenAI API를 호출하고, 받은 응답을 테이블에 저장한다.

이 방안은 OpenAI API 호출이 게시글 생성 및 수정 시에만 이루어지기 때문에 비용 절감에 유리하고, 이미 저장된 요약본을 제공하므로 빠른 요약 정보 조회를 위해 사용자 UX도 향상시킬 수 있습니다. 단, 문제는 admin 페이지에서 게시글을 생성 또는 수정할 때 OpenAI 응답 시간이 길어지면 Timeout으로 인해 500 에러가 발생할 수 있다는 점입니다.

 

이를 해결하기 위해 Celery Task를 사용하여 비동기 처리로 구현할 예정입니다.

아래는 흐름도입니다.

  1. Blog에서 게시글을 생성 및 수정하면 먼저 게시글 내용을 DB에 저장합니다.
  2. 그 후 Task를 생성하여 OpenAI API에 게시글 내용을 요약해달라고 요청하고, 응답을 받습니다.
  3. 받은 응답을 기반으로 게시글의 요약본을 최신화합니다.

이 방법으로 admin 페이지에서는 문제없이 게시글이 최신화될 것입니다. 그러나 비동기 처리를 하면 사용자는 즉시 요약본을 확인할 수 없습니다. 이를 해결하기 위해 다음과 같은 흐름을 생각했습니다.

 

게시글을 참조하고 있는 요약 테이블을 만들 것입니다.

요약 테이블을 1:N 관계로 생성하고, 아래와 같은 필드들을 포함할 것입니다:

  • pk
  • 게시글 id
  • 진행 상태: PROCESSING / DONE / FAILED
  • 요약된 내용
  • created_at
  • updated_at

 

요약 테이블 활용 흐름

게시글을 생성하거나 수정하면 동시에 요약 테이블이 생성되고, 진행 상태가 PROCESSING으로 설정됩니다. OpenAI API로부터 요약된 정보가 전달되면 요약 테이블을 업데이트하고, 상태를 DONE으로 변경합니다.

게시글 조회 시 요약 테이블의 마지막 상태가 PROCESSING이라면 "아직 요약 중이에요~"라는 문구와 함께 로딩 이미지를 보여주고, 일정 간격으로 API를 폴링하여 DONE 상태일 경우 요약본을 최신화합니다.

특수한 상황에서 FAILED 상태가 되면, 예로 PROCESSING 상태가 5분 이상 유지된 경우 CRONJOB을 통해 FAILED로 전환합니다. 이때는 "요약을 할 수 없어요~"라는 문구를 표시하고, 저에게 알림 메일을 보내 모니터링할 수 있도록 할 계획입니다.

이러한 계획을 바탕으로 작업을 시작해 보겠습니다.

0 0
블로그 일기
제 블로그의 고도화 과정을 설명합니다. 이는 코드 리팩토링과 추가된 기능들에 대해 기록하기 위한 게시판입니다. 어떤 기능이 추가되었는지, 무엇이 개선되었는지 등 고도화되는 과정을 자세히 다룰 예정입니다.
Yesterday: 456
Today: 191