쇼핑몰 만들기 프로젝트 - 엘라스틱 서치(elasticsearch)와 형태소 분석기 Nori를 사용해보자

yeom yaloo·2023년 4월 4일
0

쇼핑몰

목록 보기
8/19

Elasticsearch

나는 왜 엘라스틱 서치를 사용하려 했나?

  • 기본적으로 querydsl을 사용하는 등의 방식으로 검색 기능을 구현하여 진행하려 했으나 이는 완전하게 똑같은 검색어만 검색이 된다는 문제점이 있다.
  • 또 sql문에 like 문이 있지만 이는 table full scan 방식을 사용하고 이는 굉장히 비효율적이라고 한다.

위의 두가지 문제점만 보아도 엘라스틱 서치를 사용해야 할 이유가 타당해보였고 이에 엘라스틱서치를 사용한 검색 기능 구현을 진행하기로 했다


docker-compose

docker compose?

  • Docker Compose는 여러 컨테이너를 가지는 애플리케이션을 통합적으로 Docker 이미지를 만들고, 만들어진 각각의 컨테이너를 시작 및 중지하는 등의 작업을 더 쉽게 수행할 수 있도록 도와주는 도구입니다.
  • Docker compose란, 여러 개의 컨테이너로부터 이루어진 서비스를 구축, 실행하는 순서를 자동으로 하여, 관리를 간단히하는 기능이다.
  • Docker compose에서는 compose 파일을 준비하여 커맨드를 1회 실행하는 것으로, 그 파일로부터 설정을 읽어들여 모든 컨테이너 서비스를 실행시키는 것이 가능하다.

위의 설명을 읽어도 감이 안 온다면 아래 실습을 따라해보자 감이 올것이다.


터미널을 켜준 뒤
1. cd ~
2. mkdir elastic : (디렉토리=폴더를 elastic이라는 이름으로 만들어줌)
3. vi els.yml : 해당 els라는 이름을 가진 yml 파일을 만들어서 아래 내용을 작성해준다. (이 작업의 경우 vscode로도 가능)

디렉토리 위치: 본인이름@본인이름-MacBookPro elastic
version: '3.7'
services:
  es:
    image: docker.elastic.co/elasticsearch/elasticsearch:{version=원하는 버전을 작성}
    container_name: es(이부분 변경 가능)
    environment:
      - node.name=single-node
      - cluster.name=backtony
      - discovery.type=single-node
    ports:
      - 9200:9200
      - 9300:9300
    networks:
      - es-bridge

  kibana:
    container_name: kibana
    image: docker.elastic.co/kibana/kibana:{version}
    environment:
      SERVER_NAME: kibana
      ELASTICSEARCH_HOSTS: http://{container_name=우리가 지정해준 이름}:9200
    ports:
      - 5601:5601
    # Elasticsearch Start Dependency
    depends_on:
      - {이름 지정}
    networks:
      - es-bridge

networks:
  es-bridge:
    driver: bridge

[예시]

version: '3.7'
services:
  es: 
  	image: docker.elastic.co/elasticsearch/elasticsearch:7.17.9
    container_name: es
    environment:
      - node.name=single-node
      - cluster.name=backtony
      - discovery.type=single-node
    ports:
      - 9200:9200
      - 9300:9300
    networks:
      - es-bridge

  kibana:
    container_name: kibana
    image: docker.elastic.co/kibana/kibana:7.17.9
    environment:
      SERVER_NAME: kibana
      # Elasticsearch 기본 호스트는 http://elasticsearch:9200 이다. 
      # 현재 docker-compose 파일에 Elasticsearch 서비스 명은 es로 설정되어있다.
      ELASTICSEARCH_HOSTS: http://es:9200
    ports:
      - 5601:5601
    # Elasticsearch Start Dependency
    depends_on:
      - es
    networks:
      - es-bridge

networks:
  es-bridge:
    driver: bridge
  1. docker compose -f els.yml up -d: 해당 설정파일로 도커 컴포즈 실행

형태소 분석기 nori 설치를 docker compose 작업에 추가해서 진행해보자

  • 한국어 형태소 분석기 기능이 필요하다고 판단해서 찾아보던 중 nori라는 기능이 있고 이를 docker compose 작업에 끼워넣어서 실행될 때 설치될 수 있게 진행하였습니다.
  1. docker compose -f els.yml up -d: 기존 docker 실행 중단(삭제)

  2. Dockerfile 작성

Dockerfile 
디렉토리위치 - 본인이름@본인이름-MacBookPro elastic

ARG VERSION
FROM docker.elastic.co/elasticsearch/elasticsearch:${VERSION}
RUN elasticsearch-plugin install analysis-nori
  1. els.yml 수정
version: '3.7'
services:
  es:
    build:    
      context: .
      args:
        VERSION: 7.17.9    
    container_name: es
    environment:
      - node.name=single-node
      - cluster.name=backtony
      - discovery.type=single-node
    ports:
      - 9200:9200
      - 9300:9300
    networks:
      - es-bridge

  kibana:
    container_name: kibana
    image: docker.elastic.co/kibana/kibana:7.17.9
    environment:
      SERVER_NAME: kibana
      # Elasticsearch 기본 호스트는 http://elasticsearch:9200 이다. 
      # 현재 docker-compose 파일에 Elasticsearch 서비스 명은 es로 설정되어있다.
      ELASTICSEARCH_HOSTS: http://es:9200
    ports:
      - 5601:5601
    # Elasticsearch Start Dependency
    depends_on:
      - es
    networks:
      - es-bridge

networks:
  es-bridge:
    driver: bridge
  • build:
    • context: .(해당 파일위치 본인은 yml과 docker파일을 같은 디렉토리에 넣어둠)
    • args:
      VERSION: 7.17.9 (Dockerfile에 정의해놓은 버전을 여기서 명시)
  1. docker compose -f els.yml up -d: 도커 재실행

위의 작업이 끝나면 nori가 같이 설치되고 이를 확인하려면 localhost:5601 kibana 기본설정 주소로 들어가서 consol에서 Dev Tool을 친 뒤에 테스트 명령어를 보내면 됩니다.

노리 설치 후 테스트

  1. 해당 주소로 들어간다.(http://localhost:5601)

  2. Dev Tool 검색

  3. 명령어 작성 후 테스트해보기

profile
즐겁고 괴로운 개발😎

0개의 댓글