eclipes4j's 개발은 언제나 즐겁다.

힘든 어떤 일을 한 후, 나의 가장 가까운 사람에게 해줘야하고 들었으면 하는 말.

후비고!

가끔 이 말이 너무 듣고 싶을때가 있다.


조이양에게..ㅎㅎ




사진보고 얼굴 그려보기

스케치배우기

4B 연필로 신경써가면서 그림을 그리는 것도 좋지만 그냥 쓱싹해서 얼굴 그리는 것도 좋아하다보니, 문화센터 강사님의 방향과는 다르게 그냥 나혼자 끄적이는 스케치도 많아지고 있다.( 이제 3개월이 지났는데 반항인가..? ㅎㅎ) 



누구 사진을 보고 그렸는가는 절대 밝힐 수 없다. 난 일주일에 한번가는 문화센터 왕초보 수강생일 뿐이라고~





취미생활 가져보기!

스케치배우기

약 3개월 전부터 회사 근처의 백화점 문화센터에 연필드로잉 과정을 다니기 시작했다.


뭐, 그전부터 그림에 대한 관심 정도는 있었지만 직접 배우는 건 아마 국딩시절 미술학원 이후 처음 일 거 같다.



아..첨 시간에 눈 그리기는 차마 못 올리겠.. 여튼 몇 주가 지나서 머리카락 그리기 결과는 이렇다.




음 뭔가 비슷하기도 하고 다르기도 하지만..ㅎㅎ


이렇게 실물 데셍(?) 드로잉을 배우면서 집에서  조금씩 짬을내서 카툰도 그려보기 시작.


책보고 따라 그리는데 나름 재밌다는.










Local Docker Elasticsearch 운영 - Spring + High Level Client

Programming!

이전에 설치했던 elasticsearch 가 잘 운영되고 있다면..


http://127.0.0.1:9200/_cat/health

1545724265 07:51:05 docker-cluster green 2 2 10 5 0 0 0 0 - 100.0%



스프링부트로 새로운 프로젝트를 생상한다.

IDEA 도움을 받아 프로젝트 설치 후, build.gradle 파일을 열어보자

buildscript {

ext {

springBootVersion = '2.1.1.RELEASE'

}

repositories {

mavenCentral()

}

dependencies {

classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")

}

}


apply plugin: 'java'

apply plugin: 'eclipse'

apply plugin: 'org.springframework.boot'

apply plugin: 'io.spring.dependency-management'


group = 'com.example'

version = '0.0.1-SNAPSHOT'

sourceCompatibility = 1.8


repositories {

mavenCentral()

}



dependencies {

    //implementation('org.springframework.boot:spring-boot-starter-data-elasticsearch')

    compile('org.elasticsearch.client:elasticsearch-rest-client:6.5.4')

    compile('org.elasticsearch.client:elasticsearch-rest-high-level-client:6.5.4')

    compile('com.google.guava:guava:27.0.1-jre')

    

    

    compile('org.springframework.boot:spring-boot-starter-web')

    compile('org.springframework.boot:spring-boot-configuration-processor')

    compile('org.projectlombok:lombok')

    testImplementation('org.springframework.boot:spring-boot-starter-test')

}


기본적으로 elasticsearch를 지정하면 spring-data 버전이 따라오는데, elasticsearch를 저장소 개념으로 사용한다면 data를 사용해도 되지만 단순히 검색을 사용하는 것이라 개인적인 선호도를 반영해 high level client를 사용하게 되었다.


elasticsearch hlc를 사용하기 위한 설정 코드를 작성한다.

@Configuration

public class ElasticSearchConfiguration {

private static final String HTTP_SCHEME = "http";


@Value("#{'${elasticsearch.hosts}'.split(',')}")

private List<String> esHosts;

@Value("${elasticsearch.port:9200}")

private int port;


@Bean(name = "esObjectMapper")

public ObjectMapper esObjectMapper() {

return new ObjectMapper();

}


@Bean(name = "esRestClientBuilder")

public RestClientBuilder esRestClientBuilder() {

HttpHost[] hosts = esHosts.stream().map(this::makeHttpHost).filter(Objects::nonNull).toArray(HttpHost[]::new);

return RestClient.builder(hosts);

}


@Bean(name = "esHighLevelClient", destroyMethod = "close")

public RestHighLevelClient highLevelClient(@Autowired @Qualifier("esRestClientBuilder") RestClientBuilder esRestClientBuilder) {

esRestClientBuilder.setMaxRetryTimeoutMillis(3000);

return new RestHighLevelClient(esRestClientBuilder);

}


private HttpHost makeHttpHost(String ip) {

return new HttpHost(ip, port, HTTP_SCHEME);

}

}


작성중...

















Local Docker Elasticsearch 설치

Programming!

제공괴는 Image에 추가로 몇몇 플러그인등을 적용해야하니 별도의 Dockerfile을 작성한다.

$> vi Dockerfile


# Elasticsearch 6.5.4


FROM docker.elastic.co/elasticsearch/elasticsearch:6.5.4

WORKDIR /usr/share/elasticsearch

RUN /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch discovery-ec2

RUN /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch analysis-nori

$> docker build -t elasticsearch-my6_5_4 .


EC2 용 플러그인과 한글 형태소 Nori를 추가했다. build 실행 후,image목록을 보면 아래와 같이 추가되어 있는 image를 볼 수 있다.

$> docker images

REPOSITORY                                      TAG                 IMAGE ID            CREATED              SIZE

elasticsearch-my_6_5_4                  latest              d21d0f522868        About a minute ago   788MB

docker.elastic.co/elasticsearch/elasticsearch   6.5.4               93109ce1d590        7 days ago           774MB




이제 docker-compose.yml를 만든다.


version: '2.2'

services:

  elasticsearch:

    image: elasticsearch-my_6_5_4 

    container_name: elasticsearch

    environment:

      - node.name=es01

      - cluster.name=docker-cluster

      - bootstrap.memory_lock=true

      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"

    ulimits:

      memlock:

        soft: -1

        hard: -1

    volumes:

      - esdata1:/usr/share/elasticsearch/data

    ports:

      - 9200:9200

      - 9300:9300

    networks:

      - esnet

  elasticsearch2:

    image: elasticsearch-my_6_5_4 

    container_name: elasticsearch2

    environment:

      - node.name=es02

      - cluster.name=docker-cluster

      - bootstrap.memory_lock=true

      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"

      - discovery.type=zen

      - "discovery.zen.ping.unicast.hosts=elasticsearch"

    ulimits:

      memlock:

        soft: -1

        hard: -1

    volumes:

      - esdata2:/usr/share/elasticsearch/data

    networks:

      - esnet

volumes:

  esdata1:

    driver: local

  esdata2:

    driver: local


networks:

  esnet:


실행

$> docker-compose up -d


실행확인 

$> docker ps -a

CONTAINER ID        IMAGE                            COMMAND                  CREATED             STATUS                  PORTS                                            NAMES

b9ce987bdc8e        elasticsearch-my_6_5_4   "/usr/local/bin/dock…"   36 seconds ago      Up 34 seconds           0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp   elasticsearch

92f8e1d8853e        elasticsearch-my_6_5_4   "/usr/local/bin/dock…"   36 seconds ago      Up 34 seconds           9200/tcp, 9300/tcp                               elasticsearch2



http://127.0.0.1:9200/_cat/health



설치는 여기까지. 이제 Spring boot 를 이용하여 Document의 입력,수정,삭제,검색을 진행해 보자.