최근 수정 시각 : 2026-01-26 16:54:12

Guzzle

Guzzle
거즐
<colcolor=#4F5B93,#787CB5> 종류 HTTP 클라이언트 라이브러리
라이선스 MIT 라이선스
개발 Michael Dowling
언어 PHP
출시 2011년
버전 7.x
파일:홈페이지 아이콘.svg 파일:GitHub 아이콘.svg파일:GitHub 아이콘 화이트.svg

1. 개요2. 특징3. Laravel과의 관계4. 예제 코드
4.1. 기본 요청 (GET)4.2. 비동기 요청 (Async)



1. 개요

GuzzlePHP를 위한 강력한 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();