{"id":10947,"date":"2021-03-30T09:13:45","date_gmt":"2021-03-30T16:13:45","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=10947"},"modified":"2025-06-13T23:42:25","modified_gmt":"2025-06-14T06:42:25","slug":"introduction-to-ottoman-with-couchbase","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/introduction-to-ottoman-with-couchbase\/","title":{"rendered":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uc640 \ud568\uaed8\ud558\ub294 \uc624\uc2a4\ub9cc \uc18c\uac1c"},"content":{"rendered":"<p><span style=\"font-weight: 400\">Ottoman\uc740 Couchbase\uc758 Node.js SDK\uc6a9 \uac1d\uccb4 \ub370\uc774\ud130 \ubaa8\ub378\ub7ec(ODM)\ub85c, NoSQL\uc6a9 JSON \uc2a4\ud0a4\ub9c8 \ubc0f \uc720\ud6a8\uc131 \uac80\uc0ac\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/span><\/p>\n<h2>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uc5d0 ODM\uc744 \uc0ac\uc6a9\ud558\ub294 \uc774\uc720<\/h2>\n<p><span style=\"font-weight: 400\">Ottoman\uc744 \uc0ac\uc6a9\ud558\uba74 \ucf54\ub4dc\uc5d0\uc11c \uc2a4\ud0a4\ub9c8\ub97c \uc120\uc5b8\ud569\ub2c8\ub2e4. Couchbase\uc5d0\ub294 \ubb38\uc11c\uc5d0 \ub300\ud55c \uc2a4\ud0a4\ub9c8 \uc801\uc6a9\uc774 \uc5c6\uc9c0\ub9cc, \ub300\ubd80\ubd84\uc758 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc740 NoSQL\uc5d0\uc11c\ub3c4 \uc77c\uc815 \uc218\uc900\uc758 \uc2a4\ud0a4\ub9c8\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. Ottoman\uacfc Couchbase\ub97c \uc0ac\uc6a9\ud558\uc5ec NoSQL\uc5d0\uc11c \uc2a4\ud0a4\ub9c8 \ubc0f \uc720\ud6a8\uc131 \uac80\uc0ac\ub97c \uc218\ud589\ud558\ub294 \ubc29\ubc95\uc744 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. <\/span><\/p>\n<p><span style=\"font-weight: 400\">\ubb38\uc11c\uac00 \ud2b9\uc815 \uc694\uad6c \uc0ac\ud56d\uc744 \ucda9\uc871\ud558\ub294\uc9c0 \ud655\uc778\ud55c \ud6c4 \uc9c0\uc18d\ud558\ub294 \uac83\uc774 \uc911\uc694\ud569\ub2c8\ub2e4. Ottoman\uc740 Couchbase SDK\ubcf4\ub2e4 \ucd94\uc0c1\ud654\ub418\uc5b4 \uc788\uc9c0\ub9cc \uc774\uc810\uc774 \ub2e8\uc810\ubcf4\ub2e4 \ub354 \ud07d\ub2c8\ub2e4. \uac1c\ubc1c\uc790\ub294 \ubb38\uc11c \uc791\uc131 \ubc0f \uc5c5\ub370\uc774\ud2b8, \uc0ac\uc804\/\uc0ac\ud6c4 \uc218\uba85 \uc8fc\uae30 \uc791\uc131, \ub370\uc774\ud130 \uad6c\uc870 \uc791\uc5c5 \ubc0f \uc720\ud6a8\uc131 \uac80\uc0ac\uc640 \uad00\ub828\ud558\uc5ec \ub9ce\uc740 \ub85c\uc9c1\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4.<\/span><\/p>\n<h3>NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ubc0f \uc2a4\ud0a4\ub9c8 \uc124\uacc4<\/h3>\n<p class=\"q-text qu-display--block\">ODM\uc740 \uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c\uc640 \ub9c8\ucc2c\uac00\uc9c0\ub85c NoSQL\uc5d0\uc11c\ub3c4 \ube44\uc2b7\ud55c \uc5ed\ud560\uc744 \uc218\ud589\ud558\uc9c0\ub9cc \ucd94\uac00\uc801\uc778 \uc774\uc810\uc774 \uc788\uc2b5\ub2c8\ub2e4. Couchbase\ub294 \uc2a4\ud0a4\ub9c8\uac00 \uc720\uc5f0\ud558\uae30 \ub54c\ubb38\uc5d0 \uc720\ud6a8\uc131 \uac80\uc0ac\ub97c \uac15\uc81c\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \ub370\uc774\ud130\ub97c \uc9c0\uc18d\ud560 \ub54c \ud2b9\uc815 \uac80\uc0ac\ub97c \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\uc591\ud55c \ubb38\uc11c \uc720\ud615\uc5d0 \ub300\ud55c \uc2a4\ud0a4\ub9c8\uc640 \ubaa8\ub378\uc744 \uc815\uc758\ud558\uc5ec \uac1c\ubcc4 \ud544\ub4dc\uc5d0 \ub300\ud574 \uc6d0\uce58 \uc54a\ub294 \ub370\uc774\ud130 \uc720\ud615 \ubc0f \ud615\uc2dd\uc5d0 \ub300\ud574 \uacbd\uace0 \ubc0f \uc624\ub958\ub97c \ubc1c\uc0dd\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p class=\"q-text qu-display--block\">\uc11c\ubc84 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ucf54\ub4dc\ub294 \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\uacfc \uc720\ud6a8\uc131 \uac80\uc0ac\ub97c \uc801\uc6a9\ud558\uae30 \uc88b\uc740 \uacf3\uc785\ub2c8\ub2e4. <span style=\"font-weight: 400\">Ottoman\uc758 \ubaa9\ud45c\ub294 \ub354 \ub098\uc740 \uac1c\ubc1c \ud658\uacbd\uc744 \uc81c\uacf5\ud558\ub294 \ub3d9\uc2dc\uc5d0 \uc2a4\ud0a4\ub9c8 \ubc0f \uc720\ud6a8\uc131 \uac80\uc0ac\ub97c \uc81c\uc5b4\ud560 \uc218 \uc788\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \uac1c\ubc1c\uc790\uc5d0\uac8c \uc124\uacc4, \uc720\uc9c0 \uad00\ub9ac \ubc0f \ud655\uc7a5\uc774 \uc6a9\uc774\ud55c \uc2dc\uc2a4\ud15c\uc744 \uad6c\ucd95\ud560 \uc218 \uc788\ub294 \uc2e0\ub8b0\ud560 \uc218 \uc788\ub294 \ub3c4\uad6c\ub97c \uc81c\uacf5\ud558\uace0\uc790 \ud569\ub2c8\ub2e4.<\/span><\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/03\/Intro-Ottoman-One.gif\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-10948\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/03\/Intro-Ottoman-One.gif\" alt=\"Object Data Mapping in Node.js with Ottoman for Couchbase\" width=\"1371\" height=\"703\" \/><\/a><\/p>\n<h2><span style=\"font-weight: 400\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\ub294 NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc785\ub2c8\ub2e4.<\/span><\/h2>\n<p><span style=\"font-weight: 400\">CouchBase Server\ub294 \uc2a4\ud0a4\ub9c8\uac00 \uc5c6\ub294 \ubb38\uc11c \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub85c, NoSQL \ub370\uc774\ud130\uc2a4\ud1a0\uc5b4\ub85c \ubd84\ub958\ub418\uba70, CouchBase\ub294 \ucffc\ub9ac\ub97c \uc704\ud574 SQL\uc758 \ubcc0\ud615\uc744 \uc0ac\uc6a9\ud558\ubbc0\ub85c \ub2e4\uc74c\uacfc \uac19\uc740 \uc124\uba85\uc774 \uac00\uc7a5 \uc801\ud569\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/docs.couchbase.com\/server\/current\/getting-started\/try-a-query.html\">N1QL<\/a>. Couchbase\uc640 \uac19\uc740 NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \uc2a4\ud0a4\ub9c8\uac00 \uc5c4\uaca9\ud558\uac8c \uc801\uc6a9\ub418\uc9c0 \uc54a\ub294\ub2e4\uace0 \ud574\uc11c \uc2a4\ud0a4\ub9c8\ub97c \uc801\uc6a9\ud558\uc9c0 \ub9d0\uc544\uc57c \ud55c\ub2e4\ub294 \uc758\ubbf8\ub294 \uc544\ub2d9\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Couchbase\ub97c \uc0ac\uc6a9\ud558\uba74 \uc5d4\ud130\ud504\ub77c\uc774\uc988\uae09 \ud655\uc7a5, \ud074\ub7ec\uc2a4\ud130\ub41c \ub178\ub4dc, JSON \ud615\uc2dd\uc73c\ub85c \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud558\uace0 \uac80\uc0c9\ud560 \uc218 \uc788\ub294 \uae30\ub2a5\uc758 \uc774\uc810\uc744 \ub204\ub9b4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400\">\ubabd\uace0DB\uc758 ODM\uc778 \ubabd\uad6c\uc2a4\uc5d0 \uc775\uc219\ud558\ub2e4\uba74, \ub458 \ub2e4 NodeJS\uc6a9\uc73c\ub85c \ub9cc\ub4e4\uc5b4\uc84c\uace0 JSON \ubb38\uc11c \uc9c0\ud5a5 \ud0a4-\uac12 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub85c \ub370\uc774\ud130\ub97c \ubaa8\ub378\ub9c1\ud558\uace0 \uc9c0\uc18d\ud558\ub294 \ub370 \uc0ac\uc6a9\ub418\uae30 \ub54c\ubb38\uc5d0 \uc911\ubcf5\ub418\ub294 \uae30\ub2a5\uc774 \ub9ce\uae30 \ub54c\ubb38\uc5d0 Ottoman\uc774 \uaf64 \uc775\uc219\ud558\uac8c \ub290\uaef4\uc9c8 \uac83\uc785\ub2c8\ub2e4.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">\ubb38\uc11c \ub300 \uad00\uacc4\ud615 <\/span><span style=\"font-weight: 400\">\ub370\uc774\ud130\ubca0\uc774\uc2a4<\/span><\/h2>\n<p><span style=\"font-weight: 400\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uc640 NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ubc0f \uc2a4\ud0a4\ub9c8 \uc124\uacc4\ub97c \uc0b4\ud3b4\ubcf4\uba74\uc11c \uba3c\uc800 \ubb38\uc11c \ub370\uc774\ud130 \uad6c\uc870\uac00 \uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc124\uacc4\uc640 \uc5b4\ub5bb\uac8c \ub2e4\ub978\uc9c0 \uc0b4\ud3b4\ubcf4\uace0, \uc544\ub798 \uc608\uc81c\uc5d0\uc11c\ub294 \ud638\ud154\uc744 \ub098\ud0c0\ub0b4\ub294 \ub370\uc774\ud130\ub97c \ub098\ub780\ud788 \ube44\uad50\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. <\/span><\/p>\n<p><span style=\"font-weight: 400\">\uc67c\ucabd\uc5d0\ub294 \uc804\ud654\ubc88\ud638\ub97c \ubc30\uc5f4\uc5d0 \uc800\uc7a5\ud558\uc5ec \ud558\ub098\uc758 \ud638\ud154\uc5d0 \ub300\ud574 \uc5ec\ub7ec \uc804\ud654\ubc88\ud638\ub97c \uc800\uc7a5\ud560 \uc218 \uc788\ub294 \ubb38\uc11c\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \uc774 \uc791\uc5c5\uc744 \uc218\ud589\ud558\ub824\uba74 \uc0c8 \ud14c\uc774\ube14\uc774 \ud544\uc694\ud558\uace0 \uae30\ubcf8 \ud0a4\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub458 \uc0ac\uc774\uc758 \uad00\uacc4\ub97c \uc720\uc9c0\ud574\uc57c \ud569\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400;font-size: 12px\"><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/03\/Hotel_PhoneNumbers.gif\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-10952\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/03\/Hotel_PhoneNumbers.gif\" alt=\"NoSQL Documents vs. Relational Tables in SQL\" width=\"1371\" height=\"573\" \/><\/a><\/span><\/p>\n<p style=\"text-align: center\"><span style=\"font-size: 14px;font-weight: 400\">\ubb38\uc11c \ubaa8\ub378\ub9c1\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uc81c\uac00 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc5d0 \uc815\ub9ac\ud55c \ub9ac\uc18c\uc2a4\ub97c \ucc38\uc870\ud558\uc138\uc694: <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/a-json-data-modeling-guide\/\">JSON \ub370\uc774\ud130 \ubaa8\ub378\ub9c1 \uac00\uc774\ub4dc<\/a><\/span><\/p>\n<p><span style=\"font-weight: 400\">Ottoman\uc5d0\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc218\uc900\uc5d0\uc11c \uc2a4\ud0a4\ub9c8\uc640 \ubaa8\ub378\uc744 \uc815\uc758\ud558\ub294 \ub370 \ub3c4\uc6c0\uc774 \ub418\ub294 \ub9ce\uc740 \uad6c\uc870\uac00 \uc788\uc2b5\ub2c8\ub2e4. Ottoman\uc5d0\uc11c \uc54c\uc544\uc57c \ud560 \uac00\uc7a5 \uc911\uc694\ud55c \uc6a9\uc5b4 \uba87 \uac00\uc9c0\ub97c \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">\uc720\ud615<\/span><\/h3>\n<p><span style=\"font-weight: 400\">\uc704 \uc774\ubbf8\uc9c0\uc5d0\uc11c \ubd84\ud64d\uc0c9\uc73c\ub85c \ud45c\uc2dc\ub41c \uac83\ucc98\ub7fc Couchbase\uc5d0\uc11c \uc774\ub984 \uc720\ud615\uc758 \ubb38\uc11c \uc18d\uc131\uc740 \uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \ud14c\uc774\ube14\uacfc \uac70\uc758 \ub3d9\uc77c\ud569\ub2c8\ub2e4. \uc0c9\uc778 \ubaa9\uc801\uc73c\ub85c \uc11c\ub85c \ub2e4\ub978 \uc720\ud615\uc758 JSON \ubb38\uc11c\ub97c \ud568\uaed8 \uadf8\ub8f9\ud654\ud558\ub294 \ub370 \ub3c4\uc6c0\uc774 \ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Couchbase\uc5d0\uc11c \ubcf4\uc870 \uc778\ub371\uc2a4\ub97c \uc0ac\uc6a9\ud558\uba74 \ubb38\uc11c\uc758 \ubaa8\ub4e0 \ud0a4\uc5d0 \ub300\ud574 \uc778\ub371\uc2f1\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 10,000\uac1c \ubb38\uc11c \uc911 100\uac1c\ub9cc '\ud638\ud154' \uc720\ud615\uc744 \uc0ac\uc6a9\ud558\uace0 \uc77c\ubc18\uc801\uc73c\ub85c \ub3c4\uc2dc \ub610\ub294 \uc8fc\ub97c \uae30\uc900\uc73c\ub85c \ud638\ud154\uc744 \uac80\uc0c9\ud558\ub824\ub294 \uacbd\uc6b0, \ub3c4\uc2dc \ub610\ub294 \uc8fc\uac00 \ud2b9\uc815 \uac12\uacfc \uac19\uc740 100\uac1c \ubb38\uc11c\ub9cc \uac80\uc0c9\ud558\uba74 \ub418\ub294 \ubcf5\ud569 \ubcf4\uc870 \uc778\ub371\uc2a4\ub97c \uad6c\ucd95\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub294 \uc608\ub97c \ub4e4\uc5b4 \uae30\ubcf8 \uc0c9\uc778\uc744 \uc0ac\uc6a9\ud558\ub294 \uac83\ubcf4\ub2e4 \ud6e8\uc52c \ud6a8\uc728\uc801\uc785\ub2c8\ub2e4. <\/span><\/p>\n<p><span style=\"font-weight: 400\"><a href=\"https:\/\/docs.couchbase.com\/server\/current\/learn\/services-and-indexes\/indexes\/indexing-and-query-perf.html\">Couchbase\uc758 \uc778\ub371\uc2f1\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uae30<\/a>!<\/span><\/p>\n<h3><span style=\"font-weight: 400\">\uceec\ub809\uc158<\/span><\/h3>\n<p><span style=\"font-weight: 400\">\uc704 \uadf8\ub9bc\uc5d0\ub294 \ud45c\uc2dc\ub418\uc9c0 \uc54a\uc558\uc9c0\ub9cc CouchBase 6.x(\uc791\uc131 \uc2dc\uc810\uc758 \ucd5c\uc2e0 CouchBase \uba54\uc774\uc800 \ubc84\uc804)\uc758 \uc720\ud615\uacfc \uc720\uc0ac\ud558\uac8c CouchBase 7\uc5d0\uc11c\ub294 \uceec\ub809\uc158\uc774 \uc120\ud638\ub429\ub2c8\ub2e4(<\/span><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/downloads\/\"><span style=\"font-weight: 400\">\uc774\ubbf8 \ubca0\ud0c0 \ubc84\uc804<\/span><\/a><span style=\"font-weight: 400\">). \uceec\ub809\uc158\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 \ub2e8\uc21c\ud788 <strong>'type'<\/strong> \uc18d\uc131 \ub300\uc2e0 \ubb38\uc11c\uac00 \uac01 \ubb38\uc11c\uc5d0 \ud560\ub2f9\ub41c <strong>'hotel'<\/strong> \uceec\ub809\uc158.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">\ubb38\uc11c<\/span><\/h3>\n<p><span style=\"font-weight: 400\">\uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \ub370\uc774\ud130 \ud589\uc5d0 \ube44\uc720\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uae30\uc874 RDBMS \uc2dc\uc2a4\ud15c\uc740 \uc704 \uadf8\ub9bc\uc5d0\uc11c \ubcfc \uc218 \uc788\ub4ef\uc774 \ub2e4\ub978 \ud14c\uc774\ube14\uc5d0\uc11c \uad00\ub828 \ubb38\uc11c\ub97c \ucc38\uc870\ud569\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \ud638\ud154 \ubb38\uc11c\uc758 \uc804\ud654\ubc88\ud638 \ubc30\uc5f4\uc778 \uc804\ud654\ubc88\ud638 \uc18d\uc131\uc5d0\uc11c \ubcfc \uc218 \uc788\ub4ef\uc774 \uac00\ub2a5\ud558\uba74 \ud574\ub2f9 \uc815\ubcf4\ub97c \uc784\ubca0\ub514\ub4dc \ubb38\uc11c\ub85c \ud3ec\ud568\uc2dc\ud0a4\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4. \uc544\uc8fc \uac04\ub2e8\ud55c \uc608\uc774\uae34 \ud558\uc9c0\ub9cc, \uc8fc\uc18c \uc18d\uc131 \uc790\uccb4\uac00 \ub9ce\uc740 \uc18d\uc131\uc744 \uac00\uc9c4 \ub610 \ub2e4\ub978 JSON \uac1d\uccb4\ub77c\uace0 \uc0dd\uac01\ud558\uba74 \uc774 \uc18d\uc131\uc744 \uc790\uccb4 \ubb38\uc11c\uc5d0 \ub123\uc5b4\uc57c \ud55c\ub2e4\uace0 \uc0dd\uac01\ud560 \uc218\ub3c4 \uc788\uc9c0\ub9cc \ub300\ubd80\ubd84\uc758 \uacbd\uc6b0 \uc0c1\uc704 \ubb38\uc11c\uc5d0 \ud574\ub2f9 \uc815\ubcf4\ub97c \uc911\ucca9\ud574\ub3c4 \uad1c\ucc2e\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">\ud544\ub4dc<\/span><\/h3>\n<p><span style=\"font-weight: 400\">\uc18d\uc131\uc774\ub77c\uace0\ub3c4 \ud558\ub294 \uc18d\uc131\uc740 \uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \uc5f4\uacfc \uc720\uc0ac\ud558\uba70, Ottoman\uc744 \uc0ac\uc6a9\ud558\uba74 \uc2a4\ud0a4\ub9c8\uc758 \uc77c\ubd80\ub85c \ud544\ub4dc \uc218\uc900 \uc694\uad6c \uc0ac\ud56d\uc744 \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">\uc2a4\ud0a4\ub9c8<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Couchbase\ub294 \uc2a4\ud0a4\ub9c8\uac00 \uc5c6\uac70\ub098 \uc2a4\ud0a4\ub9c8\uac00 \uc720\uc5f0\ud558\uc9c0\ub9cc, \ubb38\uc11c\uc5d0 \ub300\ud55c \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc218\uc900\uc5d0\uc11c \uad6c\uc870\ub97c \uc801\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">\ubaa8\ub378<\/span><\/h3>\n<p><span style=\"font-weight: 400\">\uc2a4\ud0a4\ub9c8\ub97c \uac00\uc838\uc640 \uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \ub2e8\uc77c \ub808\ucf54\ub4dc\uc5d0 \ud574\ub2f9\ud558\ub294 \ubb38\uc11c \uc778\uc2a4\ud134\uc2a4\ub97c \uc0dd\uc131\ud558\ub294 \uc0dd\uc131\uc790 \uba54\uc11c\ub4dc\uc785\ub2c8\ub2e4. \uc774 \ubb38\uc11c \uc778\uc2a4\ud134\uc2a4\ub294 \uc0dd\uc131\ub41c \ub2e4\uc74c Ottoman\uc5d0 \uc758\ud574 Couchbase\uc5d0 \uc720\uc9c0\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/v2.ottomanjs.com\/guides\/model.html#constructing-documents\">\ub97c \uc0ac\uc6a9\ud558\uc5ec <code>\uc800\uc7a5()<\/code> \uba54\uc11c\ub4dc<\/a>.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">\uc2dc\uc791\ud558\uae30<\/span><\/h2>\n<p>\uac1d\uccb4 \ubb38\uc11c \ub9e4\ud37c\ub85c\uc11c Ottoman\uc5d0 \uc775\uc219\ud574\uc9c0\ub294 \ub370 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ub370\ubaa8 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ub9cc\ub4e4\uc5b4 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<h3><span style=\"font-weight: 400\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc124\uce58<\/span><\/h3>\n<p><span style=\"font-weight: 400\">\uc2dc\uc791\ud558\uae30 \uc804\uc5d0 Couchbase\ub97c \uc124\uc815\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. <\/span><\/p>\n<p><span style=\"font-weight: 400\">\ub2e4\uc74c \uc911\uc5d0\uc11c \uc120\ud0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <\/span><b>\ub2e4\uc74c \uc635\uc158 \uc911 \ud558\ub098\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4.<\/b><span style=\"font-weight: 400\"> (\uc774 \uae00\uc5d0\uc11c\ub294 #1 \uc635\uc158\uc744 \uc0ac\uc6a9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4):<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/developer.couchbase.com\/docker-image-manual-cb65\/\"><span style=\"font-weight: 400\">Docker\ub97c \uc0ac\uc6a9\ud558\uc5ec \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc11c\ubc84 \uc124\uce58\ud558\uae30<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">\uc5d0\uc11c \uc0ac\uc6a9 \uc911\uc778 OS\uc5d0 \ub9de\ub294 Couchbase\ub97c \ub2e4\uc6b4\ub85c\ub4dc\ud558\uc138\uc694. <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/downloads\/\"><span style=\"font-weight: 400\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc6f9\uc0ac\uc774\ud2b8<\/span><\/a><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">Couchbase\uc758 Travel-Sample \ub370\uc774\ud130 \uc9d1\ud569\uc744 \uc0ac\uc6a9\ud558\uc5ec \ub2e8\uc21c\ud654\ub41c \ud56d\uacf5\uc0ac \uc608\uc81c\uc758 \ub370\uc774\ud130\ub97c \ub098\ud0c0\ub0b4\ub294 \ubaa8\ub378\uc744 \uad6c\ud604\ud558\uc5ec Ottoman\uc758 \uba87 \uac00\uc9c0 \uae30\ubcf8 \uc0ac\ud56d\uc744 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400\">\uc800\ub294 Visual Studio Code, NodeJS v12.14, NPM 6.14.8\uc744 \uc0ac\uc6a9\ud558\uace0 \uc788\uc73c\ubbc0\ub85c \ucef4\ud4e8\ud130\uc5d0 Node.js\uac00 \uc124\uce58\ub418\uc5b4 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4. \ub2e4\uc74c\uc73c\ub85c \ube48 \ud504\ub85c\uc81d\ud2b8\ub97c \ub9cc\ub4e4\uace0 \ucf54\ub4dc \uc791\uc131\uc744 \uc2dc\uc791\ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">NPM\uc73c\ub85c \ud504\ub85c\uc81d\ud2b8 \ucd08\uae30\ud654\ud558\uae30<\/span><\/h3>\n<p><span style=\"font-weight: 400\">\ub514\ub809\ud130\ub9ac\ub97c \ub9cc\ub4e4\uace0, \ud504\ub85c\uc81d\ud2b8\ub97c \ucd08\uae30\ud654\ud558\uace0, Ottoman.js\ub97c \uc124\uce58\ud55c \ud6c4 VS Code\uc5d0\uc11c \uc5fd\ub2c8\ub2e4.<\/span><\/p>\n<pre class=\"theme:vs2012 font:ubuntu-mono font-size:14 line-height:24 top-margin:0 h-align:1 toolbar:1 toolbar-overlay:false lang:sh decode:true\" title=\"Create directory, initialize project, install Ottoman &amp; open in VS Code\">mkdir intro-ottoman &amp;&amp; cd $_ &amp;&amp; npm init -y &amp;&amp; npm i ottoman &amp;&amp; touch createAirline.js &amp;&amp; code .<\/pre>\n<p><span style=\"font-weight: 400\">\uc6d0\ud558\ub294 \ud3b8\uc9d1\uae30\uc5d0\uc11c \ud130\ubbf8\ub110\uc744 \uc5f4\uba74 \ub9c8\uc9c0\ub9c9\uc5d0 VS \ucf54\ub4dc\uc5d0\uc11c \uc5f4\ub9ac\ub294 \uba85\ub839\uc5b4\ub97c \ucd94\uac00\ud588\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">\uc624\uc2a4\ub9cc\uacfc \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc5f0\uacb0<\/span><\/h3>\n<p><span style=\"font-weight: 400\">\ud30c\uc77c\uc5d0\uc11c \uc791\uc5c5\uc744 \uc2dc\uc791\ud569\ub2c8\ub2e4. <code>.\/createAirline.js<\/code><\/span> <span style=\"font-weight: 400\">\ub97c \ud504\ub85c\uc81d\ud2b8 \ub8e8\ud2b8 \uc544\ub798\uc5d0 \ucd94\uac00\ud558\uace0 \ub2e4\uc74c\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4(\uae30\ubcf8 \uad6c\uc131 \uae30\uc900):<\/span><\/p>\n<pre class=\"theme:vs2012 font:ubuntu-mono font-size:14 line-height:24 top-margin:0 h-align:1 toolbar:1 toolbar-overlay:false lang:javascript decode:true\" title=\"Ottoman\uc5d0\uc11c Couchbase\uc5d0 \uc5f0\uacb0\ud558\uae30\">const { \uc624\uc2a4\ub9cc, \ubaa8\ub378, \uc2a4\ud0a4\ub9c8 } = require('\uc624\uc2a4\ub9cc')\r\n\r\nconst ottoman = new Ottoman({collectionName: '_default'});\r\nottoman.connect({\r\n    connectionString: 'couchbase:\/\/localhost',\r\n    bucketName: 'travel',\r\n    \uc0ac\uc6a9\uc790\uba85: '\uad00\ub9ac\uc790'\r\n    password: 'password'\r\n});<\/pre>\n<p><span style=\"font-weight: 400\">\uc774\ub807\uac8c \ud558\uba74 \uc624\uc2a4\ub9cc \ud328\ud0a4\uc9c0\ub97c \uac00\uc838\uc624\uace0 \uae30\ubcf8 \uceec\ub809\uc158(Couchbase Server 6.x \uc2a4\ud0c0\uc77c)\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4.<\/span><\/p>\n<h3>\uc624\uc2a4\ub9cc \uc2a4\ud0a4\ub9c8 \ubc0f \ubaa8\ub378<\/h3>\n<p><span style=\"font-weight: 400\">\ubaa8\ub378\uc740 \uc2a4\ud0a4\ub9c8 \uc815\uc758\uc5d0\uc11c \ucef4\ud30c\uc77c\ub41c \uba4b\uc9c4 \uc0dd\uc131\uc790\uc785\ub2c8\ub2e4. \ubaa8\ub378\uc758 \uc778\uc2a4\ud134\uc2a4\ub97c \ubb38\uc11c\ub77c\uace0 \ud569\ub2c8\ub2e4. Ottoman\uc758 \ubaa8\ub378\uc744 \uc0ac\uc6a9\ud558\uba74 Couchbase \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \ubb38\uc11c\ub97c \uc27d\uac8c \ub9cc\ub4e4\uace0, \uc77d\uace0, \uc5c5\ub370\uc774\ud2b8\ud558\uace0, \uc0ad\uc81c\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400\">\uc624\uc2a4\ub9cc \ubaa8\ub378\uc740 \uba87 \uac00\uc9c0 \uc694\uc18c\ub85c \uad6c\uc131\ub429\ub2c8\ub2e4:<\/span><\/p>\n<h3><span style=\"font-weight: 400\">\ubb38\uc11c \uc2a4\ud0a4\ub9c8 \uc815\uc758<\/span><\/h3>\n<p><span style=\"font-weight: 400\">\uc2a4\ud0a4\ub9c8\ub294 \ud0a4 \uc774\ub984\uc774 \uceec\ub809\uc158\uc758 \uc18d\uc131 \uc774\ub984\uc5d0 \ud574\ub2f9\ud558\ub294 \uac1d\uccb4\ub97c \ud1b5\ud574 \ubb38\uc11c \uc18d\uc131\uc744 \uc815\uc758\ud569\ub2c8\ub2e4.<\/span><\/p>\n<pre class=\"theme:vs2012 font:ubuntu-mono font-size:14 line-height:24 top-margin:0 h-align:1 toolbar:1 toolbar-overlay:false lang:javascript decode:true\" title=\"\ud56d\uacf5\uc0ac \uc2a4\ud0a4\ub9c8 \ub9cc\ub4e4\uae30\">const airlineSchema = \uc0c8\ub85c\uc6b4 \uc2a4\ud0a4\ub9c8({\r\n   \ucf5c\uc0ac\uc778 String,\r\n   country: String,\r\n   name: String\r\n})<\/pre>\n<p><span style=\"font-weight: 400\">\uc5ec\uae30\uc11c\ub294 \uc138 \uac00\uc9c0 \uc18d\uc131\uc744 \uc815\uc758\ud569\ub2c8\ub2e4. <strong>(\ucf5c\uc0ac\uc778, \uad6d\uac00, \uc774\ub984)<\/strong> \uc2a4\ud0a4\ub9c8 \ub0b4\uc5d0\uc11c \ubaa8\ub4e0 \uc720\ud615\uc758 <\/span><b>\ubb38\uc790\uc5f4.<\/b> \uac01 \ubaa8\ub378 \uc18d\uc131\uc5d0 \ub300\ud55c \uc720\ud615\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4, <span style=\"font-weight: 400\">\u00a0\ub294 \ubaa8\ub378\uc774 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc800\uc7a5\ub420 \ub54c \ud2b8\ub9ac\uac70\ub418\uace0 \uac12\uc758 \ub370\uc774\ud130 \uc720\ud615\uc774 \uc720\ud615\uc774 \uc544\ub2cc \uacbd\uc6b0 \uc2e4\ud328\ud558\ub294 \ub0b4\ubd80 \uc720\ud6a8\uc131 \uac80\uc0ac\uae30\uc5d0 \ub9e4\ud551\ub429\ub2c8\ub2e4. <\/span><b>\ubb38\uc790\uc5f4<\/b><span style=\"font-weight: 400\">.<\/span><\/p>\n<p><span style=\"font-weight: 400\">\ud5c8\uc6a9\ub418\ub294 \uc2a4\ud0a4\ub9c8 \uc720\ud615\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/v2.ottomanjs.com\/classes\/schema.html#string\"><span style=\"font-weight: 400\">\ubb38\uc790\uc5f4<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/v2.ottomanjs.com\/classes\/schema.html#number\"><span style=\"font-weight: 400\">\ubc88\ud638<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/v2.ottomanjs.com\/classes\/schema.html#array\"><span style=\"font-weight: 400\">\ubc30\uc5f4<\/span><\/a><span style=\"font-weight: 400\">\u00a0<\/span><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/v2.ottomanjs.com\/classes\/schema.html#boolean\"><span style=\"font-weight: 400\">\ubd80\uc6b8<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/v2.ottomanjs.com\/classes\/schema.html#date\"><span style=\"font-weight: 400\">\ub0a0\uc9dc<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/v2.ottomanjs.com\/classes\/embedtype.html\"><span style=\"font-weight: 400\">\uc784\ubca0\ub4dc \uc720\ud615<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/v2.ottomanjs.com\/classes\/mixedtype.html\"><span style=\"font-weight: 400\">\ud63c\ud569 \uc720\ud615<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/v2.ottomanjs.com\/classes\/referencetype.html\"><span style=\"font-weight: 400\">\ucc38\uc870 \uc720\ud615<\/span><\/a><\/li>\n<\/ul>\n<h3><span style=\"font-weight: 400\">\ubb38\uc11c \ubaa8\ub378 \uc815\uc758<\/span><\/h3>\n<p><span style=\"font-weight: 400\">\uc624\uc2a4\ub9cc \uc778\uc2a4\ud134\uc2a4\uc5d0\uc11c \ubaa8\ub378 \uc0dd\uc131\uc790\ub97c \ud638\ucd9c\ud558\uace0 \uceec\ub809\uc158\uc758 \uc774\ub984\uacfc \uc2a4\ud0a4\ub9c8 \uc815\uc758\uc5d0 \ub300\ud55c \ucc38\uc870\ub97c \uc804\ub2ec\ud574\uc57c \ud569\ub2c8\ub2e4.<\/span><\/p>\n<pre class=\"theme:vs2012 font:ubuntu-mono font-size:14 line-height:24 top-margin:0 h-align:1 toolbar:1 toolbar-overlay:false lang:javascript decode:true\" title=\"\ud56d\uacf5\uc0ac \ubaa8\ub378 \ub9cc\ub4e4\uae30\">const Airline = ottoman.model('Airline', airlineSchema)<\/pre>\n<p><span style=\"font-weight: 400\">\uc804\ud654\ud560 \ub54c <\/span><a href=\"https:\/\/v2.ottomanjs.com\/classes\/ottoman.html#model\"><span style=\"font-weight: 400\">\ubaa8\ub378()<\/span><\/a><span style=\"font-weight: 400\"> \ud568\uc218\ub97c \ud638\ucd9c\ud558\uba74 \uc2a4\ud0a4\ub9c8 \ubcf5\uc0ac\ubcf8\uc744 \uc0dd\uc131\ud558\uace0 \ubaa8\ub378\uc744 \ucef4\ud30c\uc77c\ud569\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400\">\ub610\ud55c <\/span><code>\ud56d\uacf5\uc0ac \uc2a4\ud0a4\ub9c8<\/code><span style=\"font-weight: 400\"> \uc804\ud654 \ubc88\ud638 \uc18d\uc131\uc744 \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uac12\uc774 \uc720\ud6a8\ud55c \uc804\ud654\ubc88\ud638\uc778\uc9c0 \ud655\uc778\ud558\ub294 \uc720\ud6a8\uc131 \uac80\uc0ac \ud568\uc218\ub97c \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc720\ud6a8\uc131 \uac80\uc0ac \ud568\uc218\ub97c <code>\ud56d\uacf5\uc0ac \uc2a4\ud0a4\ub9c8<\/code> \uc139\uc158\uc5d0 \uc774 \uc138 \uac00\uc9c0 \ucf54\ub4dc \ube14\ub85d\uc774 \uc788\uc2b5\ub2c8\ub2e4:<\/span><\/p>\n<pre class=\"theme:vs2012 font:ubuntu-mono font-size:14 line-height:24 top-margin:0 h-align:1 toolbar:1 toolbar-overlay:false lang:javascript decode:true\" title=\"\ud56d\uacf5\uc0ac \uc2a4\ud0a4\ub9c8\uc5d0 \uc720\ud6a8\uc131 \uac80\uc0ac\uae30 \ucd94\uac00\">const regx = \/^(\\([0-9]{3}\\)|[0-9]{3}-)[0-9]{3}-[0-9]{4}$\/\r\n  if(value &amp;&amp; !value.match(regx)) {\r\n    throw new Error(`\uc804\ud654 \ubc88\ud638 ${value}\uac00 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4`)\r\n  }\r\n}\r\naddValidators({\r\n  \uc804\ud654: \uc804\ud654\uac80\uc99d\uc790\r\n})\r\nconst airlineSchema = new Schema({\r\n  callsign: String,\r\n  country: String,\r\n  name: String,\r\n  phone: [{ \uc720\ud615: \ubb38\uc790\uc5f4, \uc720\ud6a8\uc131 \uac80\uc0ac\uae30: '\uc804\ud654'}]]\r\n})<\/pre>\n<p><span style=\"font-weight: 400\">\uc704\uc758 \uc608\uc81c\uc5d0\uc11c\ub294 \uc0ac\uc6a9\uc790 \uc9c0\uc815 \uc720\ud6a8\uc131 \uac80\uc0ac\uae30\ub97c \ub9cc\ub4dc\ub294 \ubc29\ubc95\uc744 \ubcf4\uc5ec\ub4dc\ub9ac\uace0 \uc788\ub294\ub370, \uc720\ud6a8\uc131 \uac80\uc0ac\uae30 \uccb4\ud06c\uc778\uc5d0 \uc815\uaddc\uc2dd\uc744 \uc0ac\uc6a9\ud558\uace0 \uc788\uc73c\ubbc0\ub85c \uc774\ub7ec\ud55c \uc720\ud6a8\uc131 \uac80\uc0ac\uae30 \uc548\uc5d0 \uc5b4\ub5a4 \ub85c\uc9c1\uc774\ub4e0 \ub123\uc744 \uc218 \uc788\ub2e4\ub294 \uc810\uc744 \uc774\ud574\ud558\uace0 \uc7a0\uc2dc \ud6c4 \uc804\ud654 \ubc88\ud638 \ub9e4\uce6d\uc5d0 \uc815\uaddc\uc2dd\uc744 \uc0ac\uc6a9\ud55c\ub2e4\ub294 \uc810\uc744 \uace0\ub824\ud558\uc5ec \ucf54\ub4dc\ub97c \uc904\uc774\ub294 \uba4b\uc9c4 \ud2b8\ub9ad\uc744 \ubcf4\uc5ec\ub4dc\ub9ac\uaca0\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<h4>\uc720\ud6a8\uc131 \uac80\uc0ac\uae30 \uc815\uc758<\/h4>\n<p><strong>\uc720\ud6a8\uc131 \uac80\uc0ac\uae30<\/strong> \uc624\uc2a4\ub9cc\uc5d0 \ub4f1\ub85d\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4 ( <code class=\"language-JavaScript\">ottoman.addValidators()<\/code> \uba54\uc11c\ub4dc)\ub294 \ubb38\uc11c\uc758 \ud504\ub85c\ud37c\ud2f0\uac00 \ubc30\uc5f4\uc5d0 \uc788\ub294 \ubaa8\ub4e0 \uac12\uc5d0 \ub300\ud574 \ud55c \ubc88\uc529 \ud638\ucd9c\ub429\ub2c8\ub2e4. \ud504\ub85c\ud37c\ud2f0\uc5d0 \ubc30\uc5f4\uc774 \uc5c6\uace0 \ub2e8\uc77c \ubb38\uc790\uc5f4 \uac12\ub9cc \uc788\ub294 \uacbd\uc6b0 \uc720\ud6a8\uc131 \uac80\uc0ac\uae30\ub294 \ud55c \ubc88\ub9cc \uc2e4\ud589\ub429\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uc774\uc720\ub85c \uc720\ud6a8\uc131 \uac80\uc0ac\uc5d0 \uc2e4\ud328\ud558\uba74 \ubb38\uc81c\uac00 \uc788\ub294 \uc804\ud654\ubc88\ud638\ub97c \ucd9c\ub825\ud569\ub2c8\ub2e4.<\/p>\n<p><span style=\"font-weight: 400\">\uadf8\ub7ec\ub098 \uc218\ud589 \uc911\uc778 \uac80\uc0ac\uc5d0\uc11c \uc815\uaddc\uc2dd\uc744 \uc0ac\uc6a9\ud558\ub294 \ud55c \ubb38\uc11c \uc18d\uc131 \uac12\uc758 \uc720\ud6a8\uc131\uc744 \uac80\uc0ac\ud558\ub294 \ub354 \uc26c\uc6b4 \ubc29\ubc95\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc815\uaddc\uc2dd\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 <a href=\"https:\/\/v2.ottomanjs.com\/interfaces\/validatoroption.html#hierarchy'\">\uc720\ud6a8\uc131 \uac80\uc0ac\uae30 \uc635\uc158<\/a> \ub294 <strong>regexp<\/strong> \uadf8\ub9ac\uace0 <strong>\uba54\uc2dc\uc9c0 <\/strong>\ub97c \uc778\uc218\ub85c \uc0ac\uc6a9\ud558\uc5ec \ucf54\ub4dc\ub97c \ub2e4\uc74c\uacfc \uac19\uc774 \uc904\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/span><\/p>\n<pre class=\"theme:vs2012 font:ubuntu-mono font-size:14 line-height:24 top-margin:0 h-align:1 toolbar:1 toolbar-overlay:false lang:javascript decode:true\" title=\"\uc720\ud6a8\uc131 \uac80\uc0ac\uae30\ub97c \uc0ac\uc6a9\ud558\ub3c4\ub85d \uc2a4\ud0a4\ub9c8 \uc5c5\ub370\uc774\ud2b8\">const regx = \/^(\\([0-9]{3}\\)|[0-9]{3}-)[0-9]{3}-[0-9]{4}$\/\r\nconst airlineSchema = \uc0c8\ub85c\uc6b4 \uc2a4\ud0a4\ub9c8({\r\ncallsign: String,\r\ncountry: String,\r\nname: String,\r\nphone: [{\uc720\ud615: \ubb38\uc790\uc5f4, \uc720\ud6a8\uc131 \uac80\uc0ac\uae30: {regexp: regx, \uba54\uc2dc\uc9c0: '\uc804\ud654 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc74c'}}]]\r\n})<\/pre>\n<p><span style=\"font-weight: 400\">\ubcf4\uc2dc\ub2e4\uc2dc\ud53c, \uc0c8 \uc2a4\ud0a4\ub9c8\ub97c \ub9cc\ub4e4 \ub54c \uc774\uc804\uc5d0 \ud558\ub358 \ubaa8\ub4e0 \uc791\uc5c5\uc744 \uc778\ub77c\uc778\uc73c\ub85c \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc0ac\uc6a9\uc790 \uc815\uc758 \uc720\ud6a8\uc131 \uac80\uc0ac\uae30\ub97c \ub9cc\ub4dc\ub294 \ubc29\ubc95\uc744 \uc774\ud574\ud558\ub294 \ub370 \ubc29\ud574\uac00 \ub418\uc9c0 \uc54a\ub3c4\ub85d \ud558\uc138\uc694. \ub54c\ub85c\ub294 \ucd94\uac00 \ub85c\uc9c1\uc774 \ud544\uc694\ud558\uae30 \ub54c\ubb38\uc5d0 \uccab \ubc88\uc9f8 \uc608\uc81c\ub294 \uc5ec\uc804\ud788 \uc54c\uc544\ub458 \uac00\uce58\uac00 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<h3><b>\uae30\ubcf8 <\/b><b>NoSQL\uc758 \ubb38\uc11c \uc791\uc5c5<\/b><\/h3>\n<p><span style=\"font-weight: 400\">\ub300\ubd80\ubd84\uc758 \uae30\ubcf8 \uc791\uc5c5\uc740 Ottoman V2 \ubb38\uc11c\uc5d0\uc11c \ub2e4\ub8e8\uace0 \uc788\uc73c\uba70, \uc5ec\uae30\uc11c\ub294 \uadf8 \uc911 \uc77c\ubd80\ub97c \ub2e4\ub8f0 \uac83\uc774\uc9c0\ub9cc \uc790\uc720\ub86d\uac8c <a href=\"https:\/\/v2.ottomanjs.com\">\uc624\uc2a4\ub9cc V2 (\uc54c\ud30c) \ubb38\uc11c<\/a> \ub97c \ud074\ub9ad\ud558\uace0 \ucc3e\uc744 \uc218 \uc5c6\uac70\ub098 \uc774\ud574\ub418\uc9c0 \uc54a\ub294 \ub0b4\uc6a9\uc774 \uc788\uc73c\uba74 \uc54c\ub824\uc8fc\uc138\uc694.<\/span><\/p>\n<h4><b>\ubb38\uc11c \ub9cc\ub4e4\uae30<\/b><\/h4>\n<p><span style=\"font-weight: 400\">\uc2a4\ud0a4\ub9c8, \ubaa8\ub378 \ubc0f \uc720\ud6a8\uc131 \uac80\uc0ac\uae30\ub97c \uc0dd\uc131\ud558\ub294 \ucf54\ub4dc\ub97c \uc704\uc5d0\uc11c \uc774\ubbf8 \uc0b4\ud3b4\ubcf8 \uac83\uc744 \uace0\ub824\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \ubaa8\ub378\uc744 \uc800\uc7a5\ud558\uace0 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc720\uc9c0\ud558\ub294 \uac83\uc740 \ub9e4\uc6b0 \uc27d\uc2b5\ub2c8\ub2e4. \uc0c8 <code>\ud56d\uacf5\uc0ac<\/code> \ubaa8\ub378\uc744 \uc0ac\uc6a9\ud558\uc5ec <code>\uc2a4\ud0a4\ub9c8<\/code> \ub97c \ud074\ub9ad\ud55c \ub2e4\uc74c \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc800\uc7a5\/\ubcf4\uc874\ud569\ub2c8\ub2e4.<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><\/p>\n<pre class=\"theme:vs2012 font:ubuntu-mono font-size:14 line-height:24 top-margin:0 h-align:1 toolbar:1 toolbar-overlay:false lang:javascript decode:true\" title=\"Create Document &amp; Save to Couchbase\">\/\/ \ubb38\uc11c \uc791\uc131\ud558\uae30\r\nconst cbAirlines = new Airline({\r\n  \ucf5c\uc0ac\uc778: 'CBA',\r\n  country: '\ubbf8\uad6d',\r\n  name: '\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ud56d\uacf5',\r\n  phone: ['321-321-3210', '321-123-1234']\r\n})\r\n\r\n\/\/ \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ud56d\uacf5 \ubb38\uc11c\ub97c \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc11c\ubc84\uc5d0 \ubcf4\uc874\ud569\ub2c8\ub2e4.\r\nconst saveDocument = async() =&gt; {\r\n  try {\r\n    const result = await cbAirlines.save()\r\n    console.log(result)\r\n  } catch (error) {\r\n    throw error\r\n  }\r\n}\r\n\r\n\/\/ \ubaa8\ub4e0 \uc778\ub371\uc2a4\uac00 \uc11c\ubc84\uc5d0 \uc874\uc7ac\ud558\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4.\r\nottoman.start()\r\n  \/\/ \ub2e4\uc74c\uc73c\ub85c \ubb38\uc11c\ub97c \uc800\uc7a5\ud558\uace0 \uc131\uacf5 \uba54\uc2dc\uc9c0\ub97c \uc778\uc1c4\ud574 \ubd05\uc2dc\ub2e4.\r\n  .then(async() =&gt; {\r\n    saveDocument()\r\n      .then(() =&gt; process.exit(0))\r\n      .catch((error) =&gt; console.log(error))\r\n  })<\/pre>\n<p>\uc65c \uc6b0\ub9ac\uac00 \uadf8\ub0e5 <code>\uc800\uc7a5\ubb38\uc11c()<\/code> \ud568\uc218\ub97c \ub2e8\ub3c5\uc73c\ub85c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ub300\uc2e0 <code>ottoman.start()<\/code> \uac00 \uc644\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4. The <code>\uc2dc\uc791<\/code> \uba54\uc11c\ub4dc\ub97c \uc2e4\ud589\ud558\ub294 \ubc14\ub85c \uac00\uae30\uc785\ub2c8\ub2e4.\u00a0<code>\ubcf4\uc7a5 \uceec\ub809\uc158<\/code>\u00a0\uadf8\ub9ac\uace0\u00a0<code>\ubcf4\uc7a5 \uc778\ub371\uc2a4<\/code>. \uc9c0\uae08 \uc54c\uc544\uc57c \ud560 \uac83\uc740 \uc774 \ubc29\ubc95\uc744 \uc0ac\uc6a9\ud558\uba74 Couchbase\uc5d0\uc11c \uc801\uc808\ud55c Ottoman \uad00\ub828 \uc778\ub371\uc2a4\uac00 \uc0dd\uc131\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud560 \uc218 \uc788\uc73c\uba70 \uc774\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uc791\uc5c5\uc744 \uc2e4\ud589\ud558\ub294 \ub370 \uc911\uc694\ud558\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4. <code>find()<\/code> \uba54\uc11c\ub4dc\uc640 \uac19\uc740 \ub3c4\uad6c\ub97c \uc0ac\uc6a9\ud558\uace0 <code>\ucffc\ub9ac \ube4c\ub354<\/code> \uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uc774 \uae00\uc758 \ub9c8\uc9c0\ub9c9 \ubd80\ubd84\uc5d0\uc11c \ub2e4\ub8f0 \uc608\uc815\uc785\ub2c8\ub2e4.<\/p>\n<p><span style=\"font-weight: 400\">\uc774 \uc2dc\uc810\uc5d0\uc11c Node\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc791\uc131\ud55c \ubaa8\ub4e0 \ucf54\ub4dc\ub97c \uc2e4\ud589\ud558\uba74 \ubb38\uc11c\uac00 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc800\uc7a5\ub429\ub2c8\ub2e4:<\/span><\/p>\n<pre class=\"theme:vs2012 font:ubuntu-mono font-size:14 line-height:24 top-margin:0 h-align:1 toolbar:1 toolbar-overlay:false lang:sh decode:true\" title=\"\ub178\ub4dc\ub85c createAirline \uc2e4\ud589\">\ub178\ub4dc createAirline.js<\/pre>\n<p><span style=\"font-weight: 400\">\uc774 \uc791\uc5c5\uc758 \uacb0\uacfc\uc785\ub2c8\ub2e4:<\/span><\/p>\n<pre class=\"theme:vs2012 font:ubuntu-mono font-size:14 line-height:24 top-margin:0 h-align:1 toolbar:1 toolbar-overlay:false lang:sh decode:true\" title=\"\ud56d\uacf5\uc0ac \uc800\uc7a5 \uacb0\uacfc\">_Model {\r\n  \ucf5c\uc0ac\uc778: 'CBA',\r\n  \uad6d\uac00: '\ubbf8\uad6d',\r\n  \uc774\ub984: '\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ud56d\uacf5',\r\n  phone: [ '321-321-3210', '321-123-1234' ],\r\n  id: '2384568f-f1e9-446e-97d1-cad697c40e76',\r\n  _type: '\ud56d\uacf5\uc0ac'\r\n}<\/pre>\n<p><span style=\"font-weight: 400\">\ub2e4\uc74c \ud544\ub4dc\uac00 \ubc18\ud658\ub429\ub2c8\ub2e4:<\/span><\/p>\n<ol>\n<li>\ucf5c\uc0ac\uc778, \uad6d\uac00 \ubc0f \uc774\ub984 \ud544\ub4dc\ub294 \ubaa8\ub450 \ubb38\uc790\uc5f4\ub85c, \ubb38\uc11c\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uac00\uc7a5 \uae30\ubcf8\uc801\uc778 \uac12\uc785\ub2c8\ub2e4.<\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\"><span style=\"font-weight: 400\"><span style=\"font-weight: 400\">ID \ud544\ub4dc\ub294 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uc5d0\uc11c \uc790\ub3d9 \uc0dd\uc131\ub418\uba70 \uace0\uc720 \ud0a4\uc785\ub2c8\ub2e4. ID \uac12\uc740 \ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc11c\ub4dc\uc5d0\uc11c Ottoman\uc774 \uc788\ub294 \ubb38\uc11c\ub97c \ucc3e\uc744 \ub54c \uc5b4\ub5a4 \uacbd\uc6b0\uc5d0\ub3c4 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. <code>findByID<\/code> \ub610\ub294 <code>removeByID<\/code><\/span><\/span><\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">\uc804\ud654 \ud544\ub4dc\ub294 \ubc30\uc5f4\ub85c \ud45c\uc2dc\ub418\uba70 \uc720\ud6a8\ud55c \uc804\ud654\ubc88\ud638\ub97c \ud3ec\ud568\ud569\ub2c8\ub2e4.<\/span><\/li>\n<li>\uadf8\ub9ac\uace0 <span style=\"font-weight: 400\">\uc720\ud615 \ud544\ub4dc\ub97c \uc0ac\uc6a9\ud558\uba74 \uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \ud14c\uc774\ube14\ucc98\ub7fc \ubb38\uc11c\ub97c \uc815\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4, <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/7.0\/learn\/data\/scopes-and-collections.html\"><span style=\"font-weight: 400\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 7\uc5d0\uc11c\ub294 \uceec\ub809\uc158\uacfc \ubc94\uc704\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/a><span style=\"font-weight: 400\">.<\/span><\/li>\n<\/ol>\n<h5><span style=\"font-weight: 400\">\uc720\ud6a8\uc131 \uac80\uc0ac \uc624\ub958<\/span><\/h5>\n<p><span style=\"font-weight: 400\">\uc798\ubabb\ub41c \uc804\ud654\ubc88\ud638\ub97c \uc785\ub825\ud558\uace0 \ub2e4\uc74c\uc744 \uc2e4\ud589\ud558\uba74 <code>\ub178\ub4dc createAirline.js<\/code> \uc774 \ud30c\uc77c\uc744 \ub2e4\uc2dc \uc2e4\ud589\ud558\uba74 \uc624\ub958 \uba54\uc2dc\uc9c0\uac00 \ud45c\uc2dc\ub429\ub2c8\ub2e4:<\/span><\/p>\n<pre class=\"theme:vs2012 font:ubuntu-mono font-size:14 line-height:24 top-margin:0 h-align:1 toolbar:1 toolbar-overlay:false lang:sh decode:true\" title=\"\uc720\ud6a8\uc131 \uac80\uc0ac \uc624\ub958 \uacb0\uacfc\">\uc720\ud6a8\uc131 \uac80\uc0ac \uc624\ub958: \uc804\ud654 \ubc88\ud638 321-321-32xx\uac00 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/pre>\n<p>\ud301: \uc5f0\uacb0, \uc2a4\ud0a4\ub9c8 \ubc0f \ubaa8\ub378\uc744 \ubcc4\ub3c4\uc758 \ud30c\uc77c\uc5d0 \uc815\uc758\ud558\uace0 \ub0b4\ubcf4\ub0b8 \ub2e4\uc74c \ub2e4\ub978 \ud30c\uc77c\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c\uacfc \uac19\uc740 \uc774\ub984\uc758 \uc0c8 \ud30c\uc77c\uc744 \ub9cc\ub4ed\ub2c8\ub2e4. <code>airline-schema-model.js<\/code> \ub97c \ub9cc\ub4e4\uace0 \uc2a4\ud0a4\ub9c8\uc640 \ubaa8\ub378 \uc815\uc758\ub97c \uc5ec\uae30\ub85c \uc62e\uae41\ub2c8\ub2e4:<\/p>\n<pre class=\"theme:vs2012 font:ubuntu-mono font-size:14 line-height:24 top-margin:0 h-align:1 toolbar:1 toolbar-overlay:false lang:javascript decode:true\" title=\"\ub0b4\ubcf4\ub0b4\uae30 \uc2a4\ud0a4\ub9c8 \ubc0f \ubaa8\ub378\">const { \ubaa8\ub378, \uc2a4\ud0a4\ub9c8 } = require('ottoman')\r\n\r\nconst regx = \/^(\\([0-9]{3}\\)|[0-9]{3}-)[0-9]{3}-[0-9]{4}$\/)\r\nconst airlineSchema = \uc0c8\ub85c\uc6b4 \uc2a4\ud0a4\ub9c8({\r\n  callsign: String,\r\n  country: String,\r\n  name: String,\r\n  phone: [{\uc720\ud615: \ubb38\uc790\uc5f4, \uc720\ud6a8\uc131 \uac80\uc0ac\uae30: {regexp: regx, \uba54\uc2dc\uc9c0: '\uc804\ud654 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc74c'}}]]\r\n})\r\n\r\n\/\/ \uc2a4\ud0a4\ub9c8\ub97c \uc0ac\uc6a9\ud558\uc5ec \ubaa8\ub378\uc744 \ucef4\ud30c\uc77c\ud569\ub2c8\ub2e4.\r\nconst Airline = model('Airline', airlineSchema)\r\n\r\nexports.airlineSchema = airlineSchema;\r\nexports.Airline = Airline;<\/pre>\n<p>\uc774\uc81c \uba87 \uac1c\uc758 \uc0c8 \ud30c\uc77c\uc744 \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4, <code>findAirline.js<\/code>, <code>updateAirline.js<\/code>\ubc0f <code>removeAirline.js<\/code> \ub97c \ud074\ub9ad\ud558\uace0 \uac01 \ud30c\uc77c\uc744 \ub2e4\uc74c\uacfc \uac19\uc774 \ucc44\uc6c1\ub2c8\ub2e4:<\/p>\n<pre class=\"theme:vs2012 font:ubuntu-mono font-size:14 line-height:24 top-margin:0 h-align:1 toolbar:1 toolbar-overlay:false lang:javascript decode:true\" title=\"\uc5ec\ub7ec \ud30c\uc77c\uc5d0 \ub300\ud55c \uc0c1\uc6a9\uad6c\">const { Ottoman } = require('ottoman')\r\nconst ottoman = new Ottoman({collectionName: '_default'});\r\nottoman.connect({\r\n    connectionString: 'couchbase:\/\/localhost',\r\n    bucketName: 'travel',\r\n    \uc0ac\uc6a9\uc790\uba85: '\uad00\ub9ac\uc790'\r\n    password: 'password'\r\n});\r\n\r\nconst { \ud56d\uacf5\uc0ac } = require('.\/airline-schema-and-model')<\/pre>\n<p><span style=\"font-weight: 400\">\uc774\ub807\uac8c \ud558\uba74 \uc77c\ubd80 \ucf54\ub4dc\ub97c \ubd84\ub9ac\ud558\uc5ec \uac01 \ud30c\uc77c\uc5d0\uc11c \ubc18\ubcf5\ud558\uc9c0 \uc54a\uace0 \uac01 CRUD \uc791\uc5c5\uc744 \uc9c4\ud589\ud560 \ub54c \uac01 \ud30c\uc77c\uc5d0 \uc77c\ubd80 \ucf54\ub4dc\ub97c \ucd94\uac00\ud558\uae30\ub9cc \ud558\uba74 \uc2a4\ud0a4\ub9c8\uc640 \ubaa8\ub378\uc744 \uc774\ubbf8 \uac00\uc838\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<h4><span style=\"font-weight: 400\">\ubb38\uc11c \ucc3e\uae30<\/span><\/h4>\n<p><span style=\"font-weight: 400\">\uc55e\uc11c \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc800\uc7a5\ud55c \ub808\ucf54\ub4dc\ub97c \uac80\uc0c9\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \ubaa8\ub378 \ud074\ub798\uc2a4\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \uc791\uc5c5\uc744 \uc218\ud589\ud560 \uc218 \uc788\ub294 \uc5ec\ub7ec \uc815\uc801 \uba54\uc11c\ub4dc\uc640 \uc778\uc2a4\ud134\uc2a4 \uba54\uc11c\ub4dc\ub97c \ub178\ucd9c\ud569\ub2c8\ub2e4. \uc774\uc81c find \uba54\uc11c\ub4dc\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc774\uc804\uc5d0 \uc0dd\uc131\ud55c \ub808\ucf54\ub4dc\ub97c \ucc3e\uace0 \ucf5c\uc0ac\uc778\uc744 \uac80\uc0c9\uc5b4\ub85c \uc804\ub2ec\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c\uacfc \uac19\uc740 \uc774\ub984\uc758 \uc0c8 \ud30c\uc77c\uc744 \ub9cc\ub4e4\uc5b4 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. <code>findAirline.js<\/code> \uc5d0 \ub2e4\uc74c \ucf54\ub4dc\ub97c \ucd94\uac00\ud558\uba74 \ub429\ub2c8\ub2e4:<\/span><\/p>\n<pre class=\"theme:vs2012 font:ubuntu-mono font-size:14 line-height:24 top-margin:0 h-align:1 toolbar:1 toolbar-overlay:false lang:javascript decode:true\" title=\"\ucf5c\uc0ac\uc778\uc73c\ub85c \ud56d\uacf5\uc0ac \ubb38\uc11c \ucc3e\uae30\">\/\/ \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc11c\ubc84\uc5d0\uc11c \ucf5c\uc0ac\uc778\uc73c\ub85c \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ud56d\uacf5\uc0ac \ubb38\uc11c \ucc3e\uae30\r\nconst findDocument = async() =&gt; {\r\n  try {\r\n    Airline.find({ callsign: { $like: 'CBA' } })\r\n    .then((result) =&gt; console.log(result.rows));\r\n  } catch (error) {\r\n    throw error\r\n  }\r\n}\r\n\r\nottoman.start()\r\n  .then(async() =&gt; {\r\n    findDocument()\r\n      .then(() =&gt; process.exit(0))\r\n      .catch((error) =&gt; console.log(error))\r\n  })<\/pre>\n<p><span style=\"font-weight: 400\">\ubb38\uc11c \uacb0\uacfc \ucc3e\uae30:<\/span><\/p>\n<pre class=\"theme:vs2012 font:ubuntu-mono font-size:14 line-height:24 top-margin:0 h-align:1 toolbar:1 toolbar-overlay:false lang:sh decode:true\" title=\"\ucf5c\uc0ac\uc778\uc73c\ub85c \ud56d\uacf5\uc0ac \ucc3e\uae30 \uacb0\uacfc\">\ucffc\ub9ac \uacb0\uacfc: [\r\n  _\ubaa8\ub378 {\r\n    _\uc720\ud615: '\ud56d\uacf5\uc0ac',\r\n    \ucf5c\uc0ac\uc778: 'CBA',\r\n    country: '\ubbf8\uad6d',\r\n    \uc774\ub984: '\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ud56d\uacf5\uc0ac',\r\n    phone: ['321-321-3210','321-123-1234'],\r\n    id: '971045ac-39d8-4e72-8c93-fdaac69aae31',\r\n  }<\/pre>\n<h4><span style=\"font-weight: 400\">\ubb38\uc11c \uc5c5\ub370\uc774\ud2b8<\/span><\/h4>\n<p><span style=\"font-weight: 400\">\ucf5c\uc0ac\uc778\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc704\uc758 \ub808\ucf54\ub4dc\ub97c \ucc3e\uc544\uc11c \uc218\uc815\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \ucf5c\uc0ac\uc778\uc774 \ub370\uc774\ud130\uc758 \uace0\uc720 \ud544\ub4dc\ub77c\uace0 \uac00\uc815\ud558\uba74 \ud55c \ubc88\uc758 \uc791\uc5c5\uc73c\ub85c \ubb38\uc11c\ub97c \ubaa8\ub450 \uc5c5\ub370\uc774\ud2b8\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<pre class=\"theme:vs2012 font:ubuntu-mono font-size:14 line-height:24 top-margin:0 h-align:1 toolbar:1 toolbar-overlay:false lang:javascript decode:true\" title=\"\ud56d\uacf5\uc0ac \ubb38\uc11c \ucc3e\uae30 \ubc0f \uc5c5\ub370\uc774\ud2b8\">\/\/ \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc11c\ubc84\uc5d0\uc11c \ucf5c\uc0ac\uc778\uc73c\ub85c \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ud56d\uacf5\uc0ac \ubb38\uc11c \uc5c5\ub370\uc774\ud2b8\ud558\uae30\r\nconst findDocumentAndUpdate = async() =&gt; {\r\n  const newDocument = {\r\n    callsign: 'CBSA',\r\n    country: '\ubbf8\uad6d',\r\n    \uc774\ub984: '\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ud56d\uacf5',\r\n    phone: ['321-321-3210','321-123-1234']\r\n  }\r\n  try {\r\n    let result = await Airline.findOneAndUpdate(\r\n      { callsign: { $like: 'CBA' } }, newDocument, { new: true })\r\n    )\r\n    console.log(result)\r\n  } catch (error) {\r\n    throw error\r\n  }\r\n}\r\n\r\nottoman.start()\r\n  .then(async() =&gt; {\r\n    findDocumentAndUpdate()\r\n      .then(() =&gt; process.exit(0))\r\n      .catch((error) =&gt; console.log(error))\r\n  })<\/pre>\n<p><span style=\"font-weight: 400\">\ubb38\uc11c \ucc3e\uae30 \ubc0f \uacb0\uacfc \uc5c5\ub370\uc774\ud2b8<\/span><\/p>\n<pre class=\"theme:vs2012 font:ubuntu-mono font-size:14 line-height:24 top-margin:0 h-align:1 toolbar:1 toolbar-overlay:false lang:sh decode:true\" title=\"\ud56d\uacf5\uc0ac \ubb38\uc11c \ucc3e\uae30 \ubc0f \uc5c5\ub370\uc774\ud2b8 \uacb0\uacfc\">_\ubaa8\ub378 {\r\n  _\uc720\ud615: '\ud56d\uacf5\uc0ac',\r\n  \ucf5c\uc0ac\uc778: 'CBSA',\r\n  \uad6d\uac00: '\ubbf8\uad6d',\r\n  id: '971045ac-39d8-4e72-8c93-fdaac69aae31',\r\n  \uc774\ub984: '\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ud56d\uacf5',\r\n  phone: [ '321-321-3210', '321-123-1234' ]\r\n}<\/pre>\n<h4><span style=\"font-weight: 400\">\ubb38\uc11c \uc81c\uac70<\/span><\/h4>\n<p><span style=\"font-weight: 400\">\uc624\uc2a4\ub9cc\uc5d0\ub294 \ubb38\uc11c \uc81c\uac70\ub97c \ucc98\ub9ac\ud558\ub294 \uba87 \uac00\uc9c0 \ubc29\ubc95\uc774 \uc788\uc2b5\ub2c8\ub2e4: <\/span><a href=\"https:\/\/v2.ottomanjs.com\/classes\/document.html#remove\"><span style=\"font-weight: 400\">\uc81c\uac70<\/span><\/a><span style=\"font-weight: 400\">, <\/span><a href=\"https:\/\/v2.ottomanjs.com\/classes\/model.html#static-removebyid\"><span style=\"font-weight: 400\">removeById<\/span><\/a><span style=\"font-weight: 400\"> \uadf8\ub9ac\uace0 <\/span><a href=\"https:\/\/v2.ottomanjs.com\/classes\/model.html#static-removemany\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400\">removeMany<\/span><\/a><span style=\"font-weight: 400\">. \uc9c0\uae08\uae4c\uc9c0 \uc0b4\ud3b4\ubcf8 \ub9ce\uc740 \uc608\uc81c\ub97c \uace0\ub824\ud560 \ub54c \uac01 \uc608\uc81c\ub294 \uc0ac\uc6a9 \ubc29\ubc95\uc744 \ub9e4\uc6b0 \uc27d\uac8c \uc774\ud574\ud560 \uc218 \uc788\uc73c\ubbc0\ub85c \uc5ec\uae30\uc11c\ub294 \uac04\ub2e8\ud55c \uc608\uc81c\ub97c \uc81c\uacf5\ud558\uc5ec \uc774\ubbf8 \ucc3e\uc740 \ubb38\uc11c\ub97c \uc81c\uac70\ud558\ub294 \ubc29\ubc95\uc744 \ubcf4\uc5ec \ub4dc\ub9ac\uaca0\uc2b5\ub2c8\ub2e4. <strong>find()<\/strong> \uba54\uc11c\ub4dc\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/span><\/p>\n<pre class=\"theme:vs2012 font:ubuntu-mono font-size:14 line-height:24 top-margin:0 h-align:1 toolbar:1 toolbar-overlay:false lang:javascript decode:true\" title=\"ID\ub85c \ud56d\uacf5\uc0ac \ubb38\uc11c \uc81c\uac70\">\/\/ \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc11c\ubc84\uc5d0\uc11c ID\ubcc4\ub85c \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ud56d\uacf5\uc0ac \ubb38\uc11c\ub97c \uc81c\uac70\ud569\ub2c8\ub2e4.\r\nconst removeDocument = async() =&gt; {\r\n  try {\r\n    await Airline.removeById('60e3f517-6a2a-41fe-be45-97081181d675')\r\n      .then((\uacb0\uacfc) =&gt; console.log(\uacb0\uacfc))\r\n  } catch (error) {\r\n    throw error\r\n  }\r\n}<\/pre>\n<p><span style=\"font-weight: 400\">\ubb38\uc11c \uc81c\uac70 \uacb0\uacfc\ub294 \uac04\ub2e8\ud569\ub2c8\ub2e4. <a href=\"https:\/\/docs.couchbase.com\/nodejs-sdk\/current\/howtos\/concurrent-document-mutations.html\" target=\"_blank\" rel=\"noopener\">CAS \uac12<\/a>\ub97c \uc0ac\uc6a9\ud558\uc5ec Couchbase \ubb38\uc11c\uc758 \ubcc0\uacbd \uc0ac\ud56d\uc744 \ucd94\uc801\ud569\ub2c8\ub2e4.<\/span><\/p>\n<pre class=\"theme:vs2012 font:ubuntu-mono font-size:14 line-height:24 top-margin:0 h-align:1 toolbar:1 toolbar-overlay:false lang:sh decode:true\" title=\"ID\ub85c \ud56d\uacf5\uc0ac \ubb38\uc11c \uc81c\uac70 \uacb0\uacfc\">{ cas: CbCas { '0':  } }<\/pre>\n<h3><span style=\"font-weight: 400\">\ubbf8\ub4e4\uc6e8\uc5b4<\/span><\/h3>\n<p><span style=\"font-weight: 400\">\uc6b0\ub9ac\ub294 \uc774\ubbf8 \ubbf8\ub4e4\uc6e8\uc5b4\uac00 \uc791\ub3d9\ud558\ub294 \uac83\uc744 \ubcf4\uc558\uc2b5\ub2c8\ub2e4. \ucc98\uc74c\uc5d0 \ub9cc\ub4e0 \uc720\ud6a8\uc131 \uac80\uc0ac\uae30\ub294 \ube44\ub3d9\uae30 \ud568\uc218\ub97c \uc2e4\ud589\ud558\ub294 \ub3d9\uc548 \uc81c\uc5b4\ub97c \uc804\ub2ec\ud558\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc758 \ud2b9\uc815 \ub2e8\uacc4\uc5d0\uc11c \uc2e4\ud589\ub418\ub294 \ud568\uc218\ub97c \uc0ac\uc6a9\ud558\ub294 \ubbf8\ub4e4\uc6e8\uc5b4\ub97c \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<h4 id=\"the-available-hooks-are\">\uc0ac\uc6a9 \uac00\ub2a5\ud55c \ud6c4\ud06c<\/h4>\n<ul>\n<li><code>\uc720\ud6a8\uc131 \uac80\uc0ac<\/code><\/li>\n<li><code>\uc800\uc7a5<\/code><\/li>\n<li><code>\uc5c5\ub370\uc774\ud2b8<\/code><\/li>\n<li><code>\uc81c\uac70<\/code><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">\ubbf8\ub4e4\uc6e8\uc5b4\uc758 \uc608(\uc77c\uba85 <a href=\"https:\/\/v2.ottomanjs.com\/guides\/schema.html#instance-methods\" target=\"_blank\" rel=\"noopener\">\uc0ac\uc804 \ubc0f \uc0ac\ud6c4 \ud6c4\ud06c<\/a>)<\/span><\/p>\n<p><span style=\"font-weight: 400\">\ubb38\uc11c \uc0dd\uc131(\uc800\uc7a5) \uc804\ud6c4\uc5d0 \ucf58\uc194\uc5d0\uc11c \ub85c\uadf8\ub97c \uc0dd\uc131\ud558\ub294 \uac04\ub2e8\ud55c \uc608\uc81c\ub97c \ub9cc\ub4e4\uc5b4 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. createWithHooks.js\ub77c\ub294 \uc0c8 \ud30c\uc77c\uc744 \ub9cc\ub4e4\uaca0\uc2b5\ub2c8\ub2e4. \uc800\uc7a5 \uc804 \ubb38\uc11c \uc774\ub984\uacfc \uc800\uc7a5 \ud6c4 \ubb38\uc11c ID\ub97c \ubcf4\uace0\ud558\ub294 \uc0ac\uc804 \ubc0f \uc0ac\ud6c4 \ud6c4\ud06c\ub97c \ucd94\uac00\ud55c \uac83\uc744 \uc81c\uc678\ud558\uba74 \ub300\ubd80\ubd84\uc758 \ucf54\ub4dc\uac00 \uc775\uc219\ud574 \ubcf4\uc77c \uac83\uc785\ub2c8\ub2e4:<\/span><\/p>\n<pre class=\"theme:vs2012 font:ubuntu-mono font-size:14 line-height:24 top-margin:0 h-align:1 toolbar:1 toolbar-overlay:false lang:javascript decode:true\" title=\"\uc0ac\uc804\/\uc0ac\ud6c4 \uc800\uc7a5 \ud6c4\ud06c\uac00 \uc788\ub294 \ubb38\uc11c \ub9cc\ub4e4\uae30\">const { Ottoman } = require('ottoman')\r\nconst ottoman = new Ottoman({collectionName: '_default'});\r\nottoman.connect({\r\n    connectionString: 'couchbase:\/\/localhost',\r\n    bucketName: 'travel',\r\n    \uc0ac\uc6a9\uc790\uba85: '\uad00\ub9ac\uc790'\r\n    password: 'password'\r\n});\r\n\r\nconst { \ud56d\uacf5\uc0ac, \ud56d\uacf5\uc0ac \uc2a4\ud0a4\ub9c8 } = require('.\/airline-schema-and-model')\r\n\r\n\/\/ \ud50c\ub7ec\uadf8\uc778\uacfc \ud6c5\uc740 \ubbf8\ub4e4\uc6e8\uc5b4\uc774\uba70, \ub77c\uc774\ud504\uc0ac\uc774\ud074 \ud6c5\uc774\ub77c\uace0 \uc0dd\uac01\ud558\uc138\uc694!\r\nconst pluginLog = (airlineSchema) =&gt; {.\r\n  airlineSchema.pre('save', (doc) =&gt; {})\r\n    console.log(`Doc: ${doc.name} \uc800\uc7a5 \uc608\uc815`)\r\n  )\r\n  airlineSchema.post('save', (doc) =&gt;)\r\n    console.log(`Doc: ${doc.id} \uc800\uc7a5 \uc644\ub8cc`)\r\n  )\r\n};\r\n\r\n\/\/ \ubaa8\ub378 \uc0dd\uc131 \uc804\uc5d0 \ud50c\ub7ec\uadf8\uc778\uc744 \ub4f1\ub85d\ud574\uc57c \ud569\ub2c8\ub2e4.\r\nairlineSchema.plugin(pluginLog)\r\n\r\n\/\/ \ubb38\uc11c \uc791\uc131\r\nconst cbAirlines = new Airline({\r\n  \ucf5c\uc0ac\uc778: 'UNITED',\r\n  country: '\ubbf8\uad6d',\r\n  name: '\uc720\ub098\uc774\ud2f0\ub4dc \ud56d\uacf5',\r\n  phone: ['321-321-3210', '321-123-1234']\r\n})\r\n\r\nconst saveDocument = async() =&gt; {\r\n  try {\r\n    \/\/ \uc0ac\uc804 \ubc0f \uc0ac\ud6c4 \ud6c5\uc774 \uc2e4\ud589\ub429\ub2c8\ub2e4.\r\n    const result = await cbAirlines.save()\r\n    console.log(result)\r\n  } catch (error) {\r\n    throw error\r\n  }\r\n}\r\n\r\nottoman.start()\r\n  .then(async() =&gt; {\r\n    saveDocument()\r\n      .then(() =&gt; process.exit(0))\r\n      .catch((error) =&gt; console.log(error))\r\n  })<\/pre>\n<p><span style=\"font-weight: 400\">\ubb38\uc11c \uacb0\uacfc \uc800\uc7a5:<\/span><\/p>\n<pre class=\"theme:vs2012 font:ubuntu-mono font-size:14 line-height:24 top-margin:0 h-align:1 toolbar:1 toolbar-overlay:false lang:sh decode:true\" title=\"\uacb0\uacfc \ud56d\uacf5\uc0ac \ubb38\uc11c \uc800\uc7a5\">\ubb38\uc11c: \uc720\ub098\uc774\ud2f0\ub4dc \ud56d\uacf5 \uc800\uc7a5 \uc608\uc815\r\n\ubb38\uc11c: 1316488a-98ba-4dbb-b0d7-ea6001a0bf57 \uc800\uc7a5\ub428\r\n_\ubaa8\ub378 {\r\n  \ucf5c\uc0ac\uc778: 'UNITED',\r\n  \uad6d\uac00: '\ubbf8\uad6d',\r\n  \uc774\ub984: '\uc720\ub098\uc774\ud2f0\ub4dc \ud56d\uacf5',\r\n  phone: [ '321-321-3210', '321-123-1234' ],\r\n  id: '1316488a-98ba-4dbb-b0d7-ea6001a0bf57',\r\n  _type: '\ud56d\uacf5\uc0ac'\r\n}<\/pre>\n<p><span style=\"font-weight: 400\">\uc800\uc7a5 \uc804\ud6c4\uc5d0 \uba54\uc2dc\uc9c0\ub97c \ubc1b\uc558\uc2b5\ub2c8\ub2e4. \uc720\ud6a8\uc131 \uac80\uc0ac\ub97c \ud1b5\ud574 \ud2b9\uc815 \ubb38\uc11c \uc18d\uc131 \uac12\uc774 \uae30\uc900\uc744 \ucda9\uc871\ud558\ub294\uc9c0 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ubb38\uc11c\uac00 \uc800\uc7a5, \uc5c5\ub370\uc774\ud2b8, \uc81c\uac70\ub420 \ub54c\uc758 \ub77c\uc774\ud504\uc0ac\uc774\ud074\uc744 \ud65c\uc6a9\ud558\uba74 Ottoman \ubbf8\ub4e4\uc6e8\uc5b4\ub97c \ud30c\uc545\ud558\ub294 \ub370\ub3c4 \ub3c4\uc6c0\uc774 \ub418\uc5c8\uc2b5\ub2c8\ub2e4!\u00a0<\/span><\/p>\n<h3><span style=\"font-weight: 400\">\ucffc\ub9ac \ube4c\ub529<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Ottoman\uc740 Couchbase\uc640 N1QL\uc5d0\uc11c \uc9c0\uc6d0\ud558\ub294 \ub9ce\uc740 \ubcf5\uc7a1\ud55c \uc791\uc5c5\uc744 \ucc98\ub9ac\ud558\ub294 \ub9e4\uc6b0 \ud48d\ubd80\ud55c API\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4. \ubc31\uadf8\ub77c\uc6b4\ub4dc\uc5d0\uc11c \ucffc\ub9ac \ube4c\ub354\uac00 N1QL \ubb38\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4. \ucffc\ub9ac \ube4c\ub354\ub97c \uc0ac\uc6a9\ud560 \ub54c \uc0ac\uc6a9\ud560 \ubaa8\ub4dc\uc5d0\ub294 \uc138 \uac00\uc9c0 \uc635\uc158\uc774 \uc788\uc2b5\ub2c8\ub2e4.\u00a0<\/span><\/p>\n<ol>\n<li><a href=\"https:\/\/v2.ottomanjs.com\/guides\/query-builder.html#build-a-query-by-using-parameters\" target=\"_blank\" rel=\"noopener\">\ub9e4\uac1c \ubcc0\uc218 \uc0ac\uc6a9<\/a><\/li>\n<li><a href=\"https:\/\/v2.ottomanjs.com\/guides\/query-builder.html#build-a-query-by-using-access-functions\" target=\"_blank\" rel=\"noopener\">\uc561\uc138\uc2a4 \uae30\ub2a5<\/a><\/li>\n<li><a href=\"https:\/\/v2.ottomanjs.com\/guides\/query-builder.html#build-a-query-by-using-parameters-and-function-parameters\" target=\"_blank\" rel=\"noopener\">\ub610\ub294 \ub9e4\uac1c\ubcc0\uc218 \ubc0f \uc561\uc138\uc2a4 \ud568\uc218 \uc0ac\uc6a9<\/a><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">\ub2e4\uc74c \uc138 \uac00\uc9c0 \uc608\uc81c\uc5d0\uc11c\ub294 \uac01\uac01 \ub2e4\ub978 \uc138 \uac00\uc9c0 \ucffc\ub9ac \ube4c\ub354 \ubaa8\ub4dc(\ub9e4\uac1c \ubcc0\uc218, \uc561\uc138\uc2a4 \ud568\uc218 \ubc0f \ud63c\ud569 \ubaa8\ub4dc)\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub3d9\uc77c\ud55c \uc791\uc5c5\uc744 \uc218\ud589\ud558\uaca0\uc2b5\ub2c8\ub2e4. \uac01 \uc608\uc81c\uc5d0\uc11c\ub294<br \/>\n<\/span><\/p>\n<ol>\n<li><span style=\"font-weight: 400\">\uc120\ud0dd <code>\uc774\ub984<\/code> \uadf8\ub9ac\uace0 <code>\uad6d\uac00<\/code> \ud56d\uacf5\uc0ac\uc5d0\uc11c<\/span><\/li>\n<li>\uc5ec\uae30\uc11c <code>\uad6d\uac00<\/code> \uac12\uc740 \"\ubbf8\uad6d\"<\/li>\n<li>\uadf8\ub9ac\uace0 \uacb0\uacfc\ub97c 10\uc73c\ub85c \uc81c\ud55c\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n<p>\uba3c\uc800 \uc774\ub984\uc774 \uc9c0\uc815\ub41c \uc0c8 \ud30c\uc77c\uc744 \ub9cc\ub4e4\uc5b4 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4: <code>findWithQueryBuilder.js<\/code>\ub97c \ud074\ub9ad\ud558\uace0 \ub2e4\uc74c \ucf54\ub4dc\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"theme:vs2012 font:ubuntu-mono font-size:14 line-height:24 top-margin:0 h-align:1 toolbar:1 toolbar-overlay:false lang:javascript decode:true\" title=\"\ucffc\ub9ac \ube4c\ub354\ub85c \ud56d\uacf5\uc0ac \ubb38\uc11c \ucc3e\uae30\">const { Ottoman, Query } = require('ottoman')\r\nconst ottoman = new Ottoman({collectionName: '_default'});\r\n\r\nottoman.connect({\r\n    connectionString: 'couchbase:\/\/localhost',\r\n    bucketName: 'travel',\r\n    \uc0ac\uc6a9\uc790\uba85: '\uad00\ub9ac\uc790',\r\n    password: 'password'\r\n});\r\n\r\n\/* \ucffc\ub9ac \ube4c\ub354 \uc608\uc81c\ub85c \ub300\uccb4 *\/\r\n\r\nconst executeQuery = async(query) =&gt; {\r\n  try {\r\n    const result = await ottoman.query(query)\r\n    console.log('\ucffc\ub9ac \uacb0\uacfc: ' , \uacb0\uacfc)\r\n  } catch (error) {\r\n    throw error\r\n  }\r\n}\r\n\r\n\uc0dd\uc131 \ucffc\ub9ac()\r\n  .then((query) =&gt; {\r\n    executeQuery(\ucffc\ub9ac)\r\n      .then(() =&gt; process.exit(0))\r\n  })\r\n  .catch((error) =&gt; console.log(error))<\/pre>\n<p>\uc774 \ud30c\uc77c \uc911\uac04\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc740 \uc8fc\uc11d\uc774 \uc788\uc2b5\ub2c8\ub2e4: <strong>\"\ucffc\ub9ac \ube4c\ub354 \uc608\uc81c\ub85c \ubc14\uafb8\uae30\"<\/strong>. \uc774 \uc139\uc158\uc758 \ub2e4\uc74c \uc608\uc81c \uc911 \ud558\ub098\ub97c \ud30c\uc77c\uc758 \ud574\ub2f9 \uc601\uc5ed\uc5d0 \ubcf5\uc0ac\ud558\uba74 \ub429\ub2c8\ub2e4.<\/p>\n<h4>\ub9e4\uac1c\ubcc0\uc218<\/h4>\n<pre class=\"theme:vs2012 font:ubuntu-mono font-size:14 line-height:24 top-margin:0 h-align:1 toolbar:1 toolbar-overlay:false lang:javascript decode:true\" title=\"\ub9e4\uac1c \ubcc0\uc218\ub97c \uc0ac\uc6a9\ud558\uc5ec \ucffc\ub9ac \ube4c\ub354 \ub370\ubaa8 \ubcf4\uae30\">const generateQuery = async() =&gt; {\r\n  try {\r\n    const params = {\r\n      select : [\r\n        { $field: 'name' },\r\n        { $field: '\uad6d\uac00'}\r\n      ],\r\n      where: { $and: [\r\n        { country: {$eq: '\ubbf8\uad6d'}},\r\n        { _type: {$eq: '\ud56d\uacf5\uc0ac'}}, { _\uc720\ud615.\r\n      ] },\r\n      limit: 10\r\n    }\r\n    const query = new Query(params, '`travel`').build()\r\n    console.log('\ucffc\ub9ac \uc0dd\uc131: ', query)\r\n    \ubc18\ud658 \ucffc\ub9ac\r\n  } catch (error) {\r\n    throw error\r\n  }\r\n}<\/pre>\n<h4>\uc561\uc138\uc2a4 \uae30\ub2a5<\/h4>\n<pre class=\"theme:vs2012 font:ubuntu-mono font-size:14 line-height:24 top-margin:0 h-align:1 toolbar:1 toolbar-overlay:false lang:javascript decode:true\" title=\"Access \ud568\uc218\ub97c \uc0ac\uc6a9\ud55c \ucffc\ub9ac \uc791\uc131\uae30 \ub370\ubaa8\">const generateQuery = async() =&gt; {\r\n  try {\r\n    const query = new Query({}, '`travel`')\r\n      .select([\r\n        { $field: 'name' },\r\n        { $field: 'country'}\r\n      ])\r\n      .where({ $and: [\r\n        { country: {$eq: '\ubbf8\uad6d'}},\r\n        { _type: {$eq: '\ud56d\uacf5\uc0ac'}}\r\n      ]})\r\n      .limit(10)\r\n      .build()\r\n      console.log('\ucffc\ub9ac \uc0dd\uc131\ub428: ', \ucffc\ub9ac)\r\n      \ubc18\ud658 \ucffc\ub9ac\r\n  } catch (error) {\r\n    throw error\r\n  }\r\n}<\/pre>\n<h4>\ud63c\ud569 \ubaa8\ub4dc<\/h4>\n<pre class=\"theme:vs2012 font:ubuntu-mono font-size:14 line-height:24 top-margin:0 h-align:1 toolbar:1 toolbar-overlay:false lang:javascript decode:true\" title=\"Demonstrate Query Builder using Mixed Mode (Parameters &amp; Access Functions)\">const generateQuery = async() =&gt; {\r\n  try {\r\n    const where = { $and: [\r\n      { country: {$eq: '\ubbf8\uad6d'}},\r\n      { _type: {$eq: '\ud56d\uacf5\uc0ac'}}, { _\uc720\ud615.\r\n    ] }\r\n    \/\/ \uc870\uac74 \ud45c\ud604\uc2dd\uc73c\ub85c \ucffc\ub9ac\ub97c \uc804\ub2ec\ud569\ub2c8\ub2e4.\r\n    const query = new Query({ where }, '`travel`')\r\n      .select([\r\n        { $field: 'name' },\r\n        { $field: 'country' }\r\n      ])\r\n      .limit(10)\r\n      .build()\r\n      console.log('\ucffc\ub9ac \uc0dd\uc131\ub428: ', \ucffc\ub9ac)\r\n      \ubc18\ud658 \ucffc\ub9ac\r\n  } catch (error) {\r\n    throw error\r\n  }\r\n}<\/pre>\n<p><span style=\"font-weight: 400\">\uc0dd\uc131\ud55c \ud6c4\uc5d0\ub294 <code>\uc0dd\uc131 \ucffc\ub9ac()<\/code> \ud568\uc218\ub97c \ud638\ucd9c\ud558\ub294 \uacbd\uc6b0, \uc704\uc758 \ud63c\ud569 \ubaa8\ub4dc \uc911 \ud558\ub098\ub97c \uc0ac\uc6a9\ud558\uc5ec \ube44\ub3d9\uae30\uc801\uc73c\ub85c <code>\uc0dd\uc131 \ucffc\ub9ac<\/code> \uadf8\ub9ac\uace0 <code>\uc2e4\ud589 \ucffc\ub9ac<\/code> \uadf8\ub9ac\uace0 \uc55e\uc11c \ub9d0\uc500\ub4dc\ub9b0 \uac83\ucc98\ub7fc \uadf8 \ucf54\ub4dc\ub294 \uc704\uc758 \ucf54\ub4dc\uc758 \ub2e4\uc591\ud55c \ubc84\uc804\uc5d0\uc11c \uc791\ub3d9\ud569\ub2c8\ub2e4:<\/span><\/p>\n<p><span style=\"font-weight: 400\">\uc704\uc758 \uc138 \uac00\uc9c0 \ubaa8\ub4dc \uc911 \ud558\ub098\uc5d0 \ud574\ub2f9\ud558\ub294 \uacb0\uacfc\uc785\ub2c8\ub2e4:<\/span><\/p>\n<pre class=\"theme:vs2012 font:ubuntu-mono font-size:14 line-height:24 top-margin:0 h-align:1 toolbar:1 toolbar-overlay:false lang:sh decode:true\" title=\"\ucffc\ub9ac \ube4c\ub354\ub85c \ud56d\uacf5\uc0ac \ubb38\uc11c \ucc3e\uae30 \uacb0\uacfc\">\ucffc\ub9ac\uac00 \uc0dd\uc131\ub429\ub2c8\ub2e4:  SELECT name,country FROM default:`travel` WHERE (country=\"United States\" AND _type=\"Airline\") LIMIT 10\r\n\ucffc\ub9ac \uacb0\uacfc  {\r\n  \uba54\ud0c0: {\r\n    requestId: '1514fa20-755e-49b3-bbfa-4ed75a1a40ee',\r\n    clientContextId: '0334862c79e727f8',\r\n    \uc0c1\ud0dc: '\uc131\uacf5',\r\n    signature: { \uad6d\uac00: 'json', \uc774\ub984: 'json' },\r\n    profile: \uc815\uc758\ub418\uc9c0 \uc54a\uc74c,\r\n    metrics: {\r\n      elapsedTime: 6.219,\r\n      executionTime: 5.9619,\r\n      sortCount: \uc815\uc758\ub418\uc9c0 \uc54a\uc74c,\r\n      resultCount: 2,\r\n      resultSize: 106,\r\n      mutationCount: \uc815\uc758\ub418\uc9c0 \uc54a\uc74c,\r\n      errorCount: \uc815\uc758\ub418\uc9c0 \uc54a\uc74c,\r\n      warningCount: \uc815\uc758\ub418\uc9c0 \uc54a\uc74c\r\n    }\r\n  },\r\n  \ud589 [\r\n    { \uad6d\uac00: '\ubbf8\uad6d', \uc774\ub984: '\uc720\ub098\uc774\ud2f0\ub4dc \ud56d\uacf5' },\r\n    { \uad6d\uac00: '\ubbf8\uad6d', \uc774\ub984: '\uc81c\ud2b8\ube14\ub8e8\ud56d\uacf5' }, { \ud589: [{ \uad6d\uac00: '\ubbf8\uad6d', \uc774\ub984: '\uc81c\ud2b8\ube14\ub8e8\ud56d\uacf5' },] ] ]\r\n  ]\r\n}<\/pre>\n<h3><span style=\"font-weight: 400\">\ub9ac\uc18c\uc2a4<\/span><\/h3>\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li><a href=\"https:\/\/github.com\/couchbaselabs\/node-ottoman\" target=\"_blank\" rel=\"noopener\">\uc624\uc2a4\ub9cc\uc6a9 GitHub \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac<\/a><\/li>\n<li><a href=\"https:\/\/ottomanjs.com\/\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400\">\uc624\uc2a4\ub9cc V2 \ubb38\uc11c<\/span><\/a><\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/ottoman\" target=\"_blank\" rel=\"noopener\">NPM\uc758 \uc624\uc2a4\ub9cc \ud328\ud0a4\uc9c0<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/httpJunkie\/intro-to-ottoman-v2\" target=\"_blank\" rel=\"noopener\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc18c\uc2a4\ub97c \uc0ac\uc6a9\ud55c \uc624\uc2a4\ub9cc \uc18c\uac1c<\/a><\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/a-json-data-modeling-guide\/\" target=\"_blank\" rel=\"noopener\">JSON \ub370\uc774\ud130 \ubaa8\ub378\ub9c1 \uac00\uc774\ub4dc<\/a><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=0FIVaXCh2E8\" target=\"_blank\" rel=\"noopener\">OttomanJS\ub97c \ud1b5\ud55c \ub354 \ub098\uc740 \uac1c\ubc1c\uc790 \uacbd\ud5d8<\/a><\/li>\n<li><a href=\"https:\/\/docs.couchbase.com\/nodejs-sdk\/current\/hello-world\/start-using-sdk.html\" target=\"_blank\" rel=\"noopener\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 NodeJS SDK<\/a><\/li>\n<li><a href=\"https:\/\/hub.docker.com\/_\/couchbase\" target=\"_blank\" rel=\"noopener\">\uacf5\uc2dd \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ub3c4\ucee4 \uc774\ubbf8\uc9c0<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3><span style=\"font-weight: 400\">\uacb0\ub860<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Ottoman\uc758 \uc5ec\ub7ec \uac1c\ub150\uc744 \uc774\ud574\ud558\ub294 \ub370 \ub3c4\uc6c0\uc774 \ub418\ub294 \uac00\uc774\ub4dc \ud22c\uc5b4\ub97c \uc9c4\ud589\ud588\uc2b5\ub2c8\ub2e4. \uc2a4\ud0a4\ub9c8, \ubaa8\ub378, \ubbf8\ub4e4\uc6e8\uc5b4, \ud50c\ub7ec\uadf8\uc778, \ud6c4\ud06c \ubc0f \ucffc\ub9ac \uc791\uc131.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Ottoman\uc5d0\uc11c Couchbase\uc5d0 \uc5f0\uacb0\ud558\ub294 \ubc29\ubc95\uc744 \uc0b4\ud3b4\ubd24\uc2b5\ub2c8\ub2e4. \uc815\uc758\ub41c \uc2a4\ud0a4\ub9c8 \ubc0f \ubaa8\ub378. NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc2a4\ud0a4\ub9c8 \ubc0f \uc124\uacc4\uc758 \ub2e4\uc591\ud55c \uae30\ubcf8 \uc0ac\ud56d\uc744 \ub2e4\ub8e8\uc5c8\uc2b5\ub2c8\ub2e4. \ub9c8\uc9c0\ub9c9\uc73c\ub85c \uac00\uc7a5 \uc720\uc6a9\ud55c CRUD \uc791\uc5c5 \uba87 \uac00\uc9c0\ub97c \uc0b4\ud3b4\ubd24\uc2b5\ub2c8\ub2e4. Ottoman\uc744 \ud1b5\ud574 Couchbase\uc5d0\uc11c \ubb38\uc11c\ub97c \ube60\ub974\uac8c \ub9cc\ub4e4\uace0, \uc77d\uace0, \uc5c5\ub370\uc774\ud2b8\ud558\uace0, \uc0ad\uc81c\ud560 \uc218 \uc788\ub3c4\ub85d \ub3d5\uae30 \uc704\ud55c \ubaa8\ub4e0 \ub178\ub825\uc785\ub2c8\ub2e4.<\/span><\/p>\n<h4>\ud53c\ub4dc\ubc31 \uc81c\uacf5 \ubc0f \uae30\uc5ec<\/h4>\n<p>\uc774 \uae00\uc774 Couchbase\uc5d0 Ottoman\uacfc ODM\uc744 \uc0ac\uc6a9\ud558\ub294 \uc774\uc720\uc640 \ubc29\ubc95\uc744 \uc774\ud574\ud558\ub294 \ub370 \ub3c4\uc6c0\uc774 \ub418\uc5c8\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4. \uc704\uc5d0\uc11c \uc0b4\ud3b4\ubcf8 \ubc14\uc640 \uac19\uc774 Ottoman\uc744 \uc0ac\uc6a9\ud558\uc5ec NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc2a4\ud0a4\ub9c8 \uc124\uacc4, \uc720\ud6a8\uc131 \uac80\uc0ac \ubc0f \ubcf4\uc77c\ub7ec \ud50c\ub808\uc774\ud2b8 \uac10\uc18c\ub97c \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. CRUD \uc791\uc5c5\uc744 \uac04\ub2e8\ud558\uac8c \uc791\uc131\ud560 \uc218 \uc788\uc5b4 \uc2e0\uc18d\ud55c \uac1c\ubc1c\uc5d0 \ub3c4\uc6c0\uc774 \ub429\ub2c8\ub2e4.<\/p>\n<p>Ottoman\uc5d0 \ub300\ud574 \uad81\uae08\ud55c \uc810\uc774 \uc788\uac70\ub098 \uc774 \uc624\ud508\uc18c\uc2a4 \ud504\ub85c\uc81d\ud2b8\uc5d0 \uae30\uc5ec\ud558\uace0 \uc2f6\uac70\ub098 \uadf8\ub0e5 \uc778\uc0ac\ub9cc \ud558\uace0 \uc2f6\uc73c\uc2dc\ub2e4\uba74, \uc81c \uc774\ub984\uc740 Eric Bishard\uc774\uace0 Couchbase\uc5d0\uc11c Node.js \ubc0f JavaScript \uac1c\ubc1c\uc790 \uacbd\ud5d8\uc5d0 \uc911\uc810\uc744 \ub454 \uac1c\ubc1c\uc790 \uc639\ud638\uc790\uc774\uba70, \uc81c DM\uc740 \ud56d\uc0c1 \ub2e4\uc74c \uc8fc\uc18c\uc5d0\uc11c \uc5f4\ub824 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/twitter.com\/httpjunkie\">\ud2b8\uc704\ud130\/@httpJunkie<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Ottoman is an Object Data Modeler (ODM) for Couchbase&#8217;s Node.js SDK providing JSON schema and validation for NoSQL. Why Use an ODM for Couchbase With Ottoman, you declare schema in your code. Although Couchbase has no schema enforcement for your [&hellip;]<\/p>","protected":false},"author":53002,"featured_media":11030,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1819,1822,10128,2201],"tags":[2312,1510],"ppma_author":[8922],"class_list":["post-10947","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-modeling","category-node-js","category-ottoman","category-tools-sdks","tag-document-database","tag-odm"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Ottoman: Object Data Modeler (ODM) for Couchbase Node.js SDK<\/title>\n<meta name=\"description\" content=\"Ottoman is an Object Data Modeler (ODM) for Couchbase\u2019s Node.js SDK providing JSON schema and validation for NoSQL. Learn why to use an ODM for Couchbase.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/ko\/introduction-to-ottoman-with-couchbase\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introduction to Ottoman With Couchbase\" \/>\n<meta property=\"og:description\" content=\"Ottoman is an Object Data Modeler (ODM) for Couchbase\u2019s Node.js SDK providing JSON schema and validation for NoSQL. Learn why to use an ODM for Couchbase.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/introduction-to-ottoman-with-couchbase\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-03-30T16:13:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T06:42:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/03\/feature-image-c.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Eric Bishard\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@httpJunkie\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Eric Bishard\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/\"},\"author\":{\"name\":\"Eric Bishard\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/67d3a4b597e42370ccd34b715a6b1f4c\"},\"headline\":\"Introduction to Ottoman With Couchbase\",\"datePublished\":\"2021-03-30T16:13:45+00:00\",\"dateModified\":\"2025-06-14T06:42:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/\"},\"wordCount\":2756,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/03\/feature-image-c.jpg\",\"keywords\":[\"document database\",\"odm\"],\"articleSection\":[\"Data Modeling\",\"Node.js\",\"Ottoman.js ODM\",\"Tools &amp; SDKs\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/\",\"name\":\"Ottoman: Object Data Modeler (ODM) for Couchbase Node.js SDK\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/03\/feature-image-c.jpg\",\"datePublished\":\"2021-03-30T16:13:45+00:00\",\"dateModified\":\"2025-06-14T06:42:25+00:00\",\"description\":\"Ottoman is an Object Data Modeler (ODM) for Couchbase\u2019s Node.js SDK providing JSON schema and validation for NoSQL. Learn why to use an ODM for Couchbase.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/03\/feature-image-c.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/03\/feature-image-c.jpg\",\"width\":1200,\"height\":628,\"caption\":\"Introduction to Ottoman\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introduction to Ottoman With Couchbase\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/67d3a4b597e42370ccd34b715a6b1f4c\",\"name\":\"Eric Bishard\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/b7d1d2580c41d35a21654fb1abe65d23\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a316a2658772914defd259571b8cad18878eb23c9d0cc3a97dd803deca0c09ca?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a316a2658772914defd259571b8cad18878eb23c9d0cc3a97dd803deca0c09ca?s=96&d=mm&r=g\",\"caption\":\"Eric Bishard\"},\"description\":\"International speaker, blogging and advocating for the JavaScript, React, GraphQL and NoSQL community working as a Senior Developer Advocate for Couchbase.\",\"sameAs\":[\"https:\/\/www.reactstateofmind.com\",\"https:\/\/www.linkedin.com\/in\/eric-b\/\",\"https:\/\/x.com\/httpJunkie\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/eric-bishard\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ottoman: Object Data Modeler (ODM) for Couchbase Node.js SDK","description":"Ottoman is an Object Data Modeler (ODM) for Couchbase\u2019s Node.js SDK providing JSON schema and validation for NoSQL. Learn why to use an ODM for Couchbase.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/ko\/introduction-to-ottoman-with-couchbase\/","og_locale":"ko_KR","og_type":"article","og_title":"Introduction to Ottoman With Couchbase","og_description":"Ottoman is an Object Data Modeler (ODM) for Couchbase\u2019s Node.js SDK providing JSON schema and validation for NoSQL. Learn why to use an ODM for Couchbase.","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/introduction-to-ottoman-with-couchbase\/","og_site_name":"The Couchbase Blog","article_published_time":"2021-03-30T16:13:45+00:00","article_modified_time":"2025-06-14T06:42:25+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/03\/feature-image-c.jpg","type":"image\/jpeg"}],"author":"Eric Bishard","twitter_card":"summary_large_image","twitter_creator":"@httpJunkie","twitter_misc":{"Written by":"Eric Bishard","Est. reading time":"13\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/"},"author":{"name":"Eric Bishard","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/67d3a4b597e42370ccd34b715a6b1f4c"},"headline":"Introduction to Ottoman With Couchbase","datePublished":"2021-03-30T16:13:45+00:00","dateModified":"2025-06-14T06:42:25+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/"},"wordCount":2756,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/03\/feature-image-c.jpg","keywords":["document database","odm"],"articleSection":["Data Modeling","Node.js","Ottoman.js ODM","Tools &amp; SDKs"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/","url":"https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/","name":"Ottoman: Object Data Modeler (ODM) for Couchbase Node.js SDK","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/03\/feature-image-c.jpg","datePublished":"2021-03-30T16:13:45+00:00","dateModified":"2025-06-14T06:42:25+00:00","description":"Ottoman is an Object Data Modeler (ODM) for Couchbase\u2019s Node.js SDK providing JSON schema and validation for NoSQL. Learn why to use an ODM for Couchbase.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/03\/feature-image-c.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/03\/feature-image-c.jpg","width":1200,"height":628,"caption":"Introduction to Ottoman"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/introduction-to-ottoman-with-couchbase\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Introduction to Ottoman With Couchbase"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","description":"NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4, Couchbase","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/67d3a4b597e42370ccd34b715a6b1f4c","name":"\uc5d0\ub9ad \ube44\uc0e4\ub4dc","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/b7d1d2580c41d35a21654fb1abe65d23","url":"https:\/\/secure.gravatar.com\/avatar\/a316a2658772914defd259571b8cad18878eb23c9d0cc3a97dd803deca0c09ca?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a316a2658772914defd259571b8cad18878eb23c9d0cc3a97dd803deca0c09ca?s=96&d=mm&r=g","caption":"Eric Bishard"},"description":"\uad6d\uc81c \uc5f0\uc0ac, \ube14\ub85c\uadf8 \uc6b4\uc601, JavaScript, React, GraphQL \ubc0f NoSQL \ucee4\ubba4\ub2c8\ud2f0\ub97c \uc704\ud55c \uc639\ud638 \ud65c\ub3d9, Couchbase\uc758 \uc120\uc784 \uac1c\ubc1c\uc790 \uc639\ud638\uc790\ub85c \ud65c\ub3d9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.","sameAs":["https:\/\/www.reactstateofmind.com","https:\/\/www.linkedin.com\/in\/eric-b\/","https:\/\/x.com\/httpJunkie"],"url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/eric-bishard\/"}]}},"authors":[{"term_id":8922,"user_id":53002,"is_guest":0,"slug":"eric-bishard","display_name":"Eric Bishard","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/a316a2658772914defd259571b8cad18878eb23c9d0cc3a97dd803deca0c09ca?s=96&d=mm&r=g","author_category":"","last_name":"Bishard","first_name":"Eric","job_title":"","user_url":"https:\/\/www.reactstateofmind.com","description":"\uad6d\uc81c \uc5f0\uc0ac, \ube14\ub85c\uadf8 \uc6b4\uc601, JavaScript, React, GraphQL \ubc0f NoSQL \ucee4\ubba4\ub2c8\ud2f0\ub97c \uc704\ud55c \uc639\ud638 \ud65c\ub3d9, Couchbase\uc758 \uc120\uc784 \uac1c\ubc1c\uc790 \uc639\ud638\uc790\ub85c \ud65c\ub3d9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/10947","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/users\/53002"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=10947"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/10947\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/11030"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=10947"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=10947"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=10947"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=10947"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}