Hyun's Wonderwall

[FastAPI] 점프 투 FastAPI 공부 시작 본문

카테고리 없음

[FastAPI] 점프 투 FastAPI 공부 시작

Hyun_! 2024. 12. 20. 15:33

점프 투 FastAPI에서 사용하는 버전

FastAPI 0.85.1 버전

파이썬 3.10 버전

Svelte 3.49.0 버전

부트스트랩 5.1.3 버전


나는 그냥 최신버전을 사용했다 (아래 참고, 파이썬은 3.11.4)


파이썬 가상 환경 (venv)

프로젝트별로 사용해야 하는 FastAPI 버전이 다를 수 있으므로, venv를 사용해서 가상환경에 FastAPI를 설치해 사용할 것이다.

터미널에서 가상환경 venv 만들기

참고: https://wikidocs.net/175214

python -m venv myapi
# 실제 개발에서는 python -m venv venv로 했다...
  • Scripts 디렉터리 하위로 이동 후 activate 입력 → venv 활성화
C:\venvs> cd myapi/Scripts
C:\venvs\myapi\Scripts> activate

(myapi) C:\venvs\myapi\Scripts>
  • venv에서 벗어나려면 deactivate

 

FastAPI 설치

pip install fastapi
(myapi) C:\Users\SAMSUNG\Documents\GitHub\SongForNewYear-BE\myapi\Scripts>pip install fastapi
Collecting fastapi
  Using cached fastapi-0.115.6-py3-none-any.whl (94 kB)
Collecting starlette<0.42.0,>=0.40.0 (from fastapi)
  Using cached starlette-0.41.3-py3-none-any.whl (73 kB)
Collecting pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4 (from fastapi)
  Using cached pydantic-2.10.4-py3-none-any.whl (431 kB)
Collecting typing-extensions>=4.8.0 (from fastapi)
  Using cached typing_extensions-4.12.2-py3-none-any.whl (37 kB)
Collecting annotated-types>=0.6.0 (from pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4->fastapi)
  Using cached annotated_types-0.7.0-py3-none-any.whl (13 kB)
Collecting pydantic-core==2.27.2 (from pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4->fastapi)
  Using cached pydantic_core-2.27.2-cp311-cp311-win_amd64.whl (2.0 MB)
Collecting anyio<5,>=3.4.0 (from starlette<0.42.0,>=0.40.0->fastapi)
  Using cached anyio-4.7.0-py3-none-any.whl (93 kB)
Collecting idna>=2.8 (from anyio<5,>=3.4.0->starlette<0.42.0,>=0.40.0->fastapi)
  Using cached idna-3.10-py3-none-any.whl (70 kB)
Collecting sniffio>=1.1 (from anyio<5,>=3.4.0->starlette<0.42.0,>=0.40.0->fastapi)
  Using cached sniffio-1.3.1-py3-none-any.whl (10 kB)
Installing collected packages: typing-extensions, sniffio, idna, annotated-types, pydantic-core, anyio, starlette, pydantic, fastapi
Successfully installed annotated-types-0.7.0 anyio-4.7.0 fastapi-0.115.6 idna-3.10 pydantic-2.10.4 pydantic-core-2.27.2 sniffio-1.3.1 starlette-0.41.3 typing-extensions-4.12.2

[notice] A new release of pip is available: 23.1.2 -> 24.3.1    
[notice] To update, run: python.exe -m pip install --upgrade pip

(myapi) C:\Users\SAMSUNG\Documents\GitHub\SongForNewYear-BE\myapi\Scripts>python -m pip install
ERROR: You must give at least one requirement to install (see "pip help install")

[notice] A new release of pip is available: 23.1.2 -> 24.3.1    
[notice] To update, run: python.exe -m pip install --upgrade pip

 

pip을 최신 버전으로 설치

python -m pip install --upgrade pip

 

Uvicorn 설치

Uvicorn을 설치한다. FastAPI는 비동기 방식의 웹 서버 프레임워크이고, 웹 서버는 아니다. 따라서 웹 서버를 같이 써주어야 함.

(c.f. Spring Boot는 spring-boot-starter-web을 사용할 때 Tomcat이 기본적으로 내장되어 있다.)

 

Uvicorn은 비동기 방식의 http server. ASGI 기반.

pip install "uvicorn[standard]"

 

프론트엔드 클라이언트는 별도 개발 예정이라 Svelte는 패스했다.

main.py에 Hello API를 만들어 보자.

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def hello():
    return {"message": "안녕하세요"}

 

터미널에 이렇게 입력하면 웹서버가 실행된다. http://127.0.0.1:8000/ 에서 확인.

uvicorn main:app --reload
  • main: 모듈명 (main.py)
  • app: FastAPI로부터 생성된 인스턴스 (app=FastAPI())
  • --reload : 코드 수정시 새로고침되는 옵션 (개발환경에서만 사용할 것)

uvicorn을 종료: 터미널에서 CTRL+C


FastAPI의 편의 기능

실행 가능한 API 문서를 바로 볼 수 있도록 제공 (Swagger 같은)
http://127.0.0.1:8000/docs

읽기만 할 수 있는 문서도 존재
http://127.0.0.1:8000/redoc

프론트엔드에서 API 응답을 fetch해와서 띄우는 방법 https://wikidocs.net/175875


 

파이참 설치 (선택)

파이참 인터프리터 설정: 파이썬이 바라보아야 하는 인터프리터 위치를 가상 환경 위치로 수정해준다. https://wikidocs.net/175832


Fast API 프로젝트 구조

├── main.py
├── database.py
├── models.py
├── domain
│   ├── answer
│   ├── question
│   └── user
└── frontend

프로젝트를 설정하는 main.py 파일

main.py 파일에 생성한 app 객체는 FastAPI의 핵심 객체.
app 객체를 통해 FastAPI의 설정을 할 수 있음.
main.py는 FastAPI 프로젝트의 전체적인 환경을 설정하는 파일임.

데이터베이스를 설정하는 database.py 파일

database.py 파일은 데이터베이스와 관련된 설정을 하는 파일.
이 파일에는 데이터베이스를 사용하기 위한 변수, 함수등을 정의하고
접속할 데이터베이스의 주소와 사용자, 비밀번호등을 관리함.

모델을 관리하는 models.py 파일

파이보 프로젝트는 ORM(object relational mapping)을 지원하는 파이썬 데이터베이스 도구인 SQLAlchemy를 사용.
SQLAlchemy는 모델 기반으로 데이터베이스를 처리한다. "모델 클래스들을 정의할 models.py 파일이 필요",

API를 구성하는 domain 디렉터리

도메인은 "질문", "답변", "사용자" 처럼 굵직한 요구사항 또는 문제 영역을 대표하는 말이다. 이 프로젝트는 총 3개의 도메인을 두어 그 하위에 관련된 파일을 작성하고자 한다.
그리고 각 도메인은 API를 생성하기 위해서 다음과 같은 파일들이 필요하다.

  • 라우터 파일 - URL과 API의 전체적인 동작을 관리
  • 데이터베이스 처리 파일 - 데이터의 생성(Create), 조회(Read), 수정(Update), 삭제(Delete)를 처리 (CRUD)
  • 입출력 관리 파일 - 입력 데이터와 출력 데이터의 스펙 정의 및 검증
    예를 들어 질문(domain/question) 도메인이라면 다음의 3개 파일이 필요하다.
  • question_router.py - 라우터 파일
  • question_crud.py - 데이터베이스 처리 파일
  • uestion_schema.py - 입출력 관리 파일

frontend

Svelte 프레임워크를 설치한 디렉터리. Svelte의 소스 및 빌드 파일들을 저장할 프론트엔드의 루트 디렉터리. 최종적으로 frontend/dist 디렉터리에 생성된 빌드 파일들을 배포시에 사용할 것임.


모델로 데이터베이스 관리하기

모델 만들고 테이블 생성
https://wikidocs.net/175967
데이터 생성, 수정, 삭제, 조회
https://wikidocs.net/175967


질문 목록 API 만들기

  • 라우터(Router)
  • 의존성 주입(Dependency Injection)
  • Pydantic으로 하는 입출력 관리
  • CRUD 파일 작성
    을 배울 것이다.

라우터

의존성 주입

CRUD


질문 상세 API 만들기


답변 등록 API

https://wikidocs.net/176499


질문 목록 API

https://wikidocs.net/176637

질문 목록 API를 페이징으로 수정

https://wikidocs.net/176716


회원가입

https://wikidocs.net/176872
로그인
https://wikidocs.net/176934
글쓴이 정보 추가
https://wikidocs.net/177075


검색

https://wikidocs.net/177143