본문 바로가기

전체 글

[Spring] docker, Elasticsearch, SpringBoot로 검색 기능 구현 - 컴도리돌이 [Docker] 도커로 ELK8버전 사용하기 - 컴도리돌이이번에 회사에서 ELK를 도입을 본격적으로 시작하였습니다. 🥺 하지만 올해 초부터 책도 선물 받고 잠깐 열심히 공부했지만, 역시 저란 인간은,, 나태 그 자체였습니다. 그래서 뭐 좀 알고 사용comdolidol-i.tistory.com 저번 포스팅에서 도커(dcoker)를 통해 ELK를 실행시켰습니다. 이번에는 스프링부트에서 Elasticsearch로 간단한 검색 API를 구현하려고 해요. 먼저 Spring Boot에서 Elasticsearch와 통신하기 위해 필요한 의존성을 추가해야 합니다. spring-data-elasticsearch 라이브러리를 사용하여 Elasticesearch와 연동할 수 있어요 😊dependencies { im.. 더보기
[Docker] 도커로 ELK8버전 사용하기 - 컴도리돌이 이번에 회사에서 ELK를 도입을 본격적으로 시작하였습니다. 🥺 하지만 올해 초부터 책도 선물 받고 잠깐 열심히 공부했지만, 역시 저란 인간은,, 나태 그 자체였습니다. 그래서 뭐 좀 알고 사용해야 하기 때문에 일단 ELK를 설치하려고 하는데 생각보다 쉽지 않았습니다... ChatGpt는 저를 과대평가하는지 너무 두리뭉실하게 설명해 주는데 저란 인간은 그 문장 하나하나가 너무 힘들었어요. 😓 그래서 후딱후딱 설치하고 실행시켜서 제 프로젝트에 어떻게든 사용법을 터득하려고 합니다. 일단은 저는 도커에서 elk 8 버전을 사용하려고 합니다. elastic.co에서 Elasticsearch랑 kibana, logstash를 설치해서 사용해도 되지만, 계속할 때마다 에러가 발생해서 저는 다음 git에서 조금 더 쉽.. 더보기
[이펙티브 자바][아이템 9] try-finally 보다 try-with-resources 를 사용하라 - 컴도리돌이 많은 개발자들이 자주 사용하는 try-finally 블록은 리소스를 명시적으로 해제해야 하는 경우에 자주 사용됐지만, 이 방법에는 몇 가지 단점이 있어요. 코드가 장황해지고, 가독성이 떨어지며, 예외가 발생할 경우 자칫 리소스 해제가 제대로 이루어지지 않을 가능성이 생기죠. 특히 스프링 부트 환경에서 여러 외부 리소스나 파일, 데이터베이스  연결 등을 다룰 때 더욱 신중하게 할 필요가 있습니다. 🧐 이런 문제를 해결하기 위해 등장한 것이 try-with-resources인데, 이 구조는 자바 7에서 도입되었고, 자동으로 리소스를 해제해 주는 것이 특징이에요. 리소스를 명시적으로 닫지 않아도 되기 때문에 코드가 훨씬 간결해지고, 예외가 발생하더라도 안정하게 리소스를 관리할 수 있죠. Connection .. 더보기
[이펙티브 자바][아이템 8] finalizer와 cleaner 사용을 피하라 - 컴도리돌이 이번 주제는 저에게는 매우 생소한 주제였어요 😓finalizer와 cleaner 같은 개념이 매우 생소하였거든요, 저는 보통 try-with-resources 구문과 @PreDestroy 어노테이션을 사용해서 자바에서 객체가 더 이상 필요하지 않을 때 리소스를 정리하곤 했는데, 객체 생성 자체를 워낙 많이 하지 않는 편이어서 더욱 생소했던 거 같네요. 그래도 열심히 책을 읽었기에, 오늘 이 주제로 글을 남기려고 합니다. 😤 과거에는 자바에서 객체가 더 이상 필요하지 않을 때 리소스를 정기하기 위해 finalizer를 사용했습니다. 하지만 finalizer는 다음과 같은 문제가 있었죠.첫 번째는 finalizer는 언제 실행될지 예측할 수 없다고 합니다. 이거 매우 위험하지 않나요? 실행 시점이 정확히.. 더보기
[PostgreSQL] 텍스트 검색 최적화: phraseto_tsquery - 컴도리돌이 이번에 검색 기능을 최적화해야 하는 쿼리가 있었습니다. 검색 시스템의 성능은 사용자 경험에 크게 영향을 미치기 때문에, 빠르게 정확한 검색 결과를 제공하는 것이 매우 중요하죠. 처음에 유저가 검색한 데이터를 보여주기 위해서, PostgreSQL의 LIKE 연산자를 사용하여 텍스트 검색을 처리하곤 했습니다. 그러나 데이터가 많이 지면서 검색 성능이 눈에 띄게 저하되는 상황이 많이 놓였죠 😓특히, 다중 단어 검색에서는 문제점이 더욱 두드러집니다. 예를 들어, "postgresql performance tuning"과 같은 문구를 검색할 때, LIKE 쿼리는 부분 단어 매칭에만 의존해 결과가 너무 광범위하거나 불안전했습니다. 성능도 상당히 떨어지고요. 🤨  그래서 이번에는 단순한 키워드 검색이 아닌, 문장.. 더보기
[이펙티브 자바][아이템 7] 다 쓴 객체 참조를 해제해라 - 컴도리돌이 자바 프로그래밍을 하다 보면 한 번쯤은 "메모리 누수"라는 문제를 들어본 적이 있을 거예요. 그렇다면 메모리 누수가 실제로 어떻게 발생할까요? 자바는 가비지 컬렉터(Garbage Collector, GC)를 통해 사용하지 않는 객체를 자동으로 수거하는데, 그렇다면 왜 우리는 여전히 메모리 누수를 걱정해야 할까요?? 🤔 가비지 컬렉터가 잘못된 객체를 수거하지 못하게 만드는 주된 이유 중 하나는 바로 다 쓴 객체에 대한 참조를 해제하지 않기 때문이에요. 이 문제는 특히 메모리를 장시간 사용하거나, 많은 객체를 다루는 애플리케이션에서 더 심각하게 드러난다고 합니다. 가령, 우리가 다 쓴 객체를 필요 이상으로 참조하고 있는 경우, 해당 객체는 가비지 컬렉터의 대상이 되지 않으며, 그 결과 메모리가 불필요하게 .. 더보기
[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는 프로그램의 특정 동작을 관심사라는 개념으로 분리해서 관리하는 기법이에요. 이게 무슨 말이냐면, 코드에서 여러 곳에서 반복되는 공통된 로직을 한 곳에 모아둔 후, 필요할 때마다 그 로직을 실행하게 할 수 있다는 거예요. 이렇게 하면 코드의 중복을 줄이고, 유지 보수가 훨씬 쉬워지죠 👍 예를 들어, 로깅이나 트랜잭션 관리와 같은 로직은 다양한 메서드에서 공통적으로 사용돼요. 만약 이런 로직을 각 메서드에 직접 작성한다면 코드가 지저분해질 뿐 아니라, 유지보수도 어려워.. 더보기

728x90