{"id":2131,"date":"2016-01-26T14:30:00","date_gmt":"2016-01-26T14:30:00","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2131"},"modified":"2016-01-26T14:30:00","modified_gmt":"2016-01-26T14:30:00","slug":"moving-sql-business-logic-to-the-application-layer","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/moving-sql-business-logic-to-the-application-layer\/","title":{"rendered":"SQL \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\uc744 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uacc4\uce35\uc73c\ub85c \uc774\ub3d9\ud558\uae30"},"content":{"rendered":"<p><a href=\"\/blog\/ko\/moving-sql-database-content-to-couchbase\/\">\uc9c0\ub09c\ubc88<\/a> \ud14c\uc774\ube14 \ud589\ub2f9 \ud558\ub098\uc758 \ubb38\uc11c\ub97c \uc0ac\uc6a9\ud558\uc5ec Couchbase\uc5d0\uc11c SQL \ud14c\uc774\ube14\uc744 \ub9e4\uc6b0 \uc6d0\uc2dc\uc801\uc774\uace0 \uac04\ub2e8\ud558\uac8c \uac00\uc838\uc62c \uc218 \uc788\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4.  \ud558\uc9c0\ub9cc \uc544\uc9c1 \ud574\uc57c \ud560 \uc77c\uc774 \ub0a8\uc544 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uacfc\uc815\uc5d0\uc11c \uae30\ubcf8 \ud0a4\uac00 \ubcc0\uacbd\ub418\uc5c8\uc73c\ubbc0\ub85c \uc774\ub97c \uc218\uc815\ud574\uc57c \ud569\ub2c8\ub2e4. \uadf8\ub9ac\uace0 SQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\ub294 \ud14c\uc774\ube14\ub9cc \uc788\ub294 \uac83\uc774 \uc544\ub2d9\ub2c8\ub2e4. \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\uc744 \uc804\ub2ec\ud558\ub294 \ub2e4\ub978 \uad6c\uc870\uc640 \ud568\uc218\uac00 \uc788\uc73c\uba70 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uacc4\uce35\uc73c\ub85c \uc774\ub3d9\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<h2>JOIN<\/h2>\n<p>\uac00\uc838\uc624\uae30 \ud6c4 \uac00\uc7a5 \uba3c\uc800 \ud558\uace0 \uc2f6\uc740 \uc791\uc5c5\uc740 \ubb38\uc11c\uc5d0\uc11c JOIN\uc744 \uc2e4\ud589\ud558\ub294 \uac83\uc778\ub370, \uc774\ub294 \ubcf8\uc9c8\uc801\uc73c\ub85c \uc815\ud655\ud55c \ub9e4\ud551\uc774\ubbc0\ub85c SQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c\ub3c4 \ub3d9\uc77c\ud55c \ubc29\uc2dd\uc73c\ub85c \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. N1QL \ucffc\ub9ac\ub97c \uc9c1\uc811 \uc2e4\ud589\ud558\ub294 \uac83\ub9cc\ud07c \uac04\ub2e8\ud558\uc9c0\ub294 \uc54a\uc2b5\ub2c8\ub2e4. N1QL\uc758 JOIN\uc740 \ubb38\uc11c\uc758 \ud0a4\uc5d0\uc11c\ub9cc \uc791\ub3d9\ud558\uba70, \ucda9\ub3cc\uc744 \ud53c\ud558\uae30 \uc704\ud574 \uac00\uc838\uc62c \ub54c \ud0a4\ub97c \ubcc0\uacbd\ud588\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c \ub2e4\ub978 \uc678\ub798 \ud0a4\ub97c \ubcc0\uacbd\ud574\uc57c \ud569\ub2c8\ub2e4. \uc88b\uc740 \uc18c\uc2dd\uc740 N1QL \ub370\uc774\ud130 \uc870\uc791 \uc5b8\uc5b4\ub97c \uc0ac\uc6a9\ud558\uba74 \uc815\ub9d0 \uc27d\uac8c \ud560 \uc218 \uc788\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4. \ub2e4\uc74c\uc5d0 \ub300\ud55c \uc9c0\uc6d0\uc774 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.1\/n1ql\/n1ql-language-reference\/update.html\">\uc5c5\ub370\uc774\ud2b8<\/a>, <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.1\/n1ql\/n1ql-language-reference\/merge.html\">MERGE<\/a>, <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.1\/n1ql\/n1ql-language-reference\/insert.html\">\uc0bd\uc785<\/a>\u00a0\ub610\ub294\u00a0<a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.1\/n1ql\/n1ql-language-reference\/upsert.html\">UPSERT<\/a>.<\/p>\n<pre>\n<code>cbq>\u00a0UPDATE default d SET language_id = \"language::\" || TOSTRING(d.language_id) WHERE _tableName = \"film\";<\/code><\/pre>\n<p>\n\uc774 \ucffc\ub9ac\ub294 \ubc84\ud0b7 \uae30\ubcf8\uac12\uc5d0 \uc788\ub294 _tableName \ud544\ub4dc\uac00 \"film\"\uc73c\ub85c \uc124\uc815\ub41c \ubaa8\ub4e0 \ubb38\uc11c\uc758 language_id \ud544\ub4dc\ub97c \ubcc0\uacbd\ud569\ub2c8\ub2e4. language_id\ub294 \uc22b\uc790 \uc720\ud615 \ud544\ub4dc\uc5d0\uc11c \ubb38\uc790\uc5f4\ub85c \ubc14\ub01d\ub2c8\ub2e4. 1\uc774\uc5c8\ub2e4\uba74 \uc774\uc81c \"language::1\"\uc774 \ub429\ub2c8\ub2e4. \uc774\uac83\uc740 \ubb38\uc11c\uc758 \uc2e4\uc81c \ud0a4\uc5d0 \ud574\ub2f9\ud558\uba70, RowMapper\uac00 \ucd94\uac00\ud55c \uac83\uc774\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4.<\/p>\n<p>'||' \uc5f0\uc0b0\uc790\ub294 \ubb38\uc790\uc5f4 \uc5f0\uacb0\uc5d0 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uadf8\ub9ac\uace0 language_id\ub294 \uc22b\uc790\uc774\uae30 \ub54c\ubb38\uc5d0 \uc774\ub97c \ubcc0\ud658\ud558\ub824\uba74 toString \uba54\uc11c\ub4dc\ub97c \uc0ac\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4. \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \ubaa8\ub4e0 \uc678\ub798 \ud0a4\uc5d0 \ub300\ud574 \uc774 \ucffc\ub9ac\ub97c \uc2e4\ud589\ud574\uc57c \ud569\ub2c8\ub2e4. \uadf8\ub7f0 \ub2e4\uc74c JOIN, NEST \ubc0f UNNEST\ub97c \uc0ac\uc6a9\ud558\uc5ec N1QL \ucffc\ub9ac\ub97c \uc2e4\ud589\ud560 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<pre>\n<code>\ncbq> SELECT \u00a0* FROM `default` AS a JOIN `default` AS \u00a0b ON KEYS a.language_id;\ncbq> SELECT * FROM `default` AS a NEST `default` AS \u00a0b ON KEYS a.language_id;\n<\/code><\/pre>\n<h2>\uc2dc\ud000\uc2a4, \ubcf4\uae30, \ud2b8\ub9ac\uac70, \ub3c4\uba54\uc778 \ubc0f \ud568\uc218<\/h2>\n<p>SQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c Couchbase\ub85c \uc9c1\uc811 \ub9c8\uc774\uadf8\ub808\uc774\uc158\ud560 \uc218 \uc5c6\ub294 \uac83\uc774 \uba87 \uac00\uc9c0 \uc788\uc2b5\ub2c8\ub2e4. \uc880 \ub354 \uad6c\uccb4\uc801\uc73c\ub85c \ub9d0\ud558\uba74, SQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc788\ub358 \ubaa8\ub4e0 \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\uc744 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uacc4\uce35\uc73c\ub85c \uc62e\uaca8\uc57c \ud569\ub2c8\ub2e4. \uc5b4\ub5a4 \uac83\uc740 \ub2e4\ub978 \uac83\ubcf4\ub2e4 \ub354 \uac04\ub2e8\ud558\uac8c \uc774\ub3d9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub370\uc774\ud130 \uacc4\uce35\uc5d0 \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\uc744 \ub450\ub294 \uac83\uc774 \uc88b\uc740\uc9c0 \uc544\ub2cc\uc9c0\ub294 \uc5ec\ub7ec\ubd84\uc774 \uacb0\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uac1c\uc778\uc801\uc73c\ub85c \uc120\ud638\ud558\uc9c0\ub294 \uc54a\uc9c0\ub9cc, \ub2e4\uc591\ud55c \uc571\uc774 \ub3d9\uc77c\ud55c \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc73c\ubbc0\ub85c DB \uc218\uc900\uc5d0\uc11c \ud45c\ud604\ub418\ub294 \uc81c\uc57d\uc774 \uc88b\uc740 \uac83\uc77c \uc218 \uc788\ub2e4\ub294 \uac83\uc744 \uc774\ud574\ud569\ub2c8\ub2e4. \uc800\ub294 \uc774\ub7ec\ud55c \uc571\uc774 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub85c \ubc14\ub85c \uc774\ub3d9\ud558\ub294 \ub300\uc2e0 \uc11c\ube44\uc2a4\uc5d0 \uc758\uc874\ud574\uc57c \ud55c\ub2e4\uace0 \uc0dd\uac01\ud569\ub2c8\ub2e4.<\/p>\n<h3>\uc2dc\ud000\uc2a4<\/h3>\n<p>\uc2dc\ud000\uc2a4\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.1\/developer-guide\/counters.html\">\uc6d0\uc790 \uce74\uc6b4\ud130<\/a>\ub97c \uc0ac\uc6a9\ud558\uc5ec \uac04\ub2e8\ud558\uac8c \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre>\n<code>\n\u00a0 \u00a0JsonLongDocument rv = bucket.counter(key, 20, 100);\n\u00a0 \u00a0 LOGGER.info(\"Delta=20, Initial=100. Current value is: \" + rv.content());\n\u00a0 \u00a0 rv = bucket.counter(key, 1);\n\u00a0 \u00a0 LOGGER.info(\"Delta=1. Current value is: \" + rv.content());\n<\/code><\/pre>\n<h3>\uc870\ud68c\uc218<\/h3>\n<p>SQL \ubdf0\ub294 SQL \ucffc\ub9ac\uc758 \uacb0\uacfc\ub85c \uc0dd\uc131\ub41c \ub3d9\uc801 \ud14c\uc774\ube14\ub85c \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. Couchbase\uc5d0\uc11c\ub294 <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.1.0\/develop\/guides\/couchbase-lite\/native-api\/view\/index.html\">\ubcf4\uae30<\/a> \ub294 \uc99d\ubd84 \ub9f5\/\ucd95\uc18c \ud568\uc218\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub3d9\uc801\uc73c\ub85c \uc0dd\uc131\ub418\ub294 \uc778\ub371\uc2a4(\uc778\ub371\uc2a4\ub97c \ub450 \uc5f4\uc758 \ud14c\uc774\ube14\uc774\ub77c\uace0 \uc0dd\uac01\ud558\uc138\uc694)\ub85c, \ub300\ubd80\ubd84 \ubdf0\uc758 \ubcf5\uc7a1\uc131\uc5d0 \ub530\ub77c \ub2ec\ub77c\uc9d1\ub2c8\ub2e4. \ubdf0\ub294 \ub370\uc774\ud130\ub97c \ub2e4\ub978 \ucee8\ud14d\uc2a4\ud2b8\uc5d0 \ud45c\uc2dc\ud558\ub294 \ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. NoSQL\uc5d0\uc11c\ub294 \uadf8\ub807\uac8c \ud558\ub824\uba74 \ub370\uc774\ud130\ub97c \ube44\uc815\uaddc\ud654\ud558\uae30 \uc2dc\uc791\ud558\uc5ec \ub370\uc774\ud130\ub97c \ubcf5\uc81c\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c \uc791\uc5c5 \uc2dc \uc8fc\uc758\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774 \ub370\uc774\ud130\ub97c \uc790\uc8fc \uc218\uc815\ud574\uc57c \ud558\ub294 \uacbd\uc6b0 \ube44\uc815\uaddc \uc815\uaddc\ud654\ub294 \uc88b\uc740 \uc0dd\uac01\uc774 \uc544\ub2d0 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4(\ud604\uc7ac \uc791\uc5c5 \uc911\uc778 SubDocument API\uc5d0\uc11c\ub294 \uc0c1\ud669\uc774 \ub2ec\ub77c\uc9c8 \uc218 \uc788\uc9c0\ub9cc). \ub2e4\uc74c\uc740 \ubcf4\uae30\uc758 \uc608\uc2dc\ub97c \ud1b5\ud574 \uc544\uc774\ub514\uc5b4\ub97c \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<h3><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2016\/january\/moving-sql-business-logic-to-the-application-layer\/viewexample.png\" \/><\/h3>\n<h3>\ub3c4\uba54\uc778<\/h3>\n<p>SQL \ub3c4\uba54\uc778\uc740 \uc81c\uc57d \uc870\uac74\uc774 \ud1b5\ud569\ub41c \uc0c8\ub85c\uc6b4 \uc720\ud615(\uae30\uc874 \uc720\ud615\uc5d0 \uae30\ubc18)\uc785\ub2c8\ub2e4. \uc81c SQL \uc0d8\ud50c\uc5d0\uc11c\ub294 type\uc774\ub77c\ub294 \uc0c8 \ub3c4\uba54\uc778\uc774 \ub2e4\uc74c\uacfc \uac19\uc774 \uc815\uc758\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre>\n<code>\n\u00a0 \u00a0CREATE DOMAIN public.year\n\u00a0 \u00a0 \u00a0 AS integer\n\u00a0 \u00a0 \u00a0 CONSTRAINT year_check CHECK (VALUE >= 1901 AND VALUE <= 2155);\n\u00a0 \u00a0 ALTER DOMAIN public.year\n\u00a0 \u00a0 \u00a0 OWNER TO postgres;\n<\/code><\/pre>\n<p>\uae30\uc874 \uc815\uc218 \ud0c0\uc785\uc5d0\uc11c \uc5f0\ub3c4\ub77c\ub294 \uc0c8\ub85c\uc6b4 \ud0c0\uc785\uc744 \uc815\uc758\ud569\ub2c8\ub2e4. \uc5f0\ub3c4 \uac12\uc740 1901\uc5d0\uc11c 2155 \uc0ac\uc774\uc5ec\uc57c \ud55c\ub2e4\ub294 \uc81c\uc57d \uc870\uac74\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4. \uc774 \uc81c\uc57d \uc870\uac74\uc744 Java\ub85c \ud45c\ud604\ud558\ub824\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uc720\ud6a8\uc131 \uac80\uc0ac \ud504\ub808\uc784\uc6cc\ud06c\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/hibernate.org\/validator\/\">\ucd5c\ub300 \uc808\uc804 \ubaa8\ub4dc \uc720\ud6a8\uc131 \uac80\uc0ac\uae30<\/a>. \uc5f0\ub3c4 \uc720\ud615\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4:<\/p>\n<pre>\n<code>\n\u00a0 \u00a0 \u00a0@Min(1901) @Max(2155)\n\u00a0 \u00a0 \u00a0 private int year;\n<\/code><\/pre>\n<h3>\u00a0<\/h3>\n<h3 style=\"margin-top: 0.7em; color: rgb(51, 51, 51); text-align: left;\">\ud2b8\ub9ac\uac70<\/h3>\n<p style=\"color: rgb(51, 51, 51); line-height: 20.8px; text-align: left;\">\ud2b8\ub9ac\uac70\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \ud2b9\uc815 INSERT, DELETE \ub610\ub294 UPDATE\uc640 \uac19\uc740 \ud2b9\uc815 \uc791\uc5c5\uc774 \ubc1c\uc0dd\ud560 \ub54c \uc2e4\ud589\ub418\ub294 SQL \ud568\uc218\uc785\ub2c8\ub2e4. \ub370\uc774\ud130\uc758 \ubb34\uacb0\uc131\uc744 \uac15\ud654\ud558\uac70\ub098 \uc791\uc5c5\uc744 \uc790\ub3d9\ud654\ud560 \uc218 \uc788\ub294 \uc88b\uc740 \ubc29\ubc95\uc785\ub2c8\ub2e4. Couchbase Server\uc5d0\ub294 \uc774\uc640 \uc720\uc0ac\ud55c \uae30\ub2a5\uc774 \uc5c6\uc73c\ubbc0\ub85c \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uacc4\uce35\uc73c\ub85c \uc774\ub3d9\ud574\uc57c \ud569\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc774\ubca4\ud2b8 \ubc84\uc2a4\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc774\ub97c \uc7ac\ud604\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\uac83\uc740 \uc544\ub9c8\ub3c4 Couchbase\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.1\/concepts\/data-change-protocol.html\">DCP<\/a><\/p>\n<h3>\uae30\ub2a5<\/h3>\n<p>\ub300\ubd80\ubd84\uc758 SQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c\ub294 \uc0ac\uc6a9\uc790\uac00 \uc9c1\uc811 \ud568\uc218\ub97c \uc815\uc758\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud604\uc7ac N1QL\uc5d0\uc11c\ub294 \uc774\uac83\uc774 \ubd88\uac00\ub2a5\ud569\ub2c8\ub2e4. \ud574\ub2f9 \ud568\uc218\uc5d0 \ub123\ub294 \ubaa8\ub4e0 \ub85c\uc9c1\uc740 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uacc4\uce35\uc5d0 \ub123\uc5b4\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<h2>\uacb0\ub860<\/h2>\n<p>\uc774\uc81c SQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c Couchbase\ub85c \uac04\ub2e8\ud558\uac8c \ub9c8\uc774\uadf8\ub808\uc774\uc158\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc5b4\ub290 \uc815\ub3c4 \uc774\ud574\ud558\uc168\uc744 \uac83\uc785\ub2c8\ub2e4. \uc774\uac83\uc774 \uc5bc\ub9c8\ub098 \uac04\ub2e8\ud55c \ub9c8\uc774\uadf8\ub808\uc774\uc158 \uacbd\ub85c\uc778\uc9c0 \uc544\ubb34\ub9ac \uac15\uc870\ud574\ub3c4 \uc9c0\ub098\uce58\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc5ec\uae30\uc5d0\ub294 \ub370\uc774\ud130 \ubaa8\ub378\ub9c1\uc774 \ud544\uc694\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc804\uccb4 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc5d0\ub294 \ub370\uc774\ud130 \ubaa8\ub378\uc744 \uc798 \uc0b4\ud3b4\ubcf4\uace0 \ubb34\uc5c7\uc744 \ube44\uc815\uaddc\ud654\ud560 \uc218 \uc788\ub294\uc9c0 \ud655\uc778\ud574\uc57c \ud569\ub2c8\ub2e4. \u00a0\u00a0<\/p>\n<p>\uc544\ub798 \ub313\uae00\ub85c \uc5ec\ub7ec\ubd84\uc758 \uc758\uacac\uc744 \uc54c\ub824\uc8fc\uc138\uc694. \uc608\ub97c \ub4e4\uc5b4 \uc774\ubbf8 SQL \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc744 \uc218\ud589\ud558\uc168\ub2e4\uba74 \uc5b4\ub5bb\uac8c \uc218\ud589\ud558\uc168\ub294\uc9c0 \uc54c\ub824\uc8fc\uc2dc\uba74 \uae30\uc069\ub2c8\ub2e4.)<\/p>","protected":false},"excerpt":{"rendered":"<p>Last time we left with a very raw, straight forward import of SQL tables in Couchbase, with one document per table row. \u00a0But there is still work to do. Primary keys have changed in the process so we need to [&hellip;]<\/p>","protected":false},"author":49,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815],"tags":[],"ppma_author":[9023],"class_list":["post-2131","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Moving SQL business logic to the Application Layer - The Couchbase Blog<\/title>\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\/moving-sql-business-logic-to-the-application-layer\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Moving SQL business logic to the Application Layer\" \/>\n<meta property=\"og:description\" content=\"Last time we left with a very raw, straight forward import of SQL tables in Couchbase, with one document per table row. \u00a0But there is still work to do. Primary keys have changed in the process so we need to [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/moving-sql-business-logic-to-the-application-layer\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-01-26T14:30:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Laurent Doguin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ldoguin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"unstructured.io\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/\"},\"author\":{\"name\":\"Laurent Doguin\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e\"},\"headline\":\"Moving SQL business logic to the Application Layer\",\"datePublished\":\"2016-01-26T14:30:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/\"},\"wordCount\":823,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Best Practices and Tutorials\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/\",\"name\":\"Moving SQL business logic to the Application Layer - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-01-26T14:30:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Moving SQL business logic to the Application Layer\"}]},{\"@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\/c0aa9b8f1ed51b7a9e2f7cb755994a5e\",\"name\":\"Laurent Doguin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/12929ce99397769f362b7a90d6b85071\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g\",\"caption\":\"Laurent Doguin\"},\"description\":\"Laurent is a nerdy metal head who lives in Paris. He mostly writes code in Java and structured text in AsciiDoc, and often talks about data, reactive programming and other buzzwordy stuff. He is also a former Developer Advocate for Clever Cloud and Nuxeo where he devoted his time and expertise to helping those communities grow bigger and stronger. He now runs Developer Relations at Couchbase.\",\"sameAs\":[\"https:\/\/x.com\/ldoguin\"],\"honorificPrefix\":\"Mr\",\"birthDate\":\"1985-06-07\",\"gender\":\"male\",\"award\":[\"Devoxx Champion\",\"Couchbase Legend\"],\"knowsAbout\":[\"Java\"],\"knowsLanguage\":[\"English\",\"French\"],\"jobTitle\":\"Director Developer Relation & Strategy\",\"worksFor\":\"Couchbase\",\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/laurent-doguin\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Moving SQL business logic to the Application Layer - The Couchbase Blog","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\/moving-sql-business-logic-to-the-application-layer\/","og_locale":"ko_KR","og_type":"article","og_title":"Moving SQL business logic to the Application Layer","og_description":"Last time we left with a very raw, straight forward import of SQL tables in Couchbase, with one document per table row. \u00a0But there is still work to do. Primary keys have changed in the process so we need to [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/moving-sql-business-logic-to-the-application-layer\/","og_site_name":"The Couchbase Blog","article_published_time":"2016-01-26T14:30:00+00:00","og_image":[{"width":1800,"height":630,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png","type":"image\/png"}],"author":"Laurent Doguin","twitter_card":"summary_large_image","twitter_creator":"@ldoguin","twitter_misc":{"Written by":"unstructured.io","Est. reading time":"3\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/"},"author":{"name":"Laurent Doguin","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e"},"headline":"Moving SQL business logic to the Application Layer","datePublished":"2016-01-26T14:30:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/"},"wordCount":823,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Best Practices and Tutorials"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/","url":"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/","name":"Moving SQL business logic to the Application Layer - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2016-01-26T14:30:00+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-business-logic-to-the-application-layer\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Moving SQL business logic to the Application Layer"}]},{"@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\/c0aa9b8f1ed51b7a9e2f7cb755994a5e","name":"\ub85c\ub791 \ub3c4\uadc4","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/12929ce99397769f362b7a90d6b85071","url":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","caption":"Laurent Doguin"},"description":"Laurent\ub294 \ud30c\ub9ac\uc5d0 \uc0ac\ub294 \uad34\uc9dc \uae08\uc18d\uacf5\ud559\ub3c4\uc785\ub2c8\ub2e4. \uc8fc\ub85c Java\ub85c \ucf54\ub4dc\ub97c \uc791\uc131\ud558\uace0 AsciiDoc\uc73c\ub85c \uad6c\uc870\ud654\ub41c \ud14d\uc2a4\ud2b8\ub97c \uc791\uc131\ud558\uba70 \ub370\uc774\ud130, \ub9ac\uc561\ud2f0\ube0c \ud504\ub85c\uadf8\ub798\ubc0d \ubc0f \uae30\ud0c0 \uc720\ud589\uc5b4\uc5d0 \ub300\ud574 \uc790\uc8fc \uc774\uc57c\uae30\ud569\ub2c8\ub2e4. \ub610\ud55c Clever Cloud\uc640 Nuxeo\uc758 \uac1c\ubc1c\uc790 \uc639\ud638\uc790\ub85c \ud65c\ub3d9\ud558\uba70 \ud574\ub2f9 \ucee4\ubba4\ub2c8\ud2f0\uac00 \ub354 \ud06c\uace0 \uac15\ub825\ud558\uac8c \uc131\uc7a5\ud560 \uc218 \uc788\ub3c4\ub85d \uc790\uc2e0\uc758 \uc2dc\uac04\uacfc \uc804\ubb38\uc131\uc744 \ubc14\ucce4\uc2b5\ub2c8\ub2e4. \ud604\uc7ac Couchbase\uc5d0\uc11c \uac1c\ubc1c\uc790 \uad00\uacc4\ub97c \uc6b4\uc601\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.","sameAs":["https:\/\/x.com\/ldoguin"],"honorificPrefix":"Mr","birthDate":"1985-06-07","gender":"male","award":["Devoxx Champion","Couchbase Legend"],"knowsAbout":["Java"],"knowsLanguage":["English","French"],"jobTitle":"Director Developer Relation & Strategy","worksFor":"Couchbase","url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/laurent-doguin\/"}]}},"authors":[{"term_id":9023,"user_id":49,"is_guest":0,"slug":"laurent-doguin","display_name":"Laurent Doguin","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","first_name":"Laurent","last_name":"Doguin","user_url":"","author_category":"","description":"Laurent\ub294 \ud30c\ub9ac\uc5d0 \uc0ac\ub294 \uad34\uc9dc \uae08\uc18d\uacf5\ud559\ub3c4\uc785\ub2c8\ub2e4. \uc8fc\ub85c Java\ub85c \ucf54\ub4dc\ub97c \uc791\uc131\ud558\uace0 AsciiDoc\uc73c\ub85c \uad6c\uc870\ud654\ub41c \ud14d\uc2a4\ud2b8\ub97c \uc791\uc131\ud558\uba70 \ub370\uc774\ud130, \ub9ac\uc561\ud2f0\ube0c \ud504\ub85c\uadf8\ub798\ubc0d \ubc0f \uae30\ud0c0 \uc720\ud589\uc5b4\uc5d0 \ub300\ud574 \uc790\uc8fc \uc774\uc57c\uae30\ud569\ub2c8\ub2e4. \ub610\ud55c Clever Cloud\uc640 Nuxeo\uc758 \uac1c\ubc1c\uc790 \uc639\ud638\uc790\ub85c \ud65c\ub3d9\ud558\uba70 \ud574\ub2f9 \ucee4\ubba4\ub2c8\ud2f0\uac00 \ub354 \ud06c\uace0 \uac15\ub825\ud558\uac8c \uc131\uc7a5\ud560 \uc218 \uc788\ub3c4\ub85d \uc790\uc2e0\uc758 \uc2dc\uac04\uacfc \uc804\ubb38\uc131\uc744 \ubc14\ucce4\uc2b5\ub2c8\ub2e4. \ud604\uc7ac Couchbase\uc5d0\uc11c \uac1c\ubc1c\uc790 \uad00\uacc4\ub97c \uc6b4\uc601\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/2131","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\/49"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=2131"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/2131\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=2131"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=2131"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=2131"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=2131"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}