ALL 40

[MongoDB] 몽고DB의 인덱스(Index)

이번에는 몽고DB의 인덱스(Index)에 대해 알아보려고 합니다. 1. 인덱스(Index)란? [몽고DB의 인덱스] 몽고DB의 인덱스도 타 데이터베이스와 같은 개념으로 특정 컬럼으로 정렬된 리스트에서 값을 찾도록 되어있다. 몽고DB의 인덱스는 B-Tree로 이루어져 있다. 몽고디비의 인덱싱 또한 인덱싱 된 필드에 대해 쓰기, 업데이트, 삭제 작업에 대해 시간이 오래 걸린다. 그 이유는 데이터가 변경될 때마다 모든 인덱스를 갱신해줘야 하기 때문이다. [컬렉션 스캔] 몽고 DB의 인덱스를 사용하지 않으면 컬렉션 스캔을 한다. 컬렉션 스캔이란 내가 찾는 내용에 대해 전체에 대해서 찾아보는 것을 의미한다. [효율적인 몽고DB 인덱스 방법] 몽고DB 쿼리에 대해 효율적으로 응답하게 하려면 애플리케이션의 모든 쿼리..

MongoDB 2023.02.04

[Spring] elasticsearch-rest-client 8.5.3에 opensearch 연결하기

기존 elasticCloud를 사용했던 서비스를 opensearch로 변경해야 하는 업무가 할당되었다. [이슈] 변경 업무에 대해서 몇가지 이슈가 있는데 - 현재 사용하고 있는 elasticCloud는 elasticsearch 8.5.3 버전을 사용하고 있다. - elasticCloud와 opensearch에서 지원하는 라이브러리는 서로 다르다. 이로 인해서 elasticCloud에서 opensearch로 넘어간다면 라이브러리도 변경해야하고 기존의 rest-client 문법이 아닌, HighLevelClient 문법으로 변경해야 하는 크나큰 작업을 해야 한다. 큰 작업을 하는 것보다는 elasticsearch-rest-client를 이용하여 opensearch를 연결하는 방법이 있지 않을까 하여 구글링을..

Spring 2023.01.30

[MongoDB] 몽고DB의 기본(Document, Collection, DataBase, _id)

이번에는 몽고DB의 기본인 Document, Collection, DataBase, _id에 대해서 알아보도록 하겠습니다. 1.Document 이란? [Document 무엇일까?] 정렬된 키와 값의 집합이다. 가장 빠르게 이해하기 쉬운 것은 바로 JSON 객체를 떠올리면 된다. { "name" : "flambee", "address" : { "city" : "seoul" "street" : "14-44" }, "like" : ["music", "sushi"] } Document의 키는 문자열이다. 그리고 UTF-8 문자로 지원한다. 키는 \0(null)을 포함하지 않는다. 그리고 .과 $ 문자는 몇 가지 특별한 속성을 가지며 특정 상황에서만 사용해야한다. .과 $는 CRUD에 대해서 사용하게 된다. 즉,..

MongoDB 2023.01.27

[MongoDB] 몽고 DB란 무엇일까?

이번에는 몽고 DB에 대해서 무엇인지 알아보도록 하겠습니다. 1. 몽고 DB란? [몽고 DB의 특징] 도큐먼트 지향 데이터 베이스(document-oriented database)이다. 도큐먼트를 지향하기 때문에, 행 개념(Mysql, Oracle, Mssql) 대신 유연한 모델인 도큐먼트를 사용한다. 내장 도큐먼트와 배열을 허용함으로써 복잡한 계층 관계를 하나의 레코드로 표현한다. 해당 레코드는 매우 친근한 표현을 가지고 있다. { "name" : "flambee", "address" : { "city" : "seoul" "street" : "14-44" }, "like" : ["music", "sushi"] } 분산 확장이 가능하다. 데이터를 여러 서버에 더 쉽게 분산해 주며, 도큐먼트를 자동으로 재..

MongoDB 2023.01.25

Test Double과 Stub, Mock 그리고 Fake

TDD를 공부하게 되면, Test Double이라는 용어가 나오고, 그 뒤에 Stub, Mock 그리고 Fake가 나온다. 처음 TDD를 접한 사람이라면, 헷갈리는 개념이라고 생각을 한다. 나도 그랬다. 그리고 며칠 전에 Test Double을 알아요? Stub과 Mock에 대해서 알아요?라고 질문을 받았지만, 어렴풋이 알고 확실히 알지 못하여 질문에 대해 답을 하지 못했다. 그래서 요번 블로그 포스팅은 Test Double에 대해서 그리고 Stub, Mock 그리고 Fake에 대해서 설명을 하려고 한다. Test Double Test Double는 테스트 시에 실제 객체가 아닌 가짜 객체를 활용하여 테스트를 할 수 있도록 만들어주는 것을 말한다. 실제 객체가 아닌 가짜 객체를 활용하여 테스트할 경우 도..

TDD 2022.08.10

클러스터(Cluster)와 노드(Node) 구성

Split Brain 문제를 피하기 위해서 마스터 후보 노드 개수는 항상 홀수로 하고 가동을 위한 최소 마스터 후보 노드 설정은 (전체 마스터 후보 노드)/2+1로 설정해야한다.해당 글은 엘라스틱 스택 개발부터 운영까지라는 책 중 7장을 정리하여 쓴 글입니다. 엘라스틱서치의 클러스터 엘라스틱서치에서의 클러스터(Cluster) ? 엘라스틱서치의 클러스터는 노드들로 구성되어 있다. 노드들을 통하여 필요한 작업을 나눠서 수행하는 분산 처리를 지원하여 대량의 데이터를 다룰 수 있다. 컴퓨팅 시스템에서의 클러스터(Cluster) ? 여러 대의 컴퓨터를 병렬로 연결해 하나의 시스템으로 구성한다. 시스템 장애를 대비한 고가용성(high availability)을 높이는 동시에 시스템 성능을 높일 수가 있다. 엘라스틱..

Kotest (코테스트) 는 무엇일까요?

코틀린과 스프링을 같이 쓰게 되면 거의 junit5를 사용을 한다. 하지만, Kotest라는 테스트 프레임워크가 인기가 높아지고 있어 요번에 kotest란 무엇인가부터 시작하여, 명세 스타일, 매처, 익셉션에 대해서 알아보았다. Kotest에 대한 여행을 떠나보자. Kotest 란? 코틀린을 위한 오픈 소스 테스트 프레임워크이다. multi-plaform test framework로 Test-framework, Assertions Library, Property Testing을 독립적으로 사용할 수 있다. Kotest의 명세 스타일 Kotest는 여러 명세 스타일이 있습니다. 이러한 명세 스타일은 Kotest에 대한 부분도 있고, 여러 언어에 맞춘 테스트 스타일도 제공을 해줍니다. Fun Spec Sca..

Kotlin 2022.04.15

elasticsearch function_score(전체 데이터 스코어에 대한 글)

elasticsearch에서 쓰이는 질의어 match / filter / bool / should / must 등 질의 쿼리와 tie_breaker, filter에 ^3 등을 붙이는 부스팅 쿼리(boosting) 가중치를 부여할 수 있다. 이러한 가중치는 검색 결과에 대한 가중치를 말한다. 하지만, 이번에는 검색 결과에 대한 가중치가 아닌, 질의어를 쓰기 전에 특정 필드에 가중치를 우선 주고 시작하는 방법에 대해 포스팅하려고 한다. 왜? 무엇때문에 필요했나? - 전체적인 데이터 중 특정 데이터를 우선적으로 보여주고 싶다. 왜냐면 질의어를 써서 검색을 하면 특정 질의어에 관련된 목록들만 나오기 때문이다. 무엇을 사용했는가? - function_score를 사용하여 전체적인 데이터에 대해서 특정 데이터 필드..

ELK 2022.04.01