[confluence to tistory-6]개발한 기능들 API화(feat. fastapi)
컨플루언스에서 작성한 문서들을 Tistory 블로그로 옮기기 위한 POC작성 및 테스트가 끝났으니, 본격적으로 기능을 서비스화 하기 위해 각각의 기능들을 restapi 형태로 감싸기로 하였다.
파이썬 웹 프레임워크 선택
평소에 자주 사용하였던 Flask
를 활용하여 만들어 볼까도 하였으나, 최근에 관심있게 보고 있었던 fastapi
가 눈에 들어와서 이번 기회에 간단하게 문법을 공부해서 적용해 보기로 하였다.
fastapi에 대해서 간단하게 소개하자면 Starlette
(내부적으로 uvicorn을 사용하는 경량 ASGI 웹 프레임워크)과 Pydantic
(데이터 유효성 검사 라이브러리)의 장점을 적절히 버무려서, 매우 간편하게 개발할 수 있으면서 매우 빠른 성능을 보여주는 파이썬 웹 프레임워크이다.
여기서 말하는 이 빠른 성능에 대해서 첨언하자면, 감히 Node.js와 Go에 어깨를 견줄 정도라고 한다. 이 부분에 대해서는 fastapi의 간단한 아키텍쳐와 성능 테스트와 관련하여 따로 포스팅을 작성해볼 생각이다.
하지만 무엇보다 가장 관심이 갔던 부분은 별도의 특별한 설정없이 자동으로 생성되는 Swagger UI 였다. 기대 했던 만큼 실제로도 개발하며 사용해 본 입장에서 세상에… 너무 편리하였다. 평소였다면 Postman과 같은 api 테스트 툴을 사용하여 직접 따로 테스트 환경을 구성하여 테스트하고 디버깅 하는 과정을 반복했겠지만, 자동으로 생성되는 swagger UI 내에서 명세부터 테스트까지 모두 할 수 있으니, 개발 속도가 가속도가 붙는 느낌이었다.
다수 사용자를 고려한 인증정보 관리 방안에 대한 고민
api서버를 올려서 본격적으로 기능들을 쪼개어 각 함수별로 api화를 시키기 시작하면서 또다른 고민이 시작되었다. 바로 인증정보에 대한 관리였다. 개발중인 서비스를 제대로 활용하기 위해서는 Oauth를 통해서 컨플루언스와 티스토리 두 사이트로부터 사용자가 직접 인증과정을 거쳐야하고, 내 서비스는 그 인증과정을 통해 생성된 토큰을 서버에서 관리해야 했다.
하지만 서비스를 다수의 사용자들에게 제공하려면 사용자 별로 구분된 인증정보들을 독립되게 관리해야 하는데, 그것만을 위해서 서비스 자체에서 또다른 로그인 로직을 추가하기에는 너무 거추장스럽게 느껴졌다.
(구현하기 귀찮은 것이 절대 아니었다)
고민끝에 서비스 자체에서는 별도의 로그인 로직 없이 세션과 관련한 쿠키가 존재하는지 여부를 확인하고, 없다면 세션ID를 담은 쿠키를 생성하여 할당해 준 뒤, 세션 ID를 KEY로 하여 redis에 컨플루언스 및 티스토리의 토큰 정보를 포함한 세션 유지에 필요한 여러가지 데이터들을 담아서 관리하기로 하였다.
기타 기능 추가
기왕 서비스화 하여 구현하는 김에 자주 쓸만한 기능을 좀더 추가해 보기로 했다.
- 컨텐츠
markdown
으로 바로 받기 - 컨텐츠
pdf
로 바로 받기
애초에 컨플루언스의 각 컨텐츠(게시물)을 api를 통해 전달받으면 html
형식이기 때문에, 이를 변환하는 오픈소스들을 적절히 활용하면 금방 구현할 수 있을 것 같아서 추가하였다. 아주 기대가 된다!