Tutorial/PHP와 Laravel

PHP와 Laravel에서 환율 사용하기

Laravel의 HTTP 클라이언트, bearer 인증, 유한한 타임아웃, 신선도 메타데이터를 사용해 실시간 환율을 가져오고 캐시합니다.

MMexchangerate.dev·Jul 17, 2026·6분 읽기

작은 Laravel 서비스로 exchangerate.dev를 호출하고, 실패한 HTTP 응답을 거부하며, 완전한 FX 관측값을 60초 동안 캐시할 수 있습니다. API 키는 설정에 보관하고, 환율과 함께 source, market_session, data_updated_at을 반환하세요.

Key points
bearer 인증, 명시적인 타임아웃, 실패한 응답에는 throw()를 사용하는 Laravel의 HTTP 클라이언트를 사용하세요.
Free 등급의 분당 12회 한도 안에 여유 있게 머물도록 성공한 전체 응답을 60초 동안 캐시하세요.
키는 애플리케이션 코드가 아니라 EXCHANGERATE_API_KEY를 통해 config/services.php에 보관하세요.
정확한 금전 연산이 필요한 계산에는 decimal 라이브러리를 사용하세요. PHP의 float는 이진 부동소수점입니다.

캐시되는 FX 서비스 하나 만들기

아래 서비스는 기본 통화와 정렬된 심볼 목록으로 안정적인 캐시 키를 만듭니다. throw()가 Laravel이 실패한 요청을 캐시에 쓰기 전에 예외를 발생시키므로, 콜백은 성공한 JSON 응답만 저장합니다.

php · app/Services/ExchangeRateService.phpcopy
<?php

namespace App\Services;

use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Http;

final class ExchangeRateService
{
    public function latest(string $base, array $symbols): array
    {
        sort($symbols);
        $symbolList = implode(',', $symbols);
        $cacheKey = "fx:latest:{$base}:{$symbolList}";

        return Cache::remember($cacheKey, now()->addSeconds(60), function () use (
            $base,
            $symbolList,
        ): array {
            return Http::acceptJson()
                ->withToken(config('services.exchangerate.key'))
                ->timeout(5)
                ->get(
                    "https://api.exchangerate.dev/v1/latest/{$base}",
                    ['symbols' => $symbolList],
                )
                ->throw()
                ->json();
        });
    }
}

소스 관리 밖에서 키 설정하기

php · config/services.php and .envcopy
// config/services.php
'exchangerate' => [
    'key' => env('EXCHANGERATE_API_KEY'),
],

// .env (never commit the real value)
EXCHANGERATE_API_KEY=exr_live_...

환율과 관측 필드 읽기

$service->latest("USD", ["EUR", "GBP"])를 호출한 뒤 $result["rates"]["EUR"]를 읽으세요. 값이 문맥을 잃지 않도록 $result["source"], $result["market_session"], $result["data_updated_at"]을 뷰 모델이나 저장된 레코드에 함께 보관하세요.

오류를 환율로 캐시하지 마세요
401은 키나 헤더가 잘못되었다는 뜻입니다. 429는 애플리케이션이 요청 한도를 초과했다는 뜻입니다. 둘 다 실패하도록 두고, 적절히 백오프하며, 이전에 성공한 관측값은 원래의 갱신 시각과 함께만 보존하세요.
  • 캐시 키를 만들기 전에 심볼을 정렬하세요.
  • 유한한 HTTP 타임아웃을 설정하세요.
  • JSON을 읽고 캐시하기 전에 throw를 호출하세요.
  • API 환율이 아니라 최종 금액을 반올림하세요.
MM
exchangerate.dev
FX 데이터를 다루는 개발자를 위한 연동 가이드.

Keep reading

Guide한 번의 호출로 얻는 과거 FX 환율과 시계열Read Referencesource와 market_session 읽는 법Read Guide인디케이티브 환율과 체결 가능 환율Read