엘라스틱서치 매핑 엘라스틱서치 매핑이란 색인할때 문서의 데이터 유형에 따라 필드에 적절한 데이터 타입을 지정하는 것을 말한다. 색인: 역색인 파일을 만드는것 데이터가 입력되어 자동으로 매핑이 생성되기 전에 먼저 인덱스의 매핑을 정의하면 거기에 맞춰 데이터가 입력된다. 하지만 정확한 검색을 위해서는 수동으로 적절한 타입을 직접 매핑해주는것이 좋다. PUT { "mappings": { "properties": { "":{ "type": "" … ; } … } } } 이미 만들어진 매핑에 필드를 추가하는 것은 가능 (추가할 필드명이 기존필드와 중복되면 안된다.) PUT /_mapping { "properties": { "": { "type": "" … } } } 단, 이미 만들어진 필드를 삭제하거나 필드 타입..
엘라스틱서치 검색 방법 (URI, Request Body) 1. URI 검색 엘라스틱서치 URI 검색은 _search 뒤에 q 파라미터를 사용해서 검색 할 수 있다. 쿼리스트링과 비슷한 것 같다. GET localhost:9200/_search?q=city:seoul 아래와 같이 AND, OR, NOT이 사용가능하며 대문자로 입력해야한다. GET localhost:9092/_search?q=city:seoul AND jeju 2. 데이터 본문 (Data Body) 검색 데이터 본문 검색은 검색 쿼리를 데이터 본문으로 입력하는 방식으로 엘라스틱서치의 QueryDsl을 사용하여 쿼리 또한 Json으로 되어있다. URI검색의 경우 복잡한 질의작성이 불가능한데 Request Body 형식으로 JSON으로 전달하..
엘라스틱서치 기본개념 및 장단점 알아보기 엘라스틱서치(Elasticsearch)는 실시간 검색 및 분석에 특화된 오픈 소스 분산 검색 엔진입니다. Elasticsearch는 데이터를 인덱싱하고 검색, 분석, 시각화하는 데에 사용됩니다. Elasticsearch는 자바 기반의 오픈 소스인 루씬(Lucene) 검색 엔진을 기반으로 하고 있으며, 분산 처리 및 복제, RESTful API 지원 등 다양한 기능을 제공합니다. 다양한 기능 Elasticsearch는 JSON 형식의 문서(Document) 단위로 데이터를 저장하며, 이러한 문서는 인덱스(Index)라는 논리적인 데이터베이스에 저장됩니다. 각 문서는 유일한 ID로 식별됩니다. Elasticsearch는 색인(Indexing)과 검색(Searching..
[JAVA] List의 null 체크 (with isEmpty()) 아래와 같은 List가 있다고 가정할때 List stringList = new ArrayList(); stringList.get(0); List에 아무런 값이 없을 경우에 위와 같이 get을 사용하여 값을 가져오고자 하면 Nullpointerexception이 발생하게 된다. if (stringList != null && !stringList.isEmpty()) { TestDto testDto = stringList.get(0); } 이경우 null과 "" 빈값을 체크해주면 된다. 또는 ObjectUtils.isEmpty();를 사용해주면 되는데 ObjectUtils.isEmpty() 란? null과 .isEmpty()를 동시에 체크하고..
[JAVA] 빌더 패턴(Builder Pattern) 사용해야 하는 이유 생성자는 빌더패턴에 비해 단점이 너무 많다 매개변수가 많을 경우에 대응이 어렵다. 생성자 호출을 위해서 설정하길 원하지않는 매개변수의 값까지 지정해줘야하는 불편함 실수로 매개변수의 순서룰 바꿀수있다. 자바빈즈 패턴 매개변수가 없는 생성자로 객체를 만든 후 Setter메서드를 사용하여 매개변수의 값을 설정하는 방식 디폴트 생성자를 통해 객체만 생성하고 필요한 경우 매개변수들을 setter로 값을 설정해주는데 매개변수의 갯수가 너무 많다면 객체가 생성되기 전까지 일관성이 깨지게된다. 디버깅이 어렵다 빌더패턴 위와같은 단점을 해결하기 위해 나온게 빌더패턴 (Builder Pattern)이다. 점층적 생성자 패턴의 안전성과 자바빈즈 패턴의..
싱글톤 패턴(Singleton Pattern)은 디자인 패턴 중 하나로, 어떤 클래스가 최초 한 번만 메모리를 할당하고(static) 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴입니다. 스프링 프레임워크에서는 빈(Bean)으로 등록된 객체들이 모두 싱글톤으로 관리됩니다. 즉, 스프링 컨테이너는 객체를 생성할 때, 최초 한 번만 생성하고, 이후에는 해당 객체를 계속 사용합니다. 싱글톤 패턴 사용 이유 1. 리소스 공유 어떤 클래스의 인스턴스를 여러 개 만들 경우, 그만큼 메모리를 많이 사용하게 됩니다. 하지만 싱글톤 패턴을 사용하면 하나의 인스턴스만 생성하여 필요한 모든 곳에서 공유하여 사용할 수 있습니다. 이렇게 하면 리소스를 효율적으로 사용할 수 있습니다. 2. 데이터 공유 여러 개의 인스턴스가..
[JAVA] streamApI로 숫자 합산하기 기본형 특화 스트림 int 요소 : IntStream double 요소 : DoubleStream long 요소 : LongStream 숫자 스트림의 합계를 계산하는 SUM, 최댓값 요소를 검색하는 MAX 각각 인터페이스는 리듀싱 연산 수행 메서드와 다시 객체 스트림으로 복원하는 기능도 제공한다. int calories = menu.stream() .map(Dish::getCalories) .reduce(0, Integer::sum); 숫자 스트림으로 매핑 mapToInt, mapToDouble, mapToLong 3가지 메서드를 가장 많이 사용 mapToInt 메서드는 Dish에서모든 Calories를 가져와 IntStream으로 반환하며 sum 메서드를 ..
[Spring] ResponseEntity 사용법 1. ResponseEntity란? Restful API에서 return Type으로 사용되고있다. ResponseEntity를 사용하여 반환되는 Response의 Header의 Http Status Code를 제어 할 수 있다. ResponseEntity를 사용하여 반환되는 Response의 body에 Json 형태로 Return해 줄 수 있다. 2. 200 OK 3. 400 BadRequestException 4. 500 InternalServerError
스프링부트에서는 @ControllerAdvice와 @ExceptionHandler 어노테이션을 사용하여 전역적인 예외 처리를 할 수 있습니다. 이를 통해 각각의 컨트롤러에서 예외 처리를 하지 않아도 되며, 예외 처리 로직의 중복을 제거할 수 있습니다. 1. @ControllerAdvice @ControllerAdvice 어노테이션을 사용하여 공통 예외 처리를 수행하는 클래스를 정의합니다. 이 클래스에는 @ExceptionHandler 어노테이션을 사용하여 예외 처리 메서드를 정의합니다. @ExceptionHandler 어노테이션을 사용하여 예외 처리 메서드에 처리할 예외 클래스를 지정할 수 있습니다. 2. @ExceptionHandler @ExceptionHandler 어노테이션을 사용하여 예외 처리 메..
Java Map null값 체크하는 방법 Java map null값 체크방법 3가지를 알아보도록하겠습니다. 1. common-collections4 dependency 사용 1. dependency 추가 // https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 implementation group: 'org.apache.commons', name: 'commons-collections4', version: '4.4' 2. MapUtils를 사용하여 null 체크 Map map = new HashMap; MapUtils.isEmpty(map); 3. MapUtils.isEmpty() 메소드 사용 /** * Null-safe ..