만들기/MAMA COCO

[2장 - 설계] 티스토리 API 정리 / DB 업데이트 기능 정의 / DB 테이블 설계

pythaac 2021. 8. 25. 01:27

출처 : https://pixar.fandom.com/wiki/Mama_Coco


티스토리 데이터를 DB에 저장하기 위한 정리

  첫 관문부터 난제다. 기본적으로 블로그에 올린 글들을 DB에 저장해두고 사용하려고 하는데, 구현하기 전에 정리해야할 사항이 많다. 우선 티스토리 API 사용을 위한 Access token은 만료시간이 확인되지 않아 리터럴로 사용해보기로 했는데... 티스토리 API에서 받은 데이터를 모두 사용할 필요가 없어서, 필요한 데이터들을 추려보았다. 추린 데이터들을 기반으로 DB에 저장하기위한 동작들을 정의하고, 동작을 바탕으로 RDB에 사용할 테이블을 정의해보았다. 서버로 라즈베리파이 4대를 사용하기도 하고, 데이터 형식상 NoSQL이 적합할 수 있는데... RDB 테이블을 만들고 SQL을 사용해보고 싶어서 RDB로 먼저 구성해보았다.

 

티스토리 API에서 사용할 데이터 정리

  티스토리 API 중 사용될 API는 블로그 정보, 글 목록, 카테고리, 글 읽기 4가지다. 이 4가지 API의 응답 중에서도 사용할 값만 정리해보았다.

블로그 정보 (info)

블로그 이름 ["tistory"]["item"]["blogs"]["blog"]["name"]
이메일 ["tistory"]["item"]["id"]

글 목록 (list)

페이지에 포함된 글 수 ["tistory"]["item"]["count"]
작성된 글 수 (공개된 것만) ["tistory"]["item"]["totalCount"]
페이지에 따른 글 목록 ["tistory"]["item"]["posts"] -> list[post]
글 아이디 post["id"]
글 제목 post["title"]
글 공개여부
( 0:비공개 10:잠금 20:비공개 )
post["visibility"]
글 카테고리 post["categoryId"]
글 작성날짜 post["date"]

카테고리 (category)

카테고리 목록 ["tistory"]["item"]["categories"] -> list[category]
카테고리 아이디 category["id"]
카테고리 이름 category["name"]
상위 카테고리 이름 category["parent"]
카테고리 포함 글 수 (공개된 것만) category["entries"]
카테고리 절대위치 category["label"]

글 읽기 (post)

내용 ["tistory"]["item"]["content"]
태그 ["tistory"]["item"]["tags"] -> list[tag]

 

티스토리에서 DB로 데이터 저장하는 기능 정의

  우선 블로그에 작성한 데이터를 DB로 불러서 저장하는 기능이 필요하다. 이 때, 이미 저장되어있는지 확인하거나 변경사항이 있는지, 삭제된 데이터가 있는지 확인하는 등 생각보다 복잡하다. 그리하여 DB의 데이터가 티스토리의 최신 상태와 동기화될 수 있는 기능을 정의해보았다.

 

추가

  • 정의
    DB에 저장되지 않은 데이터 추가
  • 카테고리
    categoryId를 비교하여 DB에 없으면 추가

  • post["id"]를 비교하여 DB에 없으면 추가

업데이트

  • 정의
    DB에 저장되있으나 데이터가 바뀐 경우 업데이트
  • 카테고리
    • 이름 변경
      category["id"]가 같고, category["name"]가 다른경우
    • parent 변경
      category["id"]가 같고, category["parent"]가 다른 경우
    • 공개 여부 변경
      category["id"]가 같고, category["entries"]0 / 자연수로 switch된 경우

  • post["id"]가 같고, post["date"]가 다를 경우
    *** 주의 *** : 티스토리는 글을 수정해도 첫 발행 시간으로 올릴 수 있으므로, 작성시 유의해야함

삭제

  • 정의
    DB에는 저장되어있으나 일치하는 데이터가 없는 경우
  • 카테고리
    category["id"]가 같은 데이터를 못받은 경우

  • post["id"]가 같은 데이터를 못받은 경우
    -> DB 데이터를 삭제하지 않고 flag만 남기기

 

DB 테이블 설계

  마지막으로, DB에 저장하기위한 테이블을 설계해보았다. 혹시 모를 미래의 활용 가능성을 위해 글 내용과 티스토리를 분리하여 설계하려했다. 프로젝트를 진행하면서 테이블이 바뀔 수도 있다.

글 관련

  • Category
    • cat_id
    • name
    • parent
    • visiable
  • Post
    • post_id
    • cat_id
    • title
    • content
    • visiable
    • tags
    • deleted

티스토리 관련

  • TistoryInfo
    • tistory_blog_id
    • name
    • access_token
  • TistoryCategory
    • tistory_cat_id
    • tistory_blog_id
    • cat_id
    • entries
  • TistoryPost
    • tistory_post_id
    • tistory_blog_id
    • post_id
    • date
    • visibility

 

앞으로 할 일

  노트에 끄적거리다가 정리가 필요한 것 같아서 작성했는데, 뭔가 깔끔하게 정리되지 않은 것 같다. 앞으로 수정될 내용들이 발생할 수 있으니 정리보다 진행을 더 해봐야할 것 같다. 우선 DB 테이블을 생성하는 SQL문을 작성하여 만들고, DB에 데이터를 가져오는 부분을 구현할 예정이다. 데이터를 가져오는 코드를 python으로 먼저 짜봐야할지, spring이나 java로 짜봐야할지는 조금 더 살펴본 후 정해야겠다.