monstache 를 사용한 이유
엘라스틱 서치와 몽고디비의 동기화를 위해 여러가지 툴이 존재하였다
mongo Connector : 업데이트가 된지 오래되었고 6버전 이상을 지원하지 않는다는 블로그를 보았다. nori분석기를 사용하기 위해서는 6.6 버전 이후부터 적용되는데 적용할 수 없다.
mongo connector github
Transporter : 최신 ES버전을 지원하지 않는다는 글을 보고 사용하지 않았다.
Monstache : 엘라스틱 서치를 최신버전까지 지원하며, go언어로 작성되어 있지만 따로 go언어를 설치하지 않아도 사용할 수 있다고 해서 사용하기로 결정했다.
monstache를 사용하기로 결정한 참고 자료1
joojaewoo changed 4 years agoView mode Like Bookmark
한글 형태소 분석기를 사용하기위해 nori 를 설치
elasticsearch에 nori를 설치하고 빌드하여 이미지 생성
FROM docker.elastic.co/elasticsearch/elasticsearch:7.6.2
ENV ES_BIN=/usr/share/elasticsearch/bin
RUN $ES_BIN/elasticsearch-plugin install --batch analysis-nori
joojaewoo changed 4 years agoView mode Like Bookmark
embedded vs reference
1:1, 1:N 관계를 가질 때 embedded 방식을 사용하면 좋다.
M:N 관계를 가질 때 reference 방식을 사용하면 좋다.
embedded
{
_id: "joe",
name: "Joe Bookreader",
address: {
프론트에서 현재 위치를 지속적으로 받아올 때
현재 위치를 받아오려면 navigator 객체의 geolocation을 사용해야하는데 SSR을 통해서는 navigator의 객체에 접근할 수 없다
그러면 초기 데이터를 뿌려줄 수 없다.
초기데이터를 뿌려주지 않고 현재 위치정보를 받아왔을 때, 리스트를 뿌려주는 방법이 가능하다. 아니면 기본 위치를 설정하고 그 정보를 미리 뿌려준 다음 현재위치를 가져왔을 때 새로 리스트를 받아온다.
사용자가 로그인시 현재 위치를 받아오는 방법
로그인 후 사용자의 위치를 받아오는 페이지를 추가한다.
이 때 사용자의 초기 로그인 위치를 설정하고 쿠키에 담아둔다.
joojaewoo changed 4 years agoView mode Like Bookmark
문제점
블로그와 공식문서를 참고하여 react-naver-maps로 지도를 설정했을 때, document is not defined라는 에러가 발생하였다
아마 next js 의 SSR을 할때 document를 찾지 못해서 발생한 오류인 것 같았다
해결방법
이를 해결하기 위해 nextjs의 dynamic을 사용하였다
map 컴포넌트를 불러올때 ssr: false 옵션을 주어 브라우저가 랜더링 되고 나서 호출하게 만들어서 문제를 해결할 수 있었다.
joojaewoo changed 4 years agoView mode Like Bookmark
문제점
express에서 접근하기 위해 mongoose의 connection을 생성하였다
await mongoose.connect("mongodb://localhost:27018,localhost:27019,localhost:27020/movie?replicaSet=rp0", {
useNewUrlParser: true,
useUnifiedTopology: true,
});
이 때 아래와 같은 연결 실패 에러가 발생하였다. 몽고 디비에 연결할 수 없다는 글이였다.
joojaewoo changed 4 years agoView mode Like Bookmark
엘라스틱 서치
엘라스틱 서치같은 검색 엔진을 사용하는 이유
관계형 데이터 베이스는 단순 텍스트 매칭에 대한 검색만을 제공
MySQL 최신버전에서 n-gram 기반의 Full-text 검색을 지원하지만, 한글 검색의 경우 아직 빈약
텍스트를 여러 단어로 변형하거나 텍스트의 특질을 이용한 동의어나 유의어 활용한 검색이 가능
비 정형 데이터의 색인과 검색이 가능
joojaewoo changed 4 years agoView mode Like Bookmark
원인
카테고리에 '/'가 들어가있어 '/'로 문자를 나누기 때문에 '/'가 들어있을 때 '/'단위로 끊어서 검색하기 때문에 정확한 검색이 힘들다.
terms에 배열로 비교를 하는데 남성패션/잡화 가 입력되었을 때, 남성패션과 잡화로 나누어 찾기 때문에 '남성패션/잡화' 를 찾을 수 없다. (term은 완전히 일치하는 것을 찾기 때문)
match_phrase 를 사용하면 찾을 수 있지만 하나의 문자열이 들어가기 때문에 문자열을 만들어 줘야한다.
해결책 1
카테고리에 '/'를 빼고 사용한다.
joojaewoo changed 4 years agoView mode Like Bookmark