10

월요일 아침, 서버가 죽었다

100만 행 CSV를 메모리 초과 없이 - 제너레이터

학습 목표

대용량 데이터 처리 시 메모리 문제를 체감한다 제너레이터의 필요성을 이해한다

월요일 아침, 서버가 죽었다

"어... 팀장님, 배치 서버가 또 OOM으로 죽었어요."

김신입의 월요일 아침은 늘 이렇게 시작했다. 주말 동안 쌓인 100만 건의 거래 로그를 처리하는 배치 작업이 매번 메모리 부족으로 실패하는 것이다.

에디터 로딩 중...

왜 터지는가?

단계메모리 사용량
f.readlines()100만 줄 × 200바이트 = 200MB
results.append()필터링된 10만 건 × 500바이트 = 50MB
기타 오버헤드50MB
~300MB

서버 배치 메모리 한도: 256MB. 💥 OOM Kill!

박선배의 조언

"신입아, 왜 100만 줄을 한번에 다 읽어? 필요한 것만, 필요할 때 읽으면 되잖아."

에디터 로딩 중...

메모리 사용량: ~2MB (상수!)

이게 바로 제너레이터의 마법이다. 오늘 배울 내용이다.


오늘의 학습 목표

  1. 이터레이터 프로토콜 - for 루프가 실제로 어떻게 동작하는지
  2. yield 키워드 - 함수를 "멈췄다 다시 시작"하는 마법
  3. 제너레이터 표현식 - 한 줄로 제너레이터 만들기
  4. 실전 패턴 - 대용량 파일, 무한 스트림, 파이프라인
핵심 포인트
  • 리스트: 모든 데이터를 메모리에 로드 (eager)
  • 제너레이터: 필요할 때만 하나씩 생성 (lazy)
  • 대용량 데이터 처리의 핵심 = 제너레이터