{"componentChunkName":"component---src-templates-post-template-js","path":"/posts/about-schema","result":{"data":{"markdownRemark":{"id":"6b0dd6eb-445d-5db1-af6c-b9d554122c3c","html":"<p>최근 백엔드 작업을 하다가, “JSON 스키마”를 처음 접했다. 스키마? 데이터의 구조로 알고 있는데… 데이터베이스에서나 쓰던 개념 아니야? JSON에 무슨 스키마가 있다는 거지? 라는 질문에서 스키마에 대해서 잘 모르는 것이 많다는 생각이 들어서, 용어에 대한 정의부터 출발해 스키마가 실제로 어떻게 쓰이고 있는지에 대하여 고민해보았다.</p>\n<hr>\n<h2 id=\"이론\" style=\"position:relative;\"><a href=\"#%EC%9D%B4%EB%A1%A0\" aria-label=\"이론 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>이론</h2>\n<p>스키마의 사전적 정의는 다음과 같다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">Schema : (계획·이론의) 개요[윤곽]</code></pre></div>\n<p>흠… -_-;;\n사전적 의미가 크게 와닿지 않아서 구글에 “Schema”를 이미지로 검색해보았다.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 568px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/9fa5c0cebb155fe9380af649c0450cab/870c3/schema.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 81.16197183098592%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAAAsSAAALEgHS3X78AAADGklEQVQ4y4VTyYobSRCtX/L3+D/m3hf7NDBnQ4M9NL6YwQt4A4PdeFOvarXtlltqlWpfM6tUq0pL6zkiZMHcXBBURsb6Il8YWRTAGf+EOfwG37xGYN8gTVOs12ssl0vM53N0XSfC5z/pRuTfwBqfwvdsmIM+xr0e1P8Stm0Lx3FgWZYEse55ntwtFgs0TSM213VFN7zpCKNvZ0jiGN7wO+z+Z+SZxmq1lqRcNUkSxGTnAC4ym81EdgjYppTaJrz+8R1nva8EM8HE+onR5AKzYibJ6roWZw7WWktQlmXI81x0vufxsM42vjMG1wP0Lo/gRz7Or/r4OjiCpg43m404TacWfN8XSDuo/LdtG0EQyHl3z7rBFblKXVXIqEJAwawzlNvbW+l0J6vVaisElf8MefcgDJf/RkbtRgQrimJpWetMZsbOPHBHOvPhU3XuOKFiSZIiJH+lcyq6kcIsjMrgOeU5Dbko0LRzrNlIBv4WlJRtO6kIxbbTNVlXJEvx23pvP2O1WmK56ES6tkTb1JjpFE1domsquV90c4q6RVFWcL0QmQrxqa+w92+Lw7MUOg3lvihKGC3BaqoSVZEj9i1yTqBCFzklTTwLZa7JXkjScpYgcEZw6EFOBzYOng1wfOHCdSwE7phyKBhLGmacZ3Bobi1BnhNxJ6YplGjo7NLMIpoVsMZ/hzXuPwoxubmCMz3B6HIfrtXH1XCIe49ivDmqKSHNqaTAhDqL0xgFzenk5IRe2yOCKziUsCQUnPD0KsfzDw4l+oi3vb/w9+EdfDjaw3BwjKfvPVyOChhCUno9pVJMXQ9BrGS9giiFabtImcz0+nXdEOQUWTyGJs5+Of0HTz7fxfH5PnQcIU9GBJmIvV3qlhKWuDGJCjN6DBpDRgOeTGPacSUbwzxj2hy8CvHgqY3B2UeElokfF4d05+Dxm2C7KezMdNAqRxJpOpcyPyZ623SoyrmQmDmWaYUn7yI8fElonIg2yMPYdLH/IsbB60TyGEppImm03VnaYS5QlKXwcvdtfvNS+JpFKLJQtqkkv4Jill2B9aIScv8CUSCqo4zaRFwAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          srcset=\"/static/9fa5c0cebb155fe9380af649c0450cab/8ac56/schema.webp 240w,\n/static/9fa5c0cebb155fe9380af649c0450cab/d3be9/schema.webp 480w,\n/static/9fa5c0cebb155fe9380af649c0450cab/bebff/schema.webp 568w\"\n          sizes=\"(max-width: 568px) 100vw, 568px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/9fa5c0cebb155fe9380af649c0450cab/e4891/schema.png 240w,\n/static/9fa5c0cebb155fe9380af649c0450cab/0ce91/schema.png 480w,\n/static/9fa5c0cebb155fe9380af649c0450cab/870c3/schema.png 568w\"\n          sizes=\"(max-width: 568px) 100vw, 568px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image\"\n          src=\"/static/9fa5c0cebb155fe9380af649c0450cab/870c3/schema.png\"\n          alt=\"schema\"\n          title=\"schema\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span></p>\n<p>이미지를 보니, 복잡하고 큰 개념을 뭔가 형식으로 도식화한 느낌을 준다. 왜 이렇게 규칙을 만들어 도식화하는가? 규칙을 정해 데이터를 다룸으로써 우리가 복잡하고 큰 데이터를 컨트롤할 수 있겠다는 생각이 들었고, 형식과 규칙을 스키마의 핵심이라고 나름대로 생각을 정리했다. </p>\n<hr>\n<h2 id=\"실전에서-사용하는-스키마들\" style=\"position:relative;\"><a href=\"#%EC%8B%A4%EC%A0%84%EC%97%90%EC%84%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EC%8A%A4%ED%82%A4%EB%A7%88%EB%93%A4\" aria-label=\"실전에서 사용하는 스키마들 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>실전에서 사용하는 스키마들</h2>\n<p>이번에는 실전에서 사용하는 스키마의 용례들을 살펴보자. 사례를 찾아보니 데이터를 다루는 곳에서 스키마가 많이 사용되고 있었다. 데이터를 효율적으로 다루기 위해서는 규칙과 형식, 즉 스키마가 필요한 것이다. 찾아본 바로는 크게 database(RDBMS, noSQL), XML(XSD), JSON Schema 에서 스키마를 언급하여 소개해둔다. </p>\n<h3 id=\"1-데이터베이스에서의-기본-개념-기본-구조로써-언급되는-스키마\" style=\"position:relative;\"><a href=\"#1-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EC%97%90%EC%84%9C%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-%EA%B8%B0%EB%B3%B8-%EA%B5%AC%EC%A1%B0%EB%A1%9C%EC%8D%A8-%EC%96%B8%EA%B8%89%EB%90%98%EB%8A%94-%EC%8A%A4%ED%82%A4%EB%A7%88\" aria-label=\"1 데이터베이스에서의 기본 개념 기본 구조로써 언급되는 스키마 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. 데이터베이스에서의 기본 개념, 기본 구조로써 언급되는 스키마</h3>\n<ul>\n<li>외부 스키마, 개념 스키마, 내부 스키마 등 (아래 자료 참고)</li>\n<li><a href=\"https://ykcb.tistory.com/entry/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%8A%A4%ED%82%A4%EB%A7%88%EC%9D%98-%EA%B0%9C%EB%85%90-%ED%8A%B9%EC%A7%95\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https://ykcb.tistory.com/entry/데이터베이스-스키마의-개념-특징</a></li>\n<li><a href=\"https://www.guru99.com/dbms-schemas.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https://www.guru99.com/dbms-schemas.html</a></li>\n</ul>\n<h3 id=\"2-rdbms의-정해진-구조로써-언급되는-스키마\" style=\"position:relative;\"><a href=\"#2-rdbms%EC%9D%98-%EC%A0%95%ED%95%B4%EC%A7%84-%EA%B5%AC%EC%A1%B0%EB%A1%9C%EC%8D%A8-%EC%96%B8%EA%B8%89%EB%90%98%EB%8A%94-%EC%8A%A4%ED%82%A4%EB%A7%88\" aria-label=\"2 rdbms의 정해진 구조로써 언급되는 스키마 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. RDBMS의 정해진 구조로써 언급되는 스키마</h3>\n<ul>\n<li>\n<p>noSQL이 스키마가 없어 데이터 구조가 유연하다는 말은, 다음 두 가지 의미를 내포한다.</p>\n<ul>\n<li>\n<p>RDBMS처럼 정해진 테이블 구조를 갖지 않는다.</p>\n<ul>\n<li>RDBMS에서 property 하나를 추가하려면 Alter table 해서 모든 레코드에 컬럼을 추가해야 하지만, noSQL에서는 그럴 필요가 없다.</li>\n</ul>\n</li>\n<li>각 레코드의 property가 고정돼있지 않다(예를 들면, int 컬럼을 가진 레코드인데 string을 넣으면 테이블에선 대응이 안되지만 noSQL에서는 된다는 것)</li>\n<li>참고 자료 : <a href=\"https://www.mongodb.com/blog/post/why-schemaless\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https://www.mongodb.com/blog/post/why-schemaless</a></li>\n</ul>\n</li>\n</ul>\n<h3 id=\"3-mysql에서-db-자체로써-언급되는-스키마\" style=\"position:relative;\"><a href=\"#3-mysql%EC%97%90%EC%84%9C-db-%EC%9E%90%EC%B2%B4%EB%A1%9C%EC%8D%A8-%EC%96%B8%EA%B8%89%EB%90%98%EB%8A%94-%EC%8A%A4%ED%82%A4%EB%A7%88\" aria-label=\"3 mysql에서 db 자체로써 언급되는 스키마 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. mySQL에서 DB 자체로써 언급되는 스키마</h3>\n<ul>\n<li>\n<p>mySQL에서는 테이블의 집합체로써의 데이터베이스를 스키마라고 얘기한다. 그래서 데이터베이스 만드는 코드랑 스키마 만드는 코드가 같다.</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\">mysql <span class=\"token operator\">></span> <span class=\"token keyword\">CREATE</span> <span class=\"token keyword\">DATABASE</span> <span class=\"token punctuation\">`</span>Sparta<span class=\"token punctuation\">`</span><span class=\"token punctuation\">;</span>\n\nmysql <span class=\"token operator\">></span> <span class=\"token keyword\">CREATE</span> <span class=\"token keyword\">SCHEMA</span> <span class=\"token punctuation\">`</span>Greek<span class=\"token punctuation\">`</span><span class=\"token punctuation\">;</span></code></pre></div>\n</li>\n</ul>\n<h3 id=\"4-json-xml-에서-언급되는-스키마\" style=\"position:relative;\"><a href=\"#4-json-xml-%EC%97%90%EC%84%9C-%EC%96%B8%EA%B8%89%EB%90%98%EB%8A%94-%EC%8A%A4%ED%82%A4%EB%A7%88\" aria-label=\"4 json xml 에서 언급되는 스키마 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. JSON, XML 에서 언급되는 스키마</h3>\n<ul>\n<li>JSON과 XML은 데이터를 형식화하는 방법이다. 이들과 함께 사용되는 스키마는 데이터의 구조를 알 수 있게 해주고, validation시 활용한다. (스키마에 맞지 않는 데이터를 보냈다면 오류를 발생시킨다던지)</li>\n<li>\n<p>참고 자료</p>\n<ul>\n<li><a href=\"http://tcpschool.com/json/json_schema_schema\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">http://tcpschool.com/json/json<em>schema</em>schema</a></li>\n<li><a href=\"http://tcpschool.com/xml/xml_xsd_intro\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">http://tcpschool.com/xml/xml<em>xsd</em>intro</a></li>\n<li><a href=\"https://ko.wikipedia.org/wiki/XML_%EC%8A%A4%ED%82%A4%EB%A7%88_(W3C)\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https://ko.wikipedia.org/wiki/XML<em>스키마</em>(W3C)</a></li>\n</ul>\n</li>\n</ul>\n<p>아래 예시는 각각 JSON, XML 스키<strong>****</strong>마를 나타낸다.</p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\">    <span class=\"token punctuation\">{</span>\n        <span class=\"token property\">\"title\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"강아지 스키마\"</span><span class=\"token punctuation\">,</span>\n        <span class=\"token property\">\"description\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"이 스키마는 강아지에 관한 데이터를 검증하기 위해 작성된 스키마임.\"</span><span class=\"token punctuation\">,</span>\n        <span class=\"token property\">\"type\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"object\"</span><span class=\"token punctuation\">,</span>\n        <span class=\"token property\">\"properties\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token property\">\"name\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span><span class=\"token property\">\"type\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"string\"</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n            <span class=\"token property\">\"category\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span><span class=\"token property\">\"type\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"string\"</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n            <span class=\"token property\">\"age\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span><span class=\"token property\">\"type\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"integer\"</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n            <span class=\"token property\">\"weight\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span><span class=\"token property\">\"type\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"number\"</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span></code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"xml\"><pre class=\"language-xml\"><code class=\"language-xml\">    <span class=\"token prolog\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token namespace\">xs:</span>schema</span> <span class=\"token attr-name\">elementFormDefault</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>qualified<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\"><span class=\"token namespace\">xmlns:</span>xs</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>http://www.w3.org/2001/XMLSchema<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    \t...\n          <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token namespace\">xs:</span>sequence</span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token namespace\">xs:</span>element</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>Recipient<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>xs:string<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token namespace\">xs:</span>element</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>House<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>xs:string<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token namespace\">xs:</span>element</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>Street<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>xs:string<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token namespace\">xs:</span>element</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>Town<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>xs:string<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token namespace\">xs:</span>element</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>County<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>xs:string<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">minOccurs</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>0<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token namespace\">xs:</span>element</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>PostCode<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>xs:string<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token namespace\">xs:</span>element</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>Country<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">minOccurs</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>0<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    \n        ...\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token namespace\">xs:</span>schema</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<hr>\n<h3 id=\"정리하면\" style=\"position:relative;\"><a href=\"#%EC%A0%95%EB%A6%AC%ED%95%98%EB%A9%B4\" aria-label=\"정리하면 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>정리하면…</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 324px;\"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/fe1f486cda196bf6cbbb07c6b2bb0ac1/b20dd/theory_practice.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 107.09876543209877%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAIAAADJt1n/AAAACXBIWXMAAAsSAAALEgHS3X78AAACiklEQVQ4y22TeUtqURTF/ex+AhGMMBI0RJFyjBxwwKlySOv5nkM5oCVqlrOmptbPex5a6v7jcu/lrL3WXnsd2ZdUq9WKZ7fbfX19rdfrj4+P+Xy+Vqs1m83xeLxcLr8OlWzzNplMCoVCuVy+vb19f3/v9XqpVIo/Dw8Pb29vG4JdMI1h+yMVzBzlORqNBoMBWlqtVjwen06n+/g1uFQqXV1d8eTozc1NOp3OZrN/papWq7SoVCqRSETgf4E/Pz85LSa8u7vjHEMOh0M+mTyZTH58fNAC8lwuN5/Pf4Hpd39/z3jg6QIecpiBoWXjGVNwABW7spF3fn5eLBZtNpvD4dDr9RcXFxaLRaVSXV5eYiEEwpTFYvELzHcmk7FarQhzuVwwBwKBs7MzXDAajTRCV7vdns1mcOzOjNXoSSQSqLXb7c/Pz3waDAbAZrPZ7/ejCHI2x8sBt/n1TypkA/P5fAhxOp1YAPjp6Skv1Y5ba7BohjCygW0I8Xq9CoXi5eWl3++Dpym27SO3CaMFeLTxjv6TkxOPx8M7OyMwAnk4YZsSGcY/9At79gGHmUGKTYA8Ojoi1XzCOZWKqOzsaWuYYBBPEqLT6dxuN5FkfrwIh8PRaLTT6exo+c9MSCFpNBqEgWt0fHzMtrEKC0klgxA4kr8ZbQtmt5gECaliN7FY7PT0lD3/5KE1zETl5881GMK0VLgNEp/JFsz0Ev5TXEzk0JF4L6Vag3GCSHKBUMWVur6+Jpsmk4lzBFvM3JKKXmq1mr7MQs5RIaMTuSNVmIxPGo2GVGIPOecQgSNtyGFzHFAqlXK5XKvVcsnWYNjZAfK4tMFgMBQKccPQjAs04oXunEMaKrgk/McjMfk30kZYuZkLJiIAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n        <source\n          srcset=\"/static/fe1f486cda196bf6cbbb07c6b2bb0ac1/8ac56/theory_practice.webp 240w,\n/static/fe1f486cda196bf6cbbb07c6b2bb0ac1/4e123/theory_practice.webp 324w\"\n          sizes=\"(max-width: 324px) 100vw, 324px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/fe1f486cda196bf6cbbb07c6b2bb0ac1/e4891/theory_practice.png 240w,\n/static/fe1f486cda196bf6cbbb07c6b2bb0ac1/b20dd/theory_practice.png 324w\"\n          sizes=\"(max-width: 324px) 100vw, 324px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image\"\n          src=\"/static/fe1f486cda196bf6cbbb07c6b2bb0ac1/b20dd/theory_practice.png\"\n          alt=\"theory_practice\"\n          title=\"theory_practice\"\n          loading=\"lazy\"\n          style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        />\n      </picture>\n  </a>\n    </span></p>\n<p>스키마 자체는 개요, 구조, 형식이라는 뜻을 가지고 있다. 데이터베이스에서 사용하는 스키마에 대해서만(그것도 겉할기로) 스키마를 알고 있다보니, 여러 문맥에서 사용되는 스키마를 봤을 때 헷깔렸던 것 같다. 스키마는 문맥에 따라 다른 모습으로 머릿속에 그려져야 한다. 이론과 실제가 머리에 들어오게 되어, 이제는 스키마가 뭔지 확실히 얘기할 수 있다는 확신이 생겼다.</p>","fields":{"slug":"/posts/about-schema","tagSlugs":["/tag/backend/"]},"frontmatter":{"date":"2020-03-08T10:00:00.169Z","description":null,"tags":["backend"],"title":"스키마란 무엇인가","socialImage":"/media/42-line-bible.jpg"}}},"pageContext":{"slug":"/posts/about-schema"}}}