요약 (TL;DR)
SoapUI 목 서비스는 SOAP 또는 REST 엔드포인트를 로컬에서 시뮬레이션하지만, 실행 중인 Java 프로세스, 수동 디스패치 구성이 필요하며 공유 머신 없이는 팀 간에 공유할 수 없습니다. Apidog의 Smart Mock은 API 스키마에서 목 응답을 생성하고 클라우드에서 실행되며 팀과 자동으로 공유됩니다.
💡 Apidog는 로컬 Java 프로세스를 실행하지 않고도 API 정의에서 즉석 목 엔드포인트를 생성하는 Smart Mock이 내장된 무료 올인원 API 개발 플랫폼입니다. 신용 카드 없이 Apidog를 무료로 사용해 보세요.
서론
목 서비스는 API 개발의 일반적인 문제를 해결합니다: 서비스가 준비되기 전에 클라이언트 코드가 서비스를 어떻게 처리하는지 테스트하고 싶을 때, 또는 실제 시스템에서 발생시키지 않고 예외 사례(오류, 느린 응답)를 테스트하고 싶을 때 사용됩니다.
SoapUI의 목 서비스 기능은 초기 버전부터 제공되었으며 잘 작동합니다. 구성한 규칙에 따라 요청에 응답하는 로컬 HTTP 서버를 실행합니다. 문제는 이 로컬 프로세스가 마찰을 일으킨다는 것입니다: SoapUI를 닫으면 중단되고, 다른 팀원들은 네트워크 트릭 없이는 접근할 수 없으며, 구성 인터페이스가 번거롭습니다.
이 가이드는 SoapUI 목 서비스의 작동 방식, 설정 방법, 팀이 겪는 일반적인 문제, 그리고 Apidog의 접근 방식이 어떻게 다른지 다룹니다.
SoapUI 목 서비스 작동 방식
SoapUI는 프로젝트 내 기존 SOAP 또는 REST 인터페이스에서 목 서비스를 생성합니다. 목 서비스는 다음을 수행합니다:
- 구성한 로컬 포트에서 수신 대기합니다 (예:
http://localhost:8088/MockService) - 들어오는 요청을 가로챕니다.
- 디스패치 로직을 사용하여 요청을 "목 응답"과 일치시킵니다.
- 구성된 응답을 반환합니다.
SOAP 서비스의 경우, SoapUI는 WSDL에서 목 응답을 자동으로 생성하여 각 작업에 대한 스텁 응답을 만듭니다. 이는 서비스가 존재하기 전이나 실제 엔드포인트에 접근하기 전에 서비스를 시뮬레이션하는 데 유용합니다.
SoapUI 목 서비스 설정하기 (단계별)
SOAP 인터페이스의 경우
- SoapUI 프로젝트에서 프로젝트 트리의 SOAP 인터페이스를 우클릭합니다.
- "MockService 생성"을 선택합니다.
- 대화 상자에서 다음을 구성합니다:
- 서비스 이름 (예: "OrderService Mock")
- 포트 번호 (기본값 8088, 필요시 변경)
- 경로 (예:
/orders)
- 확인을 클릭하면 MockService 노드가 생성됩니다.
- MockService 노드를 확장하면 각 SOAP 작업에 대한 "MockOperation"이 보입니다.
- MockOperation을 두 번 클릭하여 목 응답 편집기를 엽니다.
- 시뮬레이션 값을 반환하도록 SOAP 응답 XML을 편집합니다.
- MockService 편집기에서 녹색 재생 버튼을 클릭해 로컬 서버를 시작합니다.
이제 http://localhost:8088/orders에서 목 서비스가 실행됩니다. 클라이언트 코드를 이 URL로 지정하세요.
REST 인터페이스의 경우
- 프로젝트 트리에서 REST 인터페이스 또는 리소스를 우클릭합니다.
- "MockService에 추가" 또는 "MockService 생성"을 선택합니다.
- 포트와 경로를 구성합니다.
- 각 리소스/메서드에 대해 목 응답 본문과 상태 코드를 설정합니다.
- 목 서비스를 시작합니다.
디스패치 구성하기
기본적으로 SoapUI 목 서비스는 첫 번째 목 응답을 반환합니다. 입력별로 다양한 응답이 필요하면 "디스패치 스크립트"(Groovy) 또는 "SEQUENCE" 디스패치 유형을 사용합니다.
- 시퀀스 디스패치: 호출 순서대로 응답이 바뀜 (1번째 호출은 A, 2번째는 B 등)
- 스크립트 디스패치: Groovy 스크립트에서 요청을 검사하고 응답 이름을 리턴
디스패치 스크립트 예시:
def request = mockRequest.getRequestContent()
if (request.contains("orderId>12345")) {
return "OrderFoundResponse"
} else {
return "OrderNotFoundResponse"
}
여러 개의 이름 있는 목 응답("OrderFoundResponse", "OrderNotFoundResponse")을 생성하고, 디스패치 스크립트에서 요청 내용에 따라 반환할 응답을 선택하세요.
SoapUI 목 서비스의 일반적인 문제
문제 1: SoapUI를 닫으면 목 서비스가 중단됨
SoapUI의 목 서비스는 Java 프로세스의 일부로 실행됩니다. SoapUI를 닫으면 목 서비스도 종료됩니다. 팀원들은 더 이상 해당 목 서비스를 사용할 수 없습니다.
해결 방법:
- 전용 머신/VM에서 SoapUI를 계속 실행
- 명령줄 목 서버 사용:
mockservicerunner.sh -p 8088 -s "OrderService Mock" project.xml
- 항상 실행되는 공유 머신 사용
이 방법들은 모두 관리 오버헤드가 있습니다. Java와 SoapUI 설치가 필수입니다.
문제 2: 팀 전체에 목 서비스 공유하기
localhost:8088에서 실행되는 목 서비스는 해당 머신에서만 접근 가능합니다. 팀 공유를 위해서는 네트워크 세팅(VPN, 방화벽 등)이나 공유 서버가 필요합니다.
문제 3: 복잡한 XML에서 디스패치 스크립트가 작동하지 않음
Groovy 스크립트는 XML 본문에서 문자열 일치로 동작합니다. 네임스페이스가 다르거나 구조가 변하면 일치가 어려울 수 있습니다.
해결:
SoapUI의 GroovyUtils로 XML 파싱을 추가해야 하며, 스크립트가 복잡해집니다.
문제 4: 호출 간 상태가 유지되지 않음
SoapUI 목 서비스는 무상태(stateless)입니다. 워크플로우(생성-조회 등)를 목업하려면 Groovy 변수 활용 등 추가 스크립트가 필요합니다.
문제 5: 목 서비스를 위한 SSL
HTTPS 지원을 위해서는 키스토어 설정, 인증서 적용 등 복잡한 추가 구성이 필요합니다.
Apidog Smart Mock: 비교
Apidog의 목 서비스는 실행 중인 프로세스가 아니라 API 디자인에서 시작합니다.
- API 엔드포인트(메서드, 경로, 요청/응답 스키마) 정의 → Apidog가 클라우드에서 자동으로 목 엔드포인트 생성
- 별도의 서버 구동이나 추가 설정 없이 즉시 목 서비스 사용 가능
목 URL 예시:
https://{your-project}.mock.apidog.io/orders/{id}
장점:
- 별도 서버 실행 필요 없음 (항상 활성화)
- 팀원 누구나 공유 URL로 접근
- 스키마 기반 자동 응답 생성
Apidog가 목 응답을 생성하는 방법
Apidog는 응답 스키마(JSON Schema/OpenAPI)를 읽어 현실적인 가짜 데이터를 자동 생성합니다.
예시:
-
orderId가 UUID라면 무작위 UUID 반환 -
amount가 0~10000 범위의 숫자라면 해당 범위 내 값 반환
필요시 특정 필드에 사용자 정의 값을 지정할 수도 있습니다.
Apidog Mock의 SOAP 엔드포인트
Apidog Smart Mock은 REST/JSON에 최적화되어 있습니다.
SOAP 목업의 경우:
- 요청/응답을 수동으로 구성
- SOAP 엔벨로프 형태의 사용자 정의 응답 작성
- WSDL 기반 자동 목응답은 미지원 (수동 설정 필요)
상태 저장 목업
Apidog는 JavaScript 기반 목 스크립트를 통해 요청 내용을 검사하고, 조건에 따라 다른 응답을 반환할 수 있습니다. SoapUI의 Groovy 디스패치와 유사하지만, 더 친숙한 JavaScript 문법으로 동작합니다.
나란히 비교
| 기능 | SoapUI Mock | Apidog Smart Mock |
|---|---|---|
| Java 필요 | 예 | 아니요 |
| 항상 실행 | 명령줄 실행기에서만 | 예 (클라우드) |
| 팀 접근 가능 | 수동 네트워킹 | 예, 공유 URL을 통해 |
| WSDL 자동 생성 | 예 | 아니요 |
| REST 스키마 기반 | 아니요 | 예 |
| 동적 응답 | Groovy 디스패치 | JavaScript 목 스크립트 |
| HTTPS 지원 | 수동 키스토어 설정 | 내장 |
| 상태 저장 목업 | Groovy 변수를 통해 | JavaScript 스크립트를 통해 |
| 무료 | 예 | 예 |
각각을 언제 사용해야 하는가
SoapUI 목 서비스를 추천하는 경우:
- WSDL 기반 SOAP 서비스를 목업하고 자동 응답 생성이 필요할 때
- 팀이 오프라인 또는 보안 네트워크 환경에서 작업할 때
- 이미 SoapUI 도구에 익숙하고 바꾸고 싶지 않을 때
Apidog Smart Mock을 추천하는 경우:
- REST API 목업이 필요하고, 팀 공유가 쉬워야 할 때
- 별도 서버 구동 없이 항상 사용 가능한 목 서버가 필요할 때
- 신규 프로젝트에서 구현 전 API 계약을 먼저 정의할 때
- Java 환경이나 복잡한 설치·유지보수를 피하고 싶을 때
자주 묻는 질문 (FAQ)
Q. SoapUI 목 서비스를 GUI 없이 실행할 수 있나요?
A. 예, mockservicerunner.sh(Linux/macOS) 또는 mockservicerunner.bat(Windows)로 CLI에서 실행 가능합니다. Java 설치는 필수입니다.
Q. Apidog가 SOAP 목 서비스를 지원하나요?
A. 부분 지원. SOAP XML을 응답으로 수동 구성할 수 있지만, WSDL 기반 자동 생성은 미지원입니다.
Q. SoapUI 목 서비스에서 느린 응답을 시뮬레이션할 수 있나요?
A. 예, "지연(Delay)" 값을 ms 단위로 설정하면 됩니다. Apidog도 응답 지연 설정을 지원합니다.
Q. Apidog는 얼마나 많은 목 요청을 처리할 수 있나요?
A. 개발·테스트 목적의 일반적인 부하는 처리합니다. 대용량 성능 테스트는 별도의 전문 목 서버를 추천합니다.
Q. 두 명의 팀원이 동일 엔드포인트에서 각기 다른 목 응답이 필요할 때는?
A. SoapUI는 각자 로컬에서 독립적으로 실행/구성. Apidog는 여러 환경을 만들거나 쿼리 파라미터/Mock expects 기능으로 분기 가능.
Q. Apidog 목 사용 시 API를 완전히 정의해야 하나요?
A. 응답 스키마가 있으면 더 리얼한 데이터가 생성되지만, 스키마 없이도 수동 목 응답을 지정해 목 서비스 사용이 가능합니다.
SoapUI의 목 서비스는 기능적이지만 로컬 Java 프로세스에 묶여 있습니다. 지속적이고 공유 가능한 목이 필요한 현대 팀에게는 Apidog의 클라우드 기반 접근 방식이 조정 오버헤드를 크게 줄입니다.
Top comments (0)