API가 정말 실시간인가요? NGINX의 rtapi 도구로 지연 시간을 테스트해 보세요

NGINX | 2020년 3월 11일

[편집자 – 이 게시물은 rtapi 버전 0.2.0에서 도입된 개정 보고서에 관한 정보로 업데이트되었습니다.]

API는 현대 애플리케이션과 진화하는 디지털 아키텍처의 핵심에 자리하고 있으며, Akamai 인터넷 보안 현황 보고서에 따르면 API 호출은 전체 웹 트래픽의 83%를 차지합니다. 소비자가 디지털 경쟁 서비스로 너무나 쉽게 전환할 수 있는 오늘날의 환경에서는 고객이 귀사의 사이트나 앱에서 긍정적인 경험을 하도록 하는 것이 무엇보다 중요합니다. 속도는 매우 중요한 가치이며, 궁극적으로 신속하게 응답하고 안정적이며 유연하게 적응하는 API가 이를 좌우합니다. 이를 제대로 구현해 귀사의 API가 경쟁사보다 빠르다면 개발자는 귀사를 선택할 것입니다.

IDC 보고서 API — 디지털 비즈니스의 성공과 실패를 좌우하는 결정적 요인에 따르면, 조직의 90% 이상이 50밀리초(ms) 미만의 지연 시간을 기대하며, 약 60%는 20ms 이하를 기대합니다. (지연 시간이란 API 인프라가 API 호출에 응답하는 데 걸리는 시간, 즉 요청이 API 게이트웨이에 도착한 순간부터 응답의 첫 번째 바이트가 클라이언트에 반환될 때까지의 시간을 의미합니다.)

당사는 이 데이터와 API 수명 주기에 대한 몇 가지 엔드투엔드 분석을 바탕으로 실시간 API를 지연 시간이 30ms 이하인 API로 정의했습니다. 또한 처리된 요청의 99번째 백분위수까지 30ms의 지연 시간 임계값이 유지되어야 합니다(즉, 평균적으로 요청 100건 중 30ms를 초과하는 요청은 1건뿐임). 자세한 내용은 API 관리 솔루션의 성능 벤치마킹에 관한 블로그를 참조하세요.

대부분의 기업에서 API 호출을 최대한 실시간에 가깝게 처리하는 것은 매우 어려운 과제입니다. 특히 아키텍처가 복잡한 API 게이트웨이를 API 엔드포인트의 진입점으로 사용하는 경우에는 더욱 그렇습니다. 그렇다면 여러분의 API 성능은 어느 정도일까요? 이미 실시간으로 간주할 만큼 충분히 빠른가요, 아니면 개선이 필요한가요? 제품이 다소 느리게 느껴지지만 정확한 원인을 찾기 어려운가요? 어쩌면 API 지연 시간이 어느 정도인지 확실히 파악하지 못하고 있을 수도 있습니다.

소개합니다. rtapi는 NGINX에서 개발한 실시간 API 지연 시간 벤치마킹 도구로, API 게이트웨이와 엔드포인트의 응답성을 테스트하고 동료들과 손쉽게 배포하고 공유할 수 있는 보고서를 생성합니다. 보고서는 요약 그래프가 포함된 PDF와 세부 지표가 담긴 ASCII 형식의 표, 두 가지 형식으로 제공됩니다.

실행하기 rtapi

  1. GitHub에서 rtapi 바이너리를 다음 두 가지 방법 중 하나로 다운로드합니다:
    • Golang이 설치되어 있다면 다음 명령어를 실행하세요:
$ go get github.com/nginxinc/rtapi
  • Golang이 설치되어 있지 않다면 github.com/nginxinc/rtapi/releases로 이동하여 사용 중인 플랫폼에 맞는 바이너리를 다운로드한 후 실행 권한을 부여하세요.
  1. 다음 예시와 같이 쿼리할 API 엔드포인트(대상)를 하나 이상 JSON 또는 YAML 형식으로 지정합니다. JSON 또는 YAML을 endpoints.json 또는 endpoints.yml이라는 파일에 저장하는 것이 좋습니다. (JSON의 경우 다음 단계에서 rtapi 명령줄의 --data 플래그 매개변수로 데이터를 직접 포함할 수도 있습니다.) 각 엔드포인트의 필수 매개변수는 target.url과 target.method뿐입니다. target.body와 target.header를 지정하지 않으면 빈 상태로 유지됩니다. query_parameters 객체에서 매개변수를 지정하지 않으면 rtapi는 다음 예시에 표시된 해당 매개변수의 기본값을 사용합니다. JSON 입력 예시
[
  {
    "target": {
      "url": "https://www.example.com",
      "method": "POST",
      "body": "{\"id\":\"0\"}",
      "header": {
        "Content-Type": [
          "application/json"
        ]
      }
    },
    "query_parameters": {
      "threads": 2,
      "max_threads": 2,
      "connections": 10,
      "duration": "10s",
      "request_rate": 500
    }
  }
]
  1. YAML 입력 예시
- target:    url: https://example.com/api/id
    method: POST
    body: '{"id":"0"}'
    header:
      Content-Type:
        - application/json
  query_parameters:
    threads: 2
    max_threads: 2
    connections: 12
    duration: 10s
    request_rate: 500
  1. 다음 명령을 실행합니다. 여기서 --file은 JSON/YAML 형식의 API 엔드포인트 목록이 포함된 파일을 지정하고, --output은 rtapi에서 생성할 PDF 보고서를 지정합니다. (2단계에서 설명한 것처럼 명령줄에서 JSON 입력을 제공할 수도 있습니다. 이 경우 --file endpoints.json 대신 --data와 JSON 문자열을 차례로 입력합니다.)
$ rtapi --file endpoints.json --output report.pdf
  1. 터미널에 ASCII 형식의 메트릭 표를 표시하려면 --print 플래그를 --output 플래그 대신(또는 함께) 사용하세요.
$ rtapi --file endpoints.json --print

PDF 보고서 해석하기

The PDF report generated by rtapi에서 생성된 PDF 보고서에는 다음과 같은 응답 지연 시간의 HDR 히스토그램이 포함되어 있습니다(이 예시는 NGINX Controller API Management Module을 사용하여 구성된 NGINX Plus API 게이트웨이에서 가져온 것입니다). Y축은 지연 시간을 밀리초 단위로 나타내고, X축은 주어진 지연 시간보다 짧은 시간 내에 처리된 호출의 비율을 백분위수로 나타냅니다. (다음 예시에서는 공간을 절약하기 위해 Y축을 압축했습니다.)

API 결과를 강조하기 위해 축과 평행한 점선이 교차하여 API에서 측정된 99번째 백분위수 지연 시간(그래프의 99% 지점)을 보여 줍니다. API가 실시간으로 간주되려면 교차점의 지연 시간이 30ms 미만이어야 합니다.

NGINX가 어떻게 도움이 될까요?

API 지연 시간이 30ms 미만인가요?

저희가 대화를 나누는 많은 기업과 비슷하다면, 아마 그렇지 않을 가능성이 큽니다. 많은 API 게이트웨이 및 API 관리 솔루션에서는 100ms의 지연 시간이 흔하며, 심지어 500ms도 그리 드문 일이 아닙니다.

API 성능을 개선할 수 있도록 도와드리겠습니다. NGINX와 NGINX Plus는 업계에서 가장 빠른 API 게이트웨이이며, NGINX Controller와 함께 사용하면 30ms 이내에 API 호출을 라우팅하고, 인증하고, 보호하고, 트래픽을 제어하고, 캐싱할 수 있습니다. 자세한 내용을 알아보고 NGINX 전문가와 상담하여 실시간 API를 향한 여정에 NGINX가 어떤 도움을 줄 수 있는지 nginx.com/real-time-api에서 확인해 보세요.


공유

관련 블로그 게시물

시청하기: KubeCon North America 2023에서의 NGINX Gateway Fabric
NGINX | 2023. 11. 30.

시청하기: KubeCon North America 2023에서의 NGINX Gateway Fabric

이 영상에서는 KubeCon의 NGINX 부스를 찾아가, 저희가 공개한 Kubernetes Gateway API 구현을 살펴봅니다.

F5 NGINX로 대규모 WAF 플릿을 확인하고 관리하는 2가지 방법
NGINX | 2023. 03. 23.

F5 NGINX로 대규모 WAF 플릿을 확인하고 관리하는 2가지 방법

앱 보안을 강화하는 두 가지 방법을 소개합니다. NGINX Management Suite를 통해 WAF 운영에 대한 가시성을 높이고, NGINX App Protect WAF를 활용해 코드형 보안을 구현하는 것입니다.

Ingress 컨트롤러 선택 가이드, 4부: NGINX Ingress Controller 옵션
NGINX | 2021. 09. 27.

Ingress 컨트롤러 선택 가이드, 4부: NGINX Ingress Controller 옵션

개발 주체, 개발 철학, 프로덕션 환경 준비도, 보안 및 지원을 기준으로 어떤 NGINX Ingress 컨트롤러가 가장 적합한지 알아보세요.

진화하는 공격 환경에 NGINX App Protect Denial of Service가 적응하는 방법
NGINX | 2021. 07. 06.

진화하는 공격 환경에 NGINX App Protect Denial of Service가 적응하는 방법

NGINX App Protect Denial of Service(DoS)가 계층 7 DoS 공격을 방어하기 위해 완화 방법을 실시간으로 조정하는 방식을 설명합니다. 정상적인 사용자 행동과 서버 상태에 대한 모델을 생성하여 공격을 나타내는 이상 징후를 감지하고 맞춤형 완화 시그니처를 적용할 수 있습니다.

NGINX Instance Manager를 활용한 대규모 구성 업데이트 및 인증서 관리
NGINX | 2021. 06. 30.

NGINX Instance Manager를 활용한 대규모 구성 업데이트 및 인증서 관리

NGINX Instance Manager 버전 1.0에는 두 가지 새로운 기능이 도입되었습니다. NGINX 인스턴스에 태그와 사용자 역할을 지정하면 전체 그룹에 구성을 한 번에 적용할 수 있습니다. 인증서 검사는 만료 예정인 인증서를 감지하여 서비스 중단을 방지할 수 있도록 인증서를 교체할 수 있게 해줍니다.

Netflix가 자사 CDN의 핵심으로 NGINX를 선택한 이유
NGINX | 2015. 03. 25.

Netflix가 자사 CDN의 핵심으로 NGINX를 선택한 이유

Netflix가 글로벌 콘텐츠 전송 네트워크인 Open Connect의 스트리밍 미디어 기술로 NGINX를 선택한 이유를 NGINX 개발자 Gleb Smirnoff에게서 알아보세요.