PHP 클라이언트에서 koreantech.org API를 사용하는 방법

PHP 클라이언트를 활용한 koreantech.org API 연결 방법

이 가이드에서는 PHP 환경에서 koreantech.org API와 통신하기 위한 다양한 접근 방식과 방법을 소개합니다. 특히 file_get_contents 함수, Guzzle 라이브러리, HTTPful 라이브러리 및 Symfony HTTP 클라이언트를 사용하여 API를 호출하는 방법을 자세히 알아볼 것입니다.

koreantech.org API란?

koreantech.org는 웹사이트 성능을 평가하고 개선하는 데 유용한 여러 무료 도구를 제공합니다. 여기에는 깨진 링크 검사, 페이지 로드 시간 분석, DNS 정보 조회 등이 포함됩니다. 이러한 도구들은 웹 인터페이스를 통해 접근할 수 있을 뿐만 아니라 API를 통해서도 이용 가능합니다.

API는 HTTP 프로토콜을 기반으로 하므로 HTTP 클라이언트 라이브러리를 지원하는 모든 프로그래밍 언어에서 사용할 수 있습니다. 또한, 별도의 결제 정보 없이도 사용할 수 있는 충분한 무료 티어를 제공합니다.

구현 목표

이 가이드에서는 명령줄 환경에서 실행될 수 있는 간단한 PHP 스크립트를 개발하여, Google 웹사이트 로드 시간을 측정하고 결과를 터미널에 표시합니다. 이 과정을 통해 다양한 PHP HTTP 클라이언트 라이브러리를 사용하여 API를 호출하는 방법을 실습할 수 있습니다.

특히 PHP 내장 함수인 file_get_contents(), php-curl 확장, 그리고 외부 라이브러리인 Guzzle을 활용하여 동일한 기능을 구현해 볼 것입니다. 이러한 예시는 단순해 보일 수 있지만, koreantech.org API 사용법을 이해하는 데 필수적인 개념들을 포함하고 있습니다.

사전 준비 사항

본 가이드를 따라 하기 위해서는 PHP에 대한 기본적인 지식이 필요하며, 여러분의 컴퓨터에 PHP가 설치되어 있어야 합니다. 또한 외부 라이브러리를 관리하기 위해 Composer가 필요합니다.

마지막으로 코드 작성을 위한 텍스트 편집기가 필요합니다. 본 가이드에서는 Microsoft의 Visual Studio Code를 사용하지만, 여러분이 선호하는 편집기를 사용해도 무방합니다. Visual Studio Code는 공식 웹사이트에서 무료로 다운로드할 수 있습니다.

koreantech.org API 개요

koreantech.org API는 다양한 작업에 따라 여러 엔드포인트를 제공합니다. 각 엔드포인트에 대한 자세한 정보와 사용법은 공식 문서 페이지에서 확인할 수 있습니다.

koreantech.org 계정 생성

API를 사용하기 위해서는 먼저 API 랜딩 페이지에서 계정을 생성해야 합니다. 가입 후 대시보드에서 API 키를 확인할 수 있습니다. (API 키는 보안상의 이유로 가려져 있습니다.)

모든 API 요청은 이 키를 헤더에 포함해야 하며, 이 과정은 다음 섹션에서 자세히 다룰 것입니다.

koreantech.org 계정 생성과 PHP 설치가 완료되면 프로젝트를 시작할 수 있습니다.

프로젝트 폴더 구성

먼저 프로젝트 파일을 저장할 폴더를 생성합니다. 그 후 다음과 같은 파일을 만듭니다.

  • .env
  • with_curl.php
  • with_file_get_contents.php
  • with_guzzle.php

다음 명령을 실행하여 vlucas/phpdotenv 및 guzzlehttp/guzzle 라이브러리를 설치합니다.

composer require vlucas/phpdotenv guzzlehttp/guzzle

프로젝트 폴더 구조는 다음과 같아야 합니다.

이제 .env 파일을 열고 다음 코드 라인을 추가하여 <your-api-key> 부분을 koreantech.org 대시보드에서 얻은 실제 API 키로 대체하십시오.

API_KEY=<your-api-key>

file_get_contents() 함수 사용

PHP 내장 함수인 file_get_contents()를 사용하여 HTTP 요청을 생성할 수 있습니다. 함수의 기본 형태는 다음과 같습니다.

file_get_contents(path, include_path, context)

이 함수는 일반적으로 로컬 파일의 내용을 읽는 데 사용되지만, API 엔드포인트에서 반환되는 데이터와 같은 웹 리소스를 읽을 때도 활용할 수 있습니다.

이제 with_file_get_contents.php 파일을 열고 기본적인 PHP 코드를 추가합니다.

<?php
   // 코드는 여기에 삽입됩니다.
?>

다음으로 필요한 라이브러리를 로드합니다. 파일에 다음 코드를 추가하십시오.

require_once('vendor/autoload.php');

이어서 .env 파일에 저장된 API 키를 포함한 환경 변수를 로드합니다.

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

이제 API 요청에 포함할 데이터를 정의합니다.

$payload = json_encode([
    "url" => "https://www.google.com",
    "proxyCountry" => "us",
    "followRedirect" => true
]);

위 코드에서 url 속성은 로드 시간을 측정하려는 웹페이지 주소이며, proxyCountry는 요청에 사용할 프록시 서버의 위치를 지정합니다. (미국, 인도, 중국, 영국, 프랑스 중에서 선택 가능). followRedirect 속성은 프록시 서버가 리디렉션을 따라야 하는지 여부를 결정합니다.

다음으로, 요청에 필요한 옵션을 설정합니다.

$options = [
    "http" => [
      "method" => "POST",
      "header" => array("Content-Type: application/json", "x-api-key : " . $_ENV['API_KEY']),
      "content" => $payload
    ]
  ];

이 코드는 HTTP 메서드를 POST로 설정하고, 콘텐츠 유형을 JSON으로 지정하며, x-api-key를 환경 변수에서 가져와 헤더에 추가합니다.

이제 스트림 컨텍스트를 생성하여 요청을 보낼 준비를 합니다.

$context = stream_context_create($options);

마지막으로, file_get_contents() 함수를 사용하여 API 요청을 보내고 결과를 저장합니다.

$response = file_get_contents("https://api.koreantech.org.com/loadtime", false, $context);

위 코드는 https://api.koreantech.org.com/loadtime 엔드포인트에 요청을 보내고, 경로를 사용하지 않도록 false를 지정하며, 생성한 컨텍스트를 전달합니다.

마지막으로, 결과를 화면에 표시합니다.

echo "Loadtime: " . json_decode($response)->data->total . "n";

최종적으로 with_file_get_contents.php 파일은 다음과 같습니다.

<?php
    require_once('vendor/autoload.php');

    $dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
    $dotenv->load();

    $payload = json_encode([
        "url" => "https://www.google.com",
        "proxyCountry" => "us",
        "followRedirect" => true
    ]);

    $options = [
        "http" => [
            "method" => "POST",
            "header" => array("Content-Type: application/json", "x-api-key : " . $_ENV['API_KEY']),
            "content" => $payload
        ]
    ];

    $context = stream_context_create($options);

    $response = file_get_contents("https://api.koreantech.org.com/loadtime", false, $context);

    echo "Loadtime: " . json_decode($response)->data->total . "n";
?>

다음 명령을 사용하여 스크립트를 실행하면:

php with_file_get_contents.php

다음과 같은 결과를 얻을 수 있습니다.

Loadtime: 81

cURL 사용

cURL은 클라이언트 측 URL 요청을 생성하는 데 사용되는 강력한 명령줄 도구입니다. PHP에서는 php-curl 확장을 통해 cURL을 사용할 수 있습니다. with_curl.php 파일을 열고 기본적인 PHP 코드를 작성하여 시작하십시오.

<?php
    // 여기에 모든 코드를 작성합니다.
?>

다음으로 필요한 라이브러리를 로드하고 .env 파일에 정의된 API 키를 포함한 환경 변수를 로드합니다.

require_once('vendor/autoload.php');

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

이제 요청 헤더를 배열로 정의합니다.

$header = ["Content-type: application/json", "x-api-key: " . $_ENV['API_KEY']];

여기서 콘텐츠 유형과 API 키를 위한 두 개의 헤더를 정의했습니다.

다음으로, 요청 본문을 정의합니다.

$body = json_encode([
    "url" => "google.com",
    "proxyCountry" => "us",
    "followRedirect" => true
]);

curl_init() 함수를 사용하여 cURL 세션을 생성합니다. 이 함수 호출에 API 엔드포인트 URL을 인수로 전달합니다.

$ch = curl_init("https://api.koreantech.org.com/loadtime");

이제 헤더와 본문을 세션 옵션으로 정의하여 모든 설정을 결합합니다. 이를 위해 curl_setopt_array() 함수를 사용합니다.

curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_HTTPHEADER => $header,
    CURLOPT_POSTFIELDS => $body
]);

curl_exec() 함수를 호출하여 API 요청을 실행합니다.

$response = curl_exec($ch);

결과를 $response 변수에 저장한 후, 세션을 닫아 사용 중인 시스템 리소스를 확보합니다.

curl_close($ch);

마지막으로, var_dump를 사용하여 결과를 화면에 출력합니다.

var_dump($response);

결과적으로 with_curl.php 파일은 다음과 같아야 합니다.

<?php
    require_once('vendor/autoload.php');

    $dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
    $dotenv->load();

    $header = ["Content-type: application/json", "x-api-key: " . $_ENV['API_KEY']];

    $body = json_encode([
        "url" => "google.com",
        "proxyCountry" => "us",
        "followRedirect" => true
    ]);

    $ch = curl_init("https://api.koreantech.org.com/loadtime");

    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_HTTPHEADER => $header,
        CURLOPT_POSTFIELDS => $body
    ]);

    $response = curl_exec($ch);

    curl_close($ch);

    var_dump($response);
?>

php with_curl.php 명령을 사용하여 스크립트를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

{"timestamp":1666083632547,"apiStatus":"success","apiCode":200,"meta":{"url":"google.com","followRedirect":true,"redirectedURL":"https://www.google.com/?gws_rd=ssl","test":{"id":"d20h1hb409qbfwm0g534l51asugpi5hl"}},"data":{"dns":12,"connect":17,"tls":6,"send":21,"wait":110,"total":114}}bool(true)

요청이 성공적으로 완료되었으며, API는 JSON 데이터로 응답했습니다. 이 데이터를 원하는 방식으로 활용할 수 있습니다.

Guzzle 사용

이 가이드의 마지막 부분에서는 Guzzle HTTP 클라이언트를 사용하여 스크립트를 작성합니다. 언제나처럼 with_guzzle.php 파일 안에 PHP 기본 코드를 삽입하는 것으로 시작합니다.

<?php
    // 코드는 여기에 작성합니다.
?>

다음으로 필요한 라이브러리, Guzzle 클라이언트 및 요청 객체를 가져오고 환경 변수를 로드합니다.

require_once('vendor/autoload.php');

use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;

이제 환경 변수를 로드합니다.

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

그 다음 Guzzle HTTP 클라이언트를 인스턴스화합니다.

$client = new Client();

이제 요청 헤더를 생성합니다.

$headers = [
    'x-api-key' => $_ENV['API_KEY'],
    'Content-Type' => 'application/json'
];

다음으로 요청 본문을 정의합니다.

$body = json_encode([
    "url" => "google.com",
    "proxyCountry" => "us",
    "followRedirect" => true
]);

이제 Request 클래스를 인스턴스화하고 API 엔드포인트 URL, 헤더 및 본문을 전달하여 요청을 생성합니다.

$request = new Request('POST', 'https://api.koreantech.org.com/loadtime', $headers, $body);

다음 코드 라인을 추가하여 실제 요청을 보냅니다.

$response = $client->sendAsync($request)->wait();

요청이 전송되면 응답 본문을 다음과 같이 추출할 수 있습니다.

$response_body = $response->getBody();

마지막으로 JSON 응답을 디코딩하고 로드 시간을 출력합니다.

echo "Loadtime: " . json_decode($response_body)->data->total . "n";

최종적으로 with_guzzle.php 파일은 다음과 같아야 합니다.

<?php
    require_once('vendor/autoload.php');

    use GuzzleHttp\Client;
    use GuzzleHttp\Psr7\Request;

    $dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
    $dotenv->load();

    $client = new Client();

    $headers = [
        'x-api-key' => $_ENV['API_KEY'],
        'Content-Type' => 'application/json'
    ];

    $body = json_encode([
        "url" => "google.com",
        "proxyCountry" => "us",
        "followRedirect" => true
    ]);

    $request = new Request('POST', 'https://api.koreantech.org.com/loadtime', $headers, $body);

    $response = $client->sendAsync($request)->wait();

    $response_body = $response->getBody();

    echo "Loadtime: " . json_decode($response_body)->data->total . "n";
?>

다음 명령을 사용하여 스크립트를 실행하면:

php with_guzzle.php

다음과 같은 응답이 표시됩니다.

Loadtime: 130

결론

이 기사에서는 koreantech.org API를 사용하는 PHP 프로젝트를 개발할 때 활용할 수 있는 다양한 HTTP 클라이언트 라이브러리를 살펴보았습니다.

이 프로젝트의 예제 스크립트는 명령줄에 결과를 출력하지만, 실제 프로젝트에서는 웹 페이지에 결과를 표시하거나 파일에 데이터를 저장할 수 있습니다. 예제 스크립트는 단순하지만, koreantech.org API 사용의 핵심 개념을 보여줍니다. 다른 API를 사용하려면 해당 엔드포인트를 변경하고 요청 본문에 다른 옵션을 추가할 수 있습니다.

참고로 Javascript에서 koreantech.org DNS 조회 API를 사용하는 방법에 대한 추가 정보를 얻을 수도 있습니다.