본문 바로가기

분류 전체보기

(80)
ElasticSearch refresh, flush API 동작 원리 (1): Lucene 관점 https://elsboo.tistory.com/18 ElasticSearch Lucene 인덱스 구조 엘라스틱 서치는 현업에서 많이 쓰이고 있는 오픈소스 검색엔진이다. 역색인 구조로 문서를 색인하며, 근실시간으로 문서를 검색할 수 있다. 하지만 색인, 검색 기능을 엘라스틱 서치에서 직접 elsboo.tistory.com 이전 글에서는 엘라스틱서치 인덱스의 전체적인 구조에 대해 알아보았다. 이번에는 두 편에 걸쳐 /refresh, /flush API 의 동작 원리에 대해 알아보겠다. 엘라스틱서치에서 문서 색인 작업은 루씬이 담당하기 때문에 루씬과 엘라스틱서치 모두 어떻게 일하는지 살펴보고 동작 방법을 육안으로도 확인해볼 것이다. 문서 색인 요청을 하면, 루씬은 곧바로 세그먼트를 생성하지 않는다. 왜냐면 ..
ElasticSearch Lucene 인덱스 구조 엘라스틱 서치는 현업에서 많이 쓰이고 있는 오픈소스 검색엔진이다. 역색인 구조로 문서를 색인하며, 근실시간으로 문서를 검색할 수 있다. 하지만 색인, 검색 기능을 엘라스틱 서치에서 직접 구현하지는 않는다. 해당 기능은 루씬이라는 오픈소스 자바 라이브러리를 임포트하여 사용한다. 즉, 엘라스틱 서치는 루씬이라는 검색 라이브러리를 코어로 하여 이것에 REST API, 관리 기능 등 여러가지 편의 기능을 붙인 검색엔진이다. 그래서 엘라스틱 서치의 인덱스 구조를 내핵까지 파헤친다면 그 끝은 결국 루씬이 만들어주는 역색인 구조의 파일이다. 그럼 엘라스틱 인덱스를 양파 까듯 까보자! 엘라스틱 서치 인덱스 ⊃ 샤드 ⊃ 루씬 인덱스 ⊃ 세그먼트 ⊃ 도큐먼트 먼저 인덱스를 하나 생성한다. PUT elsboo_index {..
티스토리로 쓴 글, 구글과 네이버에 노출시키기 우리가 티스토리에 글을 썼다고 바로 구글과 네이버의 검색 결과로 나타나지 않아요. 검색엔진은 먼저 데이터를 수집한 다음에 검색어와 맞는 데이터를 반환하는데, 우리가 쓴 글을 자동으로 수집하지 않기 때문이에요. 그래서 구글과 네이버의 검색 결과에 노출시키기 위해서는 "나의 블로그를 수집해줘"라고 직접 알려줘야 해요. 먼저, 네이버부터 해볼게요 1. 네이버 서치 어드바이저 https://searchadvisor.naver.com/ 네이버 서치어드바이저 네이버 서치어드바이저와 함께 당신의 웹사이트를 성장시켜보세요 searchadvisor.naver.com 위 URL로 접속하여 로그인한 후, 우측 상단의 웹마스터 도구 버튼을 클릭해요 우리의 티스토리 블로그 주소를 입력한 다음에 우측 버튼을 클릭해요. 우리가 입..
Java 에서 테스트용 도커 컨테이너 띄우는 법 : TestContainer 도커 컨테이너에 접근하는 프로젝트에서 테스트할 때의 컨테이너는 어떤 걸 사용하시나요? 혹시 서버에서 실운영되고 있는 컨테이너를 바라보고 있나요? 엇 그러면 만약 어떠한 이유에 의해 컨테이너 안 애플리케이션의 설정이 변경되었다면... 그래서 어제와 같은 소스인데도 불구하고 테스트가 실패한다면... 억울해!! 멱등성(idempotent) : 연산을 여러 번 적용하더라도 결괏값이 달라지지 않는 일 프로젝트 테스트 환경에서 멱등성은 중요한 속성입니다. 내가 짠 소스에 대해서만 테스트하는 것이 목적이기 때문에 외부 환경이 테스트 결과에 영향을 미쳐선 안되니까요. 그래서 독립적인 테스트 환경을 구축하기 위해 테스트할 때만 잠깐 사용할 컨테이너를 띄어주는 게 testContainer가 해주는 일입니다! 디펜던시 te..
[JAVA] stream 코드 스니펫 JAVA 8 부터 도입된 stream. 내가 사용했을 때 느꼈던 가장 큰 장점은 데이터가 어떻게 흘러가는지가 문장읽듯이 읽혀서 코드 가독성이 좋다는 점이다. 처음에는 사용법을 잘 몰라 어려웠지만 하나씩 하나씩 작성해보니 꽤나 익숙해졌고 코드 짤 때도 stream의 비중이 높아지고 있다. 다음은 내가 작성했던 stream 관련 코드 예제이다. 배열 출력하기 /* 배열 출력 */ String[] alphabetArr = new String[]{"A", "B", "C"}; Arrays.stream(alphabetArr).forEach(alphabet -> log.info(alphabet)); stream 함수 안에서 여러 문장 실행하기 List personList = new ArrayList(); /* 멀티 ..
나만 아는 노션과 에버노트의 차이 2021.05.23 1. 브라우저 글 복사할 때 서식 복사 유무의 차이 에버노트 복사가 더 잘 된다 가져오고 싶은 부분 - 위키피디아 우측 분류 영역 https://ko.wikipedia.org/wiki/인플레이션 [에버노트] 서식까지 비슷하게 붙여넣기가 된다 [노션] 최소한의 서식만 붙여넣기 된다. 색 정보나 폰트 사이즈는 붙여넣기에서 누락된다. 2. 검색 기능의 차이 에버노트의 검색 기능이 더 좋다. - 검색하고 싶은 단어: "메모리주소" (띄어쓰기 미존재) - 글 내용: "메모리 주소" (띄어쓰기 존재) 에버노트 글 노션 글 [에버노트] 토큰 검색을 지원한다. 띄어쓰기 없는 "메모리주소" 검색 시 띄어쓰기 있는 "메모리 주소"가 검색된다. [노션] 토큰 검색을 지원하지 않는다. 띄어쓰기 없는 "메모..
Spring-Data-Elasticsearch VS. Rest-high-level-client 결론: 편하게 개발하고 싶으면 Spring-data-ES / ES가 버전에 민감하면 Rest-high-level-client Spring-data-ES 도 내부적으로 (ES7부터) ES와 통신할 때 Rest-high-level-client를 사용한다. 장점: ORM을 지원해서 데이터를 객체로 ES와 왔다갔다 할 수 있다. 쿼리만들 필요없이 메소드로도 검색할 수 있다. (쿼리도 물론 생성 가능) 단점: 라이브러리가 ES 버전에 민감하다. 장점: 쿼리빌더를 생성해야한다. 단점: 버전에 민감하지 않다. 참고: 나는 Spring-Data-Elasticsearch를 사용한다. 왜냐면 ES 버전이 쉽게 변하지 않는 환경이고 쿼리도 자유자로 튜닝 가능하고 인덱싱/검색 작업 메소드를 구현하지 않아도 할 수 있고 바로 ..
플스5 예약 구매 성공 후기 2020.10.18 "만약 3차 구매가 진행된다면... 쇼핑몰보단 예약 폼을 먼저 작성하는 파트너샵을 추천한다! " 2020년 10월 7일 수요일, 플레이스테이션5 2차 예약 구매가 진행되었다. 구매 방법에는 결제를 즉시 하냐 안 하냐를 기준으로 크게 2가지 방법이 있다. 하나는 하이마트, 이마트몰 등에서 구매 사이트로 접속 후 결제를 하는 방식, 다른 하나는 플스 파트너샵 사이트에서 예약 폼을 작성하는 방식이다. 1차 예약 구매 후기로 경쟁률을 어느 정도 예상했기에 동생한테도 시켜서 12시 땡 치면 나는 쇼핑몰에서 구매, 동생은 파트너샵에서 예약하기로 했다. 당일, 네이비즘 서버시간까지 동원하여 12시 00분 00초에 URL을 클릭하는 순간... "준비된 상품이 모두 매진되었습니다." 믿을 수 없었다ㅠ..
[번역] Pro Java Programming - 자바 아키텍쳐 자바는 "간단하고, 건장하고, 객체 지향적이고, 플랫폼 독립적이고, 멀티쓰레드이고, 역동적이고, 범용적인 프로그래밍 환경'이라고 묘사되어져 왔다. 이에 따라 자바는 알아차릴 수 없을 정도로의 다양한 환경으로 확장되었다. 최근에는 마이크로 프로세서에도 자바를 사용한다. 자바를 큰 기업체에서도 작은 부품들을 위해 사용하고, 핸드폰에서 주 컴퓨터같은 장치에도 사용한다. 이렇게 다양한 범위의 환경을 지원하기 위해 코어 클래스들을 중심으로 많은 API들과 버전들이 발전되어졌다. 좋은 자바 프로그래머가 되기 위해, 기초를 잘 아는 것이 중요하다. UI가 아무리 좋아도, 코드는 많고, 메모리가 부족하다면 유저는 행복하지 않을 것이다. 이 책은 자바개발자로써 다양한 개발을 가능하게 해주는 것이 아닌 독자가 매일 마주칠..
[검색 결과 노출 팁] 게시글에 오래전 날짜를 쓰지 않는다! 2020.10.09 구글에서는 검색된 글이 언제 게시됐는지 날짜 정보를 제공한다. 하지만 우리는 글을 작성할 때 구글한테 이 게시글은 언제 작성됐어요~라고 알려주지 않는다. 그렇다면 구글은 날짜 정보를 어떻게 가져올까? ...... 나도 잘 모른다ㅋ 그러나 한 가지 확실한 건 본문 내용에 날짜 정보가 있다는 것이다. 본문에 날짜가 나오고 무언가 대단하고 엄청난 조건들을 만족하면 그 날짜를 게시일로 인식하는 것을 알 수 있다. 그렇다면... 본문에 무지 오래된 날짜를 쓰면..? 2018년에 작성된 글임에도 불구하고 검색 결과에서는 2013년 글로 분류하고 있었다. 특히 티스토리에서 작성한 지 오래된 글은 'X년 전' 같은 형식으로 표기되고 있으므로 구글에서 알아주기 어렵다. 검색 결과는 최신 글일수록 상단..