μλ νμΈμ! νλ μΉ κ°λ°μμ λ°μ΄ν° κ΅νμ ν΅μ¬μΈ JSON(JavaScript Object Notation)μ λμ± κ°λ ₯νκ³ μμ μ μΌλ‘ λ§λ€μ΄μ£Όλ λꡬ, λ°λ‘ JSON Schemaμ λν΄ μ½κ³ κΉμ΄ μκ² μμλ³΄κ² μ΅λλ€.
JSON Schemaλ JSON λ°μ΄ν°μ ꡬ쑰μ μ ν¨μ±μ μ€λͺ νκ³ κ²μ¦νκΈ° μν νμ€μ λλ€. μ½κ² λ§ν΄, JSON λ°μ΄ν°κ° μ΄λ€ λͺ¨μ(λ°μ΄ν° νμ , νλ μ΄λ¦, νμ μ¬λΆ, κ°μ λ²μ λ±)μ κ°μ ΈμΌ νλμ§λ₯Ό μ μνλ μ€κ³ λλ©΄μ΄μ κ·μΉμμ λλ€.
JSON Schemaλ νΉμ ν€μλλ₯Ό μ¬μ©νμ¬ λ°μ΄ν°μ κ·μΉμ μ μν©λλ€.
| ν€μλ | μν | μμ |
| type | λ°μ΄ν°μ κΈ°λ³Έ μ ν μ μ (νμ) | "type": "string", "type": "integer", "type": "array" |
| properties | κ°μ²΄(Object) λ΄λΆμ ν¬ν¨λ μμ±(νλ) μ μ | "properties": { "name": { ... } } |
| required | λ°λμ ν¬ν¨λμ΄μΌ νλ νμ μμ± λͺ©λ‘ | "required": ["id", "name"] |
| minimum / maximum | μ«μν λ°μ΄ν°μ μ΅μ/μ΅λκ° μ ν | "minimum": 0, "maximum": 100 |
| minLength / maxLength | λ¬Έμμ΄μ μ΅μ/μ΅λ κΈΈμ΄ μ ν | "minLength": 2 |
| format | λ°μ΄ν°μ νΉμ νμ μ§μ (μ΄λ©μΌ, URL, λ μ§ λ±) | "format": "email" |
| items | λ°°μ΄(Array) μμμ νμ μ μ | "items": { "type": "string" } |
μ¬μ©μ λ±λ‘ μ μλ²λ‘ μ μ‘λλ JSON λ°μ΄ν°μ μ ν¨μ±μ κ²μ¦νλ JSON Schemaλ₯Ό λ§λ€μ΄ λ³΄κ² μ΅λλ€.
JSON
{
"id": 1004,
"username": "tester_kim",
"email": "test@example.com",
"age": 25,
"hobbies": ["reading", "coding"]
}
JSON
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "User",
"description": "A user profile in the system",
"type": "object", // μ΅μμ λ°μ΄ν°λ κ°μ²΄μ¬μΌ ν¨
"properties": {
"id": {
"description": "μ¬μ©μ κ³ μ ID",
"type": "integer",
"minimum": 1000 // IDλ 1000 μ΄μμ΄μ΄μΌ ν¨
},
"username": {
"description": "μ¬μ©μ μ΄λ¦",
"type": "string",
"minLength": 4 // μ΅μ 4κΈμ μ΄μ
},
"email": {
"description": "μ¬μ©μ μ΄λ©μΌ μ£Όμ",
"type": "string",
"format": "email" // μ΄λ©μΌ νμ μ€μ
},
"age": {
"description": "μ¬μ©μ λμ΄",
"type": "integer",
"minimum": 18, // μ΅μ 18μΈ μ΄μ
"maximum": 99
},
"hobbies": {
"description": "μ·¨λ―Έ λͺ©λ‘",
"type": "array",
"items": { // λ°°μ΄μ κ° μμλ λ¬Έμμ΄μ΄μ΄μΌ ν¨
"type": "string"
},
"maxItems": 5 // μ΅λ 5κ°μ μ·¨λ―Έλ§ νμ©
}
},
"required": ["id", "username", "email"] // μ΄ 3κ°μ§ νλλ λ°λμ ν¬ν¨λμ΄μΌ ν¨
}
μμ μ€ν€λ§λ₯Ό κΈ°μ€μΌλ‘ μλμ λ°μ΄ν°κ° λ€μ΄μμ λ κ²°κ³Όλ₯Ό μμΈ‘ν΄ λ³΄κ² μ΅λλ€.
| JSON λ°μ΄ν° | κ²μ¦ κ²°κ³Ό | μ΄μ |
{ "id": 1004, "username": "A" } | β μ€ν¨ | required νλμΈ "email"μ΄ λλ½λ¨. "username"μ minLength: 4 쑰건μ λ§μ‘±νμ§ λͺ»ν¨. |
{ "id": 999, "username": "user123", "email": "a@b.com" } | β μ€ν¨ | "id"κ° minimum: 1000 쑰건μ λ§μ‘±νμ§ λͺ»ν¨. |
{ "id": 1005, "username": "okuser", "email": "valid@email.net", "age": 16 } | β μ€ν¨ | "age"κ° minimum: 18 쑰건μ λ§μ‘±νμ§ λͺ»ν¨. |
{ "id": 1005, "username": "okuser", "email": "valid@email.net", "age": 20 } | β μ±κ³΅ | λͺ¨λ required νλκ° ν¬ν¨λμκ³ , κ° μμ±μ΄ μ μλ type λ° constraintsλ₯Ό λ§μ‘±ν¨. |
$ref\ ν€μλλ₯Ό μ¬μ©νμ¬ λ€λ₯Έ μ€ν€λ§ νμΌμ μ°Έμ‘°νκ±°λ μ€ν€λ§ λ΄μ μΌλΆλΆμ μ¬μ¬μ©ν μ μμ΅λλ€. μ΄λ μ½λμ μ¬μ¬μ©μ±μ λμ΄κ³ μ€λ³΅μ μ€μ¬μ€λλ€.JSON Schemaλ λ¨μν μλ¬λ₯Ό μ‘λ λꡬλ₯Ό λμ΄, λκ·λͺ¨ μμ€ν μμ λ°μ΄ν°μ μ λ’°μ±κ³Ό κ°λ°μ μμ°μ±μ λμ΄λ ν΅μ¬μ μΈ μ€κ³ λꡬμ λλ€. λ°μ΄ν° μ€μ¬μ κ°λ°μ νμ λ€λ©΄ λ°λμ μμ§ν΄μΌ ν νμ€μ λλ€!
λ‘컬 λ€νΈμν¬ νκ²½μ μ‘°κΈμ΄λΌλ λ€λ€λ³Έ μ¬λμ΄λΌλ©΄ ν λ²μ―€μ λ§μ£ΌμΉλ μ΅μν λ¨μ΄κ° μμ΅λλ€. λ°λ‘ NetBIOSμ NBTμ λλ€.…
β ECMAScript 3(E3)λ 무μμΌκΉ ECMAScript 3λ 1999λ μ 곡μνλ μλ°μ€ν¬λ¦½νΈ νμ€μ΄λ€. μ§κΈ 보면 μ€λλ κΈ°μ κ°μ§λ§,…
CoffeeScriptλ νλ νλ‘ νΈμλ κ°λ° μνκ³μμ λ§€μ° μΈκΈ° μμλ μΈμ΄μκ³ , μ§κΈλ νΉμ νλ‘μ νΈλ λ κ±°μ μμ€ν , κ°κ²°ν…
νλμ μΈ νλ‘κ·Έλλ° νκ²½μμ λ©λͺ¨λ¦¬ λμ(Memory Leak)λ μ¬μ ν μ ν리μΌμ΄μ μ μ±λ₯ μ νμ μΆ©λμ μΌμΌν€λ μ£Όμ μμΈ μ€…
(Critical Rendering Path, ν΅μ¬ λ λλ§ κ²½λ‘ μλ²½ μ΄ν΄) μΉ λΈλΌμ°μ μ μ£Όμλ₯Ό μ λ ₯νκ³ μν°λ₯Ό λλ₯΄λ μκ°,…
μΉ κ°λ°μ νλ€ λ³΄λ©΄ λꡬλ ν λ²μ―€ λΆμμ κΈμ¨μ CORS μ€λ₯(Cross-Origin Resource Sharing Error)λ₯Ό λ§λκ²…