들어가며
앞으로의 과정
django를 사용하여 서비스를 개발하는 것이 이 포스팅의 주요 목표입니다.
장고(d는 묶음입니다.)를 사용하여 게시판 형태의 서비스를 개발해볼것입니다.
장고의 주요 특징 중, 하나인 풀스택 프레임워크의 장점을 살려, 웹과 API 모두 개발할 예정입니다.
- 개발 환경 설정
- git, vscode, env 등
- hello django
- django 설치 및 실행
- 기능 정의 및 설계
- 앞으로 개발할 기능과 설계
- 기능 개발 및 테스트
- 유저, 인증, 게시글, 댓글 등
- 배포
- 도커 & 도커 컴포즈를 사용한 서비스 배포
django란 무엇인가?
장고는 파이썬의 웹 프레임워크 중 하나입니다.
파이썬 진영에는 아주 많은 웹 프레임워크들이 있습니다.
Flask, Fast API 등 여러 프레임워크들이 존재하지만각 프레임워크마다의 장단점이 존재합니다.
분류 | Flask | Django | FastAPI |
장점 | 매우 간단하고 가벼운 프레임워크입니다. 엄청 유연하며, 빠른 개발이 가능하여 소규모 서비스 또는 프로토타입에 적합합니다. |
풀스택 프레임워크입니다. MTV 모델(MVC와 비슷합니다.)과 ORM을 제공하고, 충분히 많고 강력한 내장 기능을 제공합니다. 프레임워크로서 제공하는 표준화가 충분하며, 유연한 확장성을 제공합니다. 공식 문서가 잘 제공되며 커다란 오픈 소스 커뮤니티가 존재합니다. |
최신 프레임워크로 비동기 기반입니다. Swagger 문서를 자동 생성해줍니다. 높은 가독성 관리성을 제공합니다. |
단점 | 내장 기능이 부족합니다. 경우에 따라 설치해야할 라이브러리들이 많습니다. 프레임워크로서 제공하는 표준화가 부족합니다. |
기본적인 내장 기능이 많음으로 다른 프레임워크와 비교했을 때 일부 성능이 떨어지는 영역이 있습니다. 장고 프레임워크 자체에 대한 러닝 커브가 존재합니다. 프레임워크로서 제공하는 표준화가 충분하나, 장고 프레임워크를 잘모르고 개발할 경우, 프로젝트 구조나 코드의 관리가 어려워집니다. |
아직 메이저 버전이 나오지 않았습니다. 다른 프레임워크에 비해 커뮤니티가 빈약하며 러닝 커브가 존재합니다. 기본적인 내장 기능이 부족합니다. |
개인적인 평가 | 소규모 서비스 또는 프로젝트를 빠른 시간 내에 개발하여 제공하는데 좋습니다. 하지만 프로젝트 규모가 커지거나 많은 개발자들이 함께 개발하면 코드의 통일성이 없어지고, 관리하는데 많은 어려움을 겪는 것 같습니다. |
일반적인 서버, 웹 서비스를 개발하는데 좋습니다. 러닝 커브가 있으며, 잘모르고 개발 할 경우, 관리하는데 어려움이 존재합니다. 실시간 관련된 비동기 처리에 대한 기본적인 성능과 지원이 다른 프레임워크에 비해 뒤떨어집니다. |
고성능 API 나 실시간 / 비동기 서비스를 개발하는데 좋습니다. 비동기에 대한 이해/경험이 없다면 러닝 커브가 존재합니다. 메이저 버전이 나오지 않았습니다. |
위의 3 프레임워크는 파이썬 진영에서 가장 유명하고 많이 쓰는 프레임워크입니다.
공통적인 장점이자 단점은 Python 언어의 특징을 그대로 가져온다고 보시면 됩니다.
이 외에도 여러 장단점이 있지만 기술을 선택함에 있어 다양한 요소를 고려해야합니다.
왜 django인가?
결국 언어의 선택과 마찬가지로 프레임워크의 선택도 주어진 요소들에 따른 선택의 결과입니다.
제 경우, FastAPI가 아직 한국에 상륙하기전, Flask와 Django를 사용했었습니다.
지금도 간단한 기능 단위의 POC나 프로토타입을 개발하는 경우 Flask 를 종종 사용하고는 합니다.
(기능 단위에서 벗어나면 Django를 사용합니다. 당장 로그인 기능만 하더라도 장고로는 뚝딱 하고 다양한 요소들이 반영된 기능이 개발됩니다.)
아직까지는 Fast API 에 대해서는 회의적인 생각을 가지고 있습니다.
성능이 매우 좋다고는 하지만 마이너 버전이고 내장 기능이 부족합니다.
(차라리 고성능의 실시간 채팅 서비스를 개발한다면, python을 굳이 사용하지 않아도 됬을때, 저는 node를 선택할 것입니다.)
현 시점에서는 Python 기반의 WEB / API Server를 개발한다면 Django를 선택할 것입니다.
하지만 다가올 미래에 FastAPI가 대세가 될것임을 짐작하고 있습니다.
(Fast API도 공부해야하지만 Python에 친숙하고, 하나 이상의 프레임워크에 친숙하다면 금방 공부할 수 있습니다.)
장고 공부 & 개발시 참고하면 좋은 사이트들
https://www.djangoproject.com/
https://tutorial.djangogirls.org/ko/django/