[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 | 11. typing
·
Language/Python
typing은 Python에 타입 힌트를 추가하여 코드의 가독성을 높이고, 버그를 사전에 예방할 수 있도록 도와주는 라이브러리입니다. Python은 실행 전까지 변수의 타입을 체크하지 않는 동적 타이핑을 사용하지만, typing을 쓰면 코드를 실행하지 않고도 mypy 같은 정적 분석 도구를 통해 오류를 잡아낼 수 있습니다. 단, 3.9 버전 이상 부터 기본적인 타입에 대해서는 typing 없이도 직접 타입을 명시할 수 있습니다.def process_scores(names: list[str], scores: dict[str, int]) -> float: return sum(scores.values()) / len(names)타입 종류아래는 typing에서 지원하는 타입들에 대한 목록입니다.타입기능예시..
[n8n] n8n에 대하여
·
Automation
n8n(n eight n)은 API, DB, SaaS와 같은 여러가지 서비스를 서로 연결해서 자동적으로 업무를 수행할 수 있게 하는 워크플로우 자동화 도구입니다. 이벤트 기반으로 자동화 파이프라인을 구성할 수 있으며, 다른 자동화 도구와 비교하여 높은 자유도와 확장성을 강점으로 내세우고 있습니다. 자유도가 높다는 것은 진입 장벽 또한 높다는 의미이지만, 근래 LLM의 보편화로 인해 코드 생성이나 디버깅 난이도가 낮아짐에 따라 진입 장벽도 낮아져 대중적으로 많이 쓰이게 되었습니다.MCP 자동화n8n을 비롯한 워크플로우 자동화 도구가 많이 쓰이게 된 것은 AI agent 개발이 보편화 되면서, MCP 서버*로 많은 기능들을 자동으로 처리하기 시작했기 때문입니다. 각 MCP가 제공하는 정보를 종합하고, 복잡한..
[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 파일을 불러올 수 있습니다. 불러온 환경변수들은 특정 변수에 저장되는 것은 아니..