Python

Pydantic을 사용하여 Python에서 JSON 문서 유효성 검사하기

의 주요 매력 중 하나는 문서 데이터베이스 는 문서 구조 또는 스키마의 유연성입니다. 대부분의 경우 문서 스키마의 유연성은 유용합니다. 그러나 문서에 일정한 구조를 갖는 것이 도움이 될 수 있는 상황도 있을 수 있습니다. 이 문서에서는 널리 사용되는 Python 라이브러리를 사용하여 지정된 스키마에 대해 JSON 문서의 유효성을 검사하는 방법을 보여줍니다. pydantic.

문서 유효성 검사는 언제 필요한가요?

NoSQL 데이터베이스 사용에 대한 일반적인 오해는 구조나 문서 스키마가 필요하지 않다는 것입니다. 대부분의 경우 애플리케이션은 데이터의 유효성을 특별히 검증하지 않더라도 데이터에 대해 몇 가지 제약 조건을 가지고 있는 경향이 있습니다. 예를 들어, 문서에 애플리케이션이 기능에 의존하는 일부 필드가 있을 수 있습니다. 이러한 피단적 JSON 필드 중 일부가 누락되면 애플리케이션이 올바르게 작동하지 않을 수 있습니다.

이 문제의 실제 사례 중 하나는 주기적으로 잘못된 데이터를 전송하는 신뢰할 수 없는 다른 애플리케이션에서 데이터를 읽는 애플리케이션일 수 있습니다. 이러한 경우 애플리케이션을 손상시킬 수 있는 문서를 강조 표시하는 것이 현명할 것입니다. 개발자는 다음과 같이 할 수 있습니다. 애플리케이션에서 또는 문서 수준에서

이 접근 방식에서는 문서 수준에서 애플리케이션 사양과 일치하지 않는 문서를 식별하는 데 도움이 되도록 문서에 대한 JSON-피다틱 스키마를 지정합니다.

JSON 테스트 데이터 생성

저희는 오픈 소스 라이브러리를 사용합니다, Faker를 사용하여 이 튜토리얼을 위한 가짜 사용자 프로필을 생성합니다.

이것이 단일 문서의 구조입니다:

깨진 문서를 시뮬레이션하기 위해 휴대폰과 메일 필드를 일부 삭제하여 사용자 프로필의 일부를 수정했습니다. 실제 세계에서는 Couchbase와 같은 문서 데이터베이스에 저장될 이러한 기록을 식별하는 것이 목표입니다.

JSON에서 생성된 파이던트 데이터를 호스팅된 버킷에 로드합니다. 카우치베이스 카펠라 클러스터를 사용하여 가져오기 기능을 테스트하기 위해 기본 제공 웹 콘솔 UI에 추가했습니다. 저는 사용자 이름 필드를 각 문서를 고유하게 식별하는 키로 사용하세요.

JSON 문서에 스키마를 지정하는 방법은 무엇인가요?

사용자 프로필 데이터에서 문서가 애플리케이션에서 다음과 같은 구조를 따를 것으로 예상합니다:

  • 필수 필드입니다:
    • 사용자 이름
    • 이름
    • 전화 - "홈" 및 "모바일"에 대한 JSON 요소 포함
    • 메일
    • 웹사이트 - 배열
  • 선택적 필드:
    • 회사
    • 거주지
    • job
    • 주소

Pydantic은 파이썬에서 데이터 유효성 검사에 가장 많이 사용되는 라이브러리 중 하나입니다. 스키마를 지정하는 구문은 다음을 사용하는 것과 유사합니다. 파이썬에서 함수에 대한 유형 힌트. 개발자는 모델을 정의하여 스키마를 지정할 수 있습니다. Pydantic에는 다양한 JSON 유효성 검사를 수행할 수 있는 풍부한 기능이 있습니다. 몇 가지 사용자 프로필 문서 사양에 대한 표현을 살펴보겠습니다.

pydantic에서 한 가지 주의해야 할 점은 기본적으로 가능한 경우 유형 변환을 수행하여 데이터 유형을 강제로 변환한다는 것입니다(예: 문자열 '1'을 숫자 1로 변환). 그러나 다음과 같은 옵션이 있습니다. 엄격한 유형 검사 활성화 전환을 수행하지 않습니다.

이 코드 예제에서는 pydantic 구문을 사용하여 UserProfile 스키마의 기본 구성을 볼 수 있습니다:

각 필드는 예상 데이터 유형과 함께 지정됩니다. 선택적 필드는 다음과 같이 표시됩니다. 선택 사항. 배열은 목록 키워드 다음에 원하는 데이터 유형을 입력합니다.

그리고 사용자 이름 필드는 문자열이어야 하며 회사 필드는 선택적 문자열입니다. 코드조각의 다른 줄을 살펴보면, 다음과 같이 웹사이트 필드는 유형 목록입니다. HttpUrl - pydantic에서 기본으로 제공하는 다양한 사용자 정의 유형 중 하나입니다. HttpUrl 는 URL이 임의의 문자열이 아닌 유효한지 확인하는 데 사용됩니다. 마찬가지로 다음과 같은 다른 필드도 있습니다. 이메일 를 사용하여 이메일 필드가 유효한 양식인지 확인할 수 있습니다. 

를 보면 전화 필드로 표시된 경우 전화 유형은 다음 코드 스니펫에서 정의할 사용자 정의 유형입니다:

여기서는 전화 는 둘 다 문자열인 두 개의 필드로 구성됩니다: 그리고 모바일. 이것은 내부에서 확인됩니다. 사용자 프로필 모델로 해석하고 사용자 프로필 모델을 포함하는 전화 필드에 그리고 모바일 필드. 

Pydantic을 사용하면 또한 콘텐츠 데이터의 유형과 데이터의 존재 여부를 확인합니다. 특정 필드의 유효성을 검사하는 함수를 정의하여 이를 수행할 수 있습니다. 위의 예제에서는 모바일 그리고 필드를 확인하여 확장자를 확인합니다. 확장자가 포함되어 있으면 지원하지 않으며 사용자 지정 오류가 발생합니다. 그러면 이러한 스키마 오류가 피다틱 유효성 검사를 수행하는 사용자에게 표시됩니다.

스키마 정의를 볼 수 있습니다. Model.schema_json() 메서드를 사용합니다:

파이다틱 파이썬 스키마에 대한 JSON 문서 유효성 검사

이제 스키마를 정의했으니 스키마에 대해 문서의 유효성을 검사하는 방법을 살펴보겠습니다.

유효성 검사는 pydantic을 사용하여 수행할 수 있습니다. parse_obj 메서드를 추가합니다. 문서를 사전으로 지정하고 유효성 검사 예외를 확인합니다. 이 경우 Couchbase 쿼리를 사용하여 모든 문서(지정된 한도까지)를 가져와서 하나씩 테스트하고 오류를 보고합니다.

스키마는 문서에서 관찰된 몇 가지 오류를 강조 표시합니다:

ID가 있는 문서 아리아스 홈 필드에 확장자가 있고 전화 모바일 필드도 누락되었습니다.

요약

이 사용자 프로필 예시는 JSON 문서에 대한 사용자 정의 스키마를 쉽게 만드는 방법을 보여줍니다. 이 게시물은 또한 Python과 pydantic 모듈의 테스트 및 유효성 검사 기능을 사용하는 방법도 보여줍니다. 하지만 이것은 빙산의 일각에 불과하며 더 많은 것들이 있습니다. 유형 검증할 수 있습니다. 

다른 접근 방식도 가능합니다. 예를 들어, 작성 시점에 데이터의 유효성을 검사할 수 있습니다. 이는 여기에서 정의한 스키마를 애플리케이션과 통합하고 Couchbase에 삽입/삽입하기 전에 데이터를 검증하면 아주 쉽게 수행할 수 있습니다.

이 데모의 전체 코드는 다음에서 확인할 수 있습니다. Github. 데이터를 생성하고 스크립트를 실행하는 지침도 여기에서 찾을 수 있습니다.

리소스

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 니티시 라구난다난

니티쉬는 단기간에 현실의 문제를 해결하는 제품을 만드는 것을 좋아하는 엔지니어입니다. 독일과 인도의 다양한 회사에서 근무하며 업계의 다양한 분야를 경험했습니다. 업무 외에도 여행과 밋업 및 해커톤을 통해 기술 커뮤니티와 교류하고 소통하는 것을 좋아합니다. 여가 시간에는 함께 무언가를 해킹하며 새로운 것을 시도하는 것을 좋아합니다.

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.