파이썬 asyncio를 활용한 비동기 주식 데이터 수집이 투자 시스템 구축의 핵심이 되었습니다. 기존 동기식 처리로는 1000개 종목 데이터를 받아오는 데 10분 이상 걸리지만, 비동기 처리를 적용하면 1분 내로 단축됩니다.
동시성 처리가 중요한 이유
실시간 주식 데이터 수집에서 속도는 수익과 직결됩니다. 30대 개발자 박씨는 기존 requests 라이브러리로 200개 종목 데이터를 수집하던 시간을 5분에서 30초로 줄였습니다. 이 차이가 하루 거래에서 수백만 원 수익 차이를 만들어냅니다.
asyncio는 단일 스레드에서 여러 작업을 동시에 처리하는 방식입니다. API 응답을 기다리는 동안 다른 요청을 보내므로 전체 처리 시간이 획기적으로 줄어듭니다. 특히 증권사 API는 요청당 응답 시간이 0.5초에서 2초까지 다양한데, 이 대기 시간을 효율적으로 활용할 수 있습니다.
첫째, aiohttp로 비동기 HTTP 클라이언트 구성하기
aiohttp 라이브러리 설치 후 기본 구조를 만듭니다. import aiohttp, import asyncio, import time을 먼저 불러옵니다. 세션 관리가 핵심인데, async with aiohttp.ClientSession() as session 구문으로 연결을 재사용합니다.
실제 구현 코드에서 주의할 점은 세션 타임아웃 설정입니다. timeout = aiohttp.ClientTimeout(total=10)으로 전체 요청 시간을 제한하고, connector=aiohttp.TCPConnector(limit=100)으로 동시 연결 수를 조절합니다. 증권사 API 서버 부하를 고려해 동시 연결을 50개 이하로 유지하는 것이 안전합니다.
40대 투자자 김씨는 키움증권 API와 연동할 때 세션 재사용으로 로그인 토큰 관리 문제를 해결했습니다. 매번 새로운 세션을 만들면 인증 실패가 발생하는데, 하나의 세션을 유지하며 헤더에 토큰을 포함시키는 방식으로 해결했습니다.
둘째, asyncio.gather로 동시 처리 최적화하기
asyncio.gather 함수는 여러 코루틴을 동시에 실행하는 핵심 도구입니다. 종목 리스트를 청크 단위로 나누어 처리하면 메모리 효율성과 안정성을 동시에 확보할 수 있습니다.
실제 코드 구현에서 chunks = [stock_codes[i:i+50] for i in range(0, len(stock_codes), 50)] 방식으로 50개씩 나누어 처리합니다. 각 청크마다 await asyncio.gather(*tasks)를 적용하고, 청크 간 0.1초 지연을 두어 서버 부하를 분산시킵니다.
에러 처리도 중요합니다. try-except 구문에서 aiohttp.ClientError, asyncio.TimeoutError를 각각 처리하고, 실패한 종목은 재시도 리스트에 추가합니다. 재시도 로직은 최대 3회까지 설정하되, 지수적 백오프(1초, 2초, 4초)를 적용해 서버 부담을 줄입니다.

데이터 저장 시점도 고려해야 합니다. 메모리에 모든 데이터를 쌓다가 한번에 저장하면 메모리 부족 현상이 발생할 수 있습니다. 청크 단위로 처리 완료될 때마다 데이터베이스나 파일에 저장하는 것이 안전합니다.
셋째, 실시간 데이터 스트림 처리 고급 기법
웹소켓 연결을 통한 실시간 데이터 처리가 고급 활용법입니다. aiohttp의 웹소켓 클라이언트로 거래소나 증권사 실시간 데이터를 받아올 수 있습니다.
async with session.ws_connect(websocket_url) as ws 구문으로 웹소켓에 연결하고, async for msg in ws 루프로 실시간 데이터를 처리합니다. 메시지 큐를 활용해 데이터 처리와 저장을 분리하면 안정성이 높아집니다.
실전에서는 reconnection 로직이 필수입니다. 네트워크 단절이나 서버 재시작 시 자동으로 재연결되도록 while True 루프 안에서 try-except으로 감싸고, 연결 실패 시 5초 대기 후 재시도하는 로직을 구현합니다.
50대 전업투자자 이씨는 업비트 웹소켓으로 코인 데이터를 받아와 1초마다 평균값을 계산하는 시스템을 구축했습니다. asyncio.Queue를 사용해 수신 데이터와 계산 로직을 분리하고, 별도 태스크에서 큐에서 데이터를 꺼내어 처리하는 방식으로 안정성을 확보했습니다.
성능 최적화 체크리스트
비동기 주식 데이터 수집 시스템 구축 시 확인해야 할 핵심 포인트들입니다. 첫째, 동시 연결 수 제한으로 서버 부하 방지했는지 점검합니다. 둘째, 에러 처리와 재시도 로직이 완성되었는지 확인합니다. 셋째, 메모리 사용량 모니터링 체계가 있는지 살펴봅니다.
데이터 저장 방식도 점검 대상입니다. CSV 파일보다는 SQLite나 PostgreSQL 같은 데이터베이스 사용을 권장합니다. 인덱스 설정으로 조회 성능을 높이고, 파티셔닝으로 대용량 데이터를 효율적으로 관리할 수 있습니다.
로그 시스템 구축도 빼놓을 수 없습니다. logging 모듈로 DEBUG, INFO, ERROR 레벨을 나누어 기록하고, 일자별 로그 파일 분할로 유지보수성을 높입니다. 특히 API 호출 실패나 데이터 누락 상황을 즉시 파악할 수 있도록 알림 시스템과 연동하면 더욱 완성도 높은 시스템이 됩니다.