(PHP) PHP에서 Generator를 이용한 대용량 데이터 처리 최적화
페이지 정보
작성자 최고관리자 댓글 0건 조회 25회 작성일 25-10-11 11:17본문
PHP에서 수만 건 이상의 데이터를 처리할 때, foreach나 배열을 그대로 사용하면 메모리를 과도하게 사용하게 됩니다.
이럴 때 Generator를 사용하면, 데이터를 한 줄씩 지연 평가(lazy evaluation) 하여 메모리 사용을 획기적으로 줄일 수 있습니다.
기본 개념: Generator란?
Generator는 반복 가능한 객체이지만, 모든 데이터를 한꺼번에 메모리에 올리지 않고, 필요할 때마다 한 개씩 반환합니다.
function simpleGenerator() {
yield 1;
yield 2;
yield 3;
}
foreach (simpleGenerator() as $value) {
echo $value; // 1 2 3
}
실전 예시: 데이터베이스 조회
기존 방식 (메모리 낭비 큼):
$users = $pdo->query("SELECT * FROM users")->fetchAll();
foreach ($users as $user) {
// 처리
}
Generator 방식 (메모리 효율적):
function getUsers(PDO $pdo): Generator {
$stmt = $pdo->query("SELECT * FROM users");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
yield $row;
}
}
foreach (getUsers($pdo) as $user) {
// 처리
}
fetchAll() 대신 fetch()로 한 줄씩 처리
yield는 현재 값을 반환하고, 다음 루프로 이동할 때 다음 행을 실행함
성능 차이
# fetchAll() 방식은 100,000건에서 수십 MB의 메모리를 사용
# Generator는 메모리 사용량이 거의 고정 (보통 수백 KB 수준)
# PHP CLI에서 memory_get_usage()로 차이 확인 가능
- 이전글함수형 프로그래밍 - compose와 pipe로 깔끔한 코드 만들기 25.10.12
- 다음글지연 실행과 단축 평가(Short-circuit Evaluation) 제대로 활용하기 25.10.08
댓글목록
등록된 댓글이 없습니다.