피드로 돌아가기
Your pipeline isn't slow. Your parser is.
Dev.toDev.to
Infrastructure

Parser 최적화만으로 배치 작업 시간 8시간에서 47분으로 단축

Your pipeline isn't slow. Your parser is.

Vinicius Fagundes2026년 6월 17일12intermediate

Context

데이터 파이프라인의 병목이 알고리즘이나 클러스터 규모가 아닌 데이터 Ingestion 단계의 Parser에 집중된 상황. 각 파이프라인 Stage마다 Raw JSON 데이터를 반복적으로 Deserialization 하며 불필요한 CPU 리소스와 시간을 낭비하는 구조적 한계 노출.

Technical Solution

  • Profiling을 통한 병목 지점 정밀 측정으로 전체 런타임의 86%가 Parsing 단계에서 발생함을 식별
  • 'Parse Once' 원칙 도입을 통해 중복된 Deserialization 과정을 제거하고 Parsing 결과를 하위 Stage에 전달하는 구조로 변경
  • 전체 Object를 메모리에 올리는 대신 필요한 필드만 추출하여 메모리 footprint 최소화
  • Raw JSON 데이터를 Parse, Flatten, Type-casting 거쳐 Columnar format인 Parquet 파일로 변환하여 저장
  • 하위의 모든 Model 및 Report 작업이 Raw 데이터가 아닌 정형화된 Parquet 테이블을 읽도록 설계 변경
  • 데이터 경계(Boundary)에서만 무거운 파싱 작업을 수행하고 내부에서는 경량화된 데이터 타입만 사용

1. 성능 이슈 발생 시 클러스터 확장 전 cProfile 등으로 Parsing 비용 측정

2. DAG 내에서 동일한 Raw 파일에 대해 반복적인 json.loads() 호출 여부 확인

3. 전체 Object 대신 필요한 필드만 추출하는 Partial Parsing 검토

4. Raw 데이터를 분석용 Columnar Format(Parquet 등)으로 1회 변환 후 공유하는 아키텍처 적용

원문 읽기