PHP에서 Generator를 이용한 대용량 데이터 처리 최적화 > 웹프로그램

본문 바로가기

웹프로그램

[PHP] PHP에서 Generator를 이용한 대용량 데이터 처리 최적화

profile_image
최고관리자
15시간 29분전 8 0

본문

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()로 차이 확인 가능



댓글목록0

등록된 댓글이 없습니다.
게시판 전체검색
상담신청