Postman으로 AI API 테스트 자동화 A to Z (feat. OpenAI)

지난 [추적 편]에서 우리는 Giskard로 AI의 숨은 취약점을 찾아내고, LangSmith로 문제의 근본 원인까지 추적했습니다. 이제 우리는 AI의 ‘뇌(LLM)’ 속을 꽤 깊숙이 들여다볼 수 있게 되었습니다.

하지만 아무리 똑똑한 뇌라도, 우리 서비스와 연결된 ‘신경망(API)’이 건강하지 않다면 아무 소용이 없습니다. 응답이 1분씩 걸리거나, 질문만 던지면 에러를 내뿜거나, 데이터 형식이 제멋대로 바뀐다면 사용자는 AI의 지능을 느껴보기도 전에 떠나버릴 겁니다.

바로 이 ‘신경망’의 건강을 책임지는 것이 QA의 가장 기본적이면서도 중요한 임무입니다. 그리고 우리에게는 이 임무를 위한 가장 친숙하고 강력한 도구, Postman이 있습니다. 이번 편에서는 Postman을 활용하여 AI 서비스 API를 완벽하게 테스트하고 자동화하는 모든 것을 파헤쳐 보겠습니다.


1. AI 시대, 왜 다시 Postman인가?

“Giskard, LangSmith 같은 최신 AI 툴을 배웠는데, 왜 다시 기본으로 돌아가나요?”

훌륭한 질문입니다. 그 이유는 AI 서비스의 품질이 ‘AI 모델 자체의 성능’과 ‘AI 모델을 서빙하는 API의 안정성’이라는 두 개의 큰 축으로 이루어져 있기 때문입니다.

  • AI 모델의 성능 (뇌): 답변이 똑똑한가? 거짓말은 안 하는가? (Giskard, LangSmith의 영역)
  • API의 안정성 (신경망): 요청이 빠르고 안정적으로 처리되는가? 약속된 데이터 형식을 잘 지키는가? (Postman의 영역)

우리는 지금까지 ‘뇌’를 테스트하는 법을 배웠습니다. 이제부터는 ‘신경망’을 정밀하게 진단하고 관리하는 법을 배울 차례입니다. Postman은 이 영역에서 여전히 대체 불가능한 최강자입니다.


2. 1단계: 기본 요청 보내고 ‘환경 변수’로 똑똑하게 관리하기

가장 먼저 OpenAI의 챗봇 API(v1/chat/completions)를 호출하는 기본 요청을 만들어 보겠습니다.

  1. Postman에서 새로운 POST 요청(Request)을 생성합니다.
  2. 요청 URL에 https://api.openai.com/v1/chat/completions 를 입력합니다.
  3. Headers 탭으로 이동하여 아래 두 가지 정보를 입력합니다.
    • Content-Type: application/json
    • Authorization: Bearer YOUR_OPENAI_API_KEY (YOUR… 부분에 실제 OpenAI 키를 입력)
  4. Body 탭으로 이동하여 rawJSON을 선택한 뒤, 아래와 같이 요청 본문을 작성합니다.

JSON

{
    "model": "gpt-4o",
    "messages": [
        {
            "role": "user",
            "content": "Postman으로 API 테스트하는 법 알려줘"
        }
    ]
}

[Send] 버튼을 누르면, 익숙한 AI의 답변이 JSON 형태로 돌아오는 것을 볼 수 있습니다.

하지만 여기서 멈추면 아마추어입니다. 프로는 ‘환경 변수(Environment Variables)’를 사용합니다. API 키나 URL이 변경될 때마다 모든 요청을 하나하나 수정하는 비극을 막기 위함이죠.

  1. Postman 좌측의 Environments 탭에서 ‘+’ 버튼을 눌러 새 환경(예: OpenAI_DEV)을 만듭니다.
  2. 아래와 같이 변수를 추가합니다.
    • VARIABLE: baseURL, VALUE: https://api.openai.com
    • VARIABLE: apiKey, VALUE: sk-xxxx... (실제 키 값)
  3. 이제 원래 요청으로 돌아가 URL과 Authorization 헤더를 아래와 같이 수정합니다.
    • URL: {{baseURL}}/v1/chat/completions
    • Authorization: Bearer {{apiKey}}

이제 우측 상단에서 OpenAI_DEV 환경을 선택하기만 하면, 모든 것이 마법처럼 동작합니다. 이것이 자동화의 첫걸음입니다.


3. 2단계: ‘Test Script’로 응답 시간과 데이터 무결성 검증하기

API가 단순히 ‘응답’하는 것을 넘어, ‘제대로’ 응답하는지 검증할 차례입니다. Postman의 Tests 탭은 JavaScript 코드를 통해 응답 결과를 자동으로 검증하는 막강한 기능을 제공합니다.

아래 스크립트를 Tests 탭에 그대로 복사-붙여넣기 해보세요.

JavaScript

// 1. API가 성공적으로 응답했는지 확인 (상태 코드 200)
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

// 2. 응답이 너무 느리지는 않은지 확인 (예: 3초 이내)
pm.test("Response time is less than 3000ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(3000);
});

// 3. 응답 본문(JSON)이 비어있지 않은지 확인
const jsonData = pm.response.json();
pm.test("Response body is not empty", () => {
    pm.expect(jsonData).to.not.be.empty;
});

// 4. 답변(choices)이 정상적으로 포함되어 있는지 확인
pm.test("Response has a valid 'choices' array", () => {
    pm.expect(jsonData.choices).to.be.an('array').and.not.empty;
    pm.expect(jsonData.choices[0].message.content).to.exist;
});

// 5. 답변이 정상적으로 종료되었는지 확인 (finish_reason)
pm.test("Finish reason is 'stop'", () => {
    pm.expect(jsonData.choices[0].finish_reason).to.eql("stop");
});

이제 다시 [Send] 버튼을 누르면, 응답 결과 하단에 ‘Test Results’ 탭이 생기고, 5개의 테스트가 모두 ‘PASS’ 되었음을 확인할 수 있습니다. 이제 우리는 버튼 하나로 API의 건강 상태를 5가지 측면에서 동시에 진단할 수 있게 되었습니다.


4. 3단계: ‘Collection Runner’로 수십 개 테스트를 한 번에 실행하기

요청 하나를 테스트하는 것에 만족할 수 없습니다. 우리는 수십, 수백 개의 다양한 시나리오를 한 번에 테스트해야 합니다. 이때 사용하는 것이 ‘Collection Runner’입니다.

  1. 지금까지 만든 요청을 ‘AI API Tests’와 같은 이름의 Collection으로 저장합니다.
  2. 다양한 시나리오를 테스트하기 위해 Collection 안에 요청을 몇 개 더 복제하여 만듭니다. (예: 매우 긴 질문을 보내는 요청, 일부러 오류를 유발하는 요청 등)
  3. Collection 이름 옆의 ‘…’ 버튼을 눌러 [Run collection]을 선택합니다.
  4. [Run AI API Tests] 버튼을 누르면, Collection에 포함된 모든 요청이 순차적으로 실행되고, 각각의 테스트 결과가 종합되어 리포트로 표시됩니다.

심화 기술: 데이터 기반 테스트 (Data-Driven Testing)

만약 100개의 다른 질문을 테스트하고 싶다면? 100개의 요청을 만들 필요가 없습니다. prompt라는 헤더를 가진 CSV 파일을 만들고, Collection Runner의 Data 옵션에서 이 파일을 선택하세요. 그리고 요청 Body의 질문 내용을 {{prompt}} 변수로 바꾸기만 하면, Postman이 CSV 파일의 각 줄을 읽어 100번의 테스트를 자동으로 수행해줍니다.


5. 4단계: ‘Newman’으로 CI/CD 파이프라인에 통합하기

이제 마지막 단계입니다. 이 모든 테스트를 ‘내가 원할 때’가 아닌, ‘코드가 변경될 때마다 자동으로’ 실행하여 진정한 자동화를 완성하는 것입니다. 이때 필요한 것이 Postman의 분신, Newman입니다.

Newman은 Postman의 모든 기능을 터미널(커맨드 라인)에서 실행할 수 있게 해주는 도구입니다.

  1. 터미널을 열고 npm install -g newman 명령어로 Newman을 설치합니다. (Node.js 설치 필요)
  2. Postman에서 우리가 만든 Collection과 Environment를 각각 JSON 파일로 내보내기(Export) 합니다.
  3. 터미널에서 아래 명령어를 실행합니다.

Bash

newman run "AI API Tests.postman_collection.json" --environment "OpenAI_DEV.postman_environment.json"

터미널 화면에 Collection Runner에서 보았던 것과 동일한 테스트 결과가 텍스트로 출력되는 것을 볼 수 있습니다. 이 Newman 명령어 한 줄을 GitHub Actions, Jenkins와 같은 CI/CD 도구의 스크립트에 추가하기만 하면, 개발자가 코드를 푸시할 때마다 우리의 Postman 테스트가 자동으로 실행되어 API의 안정성을 24시간 감시하는 ‘자동 품질 관리 시스템’이 완성됩니다.

결론: 기본기가 가장 강력한 무기다

Giskard로 모델의 취약점을, LangSmith로 동작의 원인을, 그리고 오늘 Postman으로 서비스의 관문을 지키는 법을 배웠습니다. 특히 Postman을 활용한 API 테스트는 화려하지는 않지만, 서비스 품질의 가장 근간을 지탱하는 핵심적인 활동입니다. AI 시대에도 QA의 탄탄한 기본기는 여전히, 아니 오히려 더 중요합니다.

이제 우리는 AI 모델의 품질(뇌), 내부 동작(신경망 분석), 그리고 서비스의 관문(신경망 입구)까지, AI 서비스의 품질을 입체적으로 검증할 수 있는 완벽한 무기 세트를 갖추게 되었습니다.

댓글 남기기