Search

[Airflow 운영 안정화] Google Sheet DAG API 요청 최적화

제목
작성일

개요

구글 스프레드 시트를 읽어 S3에 저장하는 DAG
8개 task 매시각 10분/40분 마다 직렬 실행
자주 실행되다보니 실패 알람 또한 제일 자주 발생

문제

각 태스크들의 에러 로그 탐색 → 주로 API request에서 딜레이 되면서 execution_timeout에 걸리는 문제
레거시 인증 사용
deprecatedoauth2client 사용
왕복 조회 (RTT)
open_by_url() / worksheet() 호출 시 메타데이터(시트 구조 정보)를 먼저 가져옴
이후 셀 값을 가져오므로 추가 왕복이 생김
요청 레벨 제어 부재
에어플로우 task 레벨의 execution_timeout 만 있고, gspread 사용으로 요청 레벨 재시도/백오프/타임아웃 세밀하게 제어 불가
네트워크 지연 같은 간헐적 장애시 무조건 timeout 넘겨 에러 발생

개선

1. 인증 라이브러리 교체

deprecated 된 oauth2clientgoogle-auth변경

2. 직접 REST 호출

gspread 대신 시트 API values:batchGet로 범위 일괄 GET
왕복 없이 헤더+데이터 한 번에 가져옴

3. 네트워크 레벨 제어 추가

전송 레벨: urllib3.Retry는 1회만 허용해 네트워크/소켓 단절에만 빠르게 대응
애플리케이션 레벨: batch_get_values()에서 지수 백오프 지터로 429/5xx 및 ReadTimeout 재시도
타임아웃 분리: timeout=(connect, read)로 연결 지연은 짧게, 데이터 수신은 충분히
커넥션 풀: HTTPAdapter(pool_connections=16, pool_maxsize=16)으로 TLS/소켓 재사용
→ 처음에는 전송 레벨에만 재시도 로직 넣었는데, 구글에서 간헐적으로 503 에러를 던져 애플리케이션 레벨에도 재시도 추가함
코드 보기

성과

네트워크 지연이나 장애 시 자동 재시도로 안정성 올라감
2025/09/09 배포 이후 알람 트래킹 중 - 아직 동일에러 없음
기존 에러 건수: 5월 85건 → 6월 90건 → 7월 78건 → 8월 35건 → 9월 8일까지 24건
2025/09/19
구글 503 에러로 애플리케이션 레벨 재시도 로직 보강