Skip to main content

HTTP 클라이언트란

Laravel의 HTTP 클라이언트는 Guzzle을 래핑한 사용하기 쉬운 API입니다. Http 파사드를 통해 외부의 웹 서비스나 API에의 HTTP 요청을 간결하게 기술할 수 있습니다.
Guzzle은 사전 설치되어 있기 때문에 추가 설정 없이 바로 사용하기 시작할 수 있습니다.

기본적인 요청

GET 요청

쿼리 파라미터는 배열로 전달할 수 있습니다.

POST 요청

데이터는 기본적으로 application/json으로 전송됩니다.

PUT / PATCH / DELETE

응답의 처리

Http::get() 등의 메서드는 Illuminate\Http\Client\Response 인스턴스를 반환합니다. 이 객체에는 응답을 검사하기 위한 다수의 메서드가 준비되어 있습니다.
JSON 응답은 배열 접근으로도 취득할 수 있습니다.

요청 옵션

헤더의 설정

application/json을 받아들일 것을 나타내는 경우 acceptJson()이 편리합니다.
브라우저에서 Laravel로 보내는 AJAX 요청의 CSRF 헤더(X-CSRF-TOKEN / X-XSRF-TOKEN)에 대해서는 CSRF 보호를 참조해 주십시오.

인증

Bearer 토큰 인증(가장 일반적):
Basic 인증:

베이스 URL 의 설정

같은 호스트로의 요청이 많은 경우 baseUrl()로 정리할 수 있습니다.

폼 데이터의 전송

application/x-www-form-urlencoded로 전송하고 싶은 경우 asForm()을 사용합니다.

타임아웃

타임아웃을 초과한 경우 Illuminate\Http\Client\ConnectionException이 스로우됩니다. 외부 API의 호출에는 반드시 타임아웃을 설정하는 것을 권장합니다.

리트라이

일시적인 네트워크 장애나 서버 에러에 대해 자동 리트라이를 설정할 수 있습니다.
조건부 리트라이(접속 에러일 때만 리트라이 등):

에러 핸들링

수동으로 에러를 확인

Laravel의 HTTP 클라이언트는 기본적으로는 400·500번대의 응답에 대해 예외를 스로우하지 않습니다. failed()clientError() 등으로 명시적으로 확인합니다.

예외를 스로우

throw()를 사용하면 에러 시에 Illuminate\Http\Client\RequestException을 스로우합니다.
throw()는 응답 인스턴스를 반환하기 때문에 메서드 체인으로 쓸 수 있습니다.
예외를 캐치해 처리하는 경우:

병행 요청

여러 API를 동시에 호출하고 싶은 경우, pool()로 병행 실행할 수 있습니다.
순서대로 실행하는 것보다 대폭 고속화할 수 있습니다. 외부 API를 여러 번 호출하는 대시보드 등에 유효합니다.

테스트

Http::fake() 에 의한 목

테스트에서는 Http::fake()를 사용해 실제 HTTP 요청을 보내지 않고 응답을 시뮬레이트합니다.
특정 URL에 대해 응답을 설정하는 경우:
응답의 시퀀스(여러 번 호출되었을 때 순서대로 응답을 반환):

요청의 검증

Http::assertSent()로 요청의 내용을 검증할 수 있습니다.
테스트에서는 반드시 Http::fake()를 선두에서 호출합시다. 호출 잊음이 있으면 실제 외부 API로 요청이 날아가 버립니다. Http::preventStrayRequests()를 사용하면 페이크하지 않은 URL로의 요청에서 예외를 스로우시킬 수 있습니다.

Stray 요청의 방지

실전 예시: 외부 API 를 호출하는 서비스 클래스

실제 프로젝트에서는 HTTP 클라이언트의 로직을 서비스 클래스에 정리하는 것이 모범 사례입니다.
1

서비스 클래스 작성

2

서비스 프로바이더에서 등록

3

컨트롤러에서 이용

4

테스트 작성

정리

  • HTTP 클라이언트의 로직은 서비스 클래스에 정리
  • 반드시 타임아웃을 설정(timeout()connectTimeout())
  • 일시적인 장애에 대해 리트라이를 설정(retry())
  • 테스트에서는 Http::fake()를 반드시 사용해 외부 API를 실제로 두드리지 않음
  • Http::preventStrayRequests()를 테스트의 셋업에 추가하면 안심
  • API 의 토큰이나 인증 정보는 환경 변수와 config/services.php 로 관리
마지막 수정일 2026년 7월 13일