GraphQL 요청 디버깅
Proxyman에서 GraphQL 요청을 디버깅하세요. 쿼리 이름으로 규칙을 매칭하고, 쿼리를 보기 좋게 정리하고, Query Name 열을 표시하며, 스크립트로 응답을 모킹할 수 있습니다.
1. GraphQL 요청에 디버깅 도구 사용하기
Proxyman 2.27.0부터는 GraphQL Query Name을 지정해 GraphQL 요청에 디버깅 도구를 사용할 수 있습니다.
GraphQL QueryName으로 매칭하는 기능은 Breakpoint, Map Local, Map Remote, Block List, Allow List, Scripting 도구에서 작동합니다.
사용 방법
- 디버깅 도구(예: Breakpoint)를 엽니다
- 새 규칙을 만듭니다
- Use Wildcard 드롭다운 -> Advanced -> GraphQL QueryName을 체크합니다
- GraphQL QueryName을 입력합니다
디버깅 도구는 먼저 원래의 매칭 규칙을 적용한 다음, GraphQL QueryName으로 매칭합니다.
빌드 3.0.0부터 Proxyman은 디버깅 도구 규칙을 만들 때 GraphQL Query Name을 자동으로 채웁니다.
2. GraphQL Prettier
Proxyman 2.33.0부터 Proxyman은 GraphQL 쿼리를 보기 좋게 정리(prettify)할 수 있습니다. 이 기능을 켜려면 Tools 메뉴 -> **Custom Previewer Tab…**을 열고 GraphQL 체크박스를 체크하세요.

보기 좋게 정리된 GraphQL 쿼리
3. 메인 테이블 뷰에서 GraphQL Query Name 표시하기
Proxyman은 각 GraphQL 요청의 Query Name을 추출해 표시할 수 있습니다. 열 헤더를 마우스 오른쪽 버튼으로 클릭하고 Query Name 열을 활성화하세요.

Query Name 열
4. GraphQL 요청 디버깅 (레거시 - Proxyman 2.26.0 이하)
GraphQL은 서로 다른 쿼리에도 같은 URL을 사용하므로, URL 기반 디버깅 도구(예: Map Local, Breakpoint, Map Remote)는 GraphQL과 잘 맞지 않습니다.
하지만 Scripting 도구를 사용하면 다음을 할 수 있습니다:
- QueryName을 기준으로 로컬 응답을 매핑합니다
- GraphQL 요청과 응답의 쿼리, 본문, 헤더를 변경합니다
Scripting 도구로 Map Local 사용하기
Scripting 도구를 사용해 로컬 파일을 응답으로 매핑할 수 있습니다:
- Proxyman을 엽니다
- GraphQL 도메인에서 Enable SSL Proxying을 켭니다
- 해당 도메인의 HTTPS 요청이 보이는지 확인합니다
- 요청을 마우스 오른쪽 버튼으로 클릭 -> Tools -> **Scripting…**을 선택해 URL용 스크립트를 만듭니다
- 로컬 파일을 가져오려면: More 버튼 -> Import JSON or Other File... -> 파일을 선택합니다
- 다음 스크립트는 QueryName="user"인 GraphQL 요청의 응답으로 로컬 파일을 설정합니다
// Import file from More Button -> Import JSON or Other files
const file = require("@users/B02D96D5.default_message_32E64A5B.json");
function onRequest(context, url, request) {
// 1. Extract the queryName from the request
var queryName = request.body.query.match(/\S+/gi)[1].split('(').shift();
// Or extract the operationName
var operationName = request.body.operationName
// 2. Save to sharedState
sharedState.queryName = queryName
sharedState.operationName = operationName
// Done
return request;
}
function onResponse(context, url, request, response) {
// 3. Check if it's the request we need to map
if (sharedState.queryName == "user") {
// 4. Import the local file by Action Button -> Import
// Get the local JSON file and set it as a body (like Map Local)
response.headers["Content-Type"] = "application/json";
response.body = file;
}
// Done
return response;
}
헤더, 쿼리, 본문 변경하기
- 같은 코드를 사용하고 queryName만 변경합니다
- 스니펫 코드를 사용해 값을 변경합니다