개념
"둘 중 뭘 써야 하나요"는 잘못된 질문이다
면접에서도 팀 회의에서도 자주 나오는 질문이지만, 전제가 틀렸다. 둘은 같은 일을 다르게 하는 도구가 아니라 서로 다른 구간을 맡는 도구 다.
설계 ──── 구현 ──── 통합 ──── 회귀 ──── 운영 감시
└──── Swagger (진실의 출처: 계약·문서) ────┘
└──── Postman (행위 검증: 시나리오·회귀·CI) ────┘Swagger는 "이 API는 이런 약속이다" 를 한 곳에 고정해두는 쪽이고, Postman은 "그 약속이 실제 상황에서 지켜지는가" 를 반복 실행으로 확인하는 쪽이다. 그래서 문장으로 쓰면 이렇게 된다 — Swagger는 문서가 본업이고 실행은 곁가지, Postman은 실행이 본업이고 문서는 곁가지다.
무엇이 다른가 — 표로 한 번에
| 기준 | Swagger UI | Postman |
|---|---|---|
| 태생 | API 문서화·설계 | API 테스트·협업 |
| 진실의 출처 | 서버 코드에서 생성된 스펙 | 사람이 만든 컬렉션 |
| 항상 최신인가 | 코드가 바뀌면 자동 반영 | 사람이 갱신해야 함 |
| 요청 저장 | 원칙적으로 안 됨(새로고침하면 사라짐) | 컬렉션으로 영구 저장 |
| 여러 요청 연결 | 불가 — 값을 손으로 복사해야 함 | 변수·스크립트로 자동 체이닝 |
| 어서션(검증문) | 없음 — 눈으로 본다 | 스크립트로 자동 판정 |
| 환경 분리 | 서버 드롭다운 정도 | 환경 세트(dev/stg/prod) 전환 |
| 반복 실행 | 한 번에 하나씩 수동 | Collection Runner·데이터 파일 |
| CI 연동 | 없음(스펙 검증 도구는 별도) | Newman으로 파이프라인 실행 |
| 설치 | 필요 없음(브라우저) | 앱 설치 또는 웹 |
| 접근성 | 주소만 알면 누구나 | 계정·워크스페이스 초대 필요 |
왜 Swagger로 테스트를 다 못 하는가 — 구체적으로
"Try it out이 되는데 왜 굳이 Postman을?"에 대한 답은 하나의 시나리오 를 예로 들면 분명해진다.
[회원가입] → [로그인해 토큰 받기] → [장바구니 담기] → [주문 생성]
→ [주문 조회로 금액 검증] → [주문 취소]Swagger UI로 하면 매 단계마다 응답에서 userId, accessToken,
cartId, orderId를 손으로 복사해 다음 칸에 붙여 넣어야 한다.
6단계면 복사·붙여넣기가 대여섯 번, 검증은 눈으로, 그리고 내일 다시
하려면 처음부터 전부 다시 한다. 스테이징과 개발 서버에서 두 번
돌리려면 또 두 배다.
Postman은 같은 흐름을 이렇게 바꾼다.
// 로그인 응답에서 토큰을 꺼내 환경 변수에 저장 (Tests 탭)
const body = pm.response.json();
pm.environment.set("accessToken", body.accessToken);
pm.environment.set("orderId", body.orderId);
pm.test("주문 금액은 쿠폰 할인이 적용된 값이어야 한다", function () {
pm.expect(body.totalPrice).to.eql(9000);
});
pm.test("응답은 1초 안에 온다", function () {
pm.expect(pm.response.responseTime).to.be.below(1000);
});이후 요청에서 {{accessToken}} 으로 참조하면 복사·붙여넣기가 사라진다.
한 번 만들어두면 실행 한 번으로 6단계가 자동으로 돌고, 판정까지
끝난다. 이것이 모듈 12(레슨 2)에서 배운 컬렉션·어서션의 값어치이고,
Swagger UI에는 원래 없는 기능이다 — 없는 게 결함이 아니라, 애초에
문서 도구라서 그렇다.
반대로 Postman이 대체할 수 없는 것
- 항상 최신이라는 보장. Postman 컬렉션은 사람이 만든 사본이라 API가 바뀌어도 자동으로 따라오지 않는다. Swagger는 코드에서 생성되므로 배포 즉시 반영 된다.
- 누구나 링크 하나로 본다. 기획자·협력사·신입이 계정 없이 바로 열어보는 경로는 Swagger 쪽이다.
- 계약의 근거. 모듈 12(레슨 4)의 계약 테스트, 레슨 5의 Pact, 코드 생성(클라이언트 SDK 자동 생성)은 전부 스펙 파일 을 먹고 돌아간다. 컬렉션으로는 그 자리를 채울 수 없다.
실무 흐름 — 팀에서 실제로 어떻게 이어지나
① 백엔드 개발자가 코드에 어노테이션/데코레이터를 달면
→ 빌드할 때 OpenAPI 스펙이 자동 생성되고 Swagger UI가 뜬다
│
② 프런트엔드·QA가 Swagger를 열어 "주소·필드·인증 방식"을 파악한다
→ 이 단계에서 QA는 스펙 리뷰(필수 필드, 에러 코드, enum)를 한다
│
③ 단건 확인은 Swagger의 Try it out으로 즉시 끝낸다
│
④ 로그인이 필요하거나 여러 API를 순서대로 엮어야 하면
→ 스펙을 Postman으로 가져와(Import) 시나리오를 구성한다
│
⑤ 만든 컬렉션에 어서션을 달아 회귀 테스트 자산으로 승격한다
│
⑥ Newman으로 CI 파이프라인에 넣어 배포마다 자동 실행한다요약하면 개발 단계에서는 Swagger를 기본 문서로 깔고 가고, 정밀한 테스트나 프런트엔드 협업이 필요할 때 Postman을 추가로 띄운다. 도구를 고르는 게 아니라 구간에 따라 갈아탄다.
④번을 손으로 하지 않는 법 — 가져오기(Import)
Postman은 OpenAPI 2.0·3.0·3.1을 읽어 폴더·요청·예시 응답이 갖춰진
컬렉션 으로 만들어준다. 스펙 URL(/v3/api-docs)이나 파일을 그대로
넣으면 된다.
주의할 점이 셋 있다.
- 가져오기는 사본을 만드는 것 이다. 그 순간의 스펙을 복제할 뿐, 이후 API가 바뀌어도 컬렉션은 그대로다. Spec Hub의 양방향 동기화를 쓰면 맞출 수 있지만 여러 파일로 쪼개진 스펙은 지원되지 않고, 삭제된 엔드포인트의 요청이 고아로 남는 문제도 있다.
- 자동 생성된 요청은 뼈대일 뿐 이다. 예시 값이
string,0같은 자리표시자로 채워져 있어 그대로 돌리면 400이 쏟아진다. 의미 있는 테스트 데이터로 바꾸는 것은 사람 몫이다. - 매 릴리스마다 손으로 다시 import 하지 않는다.
openapi-to-postmanv2(CLI)나 Portman을 CI에 걸어 스펙이 바뀌면 컬렉션을 재생성하도록 만든다. 여기까지 오면 모듈 14에서 배운 "사람이 반복하는 일을 파이프라인에 넘긴다"가 API 테스트에서 완성된다.
⑥번 — Newman으로 CI에 얹기
newman run orders-regression.postman_collection.json \
-e staging.postman_environment.json \
--reporters cli,junit \
--reporter-junit-export results/newman.xmlJUnit XML로 내보내면 GitHub Actions·Jenkins가 테스트 결과를 그대로 읽어 실패한 케이스를 표시한다. Swagger 화면에서 눈으로 보던 검증이 파이프라인의 빨간불로 바뀌는 지점 이 바로 여기다.
실무에서 왜 필요한가
두 도구를 갈라 쓸 줄 알면 "문서가 API와 다르다"는 사고를 구조적으로 줄일 수 있다. 팀이 Postman 컬렉션만 진실로 삼으면 컬렉션을 갱신하지 않은 사람은 옛 API를 테스트하게 되고, Swagger만 믿으면 로그인이 필요한 복합 시나리오는 아무도 반복 검증하지 않는다. 두 축이 각자의 자리를 지킬 때 문서는 최신이고 회귀는 자동으로 돈다.
QA 개인에게는 작업 시간이 직접 줄어든다. 단건 확인에 Postman 컬렉션을 만드는 것은 과잉이고(그냥 Swagger에서 눌러보면 된다), 매 스프린트 반복할 시나리오를 Swagger에서 손으로 돌리는 것은 낭비다. 어느 쪽인지 판단하는 기준은 단순하다 — 두 번 이상 반복할 것인가, 값을 다음 요청으로 넘겨야 하는가. 둘 중 하나라도 예면 Postman이다.
채용시장에서의 위치
API 테스트 관련 채용공고에서 "Postman 사용 경험"은 사실상 기본값이고, "Swagger/OpenAPI 문서 이해"가 함께 요구되는 공고가 계속 늘고 있다. 면접에서 "Swagger와 Postman의 차이가 뭔가요"는 실제로 자주 나오는 질문인데, 기능 나열로 답하면 평범하고 "진실의 출처는 스펙이고 컬렉션은 사본" 이라는 관계로 답하면 설계를 이해한 사람으로 읽힌다.
한 단계 더 얹는다면 Newman·CI 연동 경험이다. 도구를 쓸 줄 아는 사람과 도구의 결과를 파이프라인에 꽂아 팀의 안전망으로 만든 사람 사이에는 연봉 구간이 갈릴 만큼의 차이가 있다.