반응형

백엔드 Back-end/패스트API FastAPI 5

Q. API 서버에서 인메모리 데이터베이스를 캐시cache로 쓰면 얼마나 빨라질까?

A. 응답을 받는데 1초가 걸리던 엔드포인트가 있다면, 100배 넘게 빨라질 수 있다! 처음에 1초 걸리던 게, 그 다음에는 0.0003초 걸렸다. 3000배 이상 빨라진 것이다. 컴퓨터 성능에 따라 다르지만 보통 100배 이상 빨라질 수 있다. 위 캡쳐화면을 통해서 왜 인메모리 데이터베이스를 캐시로 써야 하는지 쉽게 이해할 수 있다. 캐시를 쓰는 것만으로도 성능을 엄청나게 빠르게 할 수 있으니, 당연히 써야 한다. 구현 방법 구현 방법은 간단하다. redis 같은 메모리 데이터베이스에 endpoint와 파라미터 전체 url을 키로 넣고, 응답을 값으로 해서 저장하는 식이다. 그럼 완전히 동일한 endpoint와 파라미터로 다시 요청이 왔을 때 메모리 상에 저장해둔 응답을 바로 보내주면 아주 빨리 처리할..

FastAPI 바탕 프로젝트: 이메일 회원 가입과 JWT 토큰, MySQL 사용

Full Stack FastAPI and PostgreSQL - Base Project Generator, MIT License을 바탕으로 다른 프로젝트의 시작점이 될 수 있는 베이스 프로젝트를 만들었다. 주요 기능 주요 기능은 다음과 같다. - 이메일과 비밀번호로 회원가입 - 비밀번호 암호화 - 관리자(superuser) 생성 - JWT 토큰으로 사용자 식별 및 권한 제어 - ORM 적용 - MySQL 사용 프로젝트 루트 디렉터리에 .env 파일을 만들어서 저장해둬야 정상 작동한다. .env 파일 예는 아래와 같다. 데이터베이스 정보와, 비밀키, 첫 관리자 생성 정보다. USERNAME=admin PASSWORD=verysecret HOST=localhost PORT=3306 DATABASE=app S..

Q. FastAPI에서 pytest 할 때 ModuleNotFoundError: No module named 'fastapi' 오류 해결 방법은?

A. python -m pytest 라고 실행하거나 터미널 창을 닫았다가 다시 열고 실행하면 된다. 아래처럼 에러가 나타난다. 해결 방법은 터미널창을 닫았다가 다시 열고 실행하면 된다. 터미널창이나 PyCharm 같은 IDE를 닫고 다시 실행하기 귀찮다면 python -m pytest 라고 실행하면 정상 작동한다. pytest 설치 직후에 pytest.ini 파일을 만들고 아래와 같은 test.py를 실행해 보면 pytest.ini [pytest] addopts = -s test.py import sys def test(): print(sys.path) assert True 해당 디렉터리 아래 만들어 놓은 파이썬 가상환경 venv 내의 site-packages가 없다. 그래서 fastapi 모듈이 없다고..

Q. FastAPI에서 MySQL unsigned integer 길이 11로 하는 방법은?

A. Column(INTEGER(display_width=11, unsigned=True), primary_key=True, index=True)로 설정하면 된다. 위처럼 설정하기 위해서는 INTEGER를 불러와야 한다. 아래 코드가 그 예이다. from sqlalchemy.dialects.mysql import INTEGER class User(Base): __tablename__ = "users" id = Column(INTEGER(display_width=11, unsigned=True), primary_key=True, index=True) email = Column(String(255), unique=True, index=True) hashed_password = Column(String(255..

FastAPI 디렉터리 구조를 어떻게 하는 게 좋을까?

프로젝트명으로 저장소를 만들고 클론을 떠서 로컬에서 개발을 시작하고 나면, 디렉터리 구조부터가 고민이 되기 시작한다. django나 nestjs 등의 경우 CLI 명령어를 치면 자동으로 쭉 디렉터리와 기본 파일들을 만들어준다. 그런 경우 고민이 덜하다. 그 틀에 맞춰서 따라가면 되니까. 하지만 FastAPI의 경우 아직 그런 기능이 없는 거 같다. PyCharm을 쓰고 있어서 새 프로젝트 만들기를 누르고 FastAPI를 선택했지만 별 거 없다. 그냥 main.py와 test_main.http 파일 두 개와 venv 디렉터리만 생기고 끝이다. FastAPI로 개발할 때 과연 어떤 디렉터리 구조가 좋을까? FastAPI 개발자인 Sebastián Ramírez(tiangolo)의 예제 프로젝트가 있다. fu..

반응형