[FastAPI] lifespan - 생명주기
·
Backend/Python
생명주기생명주기는 어떤 객체나 프로그램이 생성되고, 실행되면서 소멸할 때까지의 전체 과정을 의미합니다. FastAPI에서의 생명주기는 서버가 켜지고 꺼질 때까지의 과정이라고 볼 수 있습니다. 보통 서버의 생명주기에서는 다음과 같은 작업이 순서대로 이루어집니다.Startup (시작): 서버가 막 가동될 때입니다. 이때 보통 DB 연결이나 AI 모델 로드, 설정 파일 읽기 같은 무거운 작업을 미리 해둡니다.Running (운영): 서버가 사용자(클라이언트)들의 요청을 처리하며 열심히 일하는 단계입니다.Shutdown (종료): 서버가 꺼질 때입니다. 이때 DB 연결을 안전하게 닫거나, 임시 파일을 삭제하는 등 뒷정리를 합니다.asynccontextmanagerFastAPI에서 생명주기를 설정하는 함수는 비동..
[FastAPI] APIRouter - 라우팅 설정하기
·
Backend/Python
FastAPI에서 각 엔드포인트들의 주소를 하나로 묶어 사용하려면 APIRouter() 객체를 사용하면 됩니다.include_router( )우선 FastAPI 객체가 필요합니다. from fastapi import FastAPIapp = FastAPI()app의 include_router( ) 함수로 APIRouter( ) 객체를 연결할 수 있습니다.from fastapi import FastAPIfrom app.routes.news import news_router # APIRouter 객체app = FastAPI()app.include_router(news_router, prefix="/news", tags=["news"])news_router | APIRouter 객체 이름prefix | ..
[FastAPI] FastAPI에 대하여
·
Backend/Python
FastAPI는 Python의 표준 타입 힌트* 기반의 API를 구축하기 위한 웹 프레임워크입니다. Node.js나 Go과 대등할 정도로 빠른 개발 속도와 처리 속도를 가지고 있어 Fast라는 이름이 붙여졌습니다. *표준 타입 힌트 : Python 3.6 버전부터 도입된 type hinting 문법을 API 개발에 그대로 활용하는 것. 자세한 내용은 아래 후술간단한 작성방식 Starlette과 Pydantic을 기반으로 하여 빠른 코드 작성을 지원할 뿐 아니라, 코드 중복을 최소화하고 코드 자체를 간결하게 만들어 직관적이고 배우기 쉬운 프레임워크를 설계하였습니다. 예를 들어 서버의 라우팅 과정을 Flask와 비교하면 이름 식별자나 routing 파일 위치(Flask에서는 blueprint 위치)등을 작성..
[Python] Uv에 대하여
·
Language/Python
Uv는 Rust 기반의 패키지 관리 프로그램으로, Python의 여러 버전을 하나의 머신에서 사용할 수 있게 관리해줍니다. Python은 역사가 오래된 언어이기 때문에, pip나 conda와 같은 대표적인 패키지 관리 프로그램이 등장하기 이전에도 여러 종류의 프로그램이 존재했습니다. 이들은 모두 기능이나 특징이 조금씩 달라서, 단일화된 Python 생태계를 유지하는데 어려움을 주게 되었습니다. 이런 맥락에서 등장한 Uv는 기존의 패키지 관리 프로그램들을 하나로 통합하는 것을 목표로 만들어졌습니다. 우리가 pip나 conda에서 하던 것 처럼 패키지와 라이브러리를 쉽게 설치할 수 있을 뿐 아니라, 가상환경을 생성하거나 Python의 버전 또한 다양하게 설치하고 전환할 수 있습니다. 그러면서도 Rust의 특..
[Python] Library | 10. logging
·
Language/Python
logging은 로그 기록을 생성 및 관리하는 라이브러리입니다. 별도의 설치 없이 사용할 수 있습니다. 코드의 진행상황을 출력하는 로그는 print()를 사용해도 구현할 수 있긴 합니다. 하지만 logging을 사용하면 출력 터미널에 기록이 나타나는 것에서 멈추지 않고 파일로 남기거나, DB에 남기는 것도 가능해집니다.getLogger( )logging은 기본적으로 Logger 객체를 생성하는 것에서 시작합니다. Logger 객체는 getLogger()함수로 생성할 수 있습니다.import logginglogger = logging.getLogger(__name__)Logger를 통해 띄울 수 있는 로그의 종류는 아래와 같습니다if __name__ == "__main__": logger.debug(..
[Python] Library | 09. dotenv
·
Language/Python
dotenv는 Python이 많은 양의 환경변수를 관리할 수 있도록 .env 파일을 사용하게 하는 라이브러리입니다. dotenv는 별도로 설치가 필요합니다.pip install python-dotenv환경 변수가 한두 개일 때는 시스템 환경 변수에 추가해서 사용할 수 있습니다. 하지만 환경 변수가 많아지면 일일이 추가하는게 힘들어지므로, .env 파일에 모두 저장하여 관리하는 경우도 있습니다. dotenv는 Python이 .env 파일에 접근할 수 있도록 해줍니다. .env 파일이 이렇게 구성되어 있다고 합시다.ENV1=asdfghjkENV2=qwertyuiopPython에서 load_dotenv( ) 함수를 이용해 .env 파일을 불러올 수 있습니다. 불러온 환경변수들은 특정 변수에 저장되는 것은 아니..
[Python] Syntax | 04. import
·
Language/Python
import는 외부 파일(모듈)이나 폴더(패키지)에 작성된 코드를 가져와 사용하는 기능입니다.동작 과정import는 코드가 실행되는 런타임에서, import 줄을 만났을 때 실행됩니다. 그래서 코드를 실행하기 전 까지는 모듈을 가져오지 않습니다.import를 통해 가져오는 코드들도 caching의 대상이 될 수 있습니다. 만약 처음 import 하는 모듈(또는 패키지)라면, sys.path를 참고하여 해당 모듈이 위치한 경로를 따라 코드를 가져옵니다. 첫 import가 완료되면, sys.module라는 dictionary 객체에 해당 모듈 코드를 저장합니다. 이후에 같은 모듈을 import 하면, sys.module에서 그 모듈이 존재하는지 확인합니다. 존재한다면 저장된 객체 주소를 불러와 사용합니다.작..
[Python] Syntax | 03. Decorator(@)
·
Language/Python
데코레이터(Decorator)는 기존 함수의 코드를 직접 수정하지 않으면서 새로운 기능을 추가하는 기능입니다.표기법(@)데코레이터도 일종의 함수입니다. 단, 목표하는 함수를 인자로 받아 그 함수 앞뒤로 추가 기능을 구현한 새로운 함수(일반적으로 wrapper라고 부릅니다)를 반환한다는 특징이 있습니다.def my_decorator(func): def wrapper(): print("--- 함수 실행 전 ---") func() # 데코레이터가 적용될 함수 print("--- 함수 실행 후 ---") return wrapper # 새로운 함수를 반환합니다def say_hello(): print("안녕하세요!")dec_say_hello =..