JSONPath 예제로 API 테스트 간소화하기

Ashley Innocent

Ashley Innocent

18 July 2025

JSONPath 예제로 API 테스트 간소화하기

최신 API 개발에는 효율적인 데이터 추출 및 유효성 검사 기술이 필요합니다. JSONPath 표현식은 개발자에게 복잡한 JSON 구조를 탐색하고 특정 데이터 포인트를 정밀하게 추출할 수 있는 강력한 도구를 제공합니다. 자동화된 테스트를 구축하든, API 응답을 처리하든, 대규모 데이터 세트를 필터링하든, 실용적인 JSONPath 예제를 이해하는 것은 간소화된 개발 워크플로우에 필수적입니다.

💡
API 테스트 및 데이터 추출을 한층 더 강화할 준비가 되셨나요? Apidog를 무료로 다운로드하고 직관적인 인터페이스로 복잡한 데이터 탐색을 손쉽게 만들어주는 고급 JSONPath 기능을 경험해 보세요.
버튼

JSONPath 기본 이해

JSONPath는 JSON 데이터 구조를 위해 특별히 설계된 쿼리 언어로 작동합니다. 이를 통해 JSON 구조의 요소 및 속성을 탐색하고, 값을 추출하며, 필터를 적용할 수도 있습니다. Postman, RestAssured, StepCI, k6 등과 같은 API 테스트 도구에서 널리 사용됩니다. 기존 파싱 방법과 달리 JSONPath 표현식은 XML 문서의 XPath와 유사한 간결한 구문을 제공합니다.

모든 JSONPath 표현식의 루트 요소는 전체 JSON 문서를 나타내는 달러 기호($)로 시작합니다. 이 시작 지점에서 개발자는 중첩된 객체, 배열을 탐색하고 정교한 필터링 조건을 적용하여 필요한 데이터를 정확하게 추출할 수 있습니다.

필수 JSONPath 구문 요소

기본 경로 탐색

JSONPath 표현식은 간단한 점 표기법 패턴을 따릅니다. 가장 간단한 표현식은 루트 객체의 직접적인 속성에 접근합니다.

$.propertyName
$.user.name
$.response.data.items

이러한 표현식은 중첩된 객체 계층을 탐색하여 복잡한 파싱 로직 없이 깊이 포함된 값에 도달할 수 있도록 합니다.

배열 접근 패턴

JSONPath의 배열 탐색은 여러 접근 방식을 지원합니다. 인덱스 기반 접근은 대괄호 표기법을 사용합니다.

$.users[0]          // 첫 번째 요소
$.users[1,3,5]      // 여러 특정 요소
$.users[-1]         // 마지막 요소
$.users[1:3]        // 인덱스 1부터 2까지 슬라이스

와일드카드 작업은 대량 데이터 추출을 가능하게 합니다.

$.users[*]          // 모든 배열 요소
$.users[*].name     // 모든 사용자 이름
$.products[*].price // 모든 제품 가격

재귀 하강 작업

이중 점(..) 연산자는 JSON 구조 전체에서 재귀 검색을 수행합니다.

$..name             // 모든 'name' 속성 (어떤 레벨에서든)
$..products[*]      // 모든 제품 배열 (어디에서든)
$..price            // 모든 가격 값 (재귀적으로)

이 연산자는 대상 데이터가 다른 중첩 레벨에 존재할 수 있는 알 수 없거나 가변적인 JSON 구조를 다룰 때 매우 유용합니다.

고급 필터링 기술

조건부 필터링

필터는 배열을 필터링하는 데 사용되는 논리 표현식입니다. 필터가 있는 JSONPath 표현식의 예는 ... 여기서 @는 현재 처리 중인 배열 항목 또는 객체를 나타냅니다. 필터 표현식은 특정 기준에 따라 정교한 데이터 선택을 가능하게 합니다.

$.users[?(@.age > 18)]              // 18세 초과 사용자
$.products[?(@.price < 50)]         // 50달러 미만 제품
$.orders[?(@.status == 'pending')]  // 보류 중인 주문만

@ 기호는 평가 중인 현재 배열 요소를 나타내어 복잡한 속성 기반 필터링을 가능하게 합니다.

복합 논리 연산

논리 연산자 && 및 ||를 사용하여 더 복잡한 필터를 만들 수 있습니다. 여러 조건은 부울 연산자를 사용하여 결합할 수 있습니다.

$.products[?(@.price > 10 && @.category == 'electronics')]
$.users[?(@.age >= 21 || @.verified == true)]
$.orders[?(@.total > 100 && @.status != 'cancelled')]

이러한 표현식은 여러 기준에 기반한 정확한 데이터 필터링을 가능하게 하며, 이는 복잡한 API 응답 처리에 필수적입니다.

문자열 일치 및 패턴

문자열 기반 필터링은 다양한 비교 연산을 지원합니다.

$.products[?(@.name =~ /^iPhone/)]      // 'iPhone'으로 시작하는 이름
$.users[?(@.email =~ /.*@gmail\.com/)]  // Gmail 사용자
$.items[?(@.description contains 'sale')] // 'sale'을 포함하는 항목

정규식 지원은 JSONPath 구현마다 다르지만, 대부분의 최신 도구는 기본적인 패턴 일치를 지원합니다.

실제 API 테스트 애플리케이션

응답 유효성 검사 예제

API 테스트는 특정 응답 요소의 유효성을 검사해야 하는 경우가 많습니다. JSONPath 예제는 효과적인 유효성 검사 전략을 보여줍니다.

// 사용자 등록 응답 유효성 검사
$.response.user.id              // 사용자 ID 추출
$.response.user.email           // 이메일 할당 확인
$.response.permissions[*].name  // 할당된 권한 확인

이러한 표현식은 API 응답의 자동화된 검증을 가능하게 하여 데이터 무결성 및 적절한 기능을 보장합니다.

데이터 변환 워크플로우

JSONPath 표현식은 다른 형식 간의 데이터 변환을 용이하게 합니다.

// 제품 카탈로그 데이터 추출
$.catalog.products[*].{
  id: @.productId,
  name: @.title,
  cost: @.pricing.retail
}

이 접근 방식은 데이터 매핑 작업을 간소화하며, 특히 여러 API 서비스를 통합할 때 유용합니다.

오류 처리 및 디버깅

JSONPath 표현식은 오류 감지 및 디버깅에 도움이 됩니다.

$.errors[*].message             // 모든 오류 메시지
$.response.warnings[?(@.level == 'critical')]  // 심각한 경고
$..stackTrace                   // 모든 스택 트레이스

이러한 패턴은 개발자가 API 개발 및 테스트 단계에서 문제를 식별하고 해결하는 데 도움이 됩니다.

성능 최적화 전략

효율적인 경로 선택

JSONPath 표현식을 최적화하면 애플리케이션 성능이 크게 향상됩니다. 특정 경로는 와일드카드 작업보다 성능이 우수합니다.

// 효율적 - 직접 경로
$.users[0].profile.name

// 비효율적 - 와일드카드 검색
$.users[*].profile.name

직접 경로 접근은 특히 대규모 JSON 데이터 세트에서 계산 오버헤드를 줄입니다.

캐싱 및 재사용 패턴

컴파일된 JSONPath 표현식은 반복적으로 사용될 때 성능 이점을 제공합니다.

// 한 번 컴파일하고 여러 번 사용
const userNamePath = JSONPath.compile('$.users[*].name');
const userNames = userNamePath.evaluate(jsonData);

이 접근 방식은 고주파 작업에서 파싱 오버헤드를 최소화합니다.

현대 개발 도구와의 통합

Apidog 통합 이점

Apidog는 API 테스트 및 개발을 위한 포괄적인 JSONPath 지원을 제공합니다. 이 플랫폼은 시각적 JSONPath 빌더, 실시간 표현식 테스트 및 자동화된 유효성 검사 기능을 제공합니다. 개발자는 수동으로 표현식을 작성하지 않고도 복잡한 데이터 추출 워크플로우를 생성할 수 있습니다.

버튼

이 도구의 JSONPath 디버거는 단계별 표현식 평가를 가능하게 하여 복잡한 쿼리를 이해하고 최적화하기 쉽게 만듭니다. 또한 Apidog의 협업 기능을 통해 팀은 JSONPath 템플릿과 모범 사례를 공유할 수 있습니다.

Apidog 대시보드를 보여주는 이미지

Apidog가 JSONPath의 기능을 효과적으로 활용하는 데 어떻게 도움이 되는지 소개합니다.

먼저 API에 요청을 보내고 Apidog에서 직접 응답을 확인해야 합니다. 그런 다음 제공된 인터페이스를 사용하여 JSONPath 쿼리를 적용하여 응답에서 모든 액션 영화의 제목을 추출할 수 있습니다.

Apidog의 후처리 페이지

위 스크린샷에서 (1) 저희 서버에 GET 요청을 보낸 것을 볼 수 있습니다. 저는 위에서 얻은 JSON 데이터를 응답으로 사용하여 간단한 Express 서버를 만들었습니다. 그런 다음 후처리 탭 (2)으로 전환하여 새로운 프로세스인 변수 추출 (3)을 추가했습니다.

변수 추출을 클릭하면 아래 페이지가 표시됩니다.

Apidog의 JSONPath 추출 구성 페이지

원한다면 변수 이름(1)을 설정할 수 있습니다. 변수는 다양한 API를 모니터링하거나 구축하고 일반 구성을 관리할 단일 장소가 필요할 때 유용합니다. 여기의 변수는 .env 파일과 같습니다.

다른 단계는 필터링할 JSONPath를 입력하는 것입니다(2). 이 경우 JSON의 액션 배열에 있는 영화 제목을 가져오려고 합니다. 현재 경로를 입력한 후 화살표 버튼(3)을 클릭하면 아래와 같이 쿼리의 응답 페이지가 열립니다.

jsonpath 응답 apidog

위 응답에서 볼 수 있듯이, Apidog는 액션 배열에 있는 영화의 제목을 필터링하여 표시했습니다.

이것을 시도해보고 싶다면, Apidog를 다운로드하여 설치하고 첫 번째 요청을 보내십시오.

테스트 프레임워크 통합

인기 있는 테스트 프레임워크는 JSONPath 기능을 통합합니다.

// Jest 통합
expect(jsonPath.query(response, '$.users[*].name')).toContain('John');

// JSONPath를 사용한 Mocha
const userCount = jsonPath.query(data, '$.users.length')[0];
assert.equal(userCount, 5);

이러한 통합은 자동화된 테스트 워크플로우를 간소화하고 테스트 유지보수성을 향상시킵니다.

사용 사례별 일반적인 JSONPath 예제

전자상거래 API 시나리오

전자상거래 API는 특수 JSONPath 예제로부터 이점을 얻습니다.

// 제품 검색 결과
$.products[?(@.inStock == true && @.price <= 100)]

// 주문 처리
$.orders[?(@.status == 'shipped')].trackingNumber

// 고객 데이터
$.customers[?(@.loyaltyLevel == 'premium')].benefits[*]

이러한 표현식은 일반적인 전자상거래 데이터 추출 요구 사항을 효율적으로 처리합니다.

소셜 미디어 API 패턴

소셜 미디어 API는 다른 JSONPath 접근 방식을 요구합니다.

// 게시물 참여 지표
$.posts[*].{likes: @.likes, shares: @.shares, comments: @.comments.length}

// 사용자 활동 필터링
$.activities[?(@.type == 'post' && @.timestamp > '2024-01-01')]

// 콘텐츠 중재
$.reports[?(@.severity == 'high' && @.resolved == false)]

이러한 패턴은 일반적인 소셜 미디어 데이터 처리 요구 사항을 다룹니다.

금융 API 애플리케이션

금융 API는 정밀한 데이터 추출을 요구합니다.

// 거래 필터링
$.transactions[?(@.amount > 1000 && @.category == 'investment')]

// 계좌 잔액 집계
$.accounts[*].balances[?(@.currency == 'USD')].amount

// 위험 평가 데이터
$.assessments[?(@.score < 600)].recommendations[*]

이러한 예제는 금융 데이터 처리 시나리오에서 JSONPath의 유용성을 보여줍니다.

오류 처리 및 디버깅 기술

일반적인 표현식 오류

JSONPath 표현식은 다양한 문제로 인해 실패할 수 있습니다. 일반적인 오류 패턴을 이해하면 문제를 예방하는 데 도움이 됩니다.

// 잘못된 구문
$.users[name]           // 따옴표 누락
$.users[?@.age > 18]    // 괄호 누락

// 올바른 구문
$.users['name']         // 속성 접근
$.users[?(@.age > 18)]  // 올바른 필터 구문

적절한 구문 유효성 검사는 런타임 오류를 방지하고 애플리케이션 안정성을 향상시킵니다.

디버깅 전략

효과적인 디버깅에는 체계적인 접근 방식이 필요합니다.

  1. 단계별 평가: 복잡한 표현식을 더 작은 부분으로 나눕니다.
  2. 샘플 데이터로 테스트: 알려진 데이터 세트로 표현식을 확인합니다.
  3. 시각화 도구 사용: JSONPath 온라인 평가기를 사용하여 테스트합니다.
  4. 중간 결과 로깅: 부분 쿼리 결과를 출력하여 확인합니다.

이러한 전략은 개발자가 JSONPath 관련 문제를 신속하게 식별하고 해결하는 데 도움이 됩니다.

JSONPath 구현을 위한 모범 사례

표현식 가독성

읽기 쉬운 JSONPath 표현식은 코드 유지보수성을 향상시킵니다.

// 좋음 - 명확하고 설명적
const activePremiumUsers = '$.users[?(@.status == "active" && @.tier == "premium")]';

// 나쁨 - 모호하고 불분명
const users = '$.u[?(@.s=="a"&&@.t=="p")]';

설명적인 표현식은 팀 협업을 강화하고 디버깅 시간을 단축합니다.

보안 고려 사항

JSONPath 표현식은 보안 취약점을 방지하기 위해 입력 데이터를 검증해야 합니다.

// 쿼리하기 전에 JSON 구조 유효성 검사
if (jsonData && typeof jsonData === 'object') {
  const result = JSONPath.query(jsonData, expression);
  // 결과를 안전하게 처리
}

입력 유효성 검사는 잠재적인 보안 문제와 애플리케이션 충돌을 방지합니다.

성능 모니터링

프로덕션 환경에서 JSONPath 표현식 성능을 모니터링합니다.

const startTime = performance.now();
const result = JSONPath.query(largeDataset, complexExpression);
const endTime = performance.now();
console.log(`JSONPath 실행 시간: ${endTime - startTime}ms`);

성능 모니터링은 병목 현상을 식별하고 중요한 작업을 최적화하는 데 도움이 됩니다.

미래 개발 및 동향

향상된 필터 기능

미래 JSONPath 구현에는 더 정교한 필터링 옵션이 포함될 수 있습니다.

이러한 개선 사항은 다양한 사용 사례에서 JSONPath의 적용 가능성을 확장할 것입니다.

도구 통합 진화

개발 도구는 JSONPath 지원을 계속 확장하고 있습니다.

이러한 향상된 기능은 모든 기술 수준의 개발자가 JSONPath에 더 쉽게 접근할 수 있도록 합니다.

결론

JSONPath 예제는 JSON 데이터 추출 및 조작에 사용할 수 있는 강력한 기능을 보여줍니다. 기본적인 속성 접근부터 복잡한 필터링 작업에 이르기까지, 이러한 표현식은 개발자가 정교한 데이터 처리 요구 사항을 효율적으로 처리할 수 있도록 합니다. Apidog와 같은 현대 개발 도구와의 JSONPath 통합은 생산성과 협업을 더욱 향상시킵니다.

JSONPath 예제를 숙달하려면 실제 시나리오를 통한 연습과 기본 구문 및 고급 기능에 대한 이해가 필요합니다. API가 점점 더 복잡해지고 데이터 중심 애플리케이션이 정교해짐에 따라 JSONPath 기술은 효과적인 개발 워크플로우에 필수적이 됩니다.

버튼

Apidog에서 API 설계-첫 번째 연습

API를 더 쉽게 구축하고 사용하는 방법을 발견하세요