FastAPI 설치 및 프로젝트 생성
1. 프로젝트 폴더 생성 및 가상환경 설정
FastAPI를 시작하기 전 '가상환경'이라는 특별한 작업공간을 만들 것입니다. 가상환경을 사용하면 프로젝트마다 독립된 개발 환경을 만들 수 있습니다. 또한 프로젝트 간 충돌을 방지하고, 필요한 패키지만 설치하여 시스템을 깔끔하게 유지할 수 있습니다. 가상환경을 사용하면 프로젝트를 다른 환경으로 쉽게 이동할 수 있습니다.
이제 직접 해볼 차례입니다. 아래의 단계를 따라 프로젝트 폴더를 만들고 가상환경을 설정해 봅시다.
-
VSCode에서
파일(File)
>폴더 열기(Open Folder)
를 선택하고 FastAPI 작업을 할 폴더를 선택합니다. -
VSCode에서 터미널을 엽니다. (Ctrl + ` 또는 Terminal > New Terminal)
-
Window는 터미널이 열리면 오른쪽 상단에 '+' 버튼 옆에 있는 아래쪽 화살표(▼)를 클릭합니다. 드롭다운 메뉴에서
PowerShell
을 선택합니다. Mac은 기본으로 열리는 Terminal을 사용하셔도 좋습니다. 이 터미널을 통해 명령어를 실행할 것입니다. -
터미널에서 다음 명령어를 실행하여 프로젝트 폴더를 생성(
mkdir
명령)하고 이동(cd
명령)합니다.mkdir 01_4_basic cd 01_4_basic
mkdir 01_4_basic cd 01_4_basic
-
다음 명령어를 실행하여 가상환경을 생성합니다.
python -m venv [가상환경이름]
형식입니다.python
: Python 인터프리터를 실행합니다.-m
: 뒤에 오는 이름을 모듈로 인식하고 실행하라는 옵션입니다.venv
: 실행할 모듈의 이름입니다. 이는 가상 환경을 생성하는 Python의 내장 모듈입니다.[가상환경이름]
: 생성할 가상 환경의 이름 또는 경로입니다.
여기에서는 venv라는 이름으로 가상환경을 생성합니다. venv는 virtual environment의 약자입니다.
python -m venv venv
python -m venv venv
-
다음 명령어를 실행하여 가상환경을 활성화합니다. 이 가상환경속으로 들어간다고 생각하시면 됩니다.
-
Windows(2개 중 작동하는 것 하나만 입력합니다.)
.\venv\Scripts\activate .\venv\Script\activate.bat
.\venv\Scripts\activate .\venv\Script\activate.bat
-
macOS/Linux
source ./venv/bin/activate
source ./venv/bin/activate
-
-
앞에
(venv)
표시가 있는 상태에서만 작업을 진행해야 합니다. venv가 바로 활성화된 가상환경입니다.(venv) C:\Users\YourName\projects\01_4_basic>
(venv) C:\Users\YourName\projects\01_4_basic>
보안 오류 해결 방법
Windows에서 다음과 같은 보안 오류가 발생할 경우 해결 방법입니다.
-
Windows 검색창에 PowerShell을 검색합니다.
-
관리자 권한으로 실행
을 선택합니다. -
다음 명령어를 입력해주세요. 복사하셔서 마우스 우클릭으로 붙여넣기를 하시면 됩니다.
Set-ExecutionPolicy Unrestricted
Set-ExecutionPolicy Unrestricted
-
선택지가 뜹니다.
모두 예
인A
를 입력합니다. -
VSC를 다시 실행하고 터미널을 열어주세요. 가상환경만 다시 실행해도 되지만 초급자에게는 VSC를 다시 실행하는 것이 더 편합니다.
2. FastAPI 설치 및 프로젝트 생성
가상환경이 준비 되었다면, FastAPI를 설치하고 첫 프로젝트를 생성해봅시다. 코드에 대한 설명은 다음 장에 있습니다.
-
가상환경이 활성화된 상태에서 FastAPI를 설치합니다.
pip
은 Python 패키지 관리자입니다. 파이썬의 패키지를 설치하고, 업그레이드하고, 삭제하는 등의 작업을 수행합니다.fastapi
를 실행시키는데 필요한 2가지 패키지를 설치합니다.pip install fastapi pip install uvicorn
pip install fastapi pip install uvicorn
-
01_3_basic폴더 아래 main.py 파일을 생성하고 아래 코드를 입력합니다.
from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"Hello": "World"}
from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"Hello": "World"}
-
개발 서버를 실행합니다.
uvicorn main:app --reload
uvicorn main:app --reload
-
웹 브라우저에서
http://127.0.0.1:8000/
로 접속하여 서버가 동작하는지 확인합니다. -
웹 브라우저에서
http://127.0.0.1:8000/docs
로 접속하여 FastAPI의 자동 생성된 API 문서를 확인합니다.
개발 서버는 코드 변경을 자동으로 감지하고 서버를 재시작합니다. 서버를 중지하려면 터미널에서 Ctrl+C를 누르세요.
3. FastAPI 프로젝트 구조와 코드 설명
3.1 프로젝트 구조
프로젝트는 아래와 같은 폴더 구조로 구성됩니다. 이 구조는 FastAPI 프로젝트의 기본 구조입니다.
01_4_basic
┣━ 📄main.py # FastAPI 애플리케이션의 주 진입점입니다.
┗━ 📁venv/ # Python 가상 환경 폴더입니다.
01_4_basic
┣━ 📄main.py # FastAPI 애플리케이션의 주 진입점입니다.
┗━ 📁venv/ # Python 가상 환경 폴더입니다.
프로젝트가 성장하면서 다음과 같이 구조를 확장할 수 있습니다. 직접 만들어야 하는 폴더이며 필수적인 구조는 아닙니다. 또한 이 구조는 사용자 편의에 따라 자유롭게 변경할 수 있습니다.
my_fastapi_project/
┣━ 📄main.py
┣━ 📁venv/
┣━ 📁app/ # 애플리케이션 코드를 포함하는 폴더
┃ ┣━ 📁models/ # 데이터베이스 모델을 정의하는 파일을 포함하는 폴더
┃ ┣━ 📁routers/ # API 라우트를 정의하는 파일들 포함하는 폴더
┃ ┗━ 📁schemas/ # Pydantic 모델을 정의하는 파일들 포함하는 폴더
┗━ 📄requirements.txt # 프로젝트에서 사용하는 패키지 목록
my_fastapi_project/
┣━ 📄main.py
┣━ 📁venv/
┣━ 📁app/ # 애플리케이션 코드를 포함하는 폴더
┃ ┣━ 📁models/ # 데이터베이스 모델을 정의하는 파일을 포함하는 폴더
┃ ┣━ 📁routers/ # API 라우트를 정의하는 파일들 포함하는 폴더
┃ ┗━ 📁schemas/ # Pydantic 모델을 정의하는 파일들 포함하는 폴더
┗━ 📄requirements.txt # 프로젝트에서 사용하는 패키지 목록
우리 수업은 FastAPI의 기본적인 사용법을 배우는 것이므로, 폴더 구조를 어렵게 가져가지 않고 대부분 main.py
파일에서 작업할 것입니다.
3.2 코드 설명
코드를 설명하기 전에 웹 서비스에 가장 기본적인 구성 요소를 살펴보겠습니다.
- 경로: 사용자가 입력한 URL의 경로를 의미합니다.
- 동작: 경로에 대한 요청을 처리하는 함수입니다.
fastAPI는 동작을 주로 함수
로 처리합니다. 경로는 함수 위에 데코레이터
로 지정합니다. 여기서 주로
라고 표현한 이유는 클래스를 사용하여 경로와 동작을 정의할 수도 있기 때문입니다.
이번에는 코드를 살펴보겠습니다.
from fastapi import FastAPI
app = FastAPI() # FastAPI 클래스의 인스턴스를 생성합니다.
@app.get("/") # 경로를 지정합니다.
def read_root(): # 경로에 대한 동작을 정의합니다.
return {"Hello": "World"} # 동작의 결과를 반환합니다.
from fastapi import FastAPI
app = FastAPI() # FastAPI 클래스의 인스턴스를 생성합니다.
@app.get("/") # 경로를 지정합니다.
def read_root(): # 경로에 대한 동작을 정의합니다.
return {"Hello": "World"} # 동작의 결과를 반환합니다.
app 인스턴스는 FastAPI 클래스의 인스턴스입니다. 이 인스턴스를 통해 FastAPI의 기능을 사용할 수 있습니다. 여기서는 @app.get("/")
의 형태로 사용되고 있습니다. @app.get("/")
는 데코레이터로, 사용자가 /
경로로 접근을 하였을 때 아래 함수를 실행하겠다는 의미입니다. 여기서 이 데코레이터는 단지 경로를 함수로 연결시켜주는 것 뿐만 아니라 함수의 리턴값을 통신이 가능한 형태로 변환까지 해줍니다.
실행했던 코드인 uvicorn main:app --reload
에서 uvicorn
는 FastAPI 애플리케이션을 실행하는 데 사용됩니다. main
은 main.py
파일의 이름이며, app
은 app
인스턴스를 의미합니다. 이렇게 FastAPI는 main.py
파일의 app
인스턴스를 찾아서 실행합니다. --reload
코드 변경을 감지하고 서버를 자동으로 다시 시작하는 옵션입니다. 개발 중에 유용합니다.