{"id":2130,"date":"2016-01-25T13:30:01","date_gmt":"2016-01-25T13:30:01","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2130"},"modified":"2025-06-13T17:33:08","modified_gmt":"2025-06-14T00:33:08","slug":"moving-sql-database-content-to-couchbase","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/moving-sql-database-content-to-couchbase\/","title":{"rendered":"SQL \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ucf58\ud150\uce20\ub97c Couchbase\ub85c \uc774\ub3d9\ud558\uae30"},"content":{"rendered":"<p>N1QL\uc758 GA \ub9b4\ub9ac\uc2a4 \uc774\ud6c4 SQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c Couchbase\ub85c \ucf58\ud150\uce20\ub97c \uc62e\uae30\ub294 \ubc29\ubc95\uc5d0 \ub300\ud55c \uc9c8\ubb38\uc744 \ub9ce\uc774 \ubc1b\uc2b5\ub2c8\ub2e4. \uadf8\ub807\uac8c \ud558\ub294 \ubc29\ubc95\uc5d0\ub294 \uc5ec\ub7ec \uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc624\ub298\uc740 \uac00\uc7a5 \uac04\ub2e8\ud55c \ubc29\ubc95\uc744 \uc120\ud0dd\ud588\uc2b5\ub2c8\ub2e4. \uac01 \ud14c\uc774\ube14\uc758 \uac01 \ud589\uc744 JsonDocument\ub85c \ubcc0\ud658\ud558\uc5ec Couchbase\uc5d0 \uc800\uc7a5\ud558\uaca0\uc2b5\ub2c8\ub2e4. \uc800\ub294 Postgres\uc640 \uadf8 <a href=\"https:\/\/www.postgresqltutorial.com\/postgresql-sample-database\/\">\uc0d8\ud50c \ub370\uc774\ud130 \uc138\ud2b8<\/a> MySQL\uc5d0\uc11c \uc601\uac10\uc744 \uc5bb\uc740 <a href=\"https:\/\/dev.mysql.com\/doc\/sakila\/en\/\">\uc0ac\ud0ac\ub77c \uc0d8\ud50c<\/a>. Java\ub97c \uc0ac\uc6a9\ud558\uaca0\uc9c0\ub9cc \uc5ec\uae30\uc5d0 \uc81c\uc2dc\ub41c \uac00\uc774\ub4dc\ub77c\uc778\uc740 \ub2e4\ub978 \uc5b8\uc5b4\uc5d0\ub3c4 \uc801\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2>\uc2e4\ud589 \uc911\uc778 SQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc5f0\uacb0\ud558\uae30<\/h2>\n<p>\uc800\ub294 Java\ub97c \uc0ac\uc6a9\ud558\uace0 \uc788\uc73c\ubbc0\ub85c Spring Boot\uc640 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc5f0\uacb0\uc744 \ucc98\ub9ac\ud558\ub294 JDBC \ud328\ud0a4\uc9c0\ub97c \uad6c\ud604\ud560 \uac83\uc785\ub2c8\ub2e4. \uc81c\uac00 \ud574\uc57c \ud560 \uc77c\uc740 \uc62c\ubc14\ub978 \uc885\uc18d\uc131\uacfc \uc18d\uc131\uc744 \uc124\uc815\ud558\uc5ec <a href=\"https:\/\/docs.spring.io\/spring\/docs\/current\/javadoc-api\/org\/springframework\/jdbc\/core\/JdbcTemplate.html\">JdbcTemplate<\/a>. \uc774 \uac1c\uccb4\ub97c \uc0ac\uc6a9\ud558\uba74 SQL \ucffc\ub9ac\ub97c \uc27d\uac8c \uc2e4\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h3>\uc885\uc18d\uc131<\/h3>\n<p>\ubaa8\ub4e0 \uac83\uc744 \uae54\ub054\ud558\uac8c \uc790\ub3d9\uc73c\ub85c \uad6c\uc131\ud558\ub824\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uc885\uc18d\uc131\uc774 \ud544\uc694\ud569\ub2c8\ub2e4:<\/p>\n<pre>\n<code>\n        dependencies {\n            compile \"org.springframework.boot:spring-boot-starter\",\n                    \"org.springframework.boot:spring-boot-starter-data-jpa\",\n                    \"org.postgresql:postgresql:9.4-1206-jdbc4\"\n        }\n<\/code><\/pre>\n<p>\uc800\ub294 Postgres\ub85c \ud14c\uc2a4\ud2b8\ud558\uace0 \uc788\uc9c0\ub9cc Spring JDBC\uc5d0\uc11c \uc9c0\uc6d0\ud558\ub294 \ub2e4\ub978 \ub4dc\ub77c\uc774\ubc84\ub97c \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc2a4\ud504\ub9c1 \ubd80\ud305 \uc2a4\ud0c0\ud130 \ub370\uc774\ud130-jpa\ub97c \uc0ac\uc6a9\ud558\uba74 \ubbf8\ub9ac \uad6c\uc131\ub41c JdbcTemplate\uc744 \uc8fc\uc785\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h3>\uad6c\uc131<\/h3>\n<p>Spring \ud504\ub808\uc784\uc6cc\ud06c\uac00 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \ucc3e\ub3c4\ub85d \ud558\ub824\uba74 \uad6c\uc131 \ud30c\uc77c\uc5d0 \ub2e4\uc74c \uc18d\uc131\uc744 \ucd94\uac00\ud558\uc138\uc694(\uc608: src\/main\/resources\/application.properties).<\/p>\n<pre>\n<code>\n        spring.jpa.database=POSTGRESQL\n        spring.datasource.platform=postgres\n        spring.jpa.show-sql=true\n        spring.jpa.hibernate.ddl-auto=create-drop\n        spring.database.driverClassName=org.postgresql.Driver\n        spring.datasource.url=jdbc:postgresql:\/\/192.168.99.100:5432\/dvdrental\n        spring.datasource.username=postgres\n        spring.datasource.password=password\n<\/code><\/pre>\n<p>\ubb3c\ub860 \uc0ac\uc6a9 \uc911\uc778 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \ub530\ub77c \uc774\ub97c \ubbf8\uc138 \uc870\uc815\ud574\uc57c \ud569\ub2c8\ub2e4. \uc5ec\uae30\uc11c\ub294 \uae30\ubcf8 \ud3ec\ud2b8 5432\ub85c 192.168.99.100\uc5d0\uc11c \uc2e4\ud589\ub418\ub294 Postgres\ub97c \uc0ac\uc6a9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc0ac\uc6a9\ud558\ub824\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \uc774\ub984\uc740 dvdrental\uc785\ub2c8\ub2e4.<\/p>\n<h3>\ucf54\ub4dc<\/h3>\n<p>\ubaa8\ub4e0 \uac83\uc774 \uc62c\ubc14\ub974\uac8c \uad6c\uc131\ub418\uc5c8\ub2e4\uba74 JdbcTemplate\uc744 \uc0bd\uc785\ud558\uace0 SQL DB \ucffc\ub9ac\ub97c \uc2dc\uc791\ud560 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<pre>\n<code>\n     @Autowired\n     JdbcTemplate jdbcTemplate;\n\n     @Override\n     public void doStuff() throws Exception {\n      String sql = \"SELECT id FROM table\";\n         Long id = jdbcTemplate.queryForObject(sql, Long.class);\n     }\n<\/code><\/pre>\n<h2>Couchbase\uc5d0 \uc5f0\uacb0<\/h2>\n<p>\uc81c \ubaa9\ud45c\ub294 SQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c Couchbase\ub85c \ucf58\ud150\uce20\ub97c \uc774\ub3d9\ud558\ub294 \uac83\uc774\ubbc0\ub85c Couchbase \uc5f0\uacb0\ub3c4 \ud544\uc694\ud569\ub2c8\ub2e4.<\/p>\n<h3>\uc885\uc18d\uc131<\/h3>\n<p>Java \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c Couchbase\ub97c \uc0ac\uc6a9\ud558\ub824\uba74 \ub2e4\uc74c \uc885\uc18d\uc131\uc744 \ucd94\uac00\ud574\uc57c \ud569\ub2c8\ub2e4:<\/p>\n<pre>\n<code>\n   dependencies {\n        compile \"com.couchbase.client:java-client:2.2.3\"\n    }\n<\/code><\/pre>\n<p>\uc774\ub807\uac8c \ud558\uba74 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uc5d0 \uc561\uc138\uc2a4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.1\/sdks\/java-2.2\/java-intro.html\"> Java SDK<\/a>.<\/p>\n<h3>\uad6c\uc131<\/h3>\n<p>\uae30\ubcf8 Couchbase \uad6c\uc131\uc5d0\ub294 \uae30\ubcf8\uc801\uc73c\ub85c \uc11c\ubc84 IP \uc8fc\uc18c, \ubc84\ud0b7 \uc774\ub984, \ubc84\ud0b7 \ube44\ubc00\ubc88\ud638\uc758 \uc138 \uac00\uc9c0 \uc18d\uc131\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. Spring Boot \ubc29\uc2dd\uc73c\ub85c \uc774 \uc791\uc5c5\uc744 \uc218\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4:<\/p>\n<pre>\n<code>\n        @Configuration\n        public class Database {\n\n            @Value(\"${hostname}\")\n            private String hostname;\n\n            @Value(\"${bucket}\")\n            private String bucket;\n\n            @Value(\"${password}\")\n            private String password;\n\n            public @Bean Cluster cluster() {\n                return CouchbaseCluster.create(hostname);\n            }\n\n            public @Bean Bucket bucket() {\n                return cluster().openBucket(bucket, password);\n            }\n\n        }\n<\/code><\/pre>\n<p>\uc18d\uc131 \ud638\uc2a4\ud2b8 \uc774\ub984, \ubc84\ud0b7 \ubc0f \ube44\ubc00\ubc88\ud638\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc18d\uc131 \ud30c\uc77c\uc5d0 \uc9c1\uc811 \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre>\n<code>\n   # \ud638\uc2a4\ud2b8 \uc774\ub984, \uc27c\ud45c\ub85c \uad6c\ubd84\ub41c \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ub178\ub4dc IP \ub610\ub294 \ud638\uc2a4\ud2b8 \uc774\ub984 \ubaa9\ub85d\n    \ud638\uc2a4\ud2b8 \uc774\ub984: localhost,127.0.0.1\n    # \ubc84\ud0b7 \uc774\ub984\n    \ubc84\ud0b7: \uae30\ubcf8\uac12\n    # \ubc84\ud0b7 \ube44\ubc00\ubc88\ud638\n    \ube44\ubc00\ubc88\ud638\n<\/code><\/pre>\n<h3>\ucf54\ub4dc<\/h3>\n<p>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\uc5d0\uc11c \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 \ub3d9\ub4f1\ud55c \uc218\uc900\uc758 \uc138\ubd84\ud654 \uc218\uc900\uc740 \ubb38\uc11c\ub97c \uc800\uc7a5\ud558\ub294 \ubc84\ud0b7\uc774 \ub420 \uac83\uc785\ub2c8\ub2e4. \uc774\uc804 \uad6c\uc131\uc744 \uc0ac\uc6a9\ud558\uba74 \uac04\ub2e8\ud788 \ubc84\ud0b7\uc744 \uc8fc\uc785\ud558\uace0 \ub180\uae30 \uc2dc\uc791\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre>\n<code>\n        @Autowired\n        Bucket bucket;\n\n        @Override\n        public void doStuff() throws Exception {\n            JsonDocument doc = bucket.get(\"key\");\n        }\n<\/code><\/pre>\n<h2>\ud14c\uc774\ube14<\/h2>\n<p>\uc774 \uc2dc\uc810\uc5d0\uc11c SQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 Couchbase\uc5d0 \uc5f0\uacb0\uc774 \uc644\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c \ub370\uc774\ud130\ub97c \uc774\ub3d9\ud558\uae30 \uc2dc\uc791\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub370\uc774\ud130\ub97c \uc774\ub3d9\ud558\ub294 \uac00\uc7a5 \uc26c\uc6b4 \ubc29\ubc95\uc740 \uac01 \ud14c\uc774\ube14\uc758 \uac01 \ud589\uc744 \ud558\ub098\uc758 \ubb38\uc11c\ub85c \uac04\uc8fc\ud558\ub294 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<h3>SQL \uc2a4\ud0a4\ub9c8 \uac00\uc838\uc624\uae30<\/h3>\n<p>JdbcTemplate\uc744 \uc0ac\uc6a9\ud558\uc5ec \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \uc2a4\ud0a4\ub9c8\ub97c \uc790\ub3d9\uc73c\ub85c \uac00\uc838\uc624\ub294 \uac83\ubd80\ud130 \uc2dc\uc791\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc5ec\uae30\uc11c \ud765\ubbf8\ub85c\uc6b4 \uac1d\uccb4\ub294 <a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/sql\/DatabaseMetaData.html\">\ub370\uc774\ud130\ubca0\uc774\uc2a4 \uba54\ud0c0\ub370\uc774\ud130<\/a>\ub97c \uc0ac\uc6a9\ud558\uba74 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \uc804\uccb4 \uad6c\uc870\ub97c \ud30c\uc545\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 API\ub294 \uc0ac\uc6a9\ud558\uae30 \uac00\uc7a5 \uc26c\uc6b4 \uac83\uc740 \uc544\ub2c8\uc9c0\ub9cc \uc801\uc5b4\ub3c4 \ubb38\uc11c\ud654\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub370\uc774\ud130\ubca0\uc774\uc2a4 \uba54\ud0c0\ub370\uc774\ud130 \ucffc\ub9ac \uacb0\uacfc\ub97c \ud14c\uc774\ube14 \ubc0f \uc5f4 \ubaa9\ub85d\uc5d0 \ub9e4\ud551\ud558\uaca0\uc2b5\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574 \ub2e4\uc74c\uacfc \uac19\uc740 Java \ud074\ub798\uc2a4\ub97c \ub9cc\ub4e4\uc5c8\uc2b5\ub2c8\ub2e4:<\/p>\n<pre>\n<code>\n         public class Table {\n\n            private String name;\n\n            private List<Column> columns = new ArrayList<Column>();\n\n            private String primaryKey;\n\n            public Table(String tableName) {\n             this.name = tableName;\n            }\n\n            public void setPrimaryKey(String primaryKey) {\n             this.primaryKey = primaryKey;\n            }\n\n            public void addColumn(String name, int type) {\n             columns.add(new Column(name, type));\n            }\n\n            public String getName() {\n             return name;\n            }\n\n            public List<Column> getColumns() {\n             return columns;\n            }\n\n            public String getPrimaryKey() {\n             return primaryKey;\n            }\n\n            public JsonObject toJsonObject() {\n             JsonObject obj = JsonObject.create();\n             JsonArray jsonColumns = JsonArray.create();\n             for (Column col : columns) {\n                    jsonColumns.add(col.toJsonObject());\n             }\n             obj.put(\"tableName\", name);\n             obj.put(\"primaryKey\", primaryKey);\n             obj.put(\"columns\", jsonColumns);\n             return obj;\n            }\n     }\n\n     public class Column {\n\n            private String name;\n\n            private int type;\n\n            public Column(String name, int type) {\n             this.name = name;\n             this.type = type;\n            }\n\n            public String getName() {\n             return name;\n            }\n\n            public int getType() {\n             return type;\n            }\n\n            public JsonObject toJsonObject() {\n             JsonObject obj = JsonObject.create();\n             obj.put(\"name\", name);\n             obj.put(\"type\", type);\n             return obj;\n            }\n\n     }       \n            \n<\/code><\/pre>\n<p>\uc791\uc131\ud558\uae30 \uac00\uc7a5 \ud765\ubbf8\ub85c\uc6b4 \ucf54\ub4dc\ub294 \uc544\ub2c8\uc9c0\ub9cc, \ub9c8\uc9c0\ub9c9\uc5d0\ub294 SQL \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ud14c\uc774\ube14\uc758 JSON \ud45c\ud604\uc744 \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre>\n<code>\n        public void getDatabaseSchema() throws Exception {\n         \/\/ get Database Medatadata objects to retrieve Tables schema\n        DatabaseMetaData databaseMetadata = jdbcTemplate.getDataSource().getConnection().getMetaData();\n            List<String> tableNames = new ArrayList<String>();\n            \/\/ Get tables names\n            ResultSet result = databaseMetadata.getTables(catalog, schemaPattern, tableNamePattern, types);\n            while (result.next()) {\n             String tablename = result.getString(3);\n             String tableType = result.getString(4);\n             \/\/ make sure we only import table(as oppose to Views, counter etc...)\n             if (!tablename.isEmpty() && \"TABLE\".equals(tableType)) {\n                    tableNames.add(tablename);\n                    log.debug(\"Will import table \" + tablename);\n             }\n            }\n            \/\/ Map the tables schema to Table objects\n            Map<String, Table> tables = new HashMap<String, Table>();\n            JsonObject tablesSchema = JsonObject.create();\n            for (String tableName : tableNames) {\n             result = databaseMetadata.getColumns(catalog, schemaPattern, tableName, columnNamePattern);\n             Table table = new Table(tableName);\n             while (result.next()) {\n                    String columnName = result.getString(4);\n                    \/\/ Maps to JDBCType enum\n                    int columnType = result.getInt(5);\n                    table.addColumn(columnName, columnType);\n             }\n             result = databaseMetadata.getPrimaryKeys(catalog, schemaPattern, tableName);\n             while (result.next()) {\n                    String columnName = result.getString(4);\n                    table.setPrimaryKey(columnName);\n             }\n             tables.put(tableName, table);\n             tablesSchema.put(tableName, table.toJsonObject());\n            }\n            JsonDocument schemaDoc = JsonDocument.create(tablesSchemaId, tablesSchema);\n            JsonDocument doc = bucket.upsert(schemaDoc);\n         }\n<\/code><\/pre>\n<h3>\ucf58\ud150\uce20<\/h3>\n<p>\uc7ac\ubbf8\uc788\ub294 \ubd80\ubd84\uc740 \uc5ec\uae30\uc785\ub2c8\ub2e4. \uc5ec\uae30\uc11c\ubd80\ud130 \ud14c\uc774\ube14 \ud589\uc744 JsonDocument\uc5d0 \ub9e4\ud551\ud558\uae30 \uc2dc\uc791\ud569\ub2c8\ub2e4. \uc774\uc804 \uc139\uc158\uc5d0\uc11c\ub294 \ubaa8\ub4e0 \ud14c\uc774\ube14\uc758 \uc774\ub984\uc744 \uac80\uc0c9\ud560 \uc218 \uc788\ub294 \uc0c1\ud0dc\uac00 \ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ud558\ub098\uc758 \ud14c\uc774\ube14 \uc774\ub984\uc5d0\uc11c \ud14c\uc774\ube14\uc758 \ubaa8\ub4e0 \ud589\uc744 \ubc18\ud658\ud558\ub294 SQL \ucffc\ub9ac\ub97c \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Spring\uc5d0\ub294 RowMapper\ub97c \uc815\uc758\ud560 \uc218 \uc788\ub294 \uba54\ucee4\ub2c8\uc998\uc774 \uc788\uc2b5\ub2c8\ub2e4. \ucffc\ub9ac\uc5d0\uc11c \ubc18\ud658\ub418\ub294 \uac01 \ud589\uc5d0 \ub300\ud574 \uc6d0\ud558\ub294 \uac1d\uccb4\ub97c \ubc18\ud658\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc800\ub294 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud558\uace0 \uc788\uae30 \ub54c\ubb38\uc5d0, \uc800\ub294 <a href=\"https:\/\/docs.couchbase.com\/sdk-api\/couchbase-java-client-2.2.0\/com\/couchbase\/client\/java\/document\/JsonDocument.html\">JsonDocument<\/a>.<\/p>\n<p>\ub2e4\uc74c\uc740 \uad6c\ud604 \uc608\uc2dc\uc785\ub2c8\ub2e4. \uc774 RowMapper\uc5d0\ub294 \uc774\uc804\uc5d0 \uc815\uc758\ub41c Table \uac1d\uccb4\uac00 \ud544\uc694\ud558\ubbc0\ub85c mapRow \uba54\uc11c\ub4dc\ub97c \uad6c\ud604\ud574\uc57c \ud569\ub2c8\ub2e4. \uc5ec\uae30\uc11c \ud574\uc57c \ud560 \uc77c\uc774 \uba87 \uac00\uc9c0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uccab \ubc88\uc9f8 \uc791\uc5c5\uc740 \uace0\uc720 \ud0a4\ub97c \ub9cc\ub4dc\ub294 \uac83\uc785\ub2c8\ub2e4. \ud589\uc740 \ud14c\uc774\ube14\ubcc4\ub85c \ubc94\uc704\uac00 \uc9c0\uc815\ub418\ubbc0\ub85c \uc77c\ubd80 ID\ub294 \ub2e4\ub978 \ud14c\uc774\ube14\uc758 \ud589\uc5d0 \ub300\ud574 \uc815\ud655\ud788 \ub3d9\uc77c\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \ubb38\uc11c\ub294 \ubc84\ud0b7\ubcc4\ub85c \ubc94\uc704\uac00 \uc9c0\uc815\ub418\ubbc0\ub85c \ud589 ID\uc640 \ud14c\uc774\ube14 \uc774\ub984\uc744 \ubc18\uc601\ud558\ub294 \uace0\uc720\ud55c \ubb38\uc11c \ud0a4\ub97c \ub9cc\ub4e4\uc5b4\uc57c \ud569\ub2c8\ub2e4. \ubb38\uc11c\uc758 \ucd9c\ucc98\ub97c \ucd94\uc801\ud558\uae30 \uc704\ud574 \ud14c\uc774\ube14 \uc774\ub984\uc5d0 _tableName \ud544\ub4dc\ub3c4 \ucd94\uac00\ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uadf8 \ub2e4\uc74c \ud765\ubbf8\ub85c\uc6b4 \ub2e8\uacc4\ub294 \uc720\ud615 \ub9e4\ud551\uc785\ub2c8\ub2e4. JSON\uc740 SQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\ubcf4\ub2e4 \ub354 \uc801\uc740 \uc218\uc758 \uc720\ud615\uc744 \uc9c0\uc6d0\ud558\ubbc0\ub85c \uc5ec\uae30\uc11c \uba87 \uac00\uc9c0 \ubcc0\ud658 \uc791\uc5c5\uc744 \uc218\ud589\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774\uac83\uc774 \ubc14\ub85c getJsonTypedValue \uba54\uc11c\ub4dc\uac00 \ud558\ub294 \uc77c\uc785\ub2c8\ub2e4. \uc774 \uba54\uc11c\ub4dc\ub294 \ub300\ubd80\ubd84\uc758 JDBC \uc720\ud615\uc744 \uae30\ubcf8 JSON \uc720\ud615(\ubb38\uc790\uc5f4, \uc22b\uc790, \ubd80\uc6b8, \ubc30\uc5f4, \uac1d\uccb4, null)\uc73c\ub85c \ubcc0\ud658\ud560 \uc218 \uc788\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4. \ub9c8\uc9c0\ub9c9\uc5d0\ub294 Couchbase\uc5d0 \uc800\uc7a5\ud560 \uc218 \uc788\ub294 JsonDocument\uac00 \uc0dd\uc131\ub429\ub2c8\ub2e4.<\/p>\n<pre>\n<code>\n        public class JSONRowMapper implements RowMapper<Document> {\n        \n        Table table;\n\n        public JSONRowMapper(Table table) {\n         this.table = table;\n        }\n\n        public JsonDocument mapRow(ResultSet rs, int rowNum) throws SQLException {\n         String id = table.getName() + \"::\" + rs.getString(table.getPrimaryKey());\n         JsonObject obj = JsonObject.create();\n         obj.put(\"_tableName\", table.getName());\n         for (Column col : table.getColumns()) {\n                Object value = getJsonTypedValue(col.type, rs.getObject(col.name), col.name);\n                obj.put(col.name, value);\n         }\n         return JsonDocument.create(id, obj);\n        }\n\n        public Object getJsonTypedValue(int type, Object value, String name) throws SQLException {\n         if (value == null) {\n                return null;\n         }\n         JDBCType current = JDBCType.valueOf(type);\n         switch (current) {\n         case TIMESTAMP:\n                Timestamp timestamp = (Timestamp) value;\n                return timestamp.getTime();\n         case TIMESTAMP_WITH_TIMEZONE:\n                Timestamp ts = (Timestamp) value;\n                JsonObject tsWithTz = JsonObject.create();\n                tsWithTz.put(\"timestamp\", ts.getTime());\n                tsWithTz.put(\"timezone\", ts.getTimezoneOffset());\n                return tsWithTz;\n         case DATE:\n                Date sqlDate = (Date) value;\n                return sqlDate.getTime();\n         case DECIMAL:\n         case NUMERIC:\n                BigDecimal bigDecimal = (BigDecimal) value;\n                return bigDecimal.doubleValue();\n         case ARRAY:\n                Array array = (Array) value;\n                Object[] objects = (Object[]) array.getArray();\n                return JsonArray.from(objects);\n         case BINARY:\n         case BLOB:\n         case LONGVARBINARY:\n                return Base64.getEncoder().encodeToString((byte[]) value);\n         case OTHER:\n         case JAVA_OBJECT:\n                \/\/ database specific, default to String value\n                return value.toString();\n         default:\n                return value;\n         }\n        }\n }\n        \n<\/code><\/pre>\n<p>RowMapper\ub97c \uc0ac\uc6a9\ud558\uba74 \uc791\uc5c5\uc774 \uc815\ub9d0 \uc26c\uc6cc\uc9d1\ub2c8\ub2e4. \ud14c\uc774\ube14\uc758 \uc774\ub984\uc744 \ubc18\ubcf5\ud558\uace0 \ucffc\ub9ac\ub97c \uc2e4\ud589\ud55c \ub2e4\uc74c \uacb0\uacfc\ub97c Couchbase\uc5d0 \uc800\uc7a5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uc791\uc5c5\uc744 \ub3d9\uae30\uc2dd\uc73c\ub85c \uc218\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ubcf4\uc77c \uac83\uc785\ub2c8\ub2e4:<\/p>\n<pre>\n<code>\n        for (String tableName : tableNames) {\n         String sql = \"select * from \" + tableName + \";\";\n         List<JsonDocument&gt; rs = jdbcTemplate.query(sql, new JSONRowMapper(tables.get(tableName)));\n         if (!rs.isEmpty()) {\n             for (JsonDocument doc : rs) {\n               bucket.upsert(doc); \n                } \n         }\n        }\n        bucket.upsert(schemaDoc);\n<\/code><\/pre>\n<p>\ud558\uc9c0\ub9cc \uc800\ub294 \ube44\ub3d9\uae30 \ubc84\uc804\uc744 \uc120\ud638\ud569\ub2c8\ub2e4:<\/p>\n<pre>\n<code>\n   Observable.from(tableNames).flatMap(s -> {\n        String sql = String.format(\"Select * from %s;\", s);\n        return Observable.from(jdbcTemplate.query(sql, new JSONRowMapper(tables.get(s))));\n    })\n    \/\/ start by a jsonDocument containing the tables to be imported.\n    .startWith(schemaDoc).flatmap(doc -> asyncBucket.upsert(doc));\n<\/code><\/pre>\n<p>\uc5ec\uae30\uc11c\ub294 Rx\uc758 \uc7a0\uc7ac\ub825\uc744 \ucd5c\ub300\ud55c \ud65c\uc6a9\ud558\uc9c0 \uc54a\uace0 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/github.com\/ldoguin\/couchbase-java-importer\/blob\/master\/src\/main\/java\/com\/couchbase\/devex\/ImportJsonToCouchbase.java\">\uc774 \ud568\uc218<\/a> \ub294 Couchbase\uc5d0 \ubb38\uc11c\ub97c \uc791\uc131\ud558\uace0 \uc2dc\uac04 \ucd08\uacfc \ubc0f \uc624\ub958 \uad00\ub9ac\ub97c \ucc98\ub9ac\ud569\ub2c8\ub2e4.<\/p>\n<p>\u00a0<\/p>\n<p>\ud3b8\uc758\ub97c \uc704\ud574 \uad6c\ud604\ub41c \ubaa8\ub4e0 \ub2e8\uacc4\ub97c \ud328\ud0a4\uc9c0\ub85c \ubb36\uc5b4 \uc774\uc804\uc5d0 \ubcf4\uc5ec\ub4dc\ub838\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/github.com\/ldoguin\/couchbase-java-importer\">\ub2e8\uc77c \ud504\ub85c\uc81d\ud2b8<\/a>. \uc18d\uc131 \ud30c\uc77c\uc774 \uc62c\ubc14\ub974\uac8c \uad6c\uc131\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud558\uace0 \uc784\ud3ec\ud130\ub97c \uc2e4\ud589\ud558\uae30\ub9cc \ud558\uba74 \ub429\ub2c8\ub2e4:<\/p>\n<pre>\n<code>\n   $ .\/bin\/couchbase-java-importer myConfiguration.properties\n<\/code><\/pre>\n<p>\ub2e4\uc74c \ub0b4\uc6a9\uc744 \uc0b4\ud3b4\ubcf4\uc2ed\uc2dc\uc624. <a href=\"https:\/\/github.com\/ldoguin\/couchbase-java-importer\/blob\/master\/README.md\">README<\/a> \ud30c\uc77c\uc5d0\uc11c \uc790\uc138\ud55c \ub0b4\uc6a9\uc744 \ud655\uc778\ud558\uc138\uc694.<\/p>\n<h3>\uacb0\ub860<\/h3>\n<p>\uc624\ub298\uc740 SQL \ucf58\ud150\uce20\ub97c Couchbase\ub85c \uc774\ub3d9\ud558\ub294 \ubc29\ubc95\uc744 \ubc30\uc6e0\uc9c0\ub9cc \uc544\uc9c1 \ud574\uc57c \ud560 \uc77c\uc774 \ub0a8\uc544\uc788\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c \uc2dc\uac04\uc5d0\ub294 SQL \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\uc744 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uacc4\uce35\uc73c\ub85c \uc774\ub3d9\ud558\ub294 \ubc29\ubc95\uc744 \uc54c\ub824\ub4dc\ub9ac\uaca0\uc2b5\ub2c8\ub2e4.<\/p>","protected":false},"excerpt":{"rendered":"<p>Since the GA release of N1QL, we get a lot of questions about moving content from a SQL database to Couchbase. There are many different ways to do so. Today, I have chosen what is probably the simplest. I will [&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":[1814,1815,1812],"tags":[1574],"ppma_author":[9023],"class_list":["post-2130","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-best-practices-and-tutorials","category-n1ql-query","tag-jdbc"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.5 (Yoast SEO v26.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Moving SQL database content to Couchbase - 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-database-content-to-couchbase\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Moving SQL database content to Couchbase\" \/>\n<meta property=\"og:description\" content=\"Since the GA release of N1QL, we get a lot of questions about moving content from a SQL database to Couchbase. There are many different ways to do so. Today, I have chosen what is probably the simplest. I will [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/moving-sql-database-content-to-couchbase\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-01-25T13:30:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T00:33:08+00:00\" \/>\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=\"8\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-database-content-to-couchbase\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-database-content-to-couchbase\/\"},\"author\":{\"name\":\"Laurent Doguin\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e\"},\"headline\":\"Moving SQL database content to Couchbase\",\"datePublished\":\"2016-01-25T13:30:01+00:00\",\"dateModified\":\"2025-06-14T00:33:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-database-content-to-couchbase\/\"},\"wordCount\":932,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-database-content-to-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"jdbc\"],\"articleSection\":[\"Application Design\",\"Best Practices and Tutorials\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/moving-sql-database-content-to-couchbase\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-database-content-to-couchbase\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-database-content-to-couchbase\/\",\"name\":\"Moving SQL database content to Couchbase - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-database-content-to-couchbase\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-database-content-to-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-01-25T13:30:01+00:00\",\"dateModified\":\"2025-06-14T00:33:08+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-database-content-to-couchbase\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/moving-sql-database-content-to-couchbase\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-sql-database-content-to-couchbase\/#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-database-content-to-couchbase\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Moving SQL database content to 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\/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 database content to Couchbase - 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-database-content-to-couchbase\/","og_locale":"ko_KR","og_type":"article","og_title":"Moving SQL database content to Couchbase","og_description":"Since the GA release of N1QL, we get a lot of questions about moving content from a SQL database to Couchbase. There are many different ways to do so. Today, I have chosen what is probably the simplest. I will [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/moving-sql-database-content-to-couchbase\/","og_site_name":"The Couchbase Blog","article_published_time":"2016-01-25T13:30:01+00:00","article_modified_time":"2025-06-14T00:33:08+00:00","author":"Laurent Doguin","twitter_card":"summary_large_image","twitter_creator":"@ldoguin","twitter_misc":{"Written by":"unstructured.io","Est. reading time":"8\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-database-content-to-couchbase\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-database-content-to-couchbase\/"},"author":{"name":"Laurent Doguin","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e"},"headline":"Moving SQL database content to Couchbase","datePublished":"2016-01-25T13:30:01+00:00","dateModified":"2025-06-14T00:33:08+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-database-content-to-couchbase\/"},"wordCount":932,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-database-content-to-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["jdbc"],"articleSection":["Application Design","Best Practices and Tutorials","SQL++ \/ N1QL Query"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/moving-sql-database-content-to-couchbase\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-database-content-to-couchbase\/","url":"https:\/\/www.couchbase.com\/blog\/moving-sql-database-content-to-couchbase\/","name":"Moving SQL database content to Couchbase - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-database-content-to-couchbase\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-database-content-to-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2016-01-25T13:30:01+00:00","dateModified":"2025-06-14T00:33:08+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-database-content-to-couchbase\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/moving-sql-database-content-to-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/moving-sql-database-content-to-couchbase\/#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-database-content-to-couchbase\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Moving SQL database content to 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\/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","author_category":"","last_name":"Doguin","first_name":"Laurent","job_title":"","user_url":"","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\/2130","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=2130"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/2130\/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=2130"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=2130"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=2130"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=2130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}