늦깍이이직생
57
2019-07-21 14:48:46 작성 2019-07-21 15:09:48 수정됨
2
248

입사1주일차신입]Spring-data-Elasticsearch 질문드립니다.


안녕하세요. 입사 전 ELK관련 질문 했었던 신입개발자입니다. 벌써 입사 후 1주일이 지났습니다. 입사 전 공부하고 간 것이 많은 도움이 되어 입사 1주차는 굉장히 잘 보냈습니다. 

입사 첫 날 오전 검색엔진에 대한 기본적인 개념/정의를 교육받고 오후 알고리즘 및 기초 개념 강의,               2일차 오전 알고리즘 및 기초 개념 강의 후 2일차 오후부터 원격DB 정보와 그림으로 그려진 레이아웃을 받아 책 정보 관련 간단한 게시판 검색엔진을 만들어 보라는 과제를 받았습니다. 회사에서는 기본적은 개념 및 정의만 알고 있는 상태에서 구글검색 등 다양한 방법을 사용하여  내 준 과제를 얼마나 구현 가능한 것인가를 확인하려는 듯 했습니다. 입사 전 기본적인 코딩을 해본 상태에서 하니 DB연동과 형태소 분석 등 추가적인 기능만 구현하면 되었기에 제출기한 3일전 완료할 수 있었습니다. 오전엔 알고리즘 및 자바 기초 개념 강의를 받고 오후에만 코딩구현을 해도 이틀 밖에 걸리지 않아 별 볼일 없는 간단한 책정보검색엔진이지만 내심 뿌듯했습니다. 

과제에선 어떠한 방법으로 구현해라라는 조건이 없었기에 spring-boot와 spring-data-elasticsearch를 사용하였습니다. 

처음엔 mvc패턴과 비슷한 ElasticsearchRepository를 사용하여 구현하였으나, 형태소 맵핑 3개의 필드에 부합하는 검색조건을 findBookDistinctByTitleOrAuthorAndCate 등 여러 방법으로 찾지못해,

 

 ElasticsearchTemplate로 사용방법을 바꾸었습니다. 해당 방법을 사용하니 좀 더 자세한 검색조건(가중치,좀 더 세밀한 조건)을 줄 수 있었습니다. 하지만 ElasticsearchTemplate은  queryForList 시 기본적으로 withPageable이 default값 10으로 설정되어 있어 전체 List<DTO>를 불러올 수 없었습니다. 따라서 현재 제 소스는 ElasticsearchRepository와 ElasticsearchTemplate  2가지를 사용하는 형태입니다. 

혼자 코딩하면서 든 생각을 말씀드리자면, ElasticsearchRepository는 색인, 검색 및 기타 일반적인 작업들을 즉시 수행할 수 있는 간편성 ElasticsearchTemplate는 위에 보다 간편성은 떨어지나, 보다 세밀한 검색조건과 작업성 정도 인거 같습니다. 

교육을 해주시는 파트장님이 업무를 병행하며, 오전 시간을 할애해 강의를 해주시기 때문에 최대한 구글링을 통해 알아보고 정말 이해가 안되는 부분만 업무에 방해되지 않는 한에서 다음날 강의 후 여쭤보고 있습니다. 

  ElasticsearchTemplate 사용시 withPageable의 default값 10을 없애 사용하고 싶은데 방법이 있는지 와 ElasticsearchRepository/ElasticsearchTemplate의 차이점을 제대로 이해하는 중인지 궁금합니다. 또한 미리 과제를 제출하고 차주 konanSearch 가상머신 환경설정을 미리 해놓았는데 미리 공부하고 가면 좋을 부분 있으시면 추천 부탁드립니다.

고작 입사 1주일차이지만, 고민에 고민을 더하여 코딩하는게 재미있습니다.  날 더운데 더위 조심하세요!

감사합니다.



1
1
  • 답변 2

  • satis
    1k
    2019-07-21 18:34:49 작성 2019-07-21 18:35:12 수정됨

    ElasticseachRepository는 JPA repository의 형태를 취한 것이고,

    ElasticseachTemplate는 JdbcTemplate의 형태와 같네요.


    Spring JPA에 대해 공부해 보세요.


    라이브러리를 사용해 보지 않아서 withPageable 에 대한 정확한 답변은 못드리지만

    JPA의 경우 Pageable 인자로 검색 건 수를 지정 가능하며, JdbcTemplate는 setMaxRows로 지정 가능합니다.

    ElasticsearchTemplate에서도 지정이 되지 않을까요? 아래와 같은 매서드가 있을 것으로 예상됩니다.

    ElasticsearchTemplate estpl = new ElasticsearchTemplate( datasource);
    
    estpl.setPaseable(100);
    
    
    
    // 빌드패턴이라면
    
    ElasticsearchTemplate.builder().dataSource(datasource).withPagable(100).build();
    
    


    API문서를 찾아보세요

    1
  • 늦깍이이직생
    57
    2019-07-21 20:43:31

    답변을 보고 JPA 공부해보니 Spring JPA에서 파생된거 같습니다.

    setMaxRows/ withPageable 위 값을 인덱싱한 데이터(8300)개보다 크게 주는 방법도 생각해보았으나, 

    코딩적으로 너무 일시적인 해결책이라 사용하지 않았었습니다.  (가령 상용화된 프로그램이라 가정했을 때 데이터 갯수가 늘어나는 경우)

    그래도 주신 답변보고 JPA를 공부해보니 개념적인 부분을 많이 이해할 수 있었습니다.  전 여태 mybatis자체도 ORM이라 이해하고 있었거든요.

    굉장히 많이 배웠습니다. 답변 감사합니다.



    1
  • 로그인을 하시면 답변을 등록할 수 있습니다.