노트필기/파이썬

노트필기) FastAPI로 배우는 백엔드 프로그래밍 with 클린 아키텍처 (챕터 1)

멧새소리 2024. 10. 27. 22:17

드디어 왔다!

재미있게 공부해보자

 

2024-10-26 받음!

 

1.2 포어트리를 이용한 가상환경과 의존성 관리

 

pip install poetry

 

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

 

mkdir fastapi-ca
cd fastapi-ca
poetry init

 

 

가상 환경 구동

poetry shell

 

 

.toml 파일에 선언된 패키지 설치

poetry install

 

경고가 발생하면

- >루트 경로에 README.md 파일 추가

-> pyporject.toml의 [tool.poetry] 항목에 package-mode = false 추가

[tool.poetry]
--생략--
package-mode = false

-> poetry.lock 파일 생성 됨 (poetry lock 명령어로도 생성 가능)

 

 

poetry.lock은 패키지 간 의존성이 해결된 현재 상태 -> 패키지를 모두 삭제한 상태에서 poetry intstall을 실행하면 poetry.lock 파일에 기술돼 있는 패키지의 버전으로 설치됨

 

 

1.3 Hello, Fast API

 

poetry add 명령어를 이용해 패키지 추가

poetry add fastapi

 

 

FastAPI를 구동시키려면 ASGI 서버가 필요. 공식 문서에 따라 유비콘 사용.

 

- 유비콘 : 성능이 우수하고 빠르며 대뷰모 응용 프로그램에 적합. 일반적으로 작은 규모의 프로젝트나, FastAPI만 사용하는 경우에는 유비콘이 적합

- 하이퍼콘: 높은 처리량이나 낮은 지연시간을 필요로 하는 작업에 적합. 여러 프레임워크와 호환되는 플러그인 시스템 지원. 복잡한 환경에서는 하이퍼콘이 더 많은 유연성 제공.

 

 

poetry add "uvicorn[standard]"

-> pyproject.toml에 관련 내용 추가 됨

 

PyPI에는 uvicorn과 uvicorn[standard] 두 개가 등록되어 있음. uvicorn[standard]는 사이썬 기반 의존성과 기타 선택적 기능이 함께 설치 

 

 

main.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def hello():
    return {"Hello","FastAPI"}

 

 

터미널에서 유비콘 실행

uvicorn main:app --reload

 

포트를 바꾸고 싶다면 --port 옵션 사용

uvicorn main:app --reload --port 8080

 

 

실행 결과

 

 

파이썬에서 서버 바로 실행

import uvicorn
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def hello():
    return {"Hello","FastAPI"}

if __name__ == "__main__":
    uvicorn.run("main:app", host="127.0.0.1", reload=True)

 

 

 

 

 

 

1.4 API 문서화

 

FastAPI는 API 코드를 작성하면 API 문서를 자동으로 생성 (OpenAPI 명세 준수)

서버 가동 상태에서 http://127.0.0.1:8000/docs 접속

 

 

openapi.json에 기술된 내용을 OpenAPI UI로 보여준다.

Redoc 스타일은 http://127.0.0.1:8000/redoc 에서 확인 가능

 

 

다시 docs에 들어가서 접혀 있는 항목을 펼치면 바로 API 실행이 가능하다



앞으로는 API 호출할 때 이 도구를 사용하지 않고 터미널에서 curl을 사용한다

 

응답 출력 결과를 읽기 편하게 보기 위해 jq를 사용했다.

 

 

1.5 데이터베이스 설정

 

도커에서 MySQL 실행

docker run --name mysql-local -p 3306:3306/tcp -e MYSQL_ROOT_PASSWORD=test -d mysql:8

-d 옵션은 백그라운드에서 컨테이너를 수행

 

MySQL이 도커에서 잘 실행되고 있는지 확인

 

 

컨테이너를 중지시키거나, 다시 시작하거나 재시작 할 때는 명령어

위에서는 CONTAINER-ID는 82170a821626

docker stop CONTAINER-ID
docker start CONTAINER-ID
docker restart CONTAINER-ID

 

 

스키마 생성

먼저 도커 컨테이너에 접속

docker exec -it 82170a821626 bash

 

MySQL에 접속

mysql -u root -p

 

데이터베이스 출력

mysql> SHOW DATABASES;

 

참고) 도커 쉘에서할 때는 -h 옵션을 주어야 한다.

mysql -u root -h 127.0.0.1 -p

 

 

스키마 생성 - 스키마 이름은 'fastapi-ca'

CREATE SCHEMA `fastapi-ca`;

 

 

 

1.6 이 책에서 만들 애플리케이션은 TIL이다. (today I learned)