WeniVooks

검색

FastAPI 베이스캠프

FastAPI 설치 및 프로젝트 생성

1. 프로젝트 폴더 생성 및 가상환경 설정

FastAPI를 시작하기 전 '가상환경'이라는 특별한 작업공간을 만들 것입니다. 가상환경을 사용하면 프로젝트마다 독립된 개발 환경을 만들 수 있습니다. 또한 프로젝트 간 충돌을 방지하고, 필요한 패키지만 설치하여 시스템을 깔끔하게 유지할 수 있습니다. 가상환경을 사용하면 프로젝트를 다른 환경으로 쉽게 이동할 수 있습니다.

이제 직접 해볼 차례입니다. 아래의 단계를 따라 프로젝트 폴더를 만들고 가상환경을 설정해 봅시다.

  1. VSCode에서 파일(File) > 폴더 열기(Open Folder) 를 선택하고 FastAPI 작업을 할 폴더를 선택합니다.

  2. VSCode에서 터미널을 엽니다. (Ctrl + ` 또는 Terminal > New Terminal)

  3. Window는 터미널이 열리면 오른쪽 상단에 '+' 버튼 옆에 있는 아래쪽 화살표(▼)를 클릭합니다. 드롭다운 메뉴에서 PowerShell을 선택합니다. Mac은 기본으로 열리는 Terminal을 사용하셔도 좋습니다. 이 터미널을 통해 명령어를 실행할 것입니다.

  4. 터미널에서 다음 명령어를 실행하여 프로젝트 폴더를 생성(mkdir 명령)하고 이동(cd명령)합니다.

    mkdir 01_4_basic
    cd 01_4_basic
    mkdir 01_4_basic
    cd 01_4_basic
  5. 다음 명령어를 실행하여 가상환경을 생성합니다. python -m venv [가상환경이름] 형식입니다.

    • python: Python 인터프리터를 실행합니다.
    • -m: 뒤에 오는 이름을 모듈로 인식하고 실행하라는 옵션입니다.
    • venv: 실행할 모듈의 이름입니다. 이는 가상 환경을 생성하는 Python의 내장 모듈입니다.
    • [가상환경이름]: 생성할 가상 환경의 이름 또는 경로입니다.

    여기에서는 venv라는 이름으로 가상환경을 생성합니다. venv는 virtual environment의 약자입니다.

    python -m venv venv
    python -m venv venv
  6. 다음 명령어를 실행하여 가상환경을 활성화합니다. 이 가상환경속으로 들어간다고 생각하시면 됩니다.

    • 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
  7. 앞에 (venv) 표시가 있는 상태에서만 작업을 진행해야 합니다. venv가 바로 활성화된 가상환경입니다.

    (venv) C:\Users\YourName\projects\01_4_basic>
    (venv) C:\Users\YourName\projects\01_4_basic>

보안 오류 해결 방법

Windows에서 다음과 같은 보안 오류가 발생할 경우 해결 방법입니다.

  1. Windows 검색창에 PowerShell을 검색합니다.

  2. 관리자 권한으로 실행을 선택합니다.

  3. 다음 명령어를 입력해주세요. 복사하셔서 마우스 우클릭으로 붙여넣기를 하시면 됩니다.

Set-ExecutionPolicy Unrestricted
Set-ExecutionPolicy Unrestricted
  1. 선택지가 뜹니다. 모두 예A를 입력합니다.

  2. VSC를 다시 실행하고 터미널을 열어주세요. 가상환경만 다시 실행해도 되지만 초급자에게는 VSC를 다시 실행하는 것이 더 편합니다.

2. FastAPI 설치 및 프로젝트 생성

가상환경이 준비 되었다면, FastAPI를 설치하고 첫 프로젝트를 생성해봅시다. 코드에 대한 설명은 다음 장에 있습니다.

  1. 가상환경이 활성화된 상태에서 FastAPI를 설치합니다. pip은 Python 패키지 관리자입니다. 파이썬의 패키지를 설치하고, 업그레이드하고, 삭제하는 등의 작업을 수행합니다. fastapi를 실행시키는데 필요한 2가지 패키지를 설치합니다.

    pip install fastapi
    pip install uvicorn
    pip install fastapi
    pip install uvicorn
  2. 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"}
  3. 개발 서버를 실행합니다.

    uvicorn main:app --reload
    uvicorn main:app --reload
  4. 웹 브라우저에서 http://127.0.0.1:8000/로 접속하여 서버가 동작하는지 확인합니다.

  5. 웹 브라우저에서 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 애플리케이션을 실행하는 데 사용됩니다. mainmain.py 파일의 이름이며, appapp 인스턴스를 의미합니다. 이렇게 FastAPI는 main.py 파일의 app 인스턴스를 찾아서 실행합니다. --reload 코드 변경을 감지하고 서버를 자동으로 다시 시작하는 옵션입니다. 개발 중에 유용합니다.

1.3 개발 환경설정2장 FastAPI로 기본 API 만들기