Spring Boot와 Elasticsearch 기반 로그 수집 및 OpenAI LLM 분석 서버 구축
·
AI
에러 로그를 확인할 때마다 Kibana에서 Elasticsearch 로그를 직접 조회해야 했고, 긴 스택트레이스를 일일이 분석하는 과정이 번거로웠음. 복잡한 오류는 디버깅을 반복하거나,로그를 GPT에 붙여넣어 원인을 물어보며 해결해야 해서 시간이 꽤 소모되었음. 이 과정을 자동화할 수 있겠다는 생각이 들어 테스트 삼아 시스템을 구축해봤음.로컬에서 ELK로 스프링 로그를 수집하고, Elasticsearch에서 ERROR 로그를 주기적으로 조회한 뒤 OpenAI LLM 모델로 분석·요약해서 반환하는 별도의 Spring Boot 프로젝트를 만들었음. 이를 통해 주요 에러를 자동으로 설명받고, 더 빠르게 문제를 파악할 수 있는 구조를 만들고자 했음. 개요A 시스템에서 발생한 애플리케이션 로그를 Elasticse..
로컬 ELK 구축 Elasticsearch, Kibana, Logstash
·
Infra/Monitoring
Elasticsearch — 저장 & 검색 엔진모든 로그가 최종적으로 저장되는 곳.검색 엔진 기반이라 대량 로그를 빠르게 조회할 수 있음Kibana가 시각화할 때도 결국 Elasticsearch에서 데이터를 가져감핵심 역할: 로그 데이터베이스(검색 특화 DB)Logstash — 로그 파이프라인(수집/변환/적재)애플리케이션, 서버, DB, 파일 등 여러 소스에서 로그를 수집수집한 로그를 필터링하거나 JSON 형태로 가공(transform) 하고 Elasticsearch로 보내줌‘가공기 → 적재기’ 역할핵심 역할:데이터 수집기 + 변환기Kibana — 시각화 & 분석 UIElasticsearch에 저장된 데이터를 대시보드 형태로 보여주는 UI오류 추적, 서비스 분석, 로그 검색 등을 쉽게 해주는 툴개발자/운..
Null 처리, 객체 구성, 컬렉션 다루기: Kotlin에서 더 자연스러운 표현들
·
Language/Kotlin
Java를 오래 사용하다 보니, Kotlin 문법을 알고 있어도 자연스럽게 Java 스타일로 코드를 작성하곤 했습니다.문법적으로 문제는 없었지만 Kotlin의 장점을 충분히 살리지 못하고 있다는 아쉬움이 늘 있어,Kotlin다운 코드 작성법을 소개해 도움이 되었으면 하는 마음으로 정리했습니다. 1. Null 체크if (A != null) vs A?.let { }Java 스타일if (user != null) { user.doSomething() } else { return null }Kotlin 스타일user?.let { it.doSomething() }더 좋은 Kotlin 스타일user?.doSomething()let은 “스코프 함수”이지 null-check 용이 아님단순 null-safe call 이면..
[Spring WebFlux] 2. 리액티브 스트림즈(Reactive Streams)
·
Spring
리액티브 스트림즈 (Reactive Streams)리액티브 라이브로리를 어떻게 구현할지 정의해 놓은 별도의 표준 사양데이터 스트림을 Non-Blocking이면서 비동기적인 방식으로 처리하깊 위한 리액티브 라이브러리의 표준 사양RxJava, Reactor(Spring Framework와 가장 궁합이 잘맞음), Akka Streams, Java 9 Flow API 등 리액티브 스트림즈 구성요소컴포넌트설명Publisher 데이터를 생성하고 통지(발행, 게시, 방출)하는 역할Subscriber구독한 Publisher로부터 통지(발행, 게시, 방출)된 데이터를 전달받아서 처리하는 역할SubscriptionPublisher에 요청할 데이터의 개수를 지정하고, 데이터의 구독을 취소하는 역할ProcessorPublis..
[Spring WebFlux] 1. 리액티브 프로그래밍
·
Spring
리액티브 프로그래밍(Reactive Programming)리액티브 시스템을 구축하는데 필요한 프로그래밍 모델리액티브 시스템은 비동기 메시지 통신을 기반으로 한다리액티브 시스템에서의 비동기 메시지 통신은 Blocking I/O 방식이 아닌, Non-Blocking I/O 방식의 통신선언적 프로그래밍, 실행할 동작을 구체적으로 명시하지 않고 목표만 선언데이터 소스의 변경이 있을 때마다 데이터 전파리액티브 프로그래밍 코드는 코드의 간결함과 가독성에 유리한 메서드 체인의 형태로 표현리액티브 프로그래밍 코드에서 파라미터를 가지는 메서드는 함수형 프로그래밍 방식의 코드 형태의 파라미터를 가짐 명령형 프로그래밍 VS 선언형프로그래밍명령형 프로그래밍// 6보다 더 크고 홀수인 숫자들의 합계를 구하는 것public c..
[Spring WebFlux] 3. Non-Blocking, WebClient, Mono, subscribe
·
Spring
2024.06.10 - [CS/OS] - 동기 VS 비동기, 블로킹 VS 논블로킹 동기 VS 비동기, 블로킹 VS 논블로킹동기(Synchronous) vs 비동기(Asynchronous)Synchronous작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작함Thread1이 작업을 시작시키고, Task1이 끝날때까지 기다렸다 Task2를 시작작업 요청을karla.tistory.com  본사에서 클라이언트로부터 도서 정보 조회 요청을 받으면 지점으로 도서 정보 조회 API 요청 보내는 예시코드(클라이언트 ↔️ 본사 ↔️ 지점) Spring MVCBlocking 방식: 스레드가 차단됨다섯개의 책을 조회하는 API호출 지연시간 : 약 25초 정도(호출당 5초 지연)// 본사 API Server: R..