10분
월요일 아침, 서버가 죽었다
100만 행 CSV를 메모리 초과 없이 - 제너레이터
월요일 아침, 서버가 죽었다
Python 고급: 제너레이터, 데코레이터, 컨텍스트 매니저, Type Hints > 100만 행 CSV를 메모리 초과 없이 - 제너레이터
학습 목표
대용량 데이터 처리 시 메모리 문제를 체감한다 제너레이터의 필요성을 이해한다
월요일 아침, 서버가 죽었다
"어... 팀장님, 배치 서버가 또 OOM으로 죽었어요."
김신입의 월요일 아침은 늘 이렇게 시작했다. 주말 동안 쌓인 100만 건의 거래 로그를 처리하는 배치 작업이 매번 메모리 부족으로 실패하는 것이다.
에디터 로딩 중...
왜 터지는가?
| 단계 | 메모리 사용량 |
|---|---|
f.readlines() | 100만 줄 × 200바이트 = 200MB |
results.append() | 필터링된 10만 건 × 500바이트 = 50MB |
| 기타 오버헤드 | 50MB |
| 총 | ~300MB |
서버 배치 메모리 한도: 256MB. 💥 OOM Kill!
박선배의 조언
"신입아, 왜 100만 줄을 한번에 다 읽어? 필요한 것만, 필요할 때 읽으면 되잖아."
에디터 로딩 중...
메모리 사용량: ~2MB (상수!)
이게 바로 제너레이터의 마법이다. 오늘 배울 내용이다.
오늘의 학습 목표
- 이터레이터 프로토콜 - for 루프가 실제로 어떻게 동작하는지
- yield 키워드 - 함수를 "멈췄다 다시 시작"하는 마법
- 제너레이터 표현식 - 한 줄로 제너레이터 만들기
- 실전 패턴 - 대용량 파일, 무한 스트림, 파이프라인
핵심 포인트
- • 리스트: 모든 데이터를 메모리에 로드 (eager)
- • 제너레이터: 필요할 때만 하나씩 생성 (lazy)
- • 대용량 데이터 처리의 핵심 = 제너레이터