[MovMag] ElasticSearch setup
엘라스틱서치?
- 처음에는 query문을 통해서 원하는 내용을 출력하려고 했다
- like 문을 사용할 수 있지만, 데이터가 너무 많을 때에는 찾는 속도가 느려질 수 있다
- 현재 만들고 있는 MovMag 이라는 영화 리뷰 API 자체에서, DB에 저장한 영화 개수만 10,000개가 넘고, 캐스트 수는 100,000명이 넘었다
엘라스틱서치는 DB는 아니지만, 방대한 양의 데이터를 신속하고 거의 실시간으로 저장, 검색, 분석할 수 있다
ELK (ElasticSearch / Logstatsh / Kibana)
- 단독으로 ElasticSearch를 사용하여 검색 기능을 구현할 수 있다
- ElasticSearch : 분석 및 저장 기능을 담당
- Logstatsh : 수집 기능
- Kibana : 시각화하는 도구
Logstatsh 에서 다양한 소스의 로그 또는 트랜잭션 데이터를 수집, 집계, 파싱하여 ElasticSearch로 전달한다
ElasticSearch는 Logstatsh를 통해 받은 데이터를 검색 및 집계를 하여 필요한 정보를 획득한다
Kibana는 ElasticSearch의 빠른 검색을 통해 데이터를 시각화 및 모니터링을 한다
ElasticSearch vs RDBMS
RDBMS | ElasticSearch |
---|---|
schema | mapping |
database | index |
table | type |
row | document |
column | field |
ElasticSearch를 REST API를 사용하여 관계형 데이터베이스간 관계
ElasticSearch | Relational DB | CRUD |
---|---|---|
GET | SELECT | READ |
PUT | UPDATE | UPDATE |
POST | INSERT | CREATE |
DELETE | DELETE | DELETE |
스프링 설정하기 (Using docker-compose)
프로젝트 루트 폴더에 Dockerfile 파일을 만들었다
- nori 라는 형태소 분석기를 설치하기 위해 Dockerfile에 아래와 같이 설정
- 이는 오픈소스 한국어 처리기고 스칼라로 쓰여진 한국어 처리기다
- 텍스트 정규화와 형태소 분석, 스테밍을 지원하고 있다
- 짧은 글은 물론이고 긴 글도 처리할 수 있다
ARG VERSION
FROM docker.elastic.co/elasticsearch/elasticsearch:${VERSION}
RUN elasticsearch-plugin install analysis-nori
프로젝트 루트 폴더에 docker-compose.yml 파일을 만들었다
- 아래와 같이 만들고 난 후 docker 컨테이너로 만들어준다
docker compose -f docker-compose.yml up
- docker compose 띄우기, 마지막에 -d 붙이면 daemon으로 작동
docker compose -f docker-compose.yml down
- docker compose 죽이기
version: '3.7'
services:
es:
build:
context: .
args:
VERSION: {버전 입력}
container_name: {이름 입력}
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:{버전 입력}
environment:
SERVER_NAME: kibana
ELASTICSEARCH_HOSTS: http://{지정해준 container_name}:9200
ports:
- 5601:5601
depends_on:
- {지정해준 container_name}
networks:
- es-bridge
networks:
es-bridge:
driver: bridge
프로젝트를 실행하고 http://localhost:5601 에 들어가서 dev tool을 검색창에 친 뒤에 테스트를 한다
- 아래와 같이 치고, 200-ok 가 나오면 테스트 성공
GET _analyze
{
"tokenizer": "nori_tokenizer",
"text" : [
"테스트 너무 재미있어요."
]
}
Build.Gradle
- 아래와 같이 의존성을 추가해 준다
- 일라스틱서치만 추가해준다면, jakarta.json 관련한 에러 메세지가 뜰 수 있다
// 일라스틱서치
implementation 'jakarta.json:jakarta.json-api:2.0.1'
implementation 'org.springframework.data:spring-data-elasticsearch:4.4.9'
'프로젝트 > MovMag' 카테고리의 다른 글
[MovMag] WebClient (0) | 2023.11.06 |
---|---|
[MovMag] ElasticSearch + MySQL (0) | 2023.11.03 |
[MovMag] 20231031 오늘 배운 것 (@Asnyc) (0) | 2023.10.31 |
[MovMag] 오늘 배운 것 - 20231030 (0) | 2023.10.31 |