개요Python 프로젝트를 시작할 때, 환경 설정과 의존성 관리는 시간이 꽤 걸리는 작업이다. 그래서 Poetry등의 도구가 등장했고, pyproject.toml 기반의 명확한 구조와 편의성 덕분에 나 역시 Poetry를 애용해왔다.하지만 최근 등장한 새로운 패키지 매니저 uv를 써보고 나서는 생각이 바뀌었다.속도, 실용성, 그리고 확장성 면에서 uv는 Poetry의 상위 호환에 가깝다.이 글에서는 uv를 어떻게 실제로 개발 환경에서 활용할 수 있는지를 공유하려 한다.uvuv는 Astral에서 개발한 초고속 Python 패키지 매니저로, 기존의 pip, venv, pip-tools, setuptools, poetry의 기능을 대체하거나 통합한다.Rust로 구현되어 있어 패키지 설치 속도가 압도적으로 빠르..
JWT의 구조JSON Web Token(JWT)은 세 부분으로 나뉘어 있으며, .(dot)으로 연결됩니다.Header헤더(Header)에는 토큰의 타입과 서명 알고리즘 정보가 들어갑니다. 일반적으로 두 개의 필드를 포함합니다.{ "alg": "HS256", // 서명에 사용된 해싱 알고리즘 (예: HS256[SHA256], RS256) "typ": "JWT" // 토큰 타입 (항상 "JWT"), 생략가능}Payload페이로드(Payload)는 실제 토큰에 담길 정보(클레임, claim)를 포함합니다. 클레임은 name: value의 한 쌍으로 이루어집니다.클레임은 크게 세 종류로 나뉩니다:1. 등록된 클레임(Registered Claims)iss: 토큰 발급자 (issuer)sub: 토큰 제목 ..
https://velog.io/@qlgks1/Django-DRF-Serializers-serializer-파헤치기-왜-serializer-response가-만들어지기-까지 Django, DRF Serializers - serializer 파헤치기, 왜 serializer? response가 만들어지기 까지drf에서 DTO 그 이상의 역할을 하는 serializer, Serializers 를 왜써야 할까? 사용 목적과 이유를 확인하고 drf core와 serializer의 핵심 core를 한 번 파헤쳐 보자.velog.io https://velog.io/@noname2048/Django-Creative-View가-request.GET-을-받으면-일어나는-일에-대해-간략히-그려보았다 Django Create..
AS-IS기존에는 django-environ을 이용하여 .env파일 하나로 환경변수를 관리했다.# Build paths inside the project like this: BASE_DIR / 'subdir'.BASE_DIR = Path(__file__).resolve().parent.parent# 환경 변수 설정env = environ.Env(DEBUG=(bool, True))environ.Env.read_env(env_file=os.path.join(BASE_DIR, ".env"))SECRET_KEY = env("DJANGO_SECRET_KEY")django-environdjango-environ은 .env를 읽는것을 도와주고, 여러 부가적인 기능을 가지고 있지만, 동시에 여러 환경변수 파일을 읽는것..
TL;DRJavaDate는 immutable하지 않고, 레거시LocalDate = 날짜, LocalTime = 시간, LocalDateTime = LocalDate + LocalTimeZoneId: 지역 정보(Asia/Seoul), ZoneOffset: 시간대 정보(+09:00)OffsetDateTime = LocalDateTime + ZoneOffset 로 시간대 정보가 포함됨ZoneDateTime = LocalDateTime + ZoneOffset + ZoneId 로 지역 정보가 포함되어 써머타임등 관리 가능Instant: 1970-01-01T00:00:00Z 를 기준으로 지난 시간을 측정. OffsetDateTime과 비슷하다SQLDATE: 날짜만 저장하며 시간 정보는 포함되지 않습니다.DATETI..
개요MacOS에서 파이썬 DB 관련 라이브러리인 mysqlclient와 psycopg2를 사용할 때 겪을 수 있는 의존 라이브러리에 관한 정리 글 입니다.brew를 사용합니다.mysqlclient오류Exception: Can not find valid pkg-config name.Specify MYSQLCLIENT_CFLAGS and MYSQLCLIENT_LDFLAGS env vars manually설정법mysqlclient를 사용하기 위해서는 mysql또는 mysql-client를 설치해야한다.mysql 또는 mysql-client 설치mysqlbrew install mysql pkg-configmysql-client용량: 약 126MBmysql-client@9.0은 mysql_native_passwo..
개요Celery는 파이썬에서 널리 사용되는 비동기 작업 큐 라이브러리로, 주로 분산 작업 처리와 백그라운드 작업 실행을 위해 활용됩니다.비동기 작업에는 외부 API 호출이 포함되는 경우가 많으며, 이러한 작업은 외부 환경의 영향을 받기 쉽습니다. 네트워크 지연, 일시적인 API 장애, 서비스의 부하 등으로 인해 작업이 실패할 수 있습니다. 그러나 실패 원인이 일시적인 네트워크 문제인지, API 서비스의 장기적인 장애인지 즉시 판단하기는 어렵습니다.이 글에서는 Exponential Backoff와 Jitter라는 안정성 보장 기법을 소개하고, 이를 Celery에 적용해 외부 API 통합 시스템의 신뢰성과 복원력을 강화하는 방법을 설명합니다.Celery Task의 재시도 로직Celery task를 정의할때는..
isinstance()파이썬에는 isinstance() 라는 인스턴스가 특정 클래스/데이터 타입인지 검사할 수 있는 메서드가 존재한다. 이는 약타입 언어인 파이썬에서 유용하게 사용될 수 있는 기능이다.import datetime as dtinteger = 1print(isinstance(integer, int)) # Truetoday = dt.date.today()print(isinstance(today, dt.date)) # Truedate → datetime 변환 로직해당 isinstance() 메서드를 이용해 date 객체를 datetime으로 변환하는 다음과 같은 로직이 있다.import datetime as dtdef convert_to_datetime(date: dt.date | dt.da..