Ace-T's Blog 내 검색 [네이버 커넥트 이웃 합니다~^-^/ 요청 大 환영~~]

ace-t의 Spring Boot 따라잡기(기본 - CouchBase 연동하기)

OpenSource/Spring Boot 2016.03.24 11:16
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T



2016/03/23 - [OpenSource/Spring Boot] - ace-t의 Spring Boot 따라잡기(기본 - 외부톰캣 연동하기!)


Rest api + CouchBase 연동

CouchBase 셋팅은 따로 다루지 않겠습니다.

이미 셋팅이 되어있다는 전제하에 진행합니다.


1) build.gradle의  dependency 추가

    compile('org.springframework.data:spring-data-couchbase:2.0.0.RELEASE') 를 추가.


2) Controller 작성

  • Controller 작성 후 Service를 호출하는 방식이 보통 MVC 패턴이며, Repository라는 interface를 implements하여 Service에서 구현해 나가는 구조 입니다. 또한 couchbase의 config관련도 필요합니다.
  • Controller 뼈대 코딩 후 필요한 Config -> Interface -> Service 순으로 만들어 가겠습니다.
  • Restful api 방식은 @RestController와 @PathVariable를 통해 간단하게 구현할 수 있습니다. 단, Restful은 아키텍처를 따로 공부하여 업무에 맞게 알맞게 구현해보세요~
  • add source

import com.kakaocorp.www.api.service.LineupDataService;

import com.kakaocorp.www.api.config.CouchBaseConfig;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.*;


import java.util.List;

import java.util.Map;


@RestController

public class LineupDataController {

    @Autowired

    CouchBaseConfig couchBaseConfig;

    @Autowired

    LineupDataService lineupDataService;


    @RequestMapping(value = "/{version}/findAll", method = RequestMethod.GET)

    public List<Map<String, Object>> getStaticData(@PathVariable String version, @RequestParam String query, @RequestParam(defaultValue = "mobile") String platform){

        if("v1".equals(version)){

            return lineupDataService.findAll(couchBaseConfig, query, platform);

        }

        return null;

    }


}



3) CouchBaseConfig.java 생성

  • extends AbstractCouchbaseConfiguration
  • add source

    @Override    
    protected List<String> getBootstrapHosts() {

        return Arrays.asList("couchbase ip or domain");

    }



    @Override

    public String getBucketName() {

        return "wirite bucket name";

    }


    @Override

    protected String getBucketPassword() {

        return "";

    }


    @Bean

    public Bucket contextBucket() throws Exception {

        return couchbaseCluster().openBucket("wirite bucket name", "");

    }


    @Bean(name = "contextTemplate")

    public CouchbaseTemplate contextTemplate() throws Exception {

        CouchbaseTemplate template = new CouchbaseTemplate(couchbaseClusterInfo(), //reuse the default bean

                contextBucket(), mappingCouchbaseConverter(), translationService() //default beans here as well

        );

        template.setDefaultConsistency(getDefaultConsistency());

        return template;

    }

 

3) CouchBaseDataReposiry interface를 하나 만듭니다.

  • 원하는 기능을 interface에 넣고 service에서 재구현할 것이다.
  • add source

import java.util.List;

import java.util.Map;

public interface CouchBaseDataRepository {

    public List<Map<String, Object>> findAll(final CouchBaseConfig couchBaseConfig, final String searchKeyword, String platform);

} 



4) CouchBaseDataService.java 생성

  • 위에서 만든 interface를 implements 하여 구현 합니다.
  • add source : N1ql을 사용 함.

아래의 소스는 프로토타입으로 간단하게 구현되었음. 무조건 실행! 아래의 소스를 바탕으로 확장하시면 됩니다.

참고 : http://developer.couchbase.com/documentation/server/4.0/n1ql/n1ql-intro/data-access-using-n1ql.html

import com.couchbase.client.java.query.N1qlQuery;

import com.couchbase.client.java.query.N1qlQueryResult;

import com.couchbase.client.java.query.N1qlQueryRow;

import com.couchbase.client.java.query.Statement;

import com.couchbase.client.java.query.dsl.path.AsPath;

import com.kakaocorp.www.api.config.CouchBaseConfig;

import com.kakaocorp.www.api.repository.CouchBaseDataRepository;

import org.springframework.dao.DataRetrievalFailureException;

import org.springframework.stereotype.Service;


import java.util.ArrayList;

import java.util.List;

import java.util.Map;


import static com.couchbase.client.java.query.Select.select;

import static com.couchbase.client.java.query.dsl.Expression.i;

import static com.couchbase.client.java.query.dsl.Expression.s;

import static com.couchbase.client.java.query.dsl.Expression.x;


@Service

public class LineupDataService implements CouchBaseDataRepository {


    @Override

    public List<Map<String, Object>> findAll(CouchBaseConfig couchBaseConfig, final String searchKeyword, String platform) {

        Statement query;


        AsPath prefix = select("D, H, P").from(i(couchBaseConfig.getBucketName()));

        query = prefix.where(x("QUERY").eq(s(searchKeyword)).and("PLATFORM").eq(s(platform)));


        logQuery(query.toString());

        N1qlQueryResult result = null;

        try {

            result = couchBaseConfig.contextBucket().query(N1qlQuery.simple(query));

        } catch (Exception e) {

            e.printStackTrace();

        }

        return extractResultOrThrow(result);

    }


    private static List<Map<String, Object>> extractResultOrThrow(N1qlQueryResult result) {

        if (!result.finalSuccess()) {

            //log.warn("Query returned with errors: " + result.errors());

            throw new DataRetrievalFailureException("Query error: " + result.errors());

        }


        List<Map<String, Object>> content = new ArrayList<Map<String, Object>>();

        for (N1qlQueryRow row : result) {

            content.add(row.value().toMap());

        }

        return content;

    }


    /**

     * Helper method to log the executing query.

     */

    private static void logQuery(String query) {

        //log.info("Executing Query: {}", query);

    }

 

  - 끝 -



저작자 표시 비영리 변경 금지
신고

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

ace-t의 Spring Boot 따라잡기(기본 - 헬로우월드찍어보기!)

OpenSource/Spring Boot 2016.03.22 13:42
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


2016/03/22 - [OpenSource/Spring Boot] - ace-t의 Spring Boot 따라잡기(셋팅편)


주저리 - 헬로우월드를 찍기전에 스프링의 구조를 한번 생각해볼 필요가 있겠습니다.

특히나 팀으로 혹은 2~3명이서 개발을 하는거라면 서로 각자 개발하지말고 먼저 물어보세요~

당신은 어떤구조로 개발하였나요? 라구요! 

주변에 너무 혼자서만 개발하시는분들이 많기 때문에 각자 자기만의 스타일을 고집한다면..

유지보수도 힘들고 커뮤니케이션을 함에 있어서도 힘든 부분이 있으니깐요! 

예를 들어 아래와 같이 기본적인 구조로 생각을 하신다는 가정하에 진행해보도록 하겠습니다.

api

  ㄴ config

  ㄴ controller

  ㄴ repository

  ㄴ service


이제 코딩을 한번 해볼 차례 입니다. 헬로우월드를 한번 찍어보겠습니다. 

controller에 아래와 같이 HelloWorldcontroller.java를 하나 만듭니다.


아래와 같이 소스코딩을한 뒤에 내장된 서버로 띄어봅니다.

소스코드

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.RestController;


@RestController

public class HelloWorldController {

    private static final String template = "Hello";

    @RequestMapping("/greeting")

    public String greeting(@RequestParam(value="name", defaultValue="World") String name) {

        return template+":"+name;

    }

}

결과는 아래와 같습니다.

http://localhost:8080/greeting?name=terry



  - 끝 -










저작자 표시 비영리 변경 금지
신고

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

ace-t의 Spring Boot 따라잡기(셋팅편)

OpenSource/Spring Boot 2016.03.22 13:18
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

1. 목표

현재 개발중인 프로젝트에서 필요한 api를 Spring Boot로 구현하고자 함.

정리를 해두면 다른사람도 좋고 나도 좋고~도랑치고 가재잡고~

CouchBase storege - SpringBoot api



2. 환경

Mac OS X

JDK 8

Tomcat 8

Gradle 1.3.3

Spring Boot

CouchBase 4.x

인텔리J IDE 12

git


3. Spring Boot 간단 셋팅!

  • http://start.spring.io/  에 접속!
  • 아래의 그림처럼 필요한 것들을 찾아서 Dependencies 선택! 나중에 찾아서 넣어도 되니 신중하게 생각하지 않아도 됨.


위에서 Group는 패키지라고 생각하시면 됩니다. 

또한 Gradle Project Artifact를 설정, 디펜던시 설정 후에 Generaate Project!!

아래와 같이 zip파일로 프로젝트 소스가 똭!





압축을 해제한 뒤 원하는 위치에 복사!




그런 다음 인텔리J에서 프로젝트를 가져옵니다.




Gradle 기반이므로 Gradle을 선택하여 줍니다.



다음x2 을 해주면 아래와 같이 프로젝트가 import 되어집니다.

단, gradle이 로컬에 없으면 다음다음이 안될수가 있겠네요~ 고렇다면 gradle 다운 받은다음에 아래와 같이 연결 시켜주면 됩니다.





이제 소스코딩을 하거나 원하는 셋팅을 하시어 사용하시면 됩니다. 참 쉽죠잉? 

셋팅편 끝~


다음편은..항상 우리가 하던 헬로우월드찍기! 를 해보겠습니다.


2016/03/22 - [OpenSource/Spring Boot] - ace-t의 Spring Boot 따라잡기(기본 - 헬로우월드찍어보기!)







저작자 표시 비영리 변경 금지
신고

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

step by step - spring boot

OpenSource/Spring Boot 2016.02.17 03:29
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T



스프링 부트를 프로젝트에 적용시켜 구현을 하고 있다.

위의 소스는 해당 프로젝트를 위한 가이드 소스이다. 

꼭 필요한 작업이라고 생각이 되어 개발 가이드 소스를 조금씩 습득하며 구현하고 있다.

전체적인 아키텍처와 as-is 분석도 해야하니..새벽에 더 볼수 밖에 없지만 뭔가 하고있다는게 즐거운듯 하다.

또한 다른업무에 치여 손도 못댔었는데..그나마 요즘 운동을 시작했더니 새벽에 안졸리고 집중이 되어 조금이라도 코드를 짜봐서 조으다~

2016년 목표한바 성취하도록 화이팅 하자!


저작자 표시 비영리 변경 금지
신고

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

티스토리 툴바