서버(Server)

서버(Server)/파이썬 (Python)

Poetry 보다 좋은 uv

개요Python 프로젝트를 시작할 때, 환경 설정과 의존성 관리는 시간이 꽤 걸리는 작업이다. 그래서 Poetry등의 도구가 등장했고, pyproject.toml 기반의 명확한 구조와 편의성 덕분에 나 역시 Poetry를 애용해왔다.하지만 최근 등장한 새로운 패키지 매니저 uv를 써보고 나서는 생각이 바뀌었다.속도, 실용성, 그리고 확장성 면에서 uv는 Poetry의 상위 호환에 가깝다.이 글에서는 uv를 어떻게 실제로 개발 환경에서 활용할 수 있는지를 공유하려 한다.uvuv는 Astral에서 개발한 초고속 Python 패키지 매니저로, 기존의 pip, venv, pip-tools, setuptools, poetry의 기능을 대체하거나 통합한다.Rust로 구현되어 있어 패키지 설치 속도가 압도적으로 빠르..

서버(Server)

Firebase 예시로 살펴보는 JWT

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: 토큰 제목 ..

서버(Server)

Firebase Authentication으로 Firestore 어드민 권한 관리하기

유저를 생성한다. await admin.auth().setCustomUserClaims(user.uid, { admin: true });를 통해 유저의 claim에 admin: true를 지정해준다. 이후 fireStore 보안 규칙 내에서rules_version = '2';service cloud.firestore { match /databases/{database}/documents { // 관리자 권한 확인 함수 function isAdmin() { return request.auth != null && request.auth.token.admin == true; } match /projects/{projectId} { allow read: if tr..

서버(Server)/장고 (Django)

Django 관련 읽어볼만한 글

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..

서버(Server)/장고 (Django)

Django 환경 변수 관리기

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를 읽는것을 도와주고, 여러 부가적인 기능을 가지고 있지만, 동시에 여러 환경변수 파일을 읽는것..

서버(Server)/자바 (Java)

자바, SQL 날짜/시간 정리

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..

서버(Server)/파이썬 (Python)

MacOS mysqlclient & psycopg2 환경 설정

개요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..

서버(Server)/파이썬 (Python)

Celery 재시도 로직과 Exponential Backoff and Jitter

개요Celery는 파이썬에서 널리 사용되는 비동기 작업 큐 라이브러리로, 주로 분산 작업 처리와 백그라운드 작업 실행을 위해 활용됩니다.비동기 작업에는 외부 API 호출이 포함되는 경우가 많으며, 이러한 작업은 외부 환경의 영향을 받기 쉽습니다. 네트워크 지연, 일시적인 API 장애, 서비스의 부하 등으로 인해 작업이 실패할 수 있습니다. 그러나 실패 원인이 일시적인 네트워크 문제인지, API 서비스의 장기적인 장애인지 즉시 판단하기는 어렵습니다.이 글에서는 Exponential Backoff와 Jitter라는 안정성 보장 기법을 소개하고, 이를 Celery에 적용해 외부 API 통합 시스템의 신뢰성과 복원력을 강화하는 방법을 설명합니다.Celery Task의 재시도 로직Celery task를 정의할때는..

서버(Server)

REST API URL 규칙

리소스 명사는 복수형으로# Good/language-tests# Bad/language-testURL에 kebab-case 사용, parameter에 camelCase 사용# Good/language-tests/language-tests/{testId}# Bad/language_tests/{test-id}/languageTests/{test_id}리소스 URL에 동사 금지# GoodPOST /language-tests# BadPOST /language-tests/create단, CRUD 작업이 아닌 경우에는 동사 사용 가능POST /language-tests/123/revalidate리소스 리스트에는 리소스 갯수 포함GET /language-tests# Response{ languageTests: [ ..

서버(Server)/파이썬 (Python)

Python isinstance() 사용시의 주의점

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..

Wibaek
'서버(Server)' 카테고리의 글 목록