, 이름 = Guzzle
, 장르 = 라이브러리, HTTP 클라이언트
, 개발 = Michael Dowling
, 발표 = 2011년
, 최신 버전 = 7.x
, 언어 = PHP
, 라이선스 = MIT 라이선스
, 사이트 = 공식 문서
)]
1. 개요
Guzzle은 PHP를 위한 강력한 HTTP 클라이언트 라이브러리이다.PHP에서 외부 API와 통신하기 위해 사용되던 기존의 `cURL` 함수들은 옵션 설정이 복잡하고 코드가 지저분해지기 쉬웠다. Guzzle은 이를 객체 지향적인 인터페이스로 추상화하여, 개발자가 매우 직관적이고 간결하게 HTTP 요청(GET, POST 등)을 보낼 수 있게 해준다.
현재 PHP 생태계에서 사실상의 표준(De facto Standard) HTTP 클라이언트로 자리 잡았으며, Composer 패키지 다운로드 순위에서 항상 최상위권을 유지하고 있다.
2. 특징
- 직관적인 문법: 복잡한 `curl_setopt` 설정 없이 메서드 체이닝 방식으로 요청을 구성할 수 있다.
- PSR-7 준수: PHP 표준 권고안인 PSR-7(HTTP 메시지 인터페이스)을 완벽하게 준수하여 다른 라이브러리와의 호환성이 뛰어나다.
- 비동기 요청 (Async): 동기(Synchronous) 요청뿐만 아니라, Promise 패턴을 사용한 비동기 요청을 지원하여 여러 API를 동시에 호출할 때 성능을 극대화할 수 있다.
- 미들웨어 시스템: 요청이나 응답을 가로채서 로깅, 인증, 재시도(Retry) 로직 등을 추가할 수 있는 강력한 미들웨어 시스템을 제공한다.
3. Laravel과의 관계
Laravel 프레임워크에 내장된 `Http` 파사드(Facade)나 HTTP 클라이언트 기능은 내부적으로 Guzzle을 래핑(Wrapping)하여 구현된 것이다. 따라서 라라벨 개발자들은 알게 모르게 이미 Guzzle을 사용하고 있는 셈이다.4. 예제 코드
4.1. 기본 요청 (GET)
#!syntax php
use GuzzleHttp\Client;
$client = new Client();
$response = $client->request('GET', 'https://api.github.com/repos/guzzle/guzzle');
echo $response->getStatusCode(); // 200
echo $response->getHeaderLine('content-type'); // 'application/json; charset=utf8'
echo $response->getBody(); // '{"id": 1420053, "name": "guzzle", ...}'
4.2. 비동기 요청 (Async)
#!syntax php
$promise = $client->requestAsync('GET', 'http://httpbin.org/get');
$promise->then(
function ($response) {
echo 'Got a response! ' . $response->getStatusCode();
},
function ($exception) {
echo 'The request failed... ' . $exception->getMessage();
}
);
$promise->wait();