요약
Postman의 공식 CLI 러너인 Newman은 CI 파이프라인에 npm과 Node.js를 필요로 합니다. 이는 공급망 위험을 초래하고, 종속성 관리 오버헤드를 추가하며, Postman의 무료 티어에서는 API를 통한 컬렉션 실행에 이제 속도 제한이 있습니다. 이 가이드는 Newman 없이 CI에서 API 테스트를 실행하기 위한 세 가지 대안을 다룹니다: Apidog의 CLI 러너, k6, 그리고 Hurl. Apidog는 기존 Postman 컬렉션이 있는 경우 가장 직접적인 경로인데, 이는 Apidog가 컬렉션을 기본적으로 가져오고 실행당 제한이 없기 때문입니다.
소개
Newman은 좋은 아이디어였습니다. CI 파이프라인에서 Postman 컬렉션을 실행하는 CLI 도구는 API 테스트를 이식성 있고 자동화 가능하게 만들었습니다. Postman의 브랜드 신뢰를 바탕으로 인기 있는 커뮤니티 액션을 통해 GitHub Actions와 통합되었으며, 많은 팀이 전체 API 테스트 자동화 전략을 Newman 중심으로 구축할 정도로 잘 작동했습니다.
그러다 세 가지 문제가 발생했습니다.
첫째, Newman은 npm 패키지입니다. 이를 사용하는 모든 파이프라인은 빌드 시 npm 레지스트리에서 패키지를 가져옵니다. 2021년 ua-parser-js 침해 사고와 2022년 node-ipc 사건은 npm 공급망 공격이 이론적인 것이 아님을 보여주었습니다. 보안 팀은 API 테스트 계층에 왜 npm이 필요한지 묻기 시작했습니다.
둘째, Postman은 무료 및 기본 유료 티어에서 컬렉션 실행을 제한하기 시작했습니다. CI의 일부로 Postman API를 통해 컬렉션을 실행하는 데 의존했던 팀들은 할당량에 도달하여 요금제를 업그레이드하거나 파이프라인을 재설계해야 했습니다.
셋째, Newman의 유지보수 속도가 느려졌습니다. GitHub에서는 몇 달 동안 해결되지 않은 문제가 남아 있습니다. 일부 최신 Postman 스크립팅 API는 Newman에서 일관되지 않은 지원을 보입니다.
결과: Newman을 기반으로 CI 파이프라인을 구축했던 개발자들은 이제 대안을 찾고 있습니다. 다음은 사용 가능한 대안들입니다.
옵션 1: Apidog CLI (Postman 컬렉션 사용자에게 권장)
이미 Postman 컬렉션에 투자하고 있다면, Apidog의 CLI 러너는 Newman의 가장 가까운 기능적 대체품입니다.
지원 기능
- Postman Collection v2 및 v2.1 형식
- Postman 환경 (JSON 내보내기)
pm.test,pm.expect,pm.environment.set,pm.collectionVariables.set- 요청 전 및 요청 후 스크립트
- CSV 및 JSON 데이터 파일을 통한 데이터 기반 테스트
- CI 보고를 위한 JUnit XML 및 JSON 출력
npm 불필요. Apidog CLI는 독립형 바이너리로 배포됩니다. 한 번 다운로드하여 PATH에 추가하면 실행됩니다.
실행당 제한 없음. Apidog는 어떤 요금제에서도 컬렉션 실행에 제한을 두지 않습니다. 하루에 500개의 컬렉션을 실행하는 파이프라인도 5개를 실행하는 파이프라인과 동일하게 작동합니다.
설치
플랫폼에 맞는 CLI 바이너리를 apidog.com/cli에서 다운로드하거나 셸 설치 프로그램을 사용하세요:
# macOS / Linux
curl -sSf https://apidog.com/cli/install.sh | sh
# 확인
apidog --version
Docker 기반 CI 러너를 위해 Apidog는 공식 이미지를 제공합니다:
FROM apidog/cli:latest
Postman 컬렉션 실행하기
Postman에서 컬렉션(파일 > 내보내기 > Collection v2.1)과 환경(환경 관리 > 내보내기)을 내보냅니다.
그런 다음 실행하세요:
apidog run collection.json \
--environment environment.json \
--reporter-junit results.xml
GitHub Actions 예시
name: API Tests
on: [push, pull_request]
jobs:
api-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Apidog CLI
run: curl -sSf https://apidog.com/cli/install.sh | sh
- name: Run API tests
run: |
apidog run ./tests/collection.json \
--environment ./tests/env.json \
--reporter-junit test-results.xml
- name: Upload test results
uses: actions/upload-artifact@v4
if: always()
with:
name: api-test-results
path: test-results.xml
npm install도 없고, package.json도 없으며, Node.js 버전 매트릭스도 없습니다. 작업이 더 빠르게 실행되고 종속성 표면적이 더 작습니다.
GitLab CI 예시
api-tests:
image: apidog/cli:latest
script:
- apidog run ./tests/collection.json
--environment ./tests/env.json
--reporter-junit test-results.xml
artifacts:
reports:
junit: test-results.xml
옵션 2: k6
k6는 Grafana Labs의 부하 테스트 도구로, 기능 API 테스트도 처리합니다. 기능 확인과 함께 성능 테스트에 정말 탁월하기 때문에 알아두면 좋습니다.
지원 기능
- HTTP/1.1, HTTP/2, WebSocket, gRPC
- JavaScript 테스트 스크립트 (ES6+)
- 성능 검증을 위한 임계값
- InfluxDB, Prometheus, Datadog으로 출력
지원하지 않는 기능
- 네이티브 Postman 컬렉션 형식.
postman-to-k6변환기를 사용하여 Postman 컬렉션을 k6 스크립트로 변환할 수 있지만, 특히 복잡한 스크립트의 경우 출력에 수동 정리 작업이 필요한 경우가 많습니다. - Postman의
pm.*API를 네이티브로 지원하지 않습니다. 변환 계층이 이를 에뮬레이션하지만, 몇몇 공백이 있습니다.
k6를 선택해야 할 때
동일한 파이프라인에서 기능 테스트와 성능 테스트를 결합해야 하는 경우(예: 부하 상태에서 API 정확성 검증), k6는 마이그레이션 비용을 들일 가치가 있습니다. 기능 테스트를 위해 Newman을 단순히 대체하려는 경우, Apidog가 더 빠르게 설정할 수 있습니다.
CI에서 k6 기본 사용법
# 설치 (Linux)
sudo apt-get install k6
# 테스트 스크립트 실행
k6 run api-tests.js
k6 CI는 스크립트의 임계값 정의에 따라 통과/실패를 출력합니다. JUnit XML 출력은 k6-reporter 패키지를 통해 사용할 수 있습니다.
옵션 3: Hurl
Hurl은 Rust로 작성된 오픈소스 HTTP 테스트 도구입니다. 빠르고 런타임 종속성이 없으며, 요청 및 어설션을 정의하기 위해 일반 텍스트 DSL을 사용합니다.
지원 기능
- HTTP/1.1 및 HTTP/2
- JSON, XPath 및 정규식 어설션
- 변수 및 요청 연결
- HTML, JUnit 및 JSON 출력
지원하지 않는 기능
- Postman 컬렉션 형식. Hurl은 자체
.hurl파일 형식을 사용합니다. 자동 변환기는 없습니다. - JavaScript 테스트 스크립트. 어설션은 선언적이며 프로그램적이지 않습니다.
Hurl을 선택해야 할 때
Hurl의 DSL로 테스트를 다시 작성할 의향이 있다면, 런타임이 없는 놀랍도록 작은 바이너리를 얻을 수 있습니다. 바이너리는 단일 10MB 파일입니다. Hurl은 Postman 컬렉션 부채가 없는 새 프로젝트에 강력한 선택입니다.
Hurl 기본 테스트 예시
GET https://api.example.com/users/1
HTTP 200
[Asserts]
jsonpath "$.id" == 1
jsonpath "$.email" isString
GitHub Actions에서 Hurl
- name: Install Hurl
run: |
curl -LO https://github.com/Orange-OpenSource/hurl/releases/latest/download/hurl-x86_64-unknown-linux-gnu.tar.gz
tar -xf hurl-*.tar.gz
sudo mv hurl /usr/local/bin/
- name: Run API tests
run: hurl --test tests/*.hurl
세 가지 옵션 비교
| 기능 | Apidog CLI | k6 | Hurl |
|---|---|---|---|
| Postman 가져오기 | 네이티브 | 변환기 (손실 있음) | 아니오 |
| npm 종속성 | 아니오 | 아니오 | 아니오 |
| JavaScript 스크립팅 | 예 (pm.* API) | 예 (ES6) | 아니오 (DSL만) |
| 성능 테스트 | 아니오 | 예 | 아니오 |
| 바이너리 크기 | ~50 MB | ~30 MB | ~10 MB |
| 무료 실행 제한 | 없음 | 없음 | 없음 |
| JUnit 출력 | 예 | 플러그인 통해 | 예 |
Newman에서 마이그레이션: 실용적인 단계
기존 Newman 기반 파이프라인이 있다면, Apidog CLI로의 마이그레이션 경로는 다음과 같습니다.
컬렉션 내보내기. Postman에서 각 컬렉션을 마우스 오른쪽 버튼으로 클릭하고 v2.1로 내보냅니다. 환경은 별도로 내보냅니다.
Apidog CLI 설치. CI 구성에 설치 단계를 추가합니다.
Newman 명령 대체. 일반적인 Newman 명령은 다음과 같습니다.
newman run collection.json -e environment.json --reporters junit --reporter-junit-export results.xml
Apidog의 등가 명령은 다음과 같습니다.
apidog run collection.json --environment environment.json --reporter-junit results.xml
플래그 구조는 의도적으로 유사하게 설계되었습니다.
스크립트 호환성 확인. CI 변경 사항을 커밋하기 전에 Apidog CLI로 컬렉션을 로컬에서 실행해 보세요. 대부분의 pm.* 스크립트는 수정 없이 실행됩니다. 외부 모듈을 로드하기 위해 pm.require를 사용하는 스크립트는 조정이 필요합니다.
CI 구성에서 Node.js 제거. Newman이 파이프라인에 Node.js가 필요한 유일한 이유였다면, Node.js 설정 단계와 npm install 단계를 완전히 제거할 수 있습니다.
자주 묻는 질문
Newman은 공식적으로 사용 중단되었나요? 아니요, 2026년 초 현재 Newman은 여전히 Postman에 의해 유지보수되고 있습니다. 하지만 유지보수 속도가 느리고 여러 미해결 문제가 실제 사용 사례에 영향을 미칩니다. 당장 사라지지는 않겠지만, 이를 기반으로 새로운 파이프라인을 구축하는 것은 점점 더 많은 위험을 안고 있습니다.
Apidog CLI는 Apidog 계정이 필요한가요? 로컬로 내보낸 컬렉션을 실행하는 데는 필요하지 않습니다. Apidog 워크스페이스에서 컬렉션을 동기화하려면 필요합니다. Postman에서 마이그레이션하는 경우, 내보낸 JSON 파일만으로 실행할 수 있습니다.
Apidog CLI는 데이터 기반 테스트를 실행할 수 있나요? 예. --iteration-data 플래그와 함께 CSV 또는 JSON 데이터 파일을 전달하세요. 이는 데이터 기반 반복을 위한 Newman의 -d 플래그와 동일합니다.
npm 기반 러너의 공급망 위험은 무엇인가요? CI 시점에 npm에서 가져오는 모든 패키지는 잠재적인 공격 표면입니다. 손상된 패키지는 환경 변수를 유출할 수 있으며, CI 컨텍스트에서는 API 키와 토큰이 포함됩니다. HTTPS를 통해 다운로드되고 체크섬에 고정된 바이너리 러너는 이러한 종류의 위험을 피합니다.
k6는 gRPC 테스트를 지원하나요? 예. k6는 네이티브 gRPC 지원을 제공하며, 이는 REST와 gRPC를 동일한 테스트 스위트에서 모두 처리하는 몇 안 되는 오픈소스 도구 중 하나입니다. API 표면에 gRPC 엔드포인트가 포함되어 있다면 k6를 평가해 볼 가치가 있습니다.
Hurl은 인증 헤더를 지원하나요? 예. Hurl은 Authorization, Bearer 및 쿠키 기반 인증을 포함한 사용자 정의 헤더를 지원합니다. 변수를 통해 런타임에 환경 변수에서 비밀 정보를 주입할 수 있습니다.
API 테스트를 위한 기본 CI 선택지였던 Newman의 시대는 끝나가고 있습니다. 공급망 위험은 실제적이며, 무료 티어 제한은 많은 팀에게 계산을 바꾸게 했고, 이제 더 나은 대안들이 존재합니다. 특히 기존 Postman 컬렉션을 가지고 Apidog CLI로 이동하는 경우 Newman 없는 파이프라인으로의 마이그레이션은 간단합니다.
