개요
Python의 대표적인 FastAPI 비동기 프레임워크를 기반으로 HTTP RESTful 설계 원칙에 따른 개발을 진행합니다.
/summaries | GET | READ | get all summaries |
---|---|---|---|
/summaries/:id | GET | READ | get a single summary |
/summaries | POST | CREATE | add a summary |
/summaries/:id | PUT | UPDATE | update a summary |
/summaries/:id | DELETE | DELETE | delete a summary |
로컬 개발환경과 배포를 단순화하기 위해서 Docker를 이용하여 FastAPI를 이용한 프로젝트를 진행합니다.
Postgres 데이터베이스를 이용하고 Tortoise ORM을 이용하여 비동기 처리를 하도록 하겠습니다.
pytest를 이용하여 테스트도 진행합니다. GitHub Actions을 이용하여 Heroku에 배포하기전에 테스트를 진행하도록
CI/CD 처리도 해보겠습니다.
FastAPI
python 생태계에서 대표적인 웹프레임워크는 Django와 Flask가 있었습니다. 하지만 2019년 비동기 방식 지원과
파이썬의 타입힌트를 기반으로한 데이터 유효성기능이 큰 인기를 끌게 되었습니다.
간단히 말해서 FastAPI는 RESTful API 구축에 적합한 최신 Python 웹 프레임워크입니다. 동기식 및 비동기식 요청을 모두 처리할 수 있으며 데이터 유효성 검사, JSON 직렬화, 인증 및 권한 부여, OpenAPI 문서 에 대한 지원이 내장되어 있습니다 .
특징
- Flask에서 크게 영감을 받아 Flask와 같은 라우트 데코레이터를 지원하는 가벼운 마이크로 프레임워크 느낌을 가지고 있습니다.
- pydantic을 통한 데이터 검증과 OpenAPI/Swagger 문서화를 가능하게 하는 매개변수 선언으로 Python 유형 힌트를 활용 할 수 있습니다.
- Starlette를 기반으로 구축되어 비동기 API 개발을 지원합니다.
- 비동기는 기존 동기 스레딩 모델보다 훨씬 효율적이므로 성능 측면에서 Node 및 Go와 경쟁할 수 있습니다.
- OpenAPI 및 JSON 스키마를 기반으로 하고 완벽하게 호환되므로 Swagger UI와 같은 여러 가지 강력한 도구를 지원합니다.
- 문서로 잘 정리 되어 있어 프레임워크 사용에 큰 메리트가 있습니다 .
도커
Docker는 다양한 환경에서 애플리케이션 개발 및 배포 워크플로를 간소화하는 데 사용되는 컨테이너 플랫폼입니다. 애플리케이션 코드, 종속성 및 시스템 도구를 개발 시스템에서 프로덕션 서버로 빠르고 쉽게 이동할 수 있는 경량 컨테이너로 패키징하는 데 사용됩니다.
Pytest
pytest는 테스트를 쉽게(그리고 재미있게) 작성, 구성 및 실행할 수 있게 해주는 Python용 테스트 프레임워크입니다. Python 표준 라이브러리인 pytest의 unittest와 비교하면 다음과 같습니다.
- 상용구 코드가 덜 필요하므로 test suites 가독성이 높아집니다.
- 단위 테스트의 AssertEquals, AssertTrue 및 AssertContains와 같은 AssertSomething 메서드에 비해 훨씬 더 읽기 쉽고 기억하기 쉬운 일반 Assert 문을 지원합니다.
- Python 표준 라이브러리의 일부가 아니기 때문에 더 자주 업데이트됩니다.
- fixture system을 사용하여 테스트 setting up 및 tearing down를 단순화합니다.
- functional approach을 사용합니다.
GitHub
GitHub Actions는 GitHub와 완전히 통합된 CI/CD 솔루션입니다. 이와 함께 패키지 관리 서비스인 GitHub Packages 도 사용하여 Docker 이미지를 저장합니다.
CI 및 패키지 관리와 함께 원격 버전 제어를 포함하는 여러 플랫폼이 있습니다.
- GitLab
- AWS(CodeCommit, CodeBuild, CodeDeploy, ECR)
- GCP(Cloud Source Repositories, Cloud Build, Container Registry)
- Azure(Repos, 파이프라인, 컨테이너 레지스트리)
각각은 유사한 기능과 가격 모델을 가지고 있습니다.
Heroku
Heroku는 웹 애플리케이션에 대한 호스팅을 제공하는 클라우드 PaaS(Platform as a Service)입니다. 기본 인프라를 관리할 필요가 없는 추상화된 환경을 제공하므로 웹 애플리케이션을 쉽게 관리, 배포 및 확장할 수 있습니다. 몇 번의 클릭만으로 앱을 실행하고 트래픽을 수신할 수 있습니다.
'프로그래밍 언어 > 파이썬' 카테고리의 다른 글
FastAPI를 이용한 TDD 개발 - 4 (0) | 2024.03.14 |
---|---|
FastAPI를 이용한 TDD 개발 - 3 (0) | 2024.03.12 |
FastAPI를 이용한 TDD 개발 - 2 (0) | 2024.03.11 |
FastAPI를 이용한 TDD 개발 - 1 (0) | 2024.03.10 |
re 모듈의 sub 메소드 사용법 (0) | 2021.11.28 |