SearchDeveloper (81) 썸네일형 리스트형 ElasticSearch refresh, flush API 동작 원리 (2): ElasticSearch 관점 + translog https://elsboo.tistory.com/19 ElasticSearch refresh, flush API 동작 원리 (1): Lucene 관점 https://elsboo.tistory.com/18 ElasticSearch Lucene 인덱스 구조 엘라스틱 서치는 현업에서 많이 쓰이고 있는 오픈소스 검색엔진이다. 역색인 구조로 문서를 색인하며, 근실시간으로 문서를 검색할 수 있다. elsboo.tistory.com 이전 글에서는 엘라스틱서치의 refresh, flush 동작 방식을 루씬 관점에서 살펴보았다. 이번 글에서는 동작 방식을 육안으로 확인해보고 엘라스틱서치가 제공하는 기능인 trasnslog 에 대해서도 알아볼 것이다. 루씬에서 세그먼트를 생성하는 2가지 작업을 엘라스틱서치에서는 다른 용어.. [Postman] Runner 와 newman 으로 response 파일에 쓰기 API 테스트 툴인 Postman에서도 Jmeter 처럼 API 반복 호출 기능을 제공하여 퍼포먼스 및 부하 테스트에 활용할 수 있다. UI 로 하거나 커맨드라인으로 하는 2가지 방법이 있는데, UI는 Runner 라는 기능으로, 커맨드라인은 newman 이라는 프로그램으로 실행한다. 이제 보자! 1️⃣ 첫 번째 방법: Runner Runner는 Postman 상단에 위치해있다. (2023.07.16) 버전 10에서는 runner 가 우측 하단에 있다. 왼쪽 상단 창: Collection 목록 Environment: 포스트맨 환경 변수 Iterations: URL 호출 횟수 Delay: 한 번 호출 완료 후 기다리는 시간 (ms) Data: 호출하면서 변경될 데이터 오른쪽 창: 호출할 URL 선택 Dat.. Junit5 애노테이션 설명 이 글은 온라인 강의를 듣고 해당 내용을 직접 실습해보며 정리한 글입니다. 더 자세한 내용은 아래 강의에서 확인할 수 있습니다. 더 자바, 애플리케이션을 테스트하는 다양한 방법 - 인프런 | 강의(백기선) @DisplayNameGeneration : 클래스 안의 모든 테스트명 변경 @DisplayNameGeneration([테스트명 변경 규칙 클래스]) @DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class) @SpringBootTest class StudyTest { @Test void create_new_test() { System.out.println("it is test"); } } 기본적으로 테스트명은 메소드명을 따릅니다. 클래.. Junit5 Assertions / Assumptions 설명 이 글은 온라인 강의를 듣고 직접 실습해보며 정리한 글입니다. 더 자세한 내용은 아래 강의에서 확인할 수 있습니다. 더 자바, 애플리케이션을 테스트하는 다양한 방법 - 인프런 | 강의 (백기선) assertEquals : 값 비교 테스트 assertEquals([나와야 하는 값], [테스트 결과 값], [실패 시 메시지]); assertEquals(StudyStatus.DRAFT, study.getStatus(), "스터디를 처음 만들면 상태값이 " + StudyStatus.DRAFT + " 여야 한다."); 실패 시 메시지 인자를 람다로도 구현할 수 있습니다. assertEquals(StudyStatus.DRAFT, study.getStatus(), () -> "스터디를 처음 만들면 상태값이 " + S.. Mockito 설명 이 글은 온라인 강의를 듣고 해당 내용을 직접 실습해보며 정리한 글입니다. 더 자세한 내용은 아래 강의에서 확인할 수 있습니다. 더 자바, 애플리케이션을 테스트하는 다양한 방법 - 인프런 | 강의 ✔Mockito: Mock 을 지원하는 프레임워크 ✔Mock: 진짜 객체와 비슷하게 동작하지만 우리가 컨트롤할 수 있는 객체 어떻게 활용: 외부 API, DB를 사용하는 경우 DAO, repository 객체를 mock 으로 만들고 mockito 를 사용해 동작 방식을 코딩 하고 테스트를 한다. 장점: 외부 환경으로부터 독립적으로 테스트 가능 테스트에 대한 의견: 내가 이미 구현한 클래스는 mocking 할 필요는 없다. 하지만 외부 서비스는 mocking 을 하는 게 좋겠다. Mocking 하기 좋은 경우: .. 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 {.. 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(); /* 멀티 .. 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 버전이 쉽게 변하지 않는 환경이고 쿼리도 자유자로 튜닝 가능하고 인덱싱/검색 작업 메소드를 구현하지 않아도 할 수 있고 바로 .. 이전 1 ··· 5 6 7 8 9 다음