[php] PHP에서 API 호출을 위한 비동기 이벤트 처리

PHP로 API를 호출할 때 비동기 이벤트 처리를 구현하는 것은 매우 유용합니다. 비동기 방식으로 API를 호출하면 웹 페이지의 응답 시간을 개선하고, 여러 개의 API를 병렬로 호출할 수 있습니다. 이번 블로그에서는 PHP에서 비동기 이벤트 처리를 위해 사용할 수 있는 방법을 살펴보겠습니다.

cURL 멀티 핸들 사용

cURL 멀티 핸들은 PHP에서 비동기 API 호출을 구현하기 위한 강력한 도구입니다. 각각의 API 호출에 대해 별도의 cURL 핸들을 생성하고, 이들을 멀티 핸들에 추가합니다. 그 후 curl_multi_exec 함수를 통해 병렬 처리를 수행합니다.

<?php
// 멀티 핸들 생성
$multiHandle = curl_multi_init();

$curlHandles = [];
$urls = ['https://api1.com', 'https://api2.com', 'https://api3.com'];

// 각 API 호출에 대해 cURL 핸들 생성 및 멀티 핸들에 추가
foreach ($urls as $url) {
    $curlHandles[] = createCurlHandle($url);
    curl_multi_add_handle($multiHandle, $curlHandles[count($curlHandles) - 1]);
}

// 비동기 API 호출 실행
do {
    curl_multi_exec($multiHandle, $running);
} while ($running > 0);

// 결과 처리
foreach ($curlHandles as $handle) {
    // 각 핸들에 대한 응답 처리
}

// 멀티 핸들 및 각 cURL 핸들 해제
curl_multi_close($multiHandle);
foreach ($curlHandles as $handle) {
    curl_close($handle);
}
?>

Guzzle HTTP 클라이언트 사용

또 다른 방법으로는 Guzzle HTTP 클라이언트 라이브러리를 사용하는 것입니다. Guzzle는 PSR-7 호환성을 갖춘 HTTP 클라이언트이며, 비동기 HTTP 요청을 쉽게 처리할 수 있습니다.

<?php
use GuzzleHttp\Client;
use GuzzleHttp\Promise;

$client = new Client();
$promises = [
    'api1' => $client->getAsync('https://api1.com'),
    'api2' => $client->getAsync('https://api2.com'),
    'api3' => $client->getAsync('https://api3.com')
];

$results = Promise\settle($promises)->wait();

foreach ($results as $key => $result) {
    // 각 API 호출에 대한 결과 처리
}
?>

마치며

PHP에서 API 호출을 비동기적으로 처리하는 방법에 대해 간략하게 살펴보았습니다. cURL 멀티 핸들과 Guzzle HTTP 클라이언트는 각각의 장단점을 가지고 있으므로, 상황에 맞게 적절한 방법을 선택하여 사용하시기 바랍니다. 비동기 API 호출은 웹 애플리케이션의 성능을 향상시키는 데 매우 유용하며, PHP에서도 쉽게 구현할 수 있습니다.

참고문헌: