본문 바로가기

728x90
728x90

Framework

[Spring] Elasticsearch에서의 MultiMatch: 다중 필드에 대한 매칭(feat. Java)- 컴도리돌이 ElasticSearch를 도입하고 데이터를 query DSL 방식으로 조회하는 데 도전하면서, 가장 많이 고민하게 되는 부분 중 하나가 바로 정확한 검색 결과를 어떻게 뽑아낼 것인가라는 문제였어요. 그중에서도 multiMatch는 여러 필드에서 검색어를 한 번에 매칭하게 도와주는 아주 유용한 쿼리랍니다. 이번 포스팅 글에서는 multiMatch 쿼리의 다양한 옵션을 소개하고, Java 코드로 구현하는 법까지 쭉 살펴보려고 합니다. 😊Java 코드로 MultiMatch 구현하기multiMatch 쿼리는 여러 필드를 한꺼번에 검색할 때 사용되는 쿼리입니다. 이를 통해 지정한 필드 중 하나라도 매칭되는 문서를 찾아낼 수 있어, 간편하면서도 다채로운 검색 결과를 얻을 수 있어요.import org.elast.. 더보기
[Spring] Elasticsearch에서 다중 정렬하기 (feat. java, query DSL) - 컴도리돌이 Elasticsearch를 도입하면서 기존에 사용했던 데이터 조회를 Elasticsearch Query DSL 방식으로 변경하고자 하니, 생각 외로 어려움이 많았습니다. 🙄 그중에서 알고 나서는 쉽지만, 처음에는 어떻게 하는지 막막했던 정렬 부분을 다뤄보려고 해요. 😊Elasticsearch Query DSL을 통한 다중 정렬일단 Query DSL에서 sort 배열을 사용하여 여러 필드를 지정하여 정렬할 수 있어요. 아래는 기본적인 예시입니다.{ "query": { "match_all": {} }, "sort": [ { "field1.keyword": { "order": "asc" } }, { "field2": { "order": "desc" } } ]} 위 예제에서 field.. 더보기
[Spring] docker, Elasticsearch, SpringBoot로 검색 기능 구현 - 컴도리돌이 [Docker] 도커로 ELK8버전 사용하기 - 컴도리돌이이번에 회사에서 ELK를 도입을 본격적으로 시작하였습니다. 🥺 하지만 올해 초부터 책도 선물 받고 잠깐 열심히 공부했지만, 역시 저란 인간은,, 나태 그 자체였습니다. 그래서 뭐 좀 알고 사용comdolidol-i.tistory.com 저번 포스팅에서 도커(dcoker)를 통해 ELK를 실행시켰습니다. 이번에는 스프링부트에서 Elasticsearch로 간단한 검색 API를 구현하려고 해요. 먼저 Spring Boot에서 Elasticsearch와 통신하기 위해 필요한 의존성을 추가해야 합니다. spring-data-elasticsearch 라이브러리를 사용하여 Elasticesearch와 연동할 수 있어요 😊dependencies { im.. 더보기
[Spring] 순환 의존성(Circular Dependency)에 대하여 - 컴도리 돌이 두 개 이상의 빈이 서로를 참조할 때 발생하는 문제로, 스프링 프레임워크에서는 애플리케이션 컨텍스트가 빈을 초기화할 때 문제가 발생합니다. 간단히 말해, 빈 A가 빈 B를 필요로 하고, 빈 B가 다시 빈 A를 필요로 하는 상황을 말해요. 이로 인해 애플리케이션이 제대로 시작되지 않거나 예기치 못한 런타임 오류가 발생할 수 있어요.  순환 의존성 문제가 발생할 때 보통 다음과 같은 에러 로그를 볼 수 있어요 🤔org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'beanA': Requested bean is currently in creation: Is there an unresolvable circu.. 더보기
[Spring] AOP(Aspect-Oriented Programming)에 대해서 - 컴도리돌이 개발을 하면서 "이 부분은 코드가 반복되는데, 더 좋은 방법이 없을까"라는 생각을 정말 매 순간 하는 거 같아요. 🥲 그중 하나의 해결 책으로 AOP가 그 해답이 될 수 있어요 🤔AOP(Aspect-Oriented Programming)AOP는 프로그램의 특정 동작을 관심사라는 개념으로 분리해서 관리하는 기법이에요. 이게 무슨 말이냐면, 코드에서 여러 곳에서 반복되는 공통된 로직을 한 곳에 모아둔 후, 필요할 때마다 그 로직을 실행하게 할 수 있다는 거예요. 이렇게 하면 코드의 중복을 줄이고, 유지 보수가 훨씬 쉬워지죠 👍 예를 들어, 로깅이나 트랜잭션 관리와 같은 로직은 다양한 메서드에서 공통적으로 사용돼요. 만약 이런 로직을 각 메서드에 직접 작성한다면 코드가 지저분해질 뿐 아니라, 유지보수도 어려워.. 더보기
[Spring] 제어의 역전(IoC, Inversion of Control), 의존성 주입(DI, Dependency Injection)에 대하 Spring의 Ioc/DI은 Spring을 사용하면서 자연스럽게 접하게 되는 개념들이지만, 때로는 그 깊은 의미를 되새겨볼 필요가 있습니다. 이 두 가지 개념이야말로 Spring의 근본을 이루는 핵심정인 원리이기 때문이죠. 저 또한 2022년에 작성한 글을 전부 삭제하고, 새로운 마음으로 2024년에 new 포스팅 글을 작성하려고 해요.😊 Ioc, 즉 제어의 역전(Inversion of Control)과 DI, 의존성 주입(Dependency Injection)은 코드의 결합도를 낮추고, 더 유연하고 테스트 가능한 애플리케이션을 만드는 데 필수적인 역할을 해요. 여기서 궁금한 점은 왜 Spinrg은 굳이 IoC와 DI를 통해 객체 관리를 하도록 했을까요? 🤔 그 이유는 간단하면서도 깊이가 있습니다. 소프.. 더보기
[Spring] 롬복 어노테이션(@NoArgsConstructor, @RequiredConstructor, @AllArgsConstruct)에 대해서 - 컴도리돌이 생성자 주입(Constructor Injection)은 의존성 주입의 한 종류로, 객체를 생성할 때 해당 객체가 필요로 하는 의존성을 생성자를 통해 주입하는 방식이에요. 스프링 프레임워크에서는 Autowired 어노테이션을 사용합니다. 반면에 필드 주입(Field Injection)은 의존성을 클래스의 필드에 직접 주입하는 방식이며, Autowired 어노테이션을 필드에 적용합니다. @Servicepublic clas ExampleService { private final ExampleRepository exampleRepository; @Autowired public ExampleService(ExampleRepository exampleRepository) { thi.. 더보기
[Spring] @RequestMapping 어노테이션에 대해서 - 컴도리돌이 @RequestMapping @RequestMapping은 Spring Framework에서 컨트롤러 메서드에 대한 매핑을 지정하는 데 사용되는 어노테이션입니다. 이 어노테이션은 클래스 수준 또는 메서드 수준에서 사용될 수 있습니다. 클래스 수준에서 사용할 경우, 해당 클래스의 모든 메서드에 적용됩니다. @Controller @RequestMapping("/example") public class ExampleController { @RequestMapping("/hello") public String hello() { return "helloPage"; } } // 위에 코드에서 클라이언트에서 "/example/hello" 경로에 요청을 보내면 // 서버에서는 hello 메서드가 실행되면서 클라이언트한.. 더보기