{"id":2072,"date":"2015-07-14T16:37:22","date_gmt":"2015-07-14T16:37:21","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2072"},"modified":"2025-06-13T23:47:50","modified_gmt":"2025-06-14T06:47:50","slug":"traveling-with-couchbase-using-the-java-sdk","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/traveling-with-couchbase-using-the-java-sdk\/","title":{"rendered":"Java SDK\ub97c \uc0ac\uc6a9\ud558\uc5ec Couchbase\uc640 \ud568\uaed8 \uc5ec\ud589\ud558\uae30"},"content":{"rendered":"<p>Couchbase Connect 2015\uc5d0\uc11c\ub294 N1QL\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc0d8\ud50c Couchbase \ubc84\ud0b7\uc758 \ub370\uc774\ud130\ub97c \ucffc\ub9ac\ud558\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc608\uc81c\ub97c \uc2dc\uc5f0\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ucee8\ud37c\ub7f0\uc2a4\ub97c \ub193\uce58\uc168\ub354\ub77c\ub3c4 \ubb38\uc81c \uc5c6\uc2b5\ub2c8\ub2e4. \uc774 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc7ac\ud604\ud558\ub294 \ubc29\ubc95\uc744 \uc0b4\ud3b4\ubcf4\uace0 Couchbase 4.0\uc758 \uba87 \uac00\uc9c0 \uc8fc\uc694 \uc0ac\ud56d\uc744 \ud655\uc778\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<h2>\uc804\uc81c \uc870\uac74<\/h2>\n<ul>\n<li>Apache Maven 3<\/li>\n<li>Java \uac1c\ubc1c \ud0a4\ud2b8(JDK) 1.7<\/li>\n<li>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc11c\ubc84 4.0<\/li>\n<li>IntelliJ IDEA 14.1+, Eclipse \ub610\ub294 NetBeans. \uc774 \uc608\uc81c\uc5d0\uc11c\ub294 IntelliJ IDEA\uac00 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.<\/li>\n<\/ul>\n<h2>\uc0c8 \ud504\ub85c\uc81d\ud2b8 \ub9cc\ub4e4\uae30<\/h2>\n<p>IntelliJ IDEA\ub97c \uc5f4\uace0 \uc0c8 Java \ud504\ub85c\uc81d\ud2b8\ub97c \uc0dd\uc131\ud558\ub3c4\ub85d \uc120\ud0dd\ud558\uace0, \uc694\uccad\uc774 \uc788\ub294 \uacbd\uc6b0 JDK 1.7\uc744 \uc0ac\uc6a9\ud558\ub3c4\ub85d \ud569\ub2c8\ub2e4. \uc774 \uac00\uc774\ub4dc\uc758 \ubaa9\uc801\uc5d0 \ub530\ub77c \ud504\ub85c\uc81d\ud2b8\ub97c \ud638\ucd9c\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. <strong>try-cb-java<\/strong>.<\/p>\n<p>\uc774\uc81c \ub9c8\uc6b0\uc2a4 \uc624\ub978\ucabd \ubc84\ud2bc\uc744 \ud074\ub9ad\ud569\ub2c8\ub2e4. <strong>try-cb-java<\/strong> \uc744 \uc120\ud0dd\ud55c \ub2e4\uc74c, \ud504\ub85c\uc81d\ud2b8 \ud2b8\ub9ac\uc5d0\uc11c <strong>\ud504\ub808\uc784\uc6cc\ud06c \uc9c0\uc6d0 \ucd94\uac00<\/strong> \uc744 \ud074\ub9ad\ud558\uace0 <strong>Maven<\/strong>. \uc774\ub807\uac8c \ud558\uba74 <strong>pom.xml<\/strong> \ud30c\uc77c\uc744 \ud504\ub85c\uc81d\ud2b8\uc5d0 \ucd94\uac00\ud569\ub2c8\ub2e4.<\/p>\n<h2>Maven \uc124\uc815<\/h2>\n<p>\ub0b4\ubd80 <strong>pom.xml<\/strong> \ud30c\uc77c\uc5d0 \ud504\ub85c\uc81d\ud2b8\uc5d0 \ub354 \ub9e4\ub825\uc801\uc778 \uadf8\ub8f9 \uc774\ub984\uc744 \uc9c0\uc815\ud558\ub294 \uac83\ubd80\ud130 \uc2dc\uc791\ud558\uc138\uc694:<\/p>\n<pre>\n<code class=\"language-xml\">\n<groupId>com.couchbase.example<\/groupId>\n<\/code>\n<\/pre>\n<p>\uadf8\ub7f0 \ub2e4\uc74c \ub098\uba38\uc9c0 \uc885\uc18d\uc131\uc744 \ud30c\uc77c\uc5d0 \ucd94\uac00\ud569\ub2c8\ub2e4. \uc5ec\uae30\uc5d0\ub294 Spring Boot, Couchbase \ud074\ub77c\uc774\uc5b8\ud2b8 \ubc0f Spring \ubcf4\uc548 \ud504\ub808\uc784\uc6cc\ud06c\uac00 \ud3ec\ud568\ub429\ub2c8\ub2e4.<\/p>\n<pre>\n<code class=\"language-xml\">\n<parent>\n    <groupId>org.springframework.boot<\/groupId>\n    <artifactId>spring-boot-starter-parent<\/artifactId>\n    <version>1.2.3.RELEASE<\/version>\n<\/parent>\n\n<dependencies>\n    <dependency>\n        <groupId>org.springframework.boot<\/groupId>\n        <artifactId>spring-boot-starter-web<\/artifactId>\n    <\/dependency>\n    <dependency>\n        <groupId>org.springframework<\/groupId>\n        <artifactId>spring-tx<\/artifactId>\n    <\/dependency>\n    <dependency>\n        <groupId>org.springframework.security<\/groupId>\n        <artifactId>spring-security-core<\/artifactId>\n    <\/dependency>\n    <dependency>\n        <groupId>com.couchbase.client<\/groupId>\n        <artifactId>java-client<\/artifactId>\n        <version>2.2.0-dp<\/version>\n    <\/dependency>\n<\/dependencies>\n\n<repositories>\n    <repository>\n        <id>couchbase<\/id>\n        <name>couchbase repo<\/name>\n        <url>https:\/\/files.couchbase.com\/maven2<\/url>\n        <snapshots><enabled>false<\/enabled><\/snapshots>\n    <\/repository>\n<\/repositories>\n\n<build>\n    <plugins>\n        <plugin>\n            <groupId>org.springframework.boot<\/groupId>\n            <artifactId>spring-boot-maven-plugin<\/artifactId>\n        <\/plugin>\n    <\/plugins>\n<\/build>\n<\/code>\n<\/pre>\n<h2>\uc2e4\ud589 \ud504\ub85c\ud544 \ub9cc\ub4e4\uae30<\/h2>\n<p>\ud604\uc7ac\ub85c\uc11c\ub294 \ud604\uc7ac \uad6c\uc131\ub41c \ud504\ub85c\ud544\uc774 \uc5c6\uae30 \ub54c\ubb38\uc5d0 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc2e4\ud589\ud558\ub824\uace0 \ud558\uba74 \uc624\ub958\uac00 \ubc1c\uc0dd\ud558\uac70\ub098 \uc544\ubb34 \uc77c\ub3c4 \uc77c\uc5b4\ub098\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub3c4\uad6c \ubaa8\uc74c\uc5d0\uc11c \ub2e4\uc74c\uc744 \uc120\ud0dd\ud569\ub2c8\ub2e4. <strong>\uc2e4\ud589 -&gt; \uad6c\uc131 \ud3b8\uc9d1<\/strong> \uc744 \ud074\ub9ad\ud558\uace0 \uc0c8 Maven \uad6c\uc131\uc744 \ucd94\uac00\ud558\ub3c4\ub85d \uc120\ud0dd\ud569\ub2c8\ub2e4. \uc774\ub984\uc744 \uc6d0\ud558\ub294 \ub300\ub85c \uc9c0\uc815\ud560 \uc218 \uc788\uc9c0\ub9cc \uba85\ub839\uc904 \ud544\ub4dc\uc5d0 \ub2e4\uc74c\uc744 \uc785\ub825\ud558\ub294 \uac83\uc774 \uc911\uc694\ud569\ub2c8\ub2e4:<\/p>\n<pre>\n<code class=\"language-bash\">\nspring-boot:run\n<\/code>\n<\/pre>\n<p>\uc774 \uae00\uc5d0\uc11c\ub294 \uad6c\uc131\uc758 \uc774\ub984\uc744 \ub2e4\uc74c\uacfc \uac19\uc774 \uc9c0\uc815\ud558\uaca0\uc2b5\ub2c8\ub2e4. <strong>\uc2a4\ud504\ub9c1 \ubd80\ud305<\/strong>.<\/p>\n<p>\uc774\uc81c IntelliJ IDEA\ub97c \uac1c\ubc1c\ud560 \uc900\ube44\uac00 \ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<h2>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ubc84\ud0b7\uc5d0\uc11c \uc778\ub371\uc2a4 \ub9cc\ub4e4\uae30<\/h2>\n<p>\uc774 \ud29c\ud1a0\ub9ac\uc5bc\uc5d0\uc11c\ub294 N1QL \ucffc\ub9ac\ub97c \uc0ac\uc6a9\ud558\ubbc0\ub85c \uba3c\uc800 Couchbase Server \ubc84\ud0b7\uc5d0 \uc778\ub371\uc2a4\ub97c \ucd94\uac00\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774 \uc791\uc5c5\uc740 \ucf54\ub4dc\ub97c \ud1b5\ud574 \uc27d\uac8c \uc218\ud589\ud560 \uc218 \uc788\uc9c0\ub9cc, \uc774 \uc608\uc81c\uc5d0\uc11c\ub294 \ubc14\ub85c \uac00\uae30\ub97c \uc0ac\uc6a9\ud558\uc5ec Mac OS \ubc0f Windows\uc5d0 Couchbase 4+\ub97c \uc124\uce58\ud558\uba74 \uc790\ub3d9\uc73c\ub85c \uc124\uce58\ub418\ub294 Couchbase \ucffc\ub9ac(CBQ) \ud074\ub77c\uc774\uc5b8\ud2b8\ub97c \ud1b5\ud574 \ucd94\uac00\ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Mac OS\uc758 \uacbd\uc6b0 \ub2e4\uc74c\uc5d0\uc11c CBQ\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4. <strong>\/\uc560\ud50c\ub9ac\ucf00\uc774\uc158\/\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc11c\ubc84 \uc571\/\ucf58\ud150\uce20\/\ub9ac\uc18c\uc2a4\/\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ucf54\uc5b4\/\ube48\/cbq<\/strong> \ub97c \ud074\ub9ad\ud558\uace0 \ub2e4\uc74c\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4:<\/p>\n<pre>\n<code class=\"language-sql\">\nCREATE PRIMARY INDEX def_primary ON `travel-sample` USING gsi;\n<\/code>\n<\/pre>\n<p>Windows\uc758 \uacbd\uc6b0 \ub2e4\uc74c \uc8fc\uc18c\uc5d0\uc11c CBQ\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4. <strong>C:\/\ud504\ub85c\uadf8\ub7a8 \ud30c\uc77c\/\uce74\uc6b0\uce58\ubca0\uc774\uc2a4\/\uc11c\ubc84\/bin\/cbq.exe<\/strong> \ub97c \ud074\ub9ad\ud558\uace0 Mac OS\uc5d0\uc11c\uc640 \ub3d9\uc77c\ud55c N1QL \uba85\ub839\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4.<\/p>\n<h2>\uba54\uc778 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ud074\ub798\uc2a4 \ub9cc\ub4e4\uae30<\/h2>\n<p>\uc774 \ud504\ub85c\uc81d\ud2b8\uc758 \uc8fc\uc694 \uc218\uc5c5\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4. <strong>Application.java<\/strong> \uc744 \ub9c8\uc6b0\uc2a4 \uc624\ub978\ucabd \ubc84\ud2bc\uc73c\ub85c \ud074\ub9ad\ud558\uc5ec \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <strong>trycb<\/strong> \ud504\ub85c\uc81d\ud2b8 \ud2b8\ub9ac\uc5d0\uc11c \ud328\ud0a4\uc9c0\ub97c \uc120\ud0dd\ud558\uace0 <strong>\uc2e0\uaddc -&gt; \uc790\ubc14 \ud074\ub798\uc2a4<\/strong>.<\/p>\n<p>\ud074\ub798\uc2a4\ub97c \uac00\uc7a5 \uae30\ubcf8\uc801\uc778 \uc2e4\ud589 \uac00\ub2a5\ud55c \uc0c1\ud0dc\ub85c \ub9cc\ub4e4\ub824\uba74 \ub2e4\uc74c\uc744 \ucd94\uac00\ud558\uc138\uc694:<\/p>\n<pre>\n<code class=\"language-java\">\npackage trycb;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RestController;\n\n@SpringBootApplication\n@RestController\n@RequestMapping(\"\/api\")\npublic class Application {\n\n    public static void main(String[] args) {\n        SpringApplication.run(Application.class, args);\n    }\n\n}\n<\/code>\n<\/pre>\n<p>\ub2e4\uc74c\uc744 \uc120\ud0dd\ud558\uc5ec \ud504\ub85c\uc81d\ud2b8\uac00 \uc624\ub958 \uc5c6\uc774 \uc2e4\ud589\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4. <strong>\uc2e4\ud589 -&gt; '\uc2a4\ud504\ub9c1 \ubd80\ud305' \uc2e4\ud589<\/strong> \ub97c \ud074\ub9ad\ud569\ub2c8\ub2e4.<\/p>\n<h3>CORS(\uad50\ucc28 \ucd9c\ucc98 \ub9ac\uc18c\uc2a4 \uacf5\uc720) \ucc98\ub9ac\ud558\uae30<\/h3>\n<p>\ub300\ubd80\ubd84\uc758 \ud14c\uc2a4\ud2b8\uac00 \ub85c\uceec\uc5d0\uc11c \uc774\ub8e8\uc5b4\uc9c0\ubbc0\ub85c CORS\uac00 \ud65c\uc131\ud654\ub418\uc5b4 \uc788\ub294\uc9c0 \ud655\uc778\ud574\uc57c \ud558\uba70, \uadf8\ub807\uc9c0 \uc54a\uc73c\uba74 \uc6f9 \ube0c\ub77c\uc6b0\uc800\uac00 \uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8\ub85c API \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub97c \ud638\ucd9c\ud560 \ub54c \ubd88\ub9cc\uc744 \uc81c\uae30\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Application \ud074\ub798\uc2a4\uac00 Filter \ud074\ub798\uc2a4\ub97c \uad6c\ud604\ud558\ub294\uc9c0 \ud655\uc778\ud558\uace0 \ub2e4\uc74c \ucf54\ub4dc\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4:<\/p>\n<pre>\n<code class=\"language-java\">\n@Override\npublic void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)\n        throws IOException, ServletException {\n    HttpServletResponse response = (HttpServletResponse) res;\n    response.setHeader(\"Access-Control-Allow-Origin\", \"*\");\n    response.setHeader(\"Access-Control-Allow-Headers\", \"Origin, X-Requested-With, Content-Type, Accept\");\n    chain.doFilter(req, res);\n}\n\n@Override\npublic void init(FilterConfig filterConfig) throws ServletException {}\n\n@Override\npublic void destroy() {}\n<\/code>\n<\/pre>\n<h3>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ud074\ub7ec\uc2a4\ud130 \ubc0f \ubc84\ud0b7 \uc635\uc158 \uad6c\uc131\ud558\uae30<\/h3>\n<p>\ud604\uc7ac\ub85c\uc11c\ub294 \uae30\ubcf8\uc801\uc73c\ub85c Couchbase\uac00 \uac1c\uc785\ud558\uc9c0 \uc54a\ub294 Spring Boot \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \uc788\uc2b5\ub2c8\ub2e4. Maven\uc744 \ud1b5\ud574 Java \ud074\ub77c\uc774\uc5b8\ud2b8\ub97c \ud3ec\ud568\ud588\uc73c\ubbc0\ub85c \uc774\uc81c \uc0ac\uc6a9\uc744 \uc2dc\uc791\ud560 \ub54c\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ud074\ub798\uc2a4\uc5d0 \ub2e4\uc74c\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4:<\/p>\n<pre>\n<code class=\"language-java\">\n@Value(\"${hostname}\")\nprivate String hostname;\n\n@Value(\"${bucket}\")\nprivate String bucket;\n\n@Value(\"${password}\")\nprivate String password;\n\npublic @Bean Cluster cluster() {\n   return CouchbaseCluster.create(hostname);\n}\n\npublic @Bean Bucket bucket() {\n   return cluster().openBucket(bucket, password);\n}\n<\/code>\n<\/pre>\n<p>\uc800\ud76c\ub294 \uc544\uc9c1 <strong>\ud638\uc2a4\ud2b8 \uc774\ub984<\/strong>, <strong>\ubc84\ud0b7<\/strong>\ubc0f <strong>\ube44\ubc00\ubc88\ud638<\/strong> \ubcc0\uc218\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc9c0\ub9cc, Couchbase \ud074\ub7ec\uc2a4\ud130\uc640 \ud2b9\uc815 \ubc84\ud0b7\uc5d0 \uc5f0\uacb0\ud558\ub294 \ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.<\/p>\n<h4>\ub9ac\uc18c\uc2a4 \ubcc0\uc218 \ucd94\uac00<\/h4>\n<p>\uc6b0\ub9ac\uac00 \uc0ac\uc6a9\ud558\uace0 \uc788\ub294 \uac83\uc744 \ubcf4\uc168\uc8e0? <strong>\ud638\uc2a4\ud2b8 \uc774\ub984<\/strong>, <strong>\ubc84\ud0b7<\/strong>\ubc0f <strong>\ube44\ubc00\ubc88\ud638<\/strong>\uc774\uc81c \uc124\uc815\ud560 \ucc28\ub840\uc785\ub2c8\ub2e4.<\/p>\n<p>IntelliJ IDEA \ud504\ub85c\uc81d\ud2b8 \ud2b8\ub9ac\uc5d0\uc11c \ub2e4\uc74c\uc744 \ub9c8\uc6b0\uc2a4 \uc624\ub978\ucabd \ubc84\ud2bc\uc73c\ub85c \ud074\ub9ad\ud569\ub2c8\ub2e4. <strong>src\/main\/resources<\/strong> \uc744 \ud074\ub9ad\ud558\uace0 <strong>\uc0c8\ub85c \ub9cc\ub4e4\uae30 -&gt; \ud30c\uc77c<\/strong>. \uc0c8 \ud30c\uc77c \uc774\ub984\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4. <strong>application.properties<\/strong> \ub97c \ud074\ub9ad\ud558\uace0 \ub2e4\uc74c \uc904\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4:<\/p>\n<pre>\nhostname=127.0.0.1\nbucket=travel-sample\npassword=<\/pre>\n<p>\uc2a4\ud504\ub9c1 \ubd80\ud2b8\uac00 \uc774 \ubb38\uc81c\ub97c \ud574\uacb0\ud569\ub2c8\ub2e4. <strong>application.properties<\/strong> \ud30c\uc77c\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4. \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uad00\ub828 \uc18d\uc131\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \uc815\ubcf4\ub294 <a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/current\/reference\/html\/boot-features-external-config.html\">\uc2a4\ud504\ub9c1 \uacf5\uc2dd \ubb38\uc11c<\/a>.<\/p>\n<h3>RESTful \uc5d4\ub4dc\ud3ec\uc778\ud2b8 \ub9cc\ub4e4\uae30<\/h3>\n<p>\uc774 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc740 API \uae30\ubc18\uc774 \ub420 \uac83\uc774\ubbc0\ub85c \ud2b9\uc815 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub97c \ub9cc\ub4e4\uc5b4\uc57c \ud569\ub2c8\ub2e4:<\/p>\n<pre>\n<code class=\"language-java\">\n@RequestMapping(value=\"\/airport\/findAll\", method=RequestMethod.GET)\npublic List<Map<String, Object>> airports(@RequestParam String search) { }\n\n@RequestMapping(value=\"\/flightPath\/findAll\", method=RequestMethod.GET)\npublic List<Map<String, Object>> all(@RequestParam String from, @RequestParam String to, @RequestParam String leave) throws Exception { }\n\n@RequestMapping(value=\"\/user\/login\", method=RequestMethod.GET)\npublic Object login(@RequestParam String user, @RequestParam String password) { }\n\n@RequestMapping(value=\"\/user\/login\", method=RequestMethod.POST)\npublic Object createLogin(@RequestBody String json) { }\n\n@RequestMapping(value=\"\/user\/flights\", method=RequestMethod.POST)\npublic Object book(@RequestBody String json) { }\n\n@RequestMapping(value=\"\/user\/flights\", method=RequestMethod.GET)\npublic Object booked(@RequestParam String username) { }\n<\/code>\n<\/pre>\n<p>\uae30\ubcf8\uc801\uc73c\ub85c \uc0ac\uc6a9\uc790 \ub4f1\ub85d \ubc0f \ub85c\uadf8\uc778, \ud56d\uacf5\ud3b8 \uc608\uc57d \ubc0f \uac80\uc0c9, \ud56d\uacf5\ud3b8 \uc815\ubcf4 \uac80\uc0c9\uc744 \uc704\ud55c \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uac00 \uc81c\uacf5\ub429\ub2c8\ub2e4.<\/p>\n<p>\uc774\ub7ec\ud55c \uc5d4\ub4dc\ud3ec\uc778\ud2b8 \ub4a4\uc5d0 \uc788\ub294 \ub85c\uc9c1\uc740 \uccad\uacb0\uc131\uc744 \uc704\ud55c \ub2e4\ub978 \ud074\ub798\uc2a4\uc5d0 \ub098\ud0c0\ub0a9\ub2c8\ub2e4.<\/p>\n<h2>\ub370\uc774\ud130\ubca0\uc774\uc2a4 \ud074\ub798\uc2a4 \ub9cc\ub4e4\uae30<\/h2>\n<p>\ubc29\uae08 Spring Boot \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \uad6c\ub3d9 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub97c \uc124\uc815\ud588\uc9c0\ub9cc \uc774\uc81c \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 \uc0c1\ud638 \uc791\uc6a9\ud558\ub294 \ub85c\uc9c1\uc744 \uc0b4\ud3b4\ubcfc \ucc28\ub840\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc774 \ud504\ub85c\uc81d\ud2b8\uc758 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ud074\ub798\uc2a4\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4. <strong>Database.java<\/strong> \uc744 \ub9c8\uc6b0\uc2a4 \uc624\ub978\ucabd \ubc84\ud2bc\uc73c\ub85c \ud074\ub9ad\ud558\uc5ec \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <strong>trycb<\/strong> \ud328\ud0a4\uc9c0\ub97c \uc120\ud0dd\ud558\uace0 IntelliJ IDEA\uc758 \ud504\ub85c\uc81d\ud2b8 \ud2b8\ub9ac\uc5d0\uc11c <strong>\uc2e0\uaddc -&gt; \uc790\ubc14 \ud074\ub798\uc2a4<\/strong>.<\/p>\n<p>\ub2e4\uc74c \ub0b4\uc6a9\uc744 \ucd94\uac00\ud558\uc5ec \ud074\ub798\uc2a4\uc758 \uace8\uaca9\uc744 \uc644\uc131\ud558\uc138\uc694:<\/p>\n<pre>\n<code class=\"language-java\">\npackage trycb;\n\npublic class Database {\n\n    private Database() { }\n\n    public static List<Map<String, Object>> findAllAirports(final Bucket bucket, final String params) { }\n\n    public static List<Map<String, Object>> findAllFlightPaths(final Bucket bucket, String from, String to, Calendar leave) { }\n\n    public static ResponseEntity<String> login(final Bucket bucket, final String username, final String password) { }\n\n    public static ResponseEntity<String> createLogin(final Bucket bucket, final String username, final String password) { }\n\n    private static List<Map<String, Object>> extractResultOrThrow(QueryResult result) { }\n\n}\n<\/code>\n<\/pre>\n<p>\uc774\uc81c\ubd80\ud130 \uc0ac\uc6a9\uc790\uac00 \uc0c1\ud638 \uc791\uc6a9\ud560 \uac00\ub2a5\uc131\uc774 \ub192\uc740 \uc21c\uc11c\ub300\ub85c \uac01 \uba54\uc11c\ub4dc\ub97c \uc644\uc131\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<h3>\uc0c8 \uc0ac\uc6a9\uc790 \ub9cc\ub4e4\uae30<\/h3>\n<p>\uc0ac\uc6a9\uc790\uac00 POST\ub97c \ubc1c\ud589\ud560 \ub54c <strong>\/api\/user\/login<\/strong>\ub85c \uc124\uc815\ud558\uba74 \ub2e4\uc74c \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ud568\uc218\ub97c \ud638\ucd9c\ud574\uc57c \ud569\ub2c8\ub2e4:<\/p>\n<pre>\n<code class=\"language-java\">\npublic static ResponseEntity<String> createLogin(final Bucket bucket, final String username, final String password) {\n    JsonObject data = JsonObject.create()\n        .put(\"type\", \"user\")\n        .put(\"name\", username)\n        .put(\"password\", BCrypt.hashpw(password, BCrypt.gensalt()));\n    JsonDocument doc = JsonDocument.create(\"user::\" + username, data);\n\n    try {\n        bucket.insert(doc);\n        JsonObject responseData = JsonObject.create()\n            .put(\"success\", true)\n            .put(\"data\", data);\n        return new ResponseEntity<String>(responseData.toString(), HttpStatus.OK);\n    } catch (Exception e) {\n        JsonObject responseData = JsonObject.empty()\n            .put(\"success\", false)\n            .put(\"failure\", \"There was an error creating account\")\n            .put(\"exception\", e.getMessage());\n        return new ResponseEntity<String>(responseData.toString(), HttpStatus.OK);\n    }\n}\n<\/code>\n<\/pre>\n<p>\uc694\uccad\uc5d0 \ud3ec\ud568\ub41c \uc0ac\uc6a9\uc790 \uc774\ub984\uacfc \ube44\ubc00\ubc88\ud638\ub294 JSON \uac1d\uccb4\uc5d0 \ucd94\uac00\ub418\uace0 \ube44\ubc00\ubc88\ud638\ub294 Spring BCrypt \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc554\ud638\ud654\ub429\ub2c8\ub2e4. \uc0ac\uc6a9\uc790 \ub370\uc774\ud130\ub97c \ucd94\uc801\ud558\uae30 \uc704\ud574 \uc0c8 \uc0ac\uc6a9\uc790\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uc81c\ubaa9\uc758 \ubb38\uc11c\uc5d0 \uc800\uc7a5\ub429\ub2c8\ub2e4. <strong>user::{\uc0ac\uc6a9\uc790\uba85_\uc5ec\uae30}<\/strong>. \uc0ac\uc6a9 <strong>bucket.insert(doc)<\/strong>\ub97c \ud638\ucd9c\ud558\uba74 \ub370\uc774\ud130\ub97c \ubc84\ud0b7\uc5d0 \uc0bd\uc785\ud558\ub824\uace0 \uc2dc\ub3c4\ud569\ub2c8\ub2e4. \uc608\uc678\uac00 \ubc1c\uc0dd\ud558\uc9c0 \uc54a\uc73c\uba74 \uc0bd\uc785\uc774 \uc131\uacf5\ud558\uace0 \uc751\ub2f5\uc774 \ubc18\ud658\ub429\ub2c8\ub2e4. \uc608\uc678\uac00 \ubc1c\uc0dd\ud558\uba74 \uc0bd\uc785\uc5d0 \uc2e4\ud328\ud558\uace0 \uc624\ub958\uac00 \ubc18\ud658\ub429\ub2c8\ub2e4.<\/p>\n<h3>\uae30\uc874 \uc0ac\uc6a9\uc790\ub85c \ub85c\uadf8\uc778\ud558\uae30<\/h3>\n<p>\uc0ac\uc6a9\uc790\uac00 \ub3d9\uc77c\ud55c \uc8fc\uc18c\ub85c GET\uc744 \ubc1c\ud589\ud560 \ub54c <strong>\/api\/user\/login<\/strong> \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub97c \ud638\ucd9c\ud558\ub824\uba74 \ub2e4\uc74c \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ud568\uc218\ub97c \ud638\ucd9c\ud574\uc57c \ud569\ub2c8\ub2e4:<\/p>\n<pre>\n<code class=\"language-java\">\npublic static ResponseEntity<String> login(final Bucket bucket, final String username, final String password) {\n   JsonDocument doc = bucket.get(\"user::\" + username);\n   JsonObject responseContent;\n   if(BCrypt.checkpw(password, doc.content().getString(\"password\"))) {\n       responseContent = JsonObject.create().put(\"success\", true).put(\"data\", doc.content());\n   } else {\n       responseContent = JsonObject.empty().put(\"success\", false).put(\"failure\", \"Bad Username or Password\");\n   }\n   return new ResponseEntity<String>(responseContent.toString(), HttpStatus.OK);\n}\n<\/code>\n<\/pre>\n<p>\uc0ac\uc6a9 <strong>bucket.get(\"user::\" + \uc0ac\uc6a9\uc790\uba85)<\/strong> \uc5d0 \uc81c\uacf5\ub41c \uc0ac\uc6a9\uc790 \uc774\ub984\uc744 \uc785\ub825\ud558\uba74 Java \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \ubc84\ud0b7\uc5d0 \ubb38\uc11c\uac00 \uc788\ub294 \uacbd\uc6b0 \ud574\ub2f9 \ubb38\uc11c\ub97c \uac00\uc838\uc635\ub2c8\ub2e4. Spring BCrypt \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0\ub294 \uc81c\uacf5\ub41c \ube44\ubc00\ubc88\ud638\uac00 \uc800\uc7a5\ub41c \uc554\ud638\ud654\ub41c \ube44\ubc00\ubc88\ud638\uc640 \uc77c\uce58\ud558\ub294\uc9c0 \uc5ec\ubd80\ub97c \ud655\uc778\ud560 \uc218 \uc788\ub294 \ud6cc\ub96d\ud55c \ud568\uc218\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc77c\uce58\ud558\uba74 \uc131\uacf5 \uac1d\uccb4\ub97c \ubc18\ud658\ud558\uace0, \uadf8\ub807\uc9c0 \uc54a\uc73c\uba74 \ub85c\uadf8\uc778 \uc2e4\ud328 \uac1d\uccb4\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.<\/p>\n<h3>N1QL \uacb0\uacfc \ucd94\ucd9c \ubc0f Java\uc5d0\uc11c \uc77d\uc744 \uc218 \uc788\uac8c \ub9cc\ub4e4\uae30<\/h3>\n<p>N1QL\uc740 <strong>QueryResult<\/strong> \uac1d\uccb4\ub97c \ubc18\ud658\ud558\ub294 \uac83\uc740 \uc694\uccad\ud558\ub294 \ud504\ub7f0\ud2b8\uc5d4\ub4dc\uc5d0 \ub370\uc774\ud130\ub97c \ubc18\ud658\ud558\ub294 \uacbd\uc6b0 \ubc14\ub78c\uc9c1\ud558\uc9c0 \uc54a\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc6b0\ub9ac\uac00 \uc815\ub9d0\ub85c \ud558\uace0 \uc2f6\uc740 \uac83\uc740 \uc774 \ub370\uc774\ud130\ub97c <strong>\ubaa9\ub85d<\/strong> \uac1d\uccb4\uc785\ub2c8\ub2e4.<\/p>\n<pre>\n<code class=\"language-java\">\nprivate static List<Map<String, Object>> extractResultOrThrow(QueryResult result) {\n    if (!result.finalSuccess()) {\n        throw new DataRetrievalFailureException(\"Query error: \" + result.errors());\n    }\n    List<Map<String, Object>> content = new ArrayList<Map<String, Object>>();\n    for (QueryRow row : result) {\n        content.add(row.value().toMap());\n    }\n    return content;\n}\n<\/code>\n<\/pre>\n<p>\uc774 \ud568\uc218\ub294 N1QL \ub370\uc774\ud130\uac00 \ubc18\ud658\ub420 \ub54c\ub9c8\ub2e4 \ud638\ucd9c\ub429\ub2c8\ub2e4.<\/p>\n<h3>\ubaa8\ub4e0 \uacf5\ud56d \ucc3e\uae30<\/h3>\n<p>\uc774\uc81c \uacf5\ud56d \uac80\uc0c9\uacfc \uad00\ub828\ud558\uc5ec N1QL\uc758 \ub9c8\ubc95 \uac19\uc740 \uae30\ub2a5\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<pre>\n<code class=\"language-java\">\npublic static List<Map<String, Object>> findAllAirports(final Bucket bucket, final String params) {\n    Statement query;\n\n    AsPath prefix = select(\"airportname\").from(i(bucket.name()));\n    if (params.length() == 3) {\n        query = prefix.where(x(\"faa\").eq(s(params.toUpperCase())));\n    } else if (params.length() == 4 && (params.equals(params.toUpperCase()) || params.equals(params.toLowerCase()))) {\n        query = prefix.where(x(\"icao\").eq(s(params.toUpperCase())));\n    } else {\n        query = prefix.where(i(\"airportname\").like(s(params + \"%\")));\n    }\n\n    QueryResult result = bucket.query(Query.simple(query));\n    return extractResultOrThrow(result);\n}\n<\/code>\n<\/pre>\n<p>\uc704\uc758 \ucf54\ub4dc\uc5d0\uc11c IntelliJ IDEA\uc640 \ud568\uaed8 Fluent API\ub97c \uc0ac\uc6a9\ud558\uc5ec N1QL \ucffc\ub9ac\ub97c \uc0dd\uc131\ud558\ub294 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uae30\ubcf8\uc801\uc73c\ub85c \uc6d0\uc2dc SQL\uc744 \ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ubcf4\uc77c \uac83\uc785\ub2c8\ub2e4:<\/p>\n<pre>\n<code class=\"language-sql\">\nSELECT airportname FROM `travel-sample` WHERE faa = {{PARAMS}}\n<\/code>\n<\/pre>\n<p>\uc704 \uc608\uc5d0\uc11c {{PARAMS}}\ub294 LAX \ub610\ub294 \uc774\uc640 \uc720\uc0ac\ud55c \uacf5\ud56d\uc744 \ub098\ud0c0\ub0c5\ub2c8\ub2e4. \ubb3c\ub860 \ub9e4\uac1c\ubcc0\uc218 \uae38\uc774\uac00 3\uc778 \uacbd\uc6b0\uc785\ub2c8\ub2e4.<\/p>\n<h3>\ubaa8\ub4e0 \ud56d\uacf5\ud3b8 \ub178\uc120 \ucc3e\uae30<\/h3>\n<p>\ub9c8\uc9c0\ub9c9\uc73c\ub85c \ube44\ud589 \uacbd\ub85c\ub97c \ucc3e\ub294 \ubc29\ubc95\ub9cc \ub0a8\uc558\uc2b5\ub2c8\ub2e4:<\/p>\n<pre>\n<code class=\"language-java\">\npublic static List<Map<String, Object>> findAllFlightPaths(final Bucket bucket, String from, String to, Calendar leave) {\n    Statement query = select(x(\"faa\").as(\"fromAirport\"))\n        .from(i(bucket.name()))\n        .where(x(\"airportname\").eq(s(from)))\n        .union()\n        .select(x(\"faa\").as(\"toAirport\"))\n        .from(i(bucket.name()))\n        .where(x(\"airportname\").eq(s(to)));\n\n    QueryResult result = bucket.query(Query.simple(query));\n\n    if (!result.finalSuccess()) {\n        throw new DataRetrievalFailureException(\"Query error: \" + result.errors());\n    }\n\n    String fromAirport = null;\n    String toAirport = null;\n    for (QueryRow row : result) {\n        if (row.value().containsKey(\"fromAirport\")) {\n            fromAirport = row.value().getString(\"fromAirport\");\n        }\n        if (row.value().containsKey(\"toAirport\")) {\n            toAirport = row.value().getString(\"toAirport\");\n        }\n    }\n\n    Statement joinQuery = select(\"a.name\", \"s.flight\", \"s.utc\", \"r.sourceairport\", \"r.destinationairport\", \"r.equipment\")\n            .from(i(bucket.name()).as(\"r\"))\n            .unnest(\"r.schedule AS s\")\n            .join(i(bucket.name()).as(\"a\") + \" ON KEYS r.airlineid\")\n            .where(x(\"r.sourceairport\").eq(s(fromAirport)).and(x(\"r.destinationairport\").eq(s(toAirport))).and(x(\"s.day\").eq(leave.get(Calendar.DAY_OF_MONTH))))\n            .orderBy(Sort.asc(\"a.name\"));\n\n    QueryResult otherResult = bucket.query(joinQuery);\n    return extractResultOrThrow(otherResult);\n}\n<\/code>\n<\/pre>\n<p>\uc774 \ubc29\ubc95\uc5d0\uc11c\ub294 \ub450 \uac00\uc9c0 N1QL \ucffc\ub9ac\ub97c \uc218\ud589\ud569\ub2c8\ub2e4. \uccab \ubc88\uc9f8\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc27d\uac8c \ubc88\uc5ed\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre>\n<code class=\"language-sql\">\nSELECT faa AS fromAirport FROM `travel-sample` WHERE airportname = {{PARAMS.FROM}} UNION SELECT faa AS toAirport FROM `travel-sample` WHERE airportname = {{PARAMS.TO}}\n<\/code>\n<\/pre>\n<p>\ubb3c\ub860 {{PARAMS}}\ub294 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc5d0 \uc804\ub2ec\ub41c \ubaa8\ub4e0 \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4. \uc774 \ubb38\uc5d0\uc11c, \uc6b0\ub9ac\ub294 \ubaa8\ub4e0 <strong>\uc5d0\uc11c<\/strong> \uacf5\ud56d\uacfc \ubaa8\ub4e0 <strong>\uc5d0<\/strong> \uacf5\ud56d.<\/p>\n<p>\ub450 \uacb0\uacfc \uc9d1\ud569\uc744 \ubaa8\ub450 \uac00\uc838\uc628 \ud6c4, \ub450 \uacb0\uacfc \uc9d1\ud569\uc744 \ubc18\ubcf5\ud558\uc5ec <strong>\uc5d0<\/strong> \uadf8\ub9ac\uace0 <strong>\uc5d0\uc11c<\/strong> \uacf5\ud56d\uc774 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc73c\uba74 \uae30\ubcf8\uac12\uc744 NULL\ub85c \uc124\uc815\ud558\uc5ec \ub2e4\uc74c \ucffc\ub9ac\uac00 \uc131\uacf5\ud558\uc9c0 \ubabb\ud558\ub3c4\ub85d \ud569\ub2c8\ub2e4.<\/p>\n<p>\ub450 \ubc88\uc9f8 \ucffc\ub9ac\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uc6d0\uc2dc \ucffc\ub9ac\ub85c \ubcc0\ud658\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre>\n<code class=\"language-sql\">\nSELECT a.name, s.flight, s.utc, r.sourceairport, r.destinationairport, r.equipment FROM `travel-sample` AS r UNNEST r.schedule AS s JOIN `travel-sample` AS a ON KEYS r.airlineid WHERE r.sourceairport = {{TO}} AND r.destinationairport = {{TO}} AND s.day = 3 ORDER BY a.name ASC\n<\/code>\n<\/pre>\n<p>JSON \ubb38\uc11c\uc5d0\uc11c \uc911\ucca9\uc744 \ud574\uc81c\ud558\uace0 \uc774\uc81c \ud3c9\ud3c9\ud55c \ud0a4\uc5d0 \uacb0\ud569\ud558\uc5ec \ud56d\uacf5\ud3b8\uc5d0 \ub300\ud55c \uc77c\uc815 \uc815\ubcf4\ub97c \uac00\uc838\uc624\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2>\uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ubc0f \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ud074\ub798\uc2a4 \ub9c8\ubb34\ub9ac<\/h2>\n<p>\uc774\uc81c \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc640 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uba54\uc11c\ub4dc\uac00 \uc788\uc9c0\ub9cc \uc11c\ub85c \uc5f0\uacb0\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc774\uc81c <strong>Application.java<\/strong> \ud074\ub798\uc2a4\ub97c \uc5f4\uace0 \uc774\uc804\uc5d0 \ub9cc\ub4e0 \ud568\uc218\uc5d0 \uba87 \uac00\uc9c0 \ucf54\ub4dc\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4:<\/p>\n<pre>\n<code class=\"language-java\">\n@RequestMapping(value=\"\/user\/login\", method= RequestMethod.GET)\npublic Object login(@RequestParam String user, @RequestParam String password) {\n    return Database.login(bucket(), user, password);\n}\n\n@RequestMapping(value=\"\/user\/login\", method=RequestMethod.POST)\npublic Object createLogin(@RequestBody String json) {\n    JsonObject jsonData = JsonObject.fromJson(json);\n    return Database.createLogin(bucket(), jsonData.getString(\"user\"), jsonData.getString(\"password\"));\n}\n<\/code>\n<\/pre>\n<p>\ub450 \uac1c\uc758 \uc815\uc801 <strong>\ub370\uc774\ud130\ubca0\uc774\uc2a4<\/strong> \uba54\uc11c\ub4dc\ub294 \uc0ac\uc6a9\uc790 \uacc4\uc815\uacfc \uad00\ub828\ub41c \uac01 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc5d0\uc11c \ud638\ucd9c\ub429\ub2c8\ub2e4. \uc774\uc804\uc5d0 \ub9cc\ub4e0 \ub2e4\ub978 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc5d0 \ub300\ud574\uc11c\ub3c4 \ub3d9\uc77c\ud55c \ud504\ub85c\uc138\uc2a4\ub97c \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre>\n<code class=\"language-java\">\n@RequestMapping(\"\/airport\/findAll\")\npublic List<Map<String, Object>> airports(@RequestParam String search) {\n    return Database.findAllAirports(bucket(), search);\n}\n\n@RequestMapping(\"\/flightPath\/findAll\")\npublic List<Map<String, Object>> all(@RequestParam String from, @RequestParam String to, @RequestParam String leave)\n    throws Exception {\n    Calendar calendar = Calendar.getInstance(Locale.US);\n    calendar.setTime(DateFormat.getDateInstance(DateFormat.SHORT, Locale.US).parse(leave));\n    return Database.findAllFlightPaths(bucket(), from, to, calendar);\n}\n<\/code>\n<\/pre>\n<h2>\uc0d8\ud50c \uc5d4\ub4dc\ud3ec\uc778\ud2b8 \ud14c\uc2a4\ud2b8<\/h2>\n<p>\uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\ub97c \ud14c\uc2a4\ud2b8\ud558\ub294 \ubc29\ubc95\uc5d0\ub294 \uba87 \uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uc608\uc5d0\uc11c\ub294 cURL\uc744 \uc0ac\uc6a9\ud558\uc9c0\ub9cc Google Chrome\uc6a9 Postman \ub610\ub294 \uc774\uc640 \uc720\uc0ac\ud55c \uac83\uc744 \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>cURL\uc744 \uc124\uce58\ud55c \uc0c1\ud0dc\uc5d0\uc11c \ud130\ubbf8\ub110 \ub610\ub294 \uba85\ub839 \ud504\ub86c\ud504\ud2b8\ub97c \uc5f4\uace0 \ub2e4\uc74c\uc744 \uc785\ub825\ud569\ub2c8\ub2e4:<\/p>\n<pre>\n<code class=\"language-bash\">\ncurl -X GET 'https:\/\/localhost:8080\/api\/airport\/findAll?search=LAX'\n<\/code>\n<\/pre>\n<p>\uc704\uc758 cURL \uba85\ub839\uc740 <strong>api\/\uc5d0\uc5b4\ud3ec\ud2b8\/findAll<\/strong> \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc758 \ub9e4\uac1c\ubcc0\uc218\ub97c \uc804\ub2ec\ud558\uace0 <strong>\uac80\uc0c9=LAX<\/strong>. \uc131\uacf5\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uc751\ub2f5\uc744 \ubc1b\uc544\uc57c \ud569\ub2c8\ub2e4:<\/p>\n<pre>\n[{\"airportname\":\"Los Angeles Intl\"}]<\/pre>\n<p>\ub2e4\ub978 \ubaa8\ub4e0 \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc5d0 \ub300\ud574\uc11c\ub3c4 \ub3d9\uc77c\ud55c \uc885\ub958\uc758 \ud14c\uc2a4\ud2b8\ub97c \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2>\uacb0\ub860<\/h2>\n<p>\ubc29\uae08 \uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc11c\ubc84\uc640 Java\uc6a9 \uc2a4\ud504\ub9c1 \ubd80\ud2b8\ub97c \uc0ac\uc6a9\ud558\ub294 \uc0d8\ud50c \uc5ec\ud589 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc124\uc815\ud558\ub294 \ubc29\ubc95\uc744 \uc0b4\ud3b4\ubcf4\uc558\uc2b5\ub2c8\ub2e4. \ud504\ub7f0\ud2b8\uc5d4\ub4dc\ub97c \uc124\uc815\ud558\uc9c0\ub294 \uc54a\uc558\uc9c0\ub9cc AngularJS, jQuery \ub610\ub294 ReactJS\uc640 \uac19\uc740 \uc5b8\uc5b4\ub97c \uc0ac\uc6a9\ud558\uc5ec \ud504\ub7f0\ud2b8\uc5d4\ub4dc\ub97c \ucd94\uac00\ud558\ub294 \uac83\uc740 \ub9e4\uc6b0 \uac00\ub2a5\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc774 \uc804\uccb4 \ud504\ub85c\uc81d\ud2b8\uc640 AngularJS \ud504\ub7f0\ud2b8\uc5d4\ub4dc\ub294 \ub2e4\uc74c\uc5d0\uc11c \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/github.com\/couchbaselabs\/try-cb-java\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ub7a9 \uae43\ud5c8\ube0c<\/a> \ucc44\ub110.<\/p>","protected":false},"excerpt":{"rendered":"<p>At Couchbase Connect 2015 we demonstrated an example application that uses N1QL to query data from a sample Couchbase bucket. If you missed the conference, not a problem. We&#39;re going to go through how to reproduce this application and check [&hellip;]<\/p>","protected":false},"author":63,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1812,2201],"tags":[1725],"ppma_author":[9032],"class_list":["post-2072","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-n1ql-query","category-tools-sdks","tag-nosql-database"],"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>Traveling with Couchbase using the Java SDK - 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\/traveling-with-couchbase-using-the-java-sdk\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Traveling with Couchbase using the Java SDK\" \/>\n<meta property=\"og:description\" content=\"At Couchbase Connect 2015 we demonstrated an example application that uses N1QL to query data from a sample Couchbase bucket. If you missed the conference, not a problem. We&#039;re going to go through how to reproduce this application and check [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/traveling-with-couchbase-using-the-java-sdk\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/thepolyglotdeveloper\" \/>\n<meta property=\"article:published_time\" content=\"2015-07-14T16:37:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T06:47:50+00:00\" \/>\n<meta name=\"author\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@nraboy\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/traveling-with-couchbase-using-the-java-sdk\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/traveling-with-couchbase-using-the-java-sdk\/\"},\"author\":{\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1\"},\"headline\":\"Traveling with Couchbase using the Java SDK\",\"datePublished\":\"2015-07-14T16:37:21+00:00\",\"dateModified\":\"2025-06-14T06:47:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/traveling-with-couchbase-using-the-java-sdk\/\"},\"wordCount\":1474,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/traveling-with-couchbase-using-the-java-sdk\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"NoSQL Database\"],\"articleSection\":[\"SQL++ \/ N1QL Query\",\"Tools &amp; SDKs\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/traveling-with-couchbase-using-the-java-sdk\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/traveling-with-couchbase-using-the-java-sdk\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/traveling-with-couchbase-using-the-java-sdk\/\",\"name\":\"Traveling with Couchbase using the Java SDK - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/traveling-with-couchbase-using-the-java-sdk\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/traveling-with-couchbase-using-the-java-sdk\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2015-07-14T16:37:21+00:00\",\"dateModified\":\"2025-06-14T06:47:50+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/traveling-with-couchbase-using-the-java-sdk\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/traveling-with-couchbase-using-the-java-sdk\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/traveling-with-couchbase-using-the-java-sdk\/#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\/traveling-with-couchbase-using-the-java-sdk\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Traveling with Couchbase using the Java SDK\"}]},{\"@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\/bb545ebe83bb2d12f91095811d0a72e1\",\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"caption\":\"Nic Raboy, Developer Advocate, Couchbase\"},\"description\":\"Nic Raboy is an advocate of modern web and mobile development technologies. He has experience in Java, JavaScript, Golang and a variety of frameworks such as Angular, NativeScript, and Apache Cordova. Nic writes about his development experiences related to making web and mobile development easier to understand.\",\"sameAs\":[\"https:\/\/www.thepolyglotdeveloper.com\",\"https:\/\/www.facebook.com\/thepolyglotdeveloper\",\"https:\/\/x.com\/nraboy\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/nic-raboy-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Traveling with Couchbase using the Java SDK - 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\/traveling-with-couchbase-using-the-java-sdk\/","og_locale":"ko_KR","og_type":"article","og_title":"Traveling with Couchbase using the Java SDK","og_description":"At Couchbase Connect 2015 we demonstrated an example application that uses N1QL to query data from a sample Couchbase bucket. If you missed the conference, not a problem. We&#39;re going to go through how to reproduce this application and check [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/traveling-with-couchbase-using-the-java-sdk\/","og_site_name":"The Couchbase Blog","article_author":"https:\/\/www.facebook.com\/thepolyglotdeveloper","article_published_time":"2015-07-14T16:37:21+00:00","article_modified_time":"2025-06-14T06:47:50+00:00","author":"Nic Raboy, Developer Advocate, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@nraboy","twitter_misc":{"Written by":"Nic Raboy, Developer Advocate, Couchbase","Est. reading time":"12\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/traveling-with-couchbase-using-the-java-sdk\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/traveling-with-couchbase-using-the-java-sdk\/"},"author":{"name":"Nic Raboy, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1"},"headline":"Traveling with Couchbase using the Java SDK","datePublished":"2015-07-14T16:37:21+00:00","dateModified":"2025-06-14T06:47:50+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/traveling-with-couchbase-using-the-java-sdk\/"},"wordCount":1474,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/traveling-with-couchbase-using-the-java-sdk\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["NoSQL Database"],"articleSection":["SQL++ \/ N1QL Query","Tools &amp; SDKs"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/traveling-with-couchbase-using-the-java-sdk\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/traveling-with-couchbase-using-the-java-sdk\/","url":"https:\/\/www.couchbase.com\/blog\/traveling-with-couchbase-using-the-java-sdk\/","name":"Traveling with Couchbase using the Java SDK - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/traveling-with-couchbase-using-the-java-sdk\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/traveling-with-couchbase-using-the-java-sdk\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2015-07-14T16:37:21+00:00","dateModified":"2025-06-14T06:47:50+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/traveling-with-couchbase-using-the-java-sdk\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/traveling-with-couchbase-using-the-java-sdk\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/traveling-with-couchbase-using-the-java-sdk\/#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\/traveling-with-couchbase-using-the-java-sdk\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Traveling with Couchbase using the Java SDK"}]},{"@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\/bb545ebe83bb2d12f91095811d0a72e1","name":"Nic Raboy, \uac1c\ubc1c\uc790 \uc639\ud638\uc790, Couchbase","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354","url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","caption":"Nic Raboy, Developer Advocate, Couchbase"},"description":"\ub2c9 \ub77c\ubcf4\uc774\ub294 \ucd5c\uc2e0 \uc6f9 \ubc0f \ubaa8\ubc14\uc77c \uac1c\ubc1c \uae30\uc220\uc744 \uc639\ud638\ud558\ub294 \uc0ac\ub78c\uc785\ub2c8\ub2e4. \uadf8\ub294 Java, JavaScript, Golang \ubc0f Angular, NativeScript, Apache Cordova\uc640 \uac19\uc740 \ub2e4\uc591\ud55c \ud504\ub808\uc784\uc6cc\ud06c\uc5d0 \ub300\ud55c \uacbd\ud5d8\uc774 \uc788\uc2b5\ub2c8\ub2e4. Nic\uc740 \uc6f9 \ubc0f \ubaa8\ubc14\uc77c \uac1c\ubc1c\uc744 \ubcf4\ub2e4 \uc27d\uac8c \uc774\ud574\ud560 \uc218 \uc788\ub3c4\ub85d \uc790\uc2e0\uc758 \uac1c\ubc1c \uacbd\ud5d8\uc5d0 \ub300\ud574 \uae00\uc744 \uc4f0\uace0 \uc788\uc2b5\ub2c8\ub2e4.","sameAs":["https:\/\/www.thepolyglotdeveloper.com","https:\/\/www.facebook.com\/thepolyglotdeveloper","https:\/\/x.com\/nraboy"],"url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/nic-raboy-2\/"}]}},"authors":[{"term_id":9032,"user_id":63,"is_guest":0,"slug":"nic-raboy-2","display_name":"Nic Raboy, Developer Advocate, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","author_category":"","last_name":"Raboy","first_name":"Nic","job_title":"","user_url":"https:\/\/www.thepolyglotdeveloper.com","description":"\ub2c9 \ub77c\ubcf4\uc774\ub294 \ucd5c\uc2e0 \uc6f9 \ubc0f \ubaa8\ubc14\uc77c \uac1c\ubc1c \uae30\uc220\uc744 \uc639\ud638\ud558\ub294 \uc0ac\ub78c\uc785\ub2c8\ub2e4. \uadf8\ub294 Java, JavaScript, Golang \ubc0f Angular, NativeScript, Apache Cordova\uc640 \uac19\uc740 \ub2e4\uc591\ud55c \ud504\ub808\uc784\uc6cc\ud06c\uc5d0 \ub300\ud55c \uacbd\ud5d8\uc774 \uc788\uc2b5\ub2c8\ub2e4. Nic\uc740 \uc6f9 \ubc0f \ubaa8\ubc14\uc77c \uac1c\ubc1c\uc744 \ubcf4\ub2e4 \uc27d\uac8c \uc774\ud574\ud560 \uc218 \uc788\ub3c4\ub85d \uc790\uc2e0\uc758 \uac1c\ubc1c \uacbd\ud5d8\uc5d0 \ub300\ud574 \uae00\uc744 \uc4f0\uace0 \uc788\uc2b5\ub2c8\ub2e4."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/2072","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\/63"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=2072"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/2072\/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=2072"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=2072"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=2072"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=2072"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}