저는 Django Web Framework로 공부를 시작한 학생이였습니다. 아무래도 가장 많은 사람이 많이 사용하기도 하고, 처음부터 내장된 기능이 다양하기 때문인 것 같습니다. 그래서 초보자도 잘 정리된 공식문서와 튜토리얼을 따라면서 웹 서비스 로직을 배우기 쉽구요. 다른 의미에서 Flask와 계속 언급되었던 프레임워크중 하나였습니다.
하지만 무엇보다도 장고에서 제공하는 핵심적인 기능에는 model과 form이 있습니다. 서비스가 데이터베이스를 꼭 필요로 한다면, 잘 정의된 모델만으로도 장고 ORM과 제공해주는 FORM(여기서는 MODELFORM) 클래스를 이용하여 아주 작은 코드로도 자동으로 Form와 Save, Update와 같은 기능을 생성해주거든요.
이 부분은 Flask와 대비되는 점인데, Django는 그래도 서비스를 하기 위해서 기본제공 되는 100줄이 넘는 settings와 url, view, template등 여러가지 파일을 손봐야 합니다. 반면, Flask는 경량화에 특화되어 단 3~4 줄의 코드만으로도 간단한 서비스를 제공하는 웹 페이지를 띄을 수 있습니다. 이는 많은 기능을 넣기위해 파일을 분리하고 미들웨어로 감싸놓은 Django가 가지기 힘든 장점인것 같습니다.
물론 이 부분에서 MTV (Model-View-Templete)의 큰틀로 분리되어 로직을 작성하는 구조는 결국 서비스가 커지고 나면 다른 프레임워크의 MVC(Model-View-Contoroler) 구조와 유사합니다. 아무래도 RoR 을 해봤던 저는 이러한 구조가 익숙하게 다가오는것 같습니다.
물론 단순한 API를 넘어 좋은 서비스가 되기 위해서는 프론트가 탄탄해야 하지만, 요즘은 둘을 분리하여 생각하니, 좋은 API를 만들기 위한 목적을 달성할수 있다면 굳이 두 프레임워크가 아니라도, 언제든 배우고 적용할 수 있어야 한다고 요즈음 마음을 다잡는 중입니다.
그러면, 좋은 프레임워크 라면 어떤 기능을 지원해야 할까요. 초보자의 입장에 있지만 조심스럽게 이야기 하자면, 아무래도 개발속도, 문서화, 로직의 간단함과 같은 단어가 먼저 나올것 같습니다. 어떤 언어가 좋은지에 대해 고민하는 것과 같은 이야기라고 할까요. 가장 좋은것은 아무래도 "내가 개발하고자 하는 서비스를 가장 잘 만들 수 있는 프레임워크" 라고 생각합니다.
위의 예에서는 간단하지만, 내가 로직을 구현하기에 부담이 없어 여러가지를 씹고 뜯고 맛보면서 쌓아가는 Flask, 어느정도 파일간의 구분을 약속하고, 이미 있는 것들을 러프하게 사용하면서 빠르게 개발을 진행하고자 한다면 Django가 되겠지요. (물론 어느 수준에 이르면 둘다 결국 무언가를 만드는 도구일뿐, 우열을 가리기 힘들어질거라 생각합니다....)
아무튼 요즘에는 프론트엔드를 배우고 있다보니, 프론트엔트 클라이언트로 작업을 하고 있노라면, 이 API에 보낼 수 있는 request와 response를 확인하느라 자꾸 벡엔드 관련 IDE를 열어 로직을 확인하는 자신을 발견하곤 합니다. restframework가 어느정도 로직을 보내고 받는 등의 테스트를 할 수 있지만. 시간이 지날수록, 뭔가 더 좋은 문서의 필요성을 느껴 찾아봐야 겠다고 마음을 먹었습니다.
그래서 RESTful API docs의 대표주자인 Swagger, SwaggerUI 혹은 django rest swagger를 작성하다보니, 엉뚱하게도 FastAPI 라는 웹프레임워크를 발견하게 되었습니다. 그런데 이럴수가. 처음부터 문서화를 고려한 Flask라니..? 원래대로라면 열심히 Swagger와 Django의 접목을 고려하고 있어야하는 저였지만, FastAPI의 매력을 느껴버린 시간이 되어버렸습니다.
FASTAPI를 쓰면 그동안 쓰던 django ORM 대신 sqlalchemy 라는 orm을 배워야 하기도 하고, 기존 로그인 로직을 다시 짜봐야 하긴 하지만, 이미 API docs가 완성되어 있다는게 너무나도 좋은 점 같습니다. 특히 기존의 swagger 말고도 redoc이라는 다른 선택지가 있다는게 마음에 들었습니다.
FastAPI 공식 소개글
FASTAPI 소개에서는 속도역시 큰 장점이라고 합니다만, 이는 나중에 다시 테스트를 가져야하는 시간이 필요 할 것 같습니다.
속도차이가 별로 안난다고 주장하는 외국 사이트의 글
그래서 요즈음에는 프론트와 더불어 FastAPI, sqlalchemy를 공부하고 있습니다. 간단한 도서 정보 표기 앱은 완성이 되어가고 있는데, 진짜 괜찮은지는 프론트개발을 마무리하고 살펴봐야겠습니다.
신생 프레임워크 답게, ASGI(비동기), GraphQL과 웹소켓, pytest를 지원하고 있다는 점도 마음에 듭니다. 물론 이미 있는 장고에서도 충분히 구현할 수 있는 기능이지만, 이미 기능추가를 고려해서 만든 프레임워크가 차이가 있지 않을까 조심스레 예측해봅니다.
결국 지금 제 상황에서는 어떤게 좋아요! 라고 말 할 수 있는 실력은 아닙니다. 둘다 충분히 구현해보고 성능을 비교할 수 있는날이 왔으면 좋겠습니다. 물론, 지금은 새로운 별에 잠깐 몸을 실어보려고요. 괜스레 Node와 Go 진영에도 관심이 가네요. 결국 다 해봐야겠지만요.
FASTAPI를 선택한 다른 분의 이야기
매드업: https://tech.madup.com/FastAPI/
FastAPI 톺아보기 - 부제: python 백엔드 봄은 온다 https://jybaek.tistory.com/890
해당글은 커리어리 기록습관챌린지 시즌2 진행중 작성된 게시글입니다.