Python(37)
-
Python 타입 힌트 평가 지연(from __future__ import annotations)(feat. TYPE_CHECKING)
FastAPI나 SQLAlchemy처럼 타입 힌트를 자주 쓰는 프로젝트를 하다 보면 클래스 간 순환 참조(circular reference)나 선언 순서 문제로 코드가 지저분해집니다. __future__.annotations 과 TYPE_CHECKING을 사용하여 타입 힌트 평가 지연을 통해서 문제를 해결하는 방법을 정리했습니다. 참고글- https://hunstory.tistory.com/112 lambda 를 활용한 클래스 참조 문제 해결Python의 lambda 함수는 익명 함수(anonymous function)로, 한 줄로 간결하게 함수를 표현할 수 있는 기능입니다. 보통 lambda는 코드의 라인 수를 줄이거나, map, filter 같은 함수와 함께 사용되어 가독성을hunstory.tisto..
2025.04.24 -
FastAPI에서 실제 DB를 사용하는 테스트 환경 구성하기
astAPI로 개발하면서 단위 테스트나 통합 테스트를 작성하다 보면, 실제 데이터베이스에 데이터를 넣고 결과를 확인해야 할 때가 있습니다. 하지만 테스트가 끝난 뒤에도 데이터가 DB에 남는다면, 다음 테스트에 영향을 줄 수 있습니다. 이를 해결하기 위한 방법 중 하나는 테스트 중 생성된 데이터를 테스트 종료 후 롤백(Rollback) 처리하는 것입니다.해당 글에서는 Async Test 환경에서 실제 DB에 접근하면서도, 테스트가 끝나면 DB를 원래 상태로 되돌리는 구조를 정리했습니다.작동 원리테스트 함수 실행 시 test_db_session에서 DB 세션(Function 단위)이 생성됩니다.FastAPI의 get_db 의존성을 오버라이드하여 실제 엔드포인트에서도 이 테스트 세션이 사용됩니다.테스트가 끝..
2025.04.16 -
FastAPI Throtting(요청속도 제한) 처리(feat. Redis helm chart)
API를 개발할 때 트래픽 제한(Throttling)은 필수적인 기능 중 하나입니다. 사용자가 과도한 요청을 보내는 것을 방지하여 서비스 안정성을 유지하고, 악의적인 트래픽을 차단하는 데 도움을 줍니다. FastAPI에서 사용할 수 있는 여러 Throttling 라이브러리가 있지만, 이번 글에서는 SlowAPI를 선택하여 적용하는 과정을 소개합니다 Throttling 라이브러리 비교Throttling을 구현할 수 있는 라이브러리로 여러 가지가 있지만, 주요 라이브러리들을 비교해 본 후 SlowAPI를 선택하게 되었습니다.라이브러리start특징단점fastapi-limiter약 1.6kRedis 기반, FastAPI 전용설정이 복잡하고 유연성이 부족slowapi약 2.3kStarlette/FastAPI와 호..
2025.04.03 -
boto3를 활용한 SESManager 구축
AWS의 Simple Email Service(SES)는 대량 이메일을 효율적으로 발송할 수 있는 서비스입니다. 해당 글은 aioboto3를 활용하여 SES 이메일 발송을 보다 쉽게 처리할 수 있는 SESManager를 구축하는 방법을 소개합니다.이 SESManager는 HTML 본문이 포함된 일반 이메일과 첨부 파일이 포함된 RAW 이메일을 모두 지원하며, FastAPI 등의 비동기 웹 프레임워크와 함께 사용할 수 있도록 설계되었습니다.1. SESManager의 장점비동기 지원: aioboto3를 활용하여 비동기 환경에서도 SES를 사용할 수 있도록 구현일반 이메일 및 첨부 파일 지원: 일반적인 텍스트 이메일뿐만 아니라, 첨부 파일이 포함된 이메일도 발송 가능에러 핸들링 강화: AWS SES 관련 오류..
2025.03.20 -
lambda 를 활용한 클래스 참조 문제 해결
Python의 lambda 함수는 익명 함수(anonymous function)로, 한 줄로 간결하게 함수를 표현할 수 있는 기능입니다. 보통 lambda는 코드의 라인 수를 줄이거나, map, filter 같은 함수와 함께 사용되어 가독성을 높이는 용도로 활용됩니다. 하지만, lambda는 단순한 한 줄 코딩 이상의 역할을 할 수 있으며, 클래스 참조 문제 해결에도 유용하게 쓰일 수 있습니다. 이 글은 lambda 의 기본 개념부터 다양한 활용법, 그리고 클래스 참조 문제 해결 하는 방법을 정리했습니다.1. Lambda 함수란?Python에서 일반적인 함수는 def 키워드를 사용하여 정의하지만, lambda 키워드를 사용하면 한 줄로 간단하게 익명 함수를 만들 수 있습니다.# 일반적인 함수def add..
2025.02.21 -
Pydantic 효과적인 사용 방법
Pydantic은 Python의 데이터 유효성 검증 및 데이터 설정 라이브러리입니다. BaseModel을 기반으로 동작하며, 데이터 검증(validation), 데이터 직렬화/역직렬화(serialization/deserialization), 데이터 변환 등을 쉽게 수행할 수 있습니다. django의 serializer와 유사합니다. Basic한 BaseModel 사용법필드의 타입을 지정하면, 유효성 검사를 자동으로 수행.데이터는 선언된 필드 타입으로 자동 변환.from pydantic import BaseModelclass User(BaseModel): id: int name: str email: str# 데이터 생성 및 검증user = User(id=1, name="John Doe", ..
2025.01.10 -
Python Formatter(Black) 설정 및 테스트
프로젝트에 Black을 설정하며 장단점과 필요한 설정을 정리한 문서입니다.Black기능: 코드 포매터로, 코드 스타일을 자동으로 정리합니다.주요 목적: 코드 스타일 일관성 유지.PEP8을 완벽 준수하기 때문에 코드 가독성이 낮아질 수 있음. 때문에 프로젝트 별 추가 설정을 하는걸 추천.설치 및 사용: https://pypi.org/project/black/ blackThe uncompromising code formatter.pypi.org설치pip install black사용 예시black . # 전체 수정black /apps/ # 특정 디렉토리 수정black /apps/test.py # 특정 파일만 수정black --diff /apps/test.py # 파일 변경사항만 확인black --diff --..
2024.11.04 -
[Django] django-model-utils
해당 글은 django-model-utils 라이브러리를 사용하면서 정리와 장단점을 비교한 글입니다. Github: https://github.com/jazzband/django-model-utils GitHub - jazzband/django-model-utils: Django model mixins and utilities.Django model mixins and utilities. Contribute to jazzband/django-model-utils development by creating an account on GitHub.github.com 설치 방법pip install django-model-utils FieldsStatusField모델에서 상태 집합 중 하나를 선택해서 필드를 ..
2024.10.29