OpenAPI NDJSON 검수OpenAPI itemSchema schema 차이NDJSON 항목 검증NDJSON 스트림 완료 검수

OpenAPI NDJSON 검수, 한 줄이 통과하면 전체도 끝난 걸까요

NDJSON 항목이 유효해도 응답 전체가 인수 기준을 통과하는지 따로 확인해야 합니다. OpenAPI itemSchema와 schema의 차이를 가상 입력 8개로 비교합니다.

이 글을 쓴 알파카랩스카카오·네이버·쿠팡 출신, 재하청 0%, 대기업·공공기관 등 18개사+ 레퍼런스

발행 ·알파카랩스

2026년 11월 기준, itemSchema는 NDJSON 항목에, schema는 응답 전체에 적용합니다. 항목이 유효해도 전체 기준은 실패할 수 있습니다.

상태 목록을 NDJSON으로 내려주는 가상 API를 생각해 보겠습니다. 먼저 도착한 항목은 형식이 맞지만, 예시 인수 조건이 두 건 이상이라면 한 건만 수신한 응답은 완료 기준을 충족하지 못합니다. 항목이 유효한 시점과 전체 응답을 완료로 표시하는 시점을 구분합니다.

OpenAPI에서 항목과 전체는 어떻게 검수하나요?#

OpenAPI 3.2.1에서 itemSchema는 순차 응답의 각 항목에 독립적으로 적용됩니다. schema는 같은 항목들을 순서대로 배열로 해석해 응답 전체에 적용합니다. 둘 다 쓸 수 있습니다. 아래 예시의 전체 스키마는 items에 같은 항목 규칙을 두고 minItems: 2와 uniqueItems: true를 추가합니다. 두 건과 중복 기준은 예시에서 정한 조건입니다. OpenAPI 3.2.1 순차 매체

NDJSON은 개행으로 JSON 항목을 구분합니다. 수신 바이트를 버퍼에 모아 개행까지 읽은 뒤 해석하면, UTF-8 글자 중간에서 수신 조각이 나뉘어도 한 항목으로 처리할 수 있습니다. 아래 예시에서 각 항목에는 문자열 ID와 ready 또는 hold 상태가 필요합니다. NDJSON 1.0.0 §3

어떤 입력으로 인수 기준을 확인하나요?#

아래 표는 NDJSON 수신 구조, 항목 스키마를 통과한 개수, 응답 전체 스키마 판정을 각각 보여줍니다. 구조를 읽을 수 없는 경우 앞서 읽은 정상 항목 수만 남기고 전체 스키마 검사는 실행하지 않습니다.

가상 입력수신 구조 / 유효 항목전체 스키마
서로 다른 항목 두 개구조 정상 / 2개통과
UTF-8 글자 중간에서 청크가 나뉨구조 정상 / 2개통과
유효한 항목 한 개로 종료구조 정상 / 1개최소 건수 미달
완전히 같은 객체를 두 번 수신구조 정상 / 2개전체 객체 중복
ID가 같고 상태가 다른 객체 두 개구조 정상 / 2개통과
두 번째 항목의 상태가 누락됨구조 정상 / 1개항목 규칙 위반
두 번째 줄의 JSON 문법 오류구조 오류 / 1개검사하지 않음
두 번째 줄의 끝 개행 누락구조 오류 / 1개검사하지 않음
2026년 11월 12일 Python jsonschema 4.26.0으로 가상 입력 8개를 검사했습니다. 별도 코드로 수신 조각을 조립하고 NDJSON 구조를 확인했습니다.

첫 행의 응답 본문입니다. 각 줄의 끝에는 개행이 있습니다.

{"id":"가","state":"ready"}
{"id":"B","state":"hold"}

인수표에는 수신 구조 판정, 항목별 검수 결과, 전체 판정, 저장 여부를 적습니다. 예시에서는 전체 판정이 나오기 전까지 결과를 임시 상태로 둡니다. 정상 줄 뒤에 연결이 끊겨도 전체 스키마를 통과할 수 있습니다. 실제 인수에서는 HTTP 전송이 정상 종료됐는지와 업무에서 기대한 종료 조건을 따로 확인합니다. 형식 오류나 전체 조건 위반이 발생하면 완료 처리를 보류합니다.

항목이 계속 오는 스트림에도 전체 검사가 필요한가요?#

끝이 정해지지 않은 스트림은 운영에서 의미 있는 구간이나 창을 정해 검수할 수 있습니다. 전체 검사를 적용하려면 어떤 응답이나 구간을 배열로 비교할지 합의합니다. 일부 저장을 허용하는 업무라면 저장한 위치와 재개 기준을 따로 정합니다.

uniqueItems는 객체 전체가 같은지를 봅니다. 상태가 다르면 같은 ID를 가진 두 객체도 예시 스키마를 통과합니다. ID 단위 중복은 별도의 업무 규칙에서 검수합니다. 상태 결과를 항목별로 대조하는 방법은 SCM 일괄 처리 검수, 줄과 레코드가 어긋나는 다른 사례는 SCM CSV 검수에서 확인할 수 있습니다.

어떤 자료로 확인했나요?#

공개 문서는 2026년 11월 12일 확인했습니다. 시험은 합성 데이터와 로컬 조립·검사 코드로 진행했습니다. 실제 HTTP 연결, 생성 SDK, 적재 동작은 시험 범위에서 제외했습니다.

자주 묻는 질문#

itemSchema가 통과하면 응답 전체도 유효한가요?

항목이 모두 유효해도 전체의 건수나 중복 조건이 실패할 수 있습니다. 응답이나 구간의 끝을 확인하고 전체 스키마를 적용합니다.

수신 청크 하나를 JSON 한 건으로 읽어도 되나요?

한 청크에 여러 줄이 들어가거나 한 줄이 여러 청크로 나뉠 수 있습니다. 개행으로 항목을 조립한 뒤 해석합니다.

마지막 줄에 개행이 없으면 어떻게 하나요?

NDJSON 직렬화는 각 JSON 텍스트 뒤에 개행을 둡니다. 가상 인수 기준은 끝 개행이 없는 입력을 구조 오류로 분류했습니다.

uniqueItems로 중복 ID를 걸러낼 수 있나요?

예시에서 uniqueItems는 전체 객체가 같은 항목을 걸렀습니다. 같은 ID의 상태 값이 다르면 통과했습니다. ID가 유일해야 한다면 별도의 검수 규칙을 둡니다.

정상 항목은 바로 저장해도 되나요?

부분 저장을 허용하는 업무라면 저장 범위와 재개 지점을 계약에 명시합니다. 응답 전체가 하나의 인수 단위라면 전체 판정 뒤 확정하는 방식이 맞습니다.

NDJSON 적재 인수 범위를 정할 때#

NDJSON 적재 인수 기준을 정리합니다

첫 범위 협의에서 비식별 응답 표본을 바탕으로 항목 검사와 전체 완료 조건을 인수표에 정리합니다. 소요 시간은 전송·적재 범위를 확인한 뒤 협의합니다.

NDJSON 인수표 초안 협의