반응형

Cloudant DB에 Java를 통해 접근하려면 주로 Ektorp라는 라이브러리를 사용합니다.

Ektorp의 웹사이트와 매뉴얼 페이지는 아래와 같습니다


아래는 REST 프로토콜을 사용하는 경우 Cloudant DB가 제공하는 API 입니다. 
하지만 Ektorp는 사용하기 편리한 형태로 추상화가 되어 있기 때문에 이러한 세부적인 내용들을 모두 알아야 할 필요가 없는 장점이 있습니다. 



1. Eclipse에서 Ektorp 라이브러리 레퍼런스

Ektorp 라이브러리는 하나의 jar 파일로 되어 있지만 내부적으로 참조하는 라이브러리들이 많아 일일이 설정하는 것 보다는
Maven을 통해 Dependency를 해결하길 권장합니다.

Eclipse에서 Maven 프로젝트를 만들고(이 부분에 대한 자세한 내용은 생략) pom.xml에 다음과 같이 추가합니다.

     <dependencies>
          <dependency>
               <groupId>org.ektorp</groupId>
               <artifactId>org.ektorp</artifactId>
               <version>1.4.1</version>
          </dependency>
          ...
     </dependencies>

최종 버전은 아래 Maven Repository에서 확인 후 지정하면 됩니다.


2. DB 연결 방법

기본적으로 Cloudant 계정이 있고 사용할 DB를 이미 만들었다는 전제 하에 다음과 같이 접속하는 코드를 작성할 수 있습니다.

               HttpClient httpClient = new StdHttpClient.Builder().url(url)
                         .username(uid)
                         .password(pwd)
                         .connectionTimeout(5000)
                         .socketTimeout(30000).build();

               StdCouchDbInstance dbInst = new StdCouchDbInstance(httpClient);
              
               System.out.println("*** Database connection is established");
              
               CouchDbConnector conn = dbInst.createConnector(“dbname", true);    // DB가 존재하지 않을 때 생성하려면 두 번째 파라미터에 true

위와 같이 CouchDbConnector 객체를 얻고 나면 Document에 대한 조회, 생성, 변경, 삭제가 가능해집니다.

3. 기본적인 CRUD

Cloudant DB는 기본적으로 JSON 객체를 저장할 수 있고, Ektorp는 그것을 ObjectMapper를 통해 JsonNode, Map, 또는 JavaBeans 객체로 
매핑할 수 있습니다. 다음은 Jackson 라이브러리의 JsonNode 객체를 이용하여 INSERT를 하는 예제입니다.

               ObjectMapper om = new ObjectMapper();
               try {
                    //     Document 생성 (insert 와 동일)
                    //     doc id를 지정하지 않았으므로 자동으로 생성 됨
                    JsonNode node = om.readValue("{\"name\": \"유관순\"}", JsonNode.class);
                    //     doc id를 지정하려면 다음 remark 해제
//                    ObjectNode editableNode = (ObjectNode)node;
//                    editableNode.put(“_id", "유관순”);
                    conn.create(node);
               } catch (JsonParseException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
               } catch (JsonMappingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
               } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
               }

다음은 각각 UPDATE, DELETE, QUERY를 하는 예제입니다.

                    // 조회. _id가 지정된 경우
                    ObjectNode queriedNode = (ObjectNode)conn.get(JsonNode.class, “유관순");

                    // 내용 변경. JsonNode가 아닌 ObjectNode로 type casting 해야 JSON 데이터 변경 가능
                    queriedNode.put("name", "끼어들기");
                    try {
                         conn.update(queriedNode);
                         conn.delete(queriedNode);
                    } catch (UpdateConflictException e) {
                         System.out.println(om.writerWithDefaultPrettyPrinter().writeValueAsString(queriedNode));
                         e.printStackTrace();
                    }









Posted by Hey Jerry
,