JSON Schema 에 대해서 논하기 전에
우리가 가장 쉽게 접할 수 있는 Schema 는 DBMS 와 관련된 스키마 위키백과 가 있다.
Schema 란 데이터베이스에서 자료의 구조, 자료의 표현 방법, 자료 간의 관계를 형식 언어로 정의한 구조이다. 라고 나와있다.
조금 더 친밀하면서 비슷한 특징을 가지는 것은 클래스 라고 생각한다. 나는 이 둘이 실체는 없고 추상화 개념에서 설계도로써의 역할을 한다는 점에서 비슷하다고 느끼고 있다.
이러한 Schema의 사용 이유는 데이터 값에 안정성이 필요하기 때문이다.
만약 숫자로 이루어진 시리얼 넘버에 문자를 넣으려고 할 때, Schema 나 클래스라는 개념이 없었다면 무차별적으로 값을 넘겨받았을 것이다. 이에 따라 우리는 예상하지 못한 상황에 마주할 것이 분명하다. 따라서 우리는 사전에 약속한 데이터 타입을 받기를 원하고 이것이 Schema 의 형태라고 생각한다.
JSON 은 웹에서 데이터를 주고 받을 때, 표준이 되는 것이다.
데이터를 보낼때 우리는 직렬화를 통해 JSON 로 포장하고 비직렬화를 통해 JSON 의 포장지를 뜯는다. 그리고 그 뜯은 상태에서 각 값을 변수로써 사용을 한다. 따라서 JSON 또한 데이터 타입의 안정성이 필요한 것이다.
이제 여기서는 더 깊이 들어가지 않기로 결정을 했다.
그 이유는 역시나 이 JSON Schema 를 적용한 실제 기술을 사용해봤기 떄문이다.
역시나 현행에서 사용하고 있는 기술에 대한 설명이나 실제적으로 사용할 수 있는 기술이라기 보다는 개념적인 설명에 가까우므로, JSON Schema 의 예시를 나열한다는 느낌으로 적고 넘어가겠다.
"patternProperties":{
"^line[1-3]$": {
"type": "string"
}
}
"email": {
"type": "string",
"pattern": "^[\\w|-|.]+@[\\w]+\\.[A-Za-z]{2,4}$"
}
"users":{
"email":{
"$ref": "#/definitions/emailPattern"
}
"definitions":{
"emailPattern": {
"type": "string",
"pattern": "^[\\w|-|.]+@[\\w]+\\.[A-Za-z]{2,4}$"
}
}
}
"email":{
"$ref": "http:// .../src/something_schema.json#/definitions/emailPattern"
}
MongoDB 는 Documentation 기반 DBMS 이다.
여기서 Documentation 은 대표적으로 JSON 파일을 의미한다.
MongoDB 는 각 Documentation 에 대한 매우 많은 feature 들을 설정할 수 있다.
자료형의 타입, 디폴트 값의 유무, 필수값 지정, 유니크 값 지정 SQL DBMS 에 있는 그런 기능들 말이다.
이러한 기능들을 우리는 Moongoose 의 Schema 와 Model 기능을 통해 실제 백엔드 서버와 DBMS 를 연결할 수 있다.
따라서 나는 굳이 예전에 쓰던 프로그램이나 웹 사이트를 배워가면서 같은 행동을 할 필요는 없다고 판단을 했다. 이 글을 읽는 누군가가 JSON Schema 에 대한 개념을 이해하였고 이를 사용해보고 싶다면, 차라리 MongoDB 와 Mongoose 를 사용해보라고 권장하고 싶다.
다만 추가로 알아볼만한 가치가 있다고 판단되는 것은,
JSON Schema 에는 단순히 자료형 뿐만 아니라 정규식까지 쓸 수 있다고 한다.
이 부분은 최근에 정규식 문법에 대해서 공부했던 것 때문인지,
조금 더 흥미롭게 느껴지는 부분이었다.
나중에 기회가 되면 Mongoose 에 정규식 제한도 가능한지 알아봐야겠다.