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를 사용하는 방법에 대한 추가 정보를 얻을 수도 있습니다.