Dev JSON 3 | Schema

공부의 기록·2021년 12월 9일
0

Dev JSON

목록 보기
3/4
post-thumbnail

Schema

JSON Schema 에 대해서 논하기 전에
우리가 가장 쉽게 접할 수 있는 Schema 는 DBMS 와 관련된 스키마 위키백과 가 있다.

Schema 란 데이터베이스에서 자료의 구조, 자료의 표현 방법, 자료 간의 관계를 형식 언어로 정의한 구조이다. 라고 나와있다.

조금 더 친밀하면서 비슷한 특징을 가지는 것은 클래스 라고 생각한다. 나는 이 둘이 실체는 없고 추상화 개념에서 설계도로써의 역할을 한다는 점에서 비슷하다고 느끼고 있다.

왜 Schema 를 사용하는가?

이러한 Schema의 사용 이유는 데이터 값에 안정성이 필요하기 때문이다.
만약 숫자로 이루어진 시리얼 넘버에 문자를 넣으려고 할 때, Schema 나 클래스라는 개념이 없었다면 무차별적으로 값을 넘겨받았을 것이다. 이에 따라 우리는 예상하지 못한 상황에 마주할 것이 분명하다. 따라서 우리는 사전에 약속한 데이터 타입을 받기를 원하고 이것이 Schema 의 형태라고 생각한다.

왜 JSON Schema 를 사용하는가?

JSON 은 웹에서 데이터를 주고 받을 때, 표준이 되는 것이다.
데이터를 보낼때 우리는 직렬화를 통해 JSON 로 포장하고 비직렬화를 통해 JSON 의 포장지를 뜯는다. 그리고 그 뜯은 상태에서 각 값을 변수로써 사용을 한다. 따라서 JSON 또한 데이터 타입의 안정성이 필요한 것이다.

이제 여기서는 더 깊이 들어가지 않기로 결정을 했다.
그 이유는 역시나 이 JSON Schema 를 적용한 실제 기술을 사용해봤기 떄문이다.

JSON Schema 의 여러 Validations

역시나 현행에서 사용하고 있는 기술에 대한 설명이나 실제적으로 사용할 수 있는 기술이라기 보다는 개념적인 설명에 가까우므로, JSON Schema 의 예시를 나열한다는 느낌으로 적고 넘어가겠다.

  1. 기본타입
  2. 배열
  3. 열거형
  4. 객체
  5. 패턴 프로퍼티 | 비슷한 이름을 가진 여러 필트를 패턴 프로퍼티로 한꺼번에 정의하는 것
"patternProperties":{
  "^line[1-3]$": {
    "type": "string"
  }
}
  1. 정규 표현식 | 정규표현식을 쓸 수 있는 것은 흥미로우나 실제 기술 적용은 제한되리라 생각한다. 왜냐하면 어차피 프론트 혹은 백앤드에서도 가능한 절차를 굳이 Schema 안에 넣어야 하나 싶다.
"email": {
  "type": "string",
  "pattern": "^[\\w|-|.]+@[\\w]+\\.[A-Za-z]{2,4}$"
}
  1. 의존 프로퍼티 | Reference 와 같은 개념으로 이해하면 될 것 같다.
  2. 내부참조 | 본 스키마에 포함된 유효성 검사 구문을 사용할 수 있게 해준다.
"users":{
  "email":{
    "$ref": "#/definitions/emailPattern"
  }
  "definitions":{
    "emailPattern": {
      "type": "string",
      "pattern": "^[\\w|-|.]+@[\\w]+\\.[A-Za-z]{2,4}$"
    }
  }
}
  1. 외부참조 | 외부 스키마에 포함된 유효성 검사 구문을 사용할 수 있게 해준다.
"email":{
  "$ref": "http:// .../src/something_schema.json#/definitions/emailPattern"
}

MongoDB

MongoDB 는 Documentation 기반 DBMS 이다.
여기서 Documentation 은 대표적으로 JSON 파일을 의미한다.

MongoDB 는 각 Documentation 에 대한 매우 많은 feature 들을 설정할 수 있다.
자료형의 타입, 디폴트 값의 유무, 필수값 지정, 유니크 값 지정 SQL DBMS 에 있는 그런 기능들 말이다.
이러한 기능들을 우리는 Moongoose 의 Schema 와 Model 기능을 통해 실제 백엔드 서버와 DBMS 를 연결할 수 있다.

따라서 나는 굳이 예전에 쓰던 프로그램이나 웹 사이트를 배워가면서 같은 행동을 할 필요는 없다고 판단을 했다. 이 글을 읽는 누군가가 JSON Schema 에 대한 개념을 이해하였고 이를 사용해보고 싶다면, 차라리 MongoDB 와 Mongoose 를 사용해보라고 권장하고 싶다.

다만 추가로 알아볼만한 가치가 있다고 판단되는 것은,
JSON Schema 에는 단순히 자료형 뿐만 아니라 정규식까지 쓸 수 있다고 한다.

이 부분은 최근에 정규식 문법에 대해서 공부했던 것 때문인지,
조금 더 흥미롭게 느껴지는 부분이었다.

나중에 기회가 되면 Mongoose 에 정규식 제한도 가능한지 알아봐야겠다.

profile
2022년 12월 9일 부터 노션 페이지에서 작성을 이어가고 있습니다.

0개의 댓글