피드로 돌아가기
Dev.toBackend
원문 읽기
supabase-async: ThreadPoolExecutor에서 httpx AsyncClient로 리팩토링
httpx AsyncClient 전환을 통한 처리량 3배 및 응답 시간 66% 개선
AI 요약
Context
ThreadPoolExecutor 기반의 동기 호출 래핑 구조로 인한 가짜 비동기 동작 발생. 제한된 max_workers 설정에 따른 동시성 부족과 스레드 생성 오버헤드로 인한 메모리 낭비가 병목 지점으로 작용.
Technical Solution
- ThreadPoolExecutor를 제거하고 Native Async I/O를 지원하는 httpx AsyncClient 도입
- Singleton 패턴 기반의 _get_client 메서드 설계를 통한 클라이언트 인스턴스 재사용 및 리소스 최적화
- httpx.Limits 설정을 통한 max_connections 제어로 시스템 가용성 확보 및 Connection Pooling 구현
- aenter 및 aexit 매직 메서드 구현을 통한 Context Manager 지원으로 안정적인 리소스 해제 보장
- requests 기반의 동기 로직을 awaitable한 비동기 파이프라인으로 전면 리팩토링
실천 포인트
- 기존 라이브러리가 ThreadPoolExecutor를 사용하는 'Pseudo-async' 구조인지 확인 - HTTP 클라이언트 도입 시 Connection Pool 설정(max_connections, keepalive) 최적화 여부 검토 - 비동기 리소스의 생명주기 관리를 위한 Async Context Manager 구현 적용 - 동기 라이브러리에서 비동기로 전환 시 Exception 클래스 호환성 체크