일반적으로 파이썬 애플리케이션은 가상 환경을 사용해 개발된다. 가상 환경에서 애플리케이션을 개발하면 특정 패키지를 시스템에 전역으로 설치하지 않아도 된다. 또한 서로 다른 애플리케이션을 동시에 개발할 때 발생할 수 있는 충돌을 피할 수 있다.
Python3을 설치하면 기본으로 표준 라이브러리의 venv 모듈이 함께 설치되는데 이 모듈이 가상 환경을 생성한다. 다음 명령을 사용하여 todos라는 폴더를 만들고 이 폴더 안에 가상 환경을 생성해보자.
mkdir todos && cd todos
python3 -m venv venv
venv 모듈은 가상 환경을 설치할 폴더명을 인수로 지정한다.(즉 두 번째 venv는 가상 환경으로 사용할 폴더명이다.) 생성된 가상 환경 폴더(venv)에는 파이썬 인터프리터가 설치된 lib 폴더와 가상 환경 내에서 상호 작용(가상 환경 활성화/비활성화 등)이 필요한 파일을 저장하는 bin 폴더가 있다.
활성화:
source venv/bin/activate
가상 환경이 활성화되면 해당 환경 내에 있는 파이썬 인터프리터와 패키지를 기본으로 사용한다.
가상환경이 제대로 활성화 되었다면 venv라는 가상 환경 폴더명이 프롬프트 앞에 표시된다.
비활성화:
deactivate
pipenv 또는 poetry으로도 가상 환경을 생성하고 애플리케이션의 의존 라이브러리를 관리할 수 있다.
pip를 사용하면 패키지 설치 과정을 자동화할 수 있다. pip는 파이썬 퍀키지 관리 도구이다.
python3 -m pip list
명령을 실행하면 설치된 패키지 목록이 표시된다.
만약 명령을 실행했는데 pip이 없거나 오류가 발생한다면 pip 문서의 안내에 따라 pip을 설치하면 된다.
맥이나 리눅스 등 유닉스 기반 운영체제에서는 전역 패키지 설치를 위해 sudo 키워드를 사용해야할 수도 있다.
pip install fastapi
패키지 제거:
pip uninstall fastapi
현재 프로젝트에 설치된 모든 패키지 목록을 파일로 저장하려면 다음과 같이 freeze 명령과 > 연산자를 사용하면 된다:
pip freeze > requirements.txt
>
연산자는 왼쪽 명령의 실행 결과를 오른쪽 파일에 저장한다. 여기서는 pip freeze가 반환하는 패키지 목록이 requirements.txt 파일에 저장된다.
requirements.txt 같은 텍스트 파일을 사용해서 필요한 패키지를 일괄 설치할 수 있다.
pip install -r requirements.txt
이 명령은 배포할 때 주로 활용된다.
오늘날 애플리케이션은 여러 계층(데이터베이스, 웹 서버 등)으로 구성된다. 따라서 애플리케이션을 쉽게 배포하려면 모든 구성 요소를 하나로 묶어야 한다. 여기서는 도커를 사용해 애플리케이션 계층을 단일 이미지로 컨테이너화한다. 이렇게 하면 애플리케이션을 클라우드나 로컬에 쉽게 배포할 수 있다.
도커파일(Dockerfile)과 도커 구성 파일(Docker-compose)을 사용하면 애플리케이션 이미지를 업로드하거나 공유할 필요가 없다. 도커파일을 사용해서 새 버전의 애플리케이션을 바로 구축하고 도커 구성 파일을 사용해서 배포할 수 있다. 애플리케이션 이미지는 도커 허브(Docker Hub)에 저장(push)했다가 다시 추출(pull)해서 사용할 수 있다.
도커를 설치하려면 먼저 웹 사이트에서 도커 데스크톱을 다운로드해야 한다.
애플리케이션 이미지의 구성 방법을 정의한다.
FROM python:3.8
WORKDIR /usr/src/app //작업 디렉터리를 설정
ADD . /usr/src/app //현재 로컬 디렉터리의 파일을 컨테이너의 작업 디렉터리로 복사
CMD ["python", "hello.py"] //명령을 실행
도커파일을 사용해서 getting_started라는 태그를 가진 애플리케이션 이미지를 생성해 보자.
docker build -t getting_started .
도커파일이 현재 디렉터리에 없다면 명령 실행 시 다음과 같이 경로를 명시해야 한다.
docker build -t getting_started ch01/Dockerfile
컨테이너 이미지가 생성됐다면 다음 명령으로 실행하면 된다.
docker run getting_started
todos 폴더에 애플리케이션에 필요한 의존 라이브러리와 패키지를 설치한다.
설치에 앞서 프로젝트 폴더(todos)에서 개발 환경(가상 환경)을 활성화
source venv/bin/activate
다음 명령을 사용해 의존 라이브러리를 설치
pip install fastapi uvicorn
이제 api.py라는 파일을 만들어 FastAPI의 새 인스턴스를 생성한다.
from fastapi import FastAPI
app = FastAPI()
app 변수에 FastAPI를 초기화해서 라우트(route)를 생성할 수 있다.
웰컴 라우트를 만들어보자:
데코레이터(decorator)를 사용해 처리 유형을 정의하고 라우트가 호출됐을 때 실행할 처리를 함수로 작성한다.
다음 코드는 GET 유형의 요청을 받아서 환영 메시지를 반환하는 "/" 라우트를 만든다.
@app.get("/")
async def welcome() -> dict:
return{
"message": "Hello World"
}
이제 uvicorn을 사용해 애플리케이션을 시작해보자
uvicorn api:app --port 8000 --reload
uvicorn을 실행할 때 지정하는 인수
애플리케이션이 제대로 실행되고 있는지 새 터미널을 열어 테스트:
curl http://localhost:8000/
환영 메시지를 콘솔에서 볼 수 있다.