fastapi12 FastAPI 의 jsonable_encoder 들여다보기 jsonable_encoder 이란? FastAPI 에서 제공하는 인코더 함수로, 보통은 클라이언트로 전송하기 전에 응답하는 객체를 json 으로 인코딩할 수 있도록 변환해 주는 역할을 합니다. (참고로 json 으로 변환해 주는 것은 아닙니다!) 실제로 FastAPI 는 jsonable_encoder 를 어떻게 사용할까요? 아래 코드는 요청이 유효하지 않을 때 에러를 응답하는 함수입니다. # fastapi.exception_handlers.py async def request_validation_exception_handler( request: Request, exc: RequestValidationError ) -> JSONResponse: return JSONResponse( status_code=.. 2024. 1. 18. 네이버 클라우드 플랫폼(NCP)으로 Python 서버 배포하기 이 글은 FastAPI 로 구현된 Python 서버를 네이버 클라우드 플랫폼(이하 NCP)으로 마이그레이션 한 후기입니다. 들어가기 전에 저는 현재 글또 9기 운영진으로 지난 8 기서부터 또봇이라고 하는 슬랙 앱(봇)을 만들어 운영하고 있습니다. 처음 또봇을 클라우드 환경에서 배포할 때에는 `클라우드 타입`이라는 호스팅 서비스를 이용했는데요. 클라우드 타입은 클릭 몇 번으로 아주 간편하게 서버 배포를 해주는 호스팅 서비스입니다. 게다가 무료죠(였죠) 약 1년 동안 잘 사용하던 클라우드 타입이 이번 12월 부터 유료화를 도입했고, 기존 무료 호스팅은 하루 1번 강제 종료라는,, 아주 크리티컬 한 제약이 추가되었습니다. ㅠㅠ 저는 서버가 강제종료되기 전에 서둘러 다른 클라우드 서비스를 찾기 시작했습니다. 그.. 2023. 12. 9. Python & FastAPI 로 백엔드 시작하기 (2) _ API 연습 및 단축 스크립트 만들기 02. API 연습 및 단축 스크립트 만들기 개요 - `main.py` 를 `app/views` 경로로 이동합니다. - `main.py` 에 연습용 API를 구현합니다. - `run-server.sh` 스크립트를 생성합니다. - `tree` 를 이용해 디렉터리 구조를 확인합니다. main.py 를 app/views 경로로 이동하기 app 디렉터리와 그 하위에 views 디렉터리를 생성합니다. 각 디렉터리에는 __init__.py 파일을 생성합니다. *__init__.py 파일이 없는 경우, 해당 디렉터리는 단순한 디렉터리로 간주됩니다. 반면 __init__.py 파일이 존재하는 디렉터리는 파이썬 패키지로 간주되며, 패키지 내부에 있는 모듈들을 다른 모듈에서 import할 수 있습니다. 기존 main.py.. 2023. 4. 27. Python & FastAPI 로 백엔드 시작하기 (1) _ 개발환경 세팅하기 01. 개발환경 세팅하기 이 글은 Python과 FastAPI를 활용하여 백엔드 개발을 시작하고 싶은 분들을 위해 작성하였습니다. 개요 - pyenv로 가상환경을 만들고 Poetry 종속성 관리 도구를 설치한다. - FastAPI 와 Uvicorn 을 사용해 서버를 실행한다. - .gitignore 파일을 생성하여 불필요한 업로드를 막는다. - pre-commit을 활용하여 코드 스타일과 정적 분석을 자동화한다. *사용 기기 : M1 MacBook Air *사용 IDE : Visual Studio Code *만약 터미널 사용이 처음이거나 아직 세팅이 완료되지 않았다면 이전 글을 참고해주세요. 2023.03.18 - [나는 이렇게 논다/백엔드 시작하기 with Python] - Mac M1 터미널 환경 세.. 2023. 4. 10. FastAPI _ BaseSettings 을 lru_cache 할 때, unhashable type 에러 해결방법 BaseSettings을 사용한 객체를 lru_cache 할 때, TypeError: unhashable type: 에러가 발생할 때가 있다. 정리하면 다음과 같은 상황이다. given FastAPI 에서 lru_cache로 반환하는 BaseSettings 객체를, when 다시 lru_cache를 사용하는 함수가 인수로 받을 때, then TypeError: unhashable type: 에러가 발생함. e.g class Config(BaseSettings): URL: str = Field(..., env="URL") class Config: env_file = "secrets/.env" env_file_encoding = "utf-8" @lru_cache def get_config() -> Confi.. 2022. 10. 26. FastAPI _ Custom Exception 만드는 방법 코드를 작성하다 보면 특정 상황에 대한 예외처리를 만들고 싶을 때가 있다. FastAPI는 일반적으로 HTTPException을 이용해 예외를 처리하는데, 유사한 예외를 반복적으로 처리해야 한다면 우리가 직접 Exception을 커스텀해서 사용할 수 있다. 이번 글에서는 FastAPI에서 Custom Exception을 어떻게 구현하는지 코드로 설명해보겠다. 구현 시작 먼저 아주 간단한 api를 작성해보았다. from fastapi import FastAPI app = FastAPI() @app.get("/{name}") def home(name:str): return {"detail": f"Hello, {name}"} name을 쿼리 스트링으로 넘겨주면 "Hello, {name}"으로 반환해주는 api.. 2022. 5. 4. 이전 1 2 다음