목표

로딩이 긴 서비스

팀 프로젝트 진행 중, 내가 맡은 서비스가 최장 5분까지 시간이 소요되는 일이 있었다.

노션의 API를 호출해서 특정 사용자의 모든 데이터를 읽어오고, 이를 가공하기 위해 Fastapi 서버에 자연어 처리, 이미지 처리 등의 기능을 요청 한 후, DB에 저장하고 생성된 ID를 반환하는 로직이었다.

왜 오래 걸리는가?

전체적인 로직을 그림으로 그려보면 다음과 같다.

이때 통신 빈도는 다음과 같다.

이때, Notion에서 안정적으로 사용자의 모든 페이지를 제공해주는 API가 없기 때문에 ( search라는 API가 있지만, 모든 페이지를 읽어온다는 보장이 없다고 명시되어 있다 ) 사용자의 모든 데이터를 불러오기 위해선 API를 재귀적으로 호출해야 하고, 이 작업이 매우 오래 걸린다.

Untitled

데이터를 읽어오는 순서는 다음과 같다.

  1. notion.search로 사용자의 루트 페이지를 불러온다. ( notion.search는 루트 페이지에 한해서 안정적으로 불러올 수 있다. )
  2. 불러온 페이지의 id값으로 해당 페이지의 블럭들을 검색한다.
  3. 해당 페이지의 블럭들에서 자식 페이지 정보를 추출한다.