Saebasol

About

About Heliotrope

무슨 마약하셨길래 이런거 만드셨나요?

S
SaidBySolo

28/05/2021

Thumbnail image of About Heliotrope.

헬리오트로프에 대하여

먼저 헬리오트로프의 탄생 배경을 이야기하기전에 그 당시의 히요봇을 먼저 알아야 하는데요,

히요봇이 그 당시에 히요비에 많은 의존성을 두고 있었어요.

그래서 봇 이름도 히요봇이였고, 히요비가 makise.me처럼 언젠가는 닫을거 같았습니다. 그리고 이 예상은 정확했습니다.

이를 해결하기 위해 헬리오트로프를 구상하기 시작했어요.

왜 굳이 API로 구상을했나요?

사실 저도 봇쪽에 모든곳을 둘까 생각을 해보았는데

봇쪽에 너무 많은 비중을 두기에는 무리가 갔고

봇의 배포환경이 Heroku여서 DB를 연동할려면 결국 DB서버를 따로두던가 그곳에서 제공하는 애드온으로 작업을 해야했습니다.

애드온으로 작업은 그때 당시에 할 엄두도 내지 못하였고, 그냥 한마디로 쫄렸습니다

DB서버를 따로 둘바에는 차라리 API를 만드는게 좋다 생각하여서 API로 개발을 하게되었습니다.

근데 왜 API이름이 헬리오트로프인가요?

헬리오트로프는 꽃말로 성실과 헌신을 의미해요.

이 API가 여러분에게 헌신한다는 의미로 지었습니다.

개발 과정

이 API를 만들기전에 먼저 히토미가 굴러가는 과정부터 알아야했습니다.

전체적인 구조

1시간 마다 히토미에서 최신정보 가져옴 -> 가져온 정보 DB에 저장 -> 요청시 DB에서 보여주기

이게 끝입니다.

이미지 프록시를 제외하고는 전부 DB에서 보여주고있습니다.

이미지를 가져오는 순서

갤러리 정보 요청 (이미지정보 포함) -> 특수한 로직을 통해 이미지 링크 가져오기 -> 이미지 링크에 referer, User-Agent 넣고 요청 -> 200

리스트를 가져오는 순서

.nozomi파일 요청 (번호 담겨있음) -> 바이트로 응답온거 struct unpack으로 풀기 -> 번호 정렬

그래서 저걸 어떻게 알았나요?

Chrome에서 개발자도구로 js에서 요청하는 것들을 둘러보았고, 여러 사람들이 많은 도움을 주셨습니다.

이미지 처리 로직은 이곳에서 볼수 있었습니다.

이외에는 충분히 여러분들이 노력만 하시면 어떻게 굴라가는지 보실수 있을겁니다.

가져온 정보는 어떻게 저장하나요?

먼저 이미지는 저장하지 않습니다.

저장용량이 부족할뿐만 아니라, 여러 리스크가있기때문에 프록시로 받는 청크 그대로 넘겨주는것으로 결정했습니다.

이외에 자세한 작품정보는 BeautifulSoup를 이용해 파싱후 mongodb에 저장하였고,

이미지 정보와 같은것은 MariaDB와 Tortoise ORM을 이용해 저장했습니다.

제목검색도 있던데 어떻게 하셨나요?

Mongodb cloud 에서 제공하는 Atlas Search를 이용했습니다.

살짝 아쉬운점은 한국어가 아직 제대로 지원하지 않는다는 점입니다.

배포는 어떻게 하셨나요?

master 브랜치에 Push가 되면 Azure DevOps가 Docker를 빌드한후 깃허브에 이미지를 릴리즈합니다.

배포서버에 ssh로 접속한후 그 이미지를 당겨온후 열어줍니다.

그런 다음 Nginx로 리버스 프록시 작업을 해주었습니다.

자동화 배포를 무중단배포와 함께 v5에서 기회가된다면 작업해보고싶네요.

오류트래킹은 어떻게 하나요?

sentry를 이용해 추적하고있습니다.

마지막으로 v4릴리즈를 앞두고..

이글을 보고있으신다면 관심을 가져주시고 있다는거겠죠.

먼저 봐주셔서 감사하다는 말씀을 드리고

제가 열심히 유지보수한만큼 여러분들이 많이 써주시면 좋겠습니다.

v4에 올라오면서 일부 엔드포인트를 제외하고 검증 절차를 삭제했기 때문에 요청하면 사용하실수 있습니다.

다른 점이 궁금하신게있다면 디스코드로 질문해주셔도 됩니다.

감사합니다!

Saebasol Want you!

공식 디스코드

Copyright 2022 Saebasol contributors.