Programming/Python(21)
-
FastAPI를 사용하는 이유: 성능 외의 트레이드오프
Go가 처리량(RPS)과 지연 시간에서 우위를 보입니다만, FastAPI를 선택하는 이유는 성능만이 전부가 아니기 때문입니다. Go는 고트래픽, 저지연 미세 서비스나 실시간 시스템(예: 클라우드 네이티브 앱)에 최적화되어 있지만, FastAPI는 개발 속도, 유지보수성, Python 생태계 활용 측면에서 압도적 장점을 가집니다. 2025년 기준으로 FastAPI는 여전히 Python 백엔드의 표준으로 자리 잡았으며, 특히 중소규모 API나 프로토타이핑에서 "빠르게 만들어 유지하기 쉬운" 선택지로 사랑받고 있습니다. 아래에서 주요 이유를 정리하겠습니다. FastAPI의 핵심 장점 (Go 대비) 카테고리FastAPI 장점Go 대비 왜 선택하나? 예시/참조 개발 속도 & 생산성- 타입 힌트(Pydantic)로..
2025.10.26 -
Go로 서버를 구성하는 것과 Python FastAPI와 asyncio로 서버를 구성하는 것의 성능 차이
# Go 언어 vs FastAPI (asyncio) 서버 성능 비교Go (Golang)와 Python의 FastAPI (asyncio 기반)는 모두 고성능 웹 서버를 구축할 수 있는 인기 있는 선택지입니다. Go는 컴파일 언어로 가벼운 Goroutines를 통해 높은 병렬성을 제공하며, FastAPI는 Python의 비동기 I/O (asyncio)를 활용해 I/O-bound 작업에 강합니다. 그러나 여러 벤치마크에 따르면, Go가 전체적으로 FastAPI보다 우수한 성능을 보입니다. 이는 주로 Go의 낮은 오버헤드, 효율적인 가비지 컬렉션(GC), 그리고 CPU-bound 작업에서의 우월성 때문입니다. Python의 인터프리터 특성과 GIL(Global Interpreter Lock)이 병목이 될 수 있..
2025.10.26 -
asyncio를 사용한 비동기 요청 처리
Reactor pattern보통 asyncio를 사용해서 비동기 요청을 처리하는 서버를 구현한다고 했을때, 요청을 받자마자 queue에 넣고 이 queue에서 요청을 뽑아 비동기로 처리하는 reactor를 둡니다. 그리고 reactor에서 처리 완료된 결과를 결과 queue에 넣고 반환하는 처리를 합니다. 이런 패턴을 Producer-Consumer 라고 하기도 하죠. 여기서 producer는 서버 핸들러가 되고, 이는 클라이언트의 요청을 밪자마자 처리 큐에 넣어 즉시 응답을 반환하거나, 요청을 비동기로 대기 상태로 전환합니다. Consumer는 Reactor나 Worker pool이 되며, 여러 워크 태스크(reactor)가 큐에서 작업을 뽑아 비동기로 처리합니다. 워커 수를 제한해 리소스(CPU, ..
2025.10.26 -
Python async io
예제 1: 커피숍 비유로 이해하기상황: 5명의 손님이 커피를 주문했습니다커피 만드는 시간: 각 3초방법 1: 동기 방식 (Synchronous) - 비효율적인 직원import asyncio import time from datetime import datetime print("=" \* 60) print("☕ 커피숍 비유로 AsyncIO 이해하기") print("=" \* 60) def make\_coffee\_sync(customer): """커피를 만듭니다 (동기)""" print(f" \[{datetime.now().strftime('%H:%M:%S')}\] {customer}님 커피 제조 시작...") time.sleep(3) # 커피 만드는 시간 (3초 ..
2025.10.26 -
Python set 사용 주의점
set을 선언하는 방법에는 두가지가 있습니다. 첫 번째는 set()을 사용하는 방법이고, 두 번째는 {}를 사용하는 방법입니다. set()을 사용하는 경우와 {}을 사용하는 경우 모두 (0, 0)인 tuple 값을 추가해 보겠습니다. 우선 set()을 사용하는 경우 입니다. unique = set((0, 0))그리고 {}을 사용하는 경우 입니다. unique = {(0, 0)}두 경우 모두 같은 결과로 (0, 0)인 tuple 원소가 set에 들어 있을것으로 기대할 수 있으나, (0, 0) tuple 원소가 저장된 경우는 두 번째 {}를 사용한 경우 뿐 입니다. 첫 번째 set()을 사용해서 (0,0)을 추가한 경우에는 (0, 0)이 아닌 0과 0 즉, 0만 저장됩니다. 이렇듯 파이썬 사용에는 주의해야 ..
2024.02.21 -
numpy.power
np.power는 numpy가 제공하는 멱승을 계산하기 위한 함수입니다. 다음과 같이 사용할 수 있습니다. import numpy as np np.power(2, 4)16np.power(256, 0.5) 16.0이는 당연히 벡터에 적용할 수 있습니다. arr = np.array([[1, 2], [3, 4], [5, 6]]) np.power(arr, 2)array([[ 1, 4], [ 9, 16], [25, 36]])
2023.09.05