OpenAI API 클라이언트 - ElasticSearch 로그 분석 (Local)
·
AI
개요A 시스템에서 발생한 애플리케이션 로그를 Elasticsearch에 적재함일정 주기로 ES를 조회함최근 ERROR 로그만 골라서 LLM(OpenAI)에 보내 요약/분석함분석 결과를 로그로 남기거나, 추후 Slack·이메일 알림으로 확장 가능하게 설계함 1. 환경 및 의존성Gradle 의존성 추가웹 API 호출용으로 spring-boot-starter-web 추가함Elasticsearch 조회를 위해 elasticsearch-java 클라이언트 의존성 추가함LLM 호출을 위해 openai-client 와 ktor-client-java 의존성 추가함dependencies { implementation("org.springframework.boot:spring-boot-starter-web") ..
로컬 ELK 구축 Elasticsearch, Kibana, Logstash
·
Monitoring
Elasticsearch — 저장 & 검색 엔진모든 로그가 최종적으로 저장되는 곳.검색 엔진 기반이라 대량 로그를 빠르게 조회할 수 있음Kibana가 시각화할 때도 결국 Elasticsearch에서 데이터를 가져감핵심 역할: 로그 데이터베이스(검색 특화 DB)Logstash — 로그 파이프라인(수집/변환/적재)애플리케이션, 서버, DB, 파일 등 여러 소스에서 로그를 수집수집한 로그를 필터링하거나 JSON 형태로 가공(transform) 하고 Elasticsearch로 보내줌‘가공기 → 적재기’ 역할핵심 역할:데이터 수집기 + 변환기Kibana — 시각화 & 분석 UIElasticsearch에 저장된 데이터를 대시보드 형태로 보여주는 UI오류 추적, 서비스 분석, 로그 검색 등을 쉽게 해주는 툴개발자/운..
Kubernetes 인그레스(Ingress), 로드밸런서 LoadBalancer, metallb
·
Kubernetes
Ingress, Ingress Controller 인그레스를 사용하면 L7의 웹 요청을 해석해서 단일 IP, 단일 포트로 다수의 도메인과 서비스로 연결할 수 있음 쿠버네티스에서 기본적으로 지원하는 인그레스 오브젝트는 클라우드 환경이 아니면 사용할 수 없음 클라우드에서 인그레스를 생성하면 외부에 게이트웨이를 생성하고 각 기능에 맞게 서비스에 연결 쿠버네티스에서 Ingress를 사용하기 위해서는 두 가지가 필요 첫 번째는 YAML 파일에서 kind: Ingress 로 정의되는 Ingress 오브젝트 두 번째는 Ingress 규칙이 적용될 Ingress Controller YAML 파일로부터 Ingress를 생성해도 아무 일도 일어나지 않음 Ingress는 단지 Ingress 규칙을 정의하는 선언적인 오브젝트..
쿠버네티스(Kubernetes) 배포 업데이트, 롤백
·
Kubernetes
2023.10.14 - [Cloud&DevOps/Kubernetes] - GCP Kubernetes GKE Pod 생성, 배포, 접속 GCP Kubernetes GKE Pod 생성, 배포, 접속 2023.10.10 - [Cloud&DevOps/GCP] - GCP GKE 클러스터 생성 | 구글 클라우드 플랫폼, 쿠버네티스 GCP GKE 클러스터 생성 | 구글 클라우드 플랫폼, 쿠버네티스 https://cloud.google.com https://cloud.google.com 영상 통화, 이 karla.tistory.com Deployment 하나씩 Pod의 수를 수동으로 조정해야 하기 때문에 이를 자동화해서 추상화한 개념이 Deployment 이다. 업데이트 v2 이미지 배포 명령어를 실행하면 v1 → v..
[Spring Webflux] WebClient (HTTP 클라이언트)
·
Spring
WebClientRestTemplate를 대체하는 HTTP 클라이언트기존의 동기 API를 제공할 뿐만 아니라, 논블로킹 및 비동기 접근 방식을 지원해서 효율적인 통신이 가능요청을 나타내고 전송하게 해주는 빌더 방식의 인터페이스를 사용외부 API로 요청을 할 때 리액티브 타입의 전송과 수신(Mono, Flux)싱글 스레드 방식을 사용 Non-Blocking & Synchronouse2024.06.13 - [Spring] - [Spring WebFlux] 3. Non-Blocking, WebClient, Mono, subscribe [Spring WebFlux] 3. Non-Blocking, WebClient, Mono, subscribe2024.06.10 - [CS/OS] - 동기 VS 비동기, 블로킹 V..
Null 처리, 객체 구성, 컬렉션 다루기: Kotlin에서 더 자연스러운 표현들
·
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 이면..
Kafka Streams (Streaming Data Processing Programing)
·
Kafka
build.gradle kafka-streams 추가 dependencies { implementation 'org.apache.kafka:kafka-streams' } Kafka Streams strams_log 토픽 → stream() 소스프로세서 → to() 싱크프로세서 → stream_log_copy 토픽 @SpringBootApplication public class KafkaStreamsApplication { private static String APPLICATION_NAME = "streams-filter-application"; private static String BOOTSTRAP_SERVERS = "localhost:9092"; private static String STREAM_..
[RabbitMQ] rabbitMQ Spring Boot Producer, Consumer 생성, MultipleConsumer, prefetch
·
RabbitMQ
0. RabbitMq 설치 및 설정 [RabbitMQ] rabbitmq 설치 및 설정, rabbitmq spring 3.0이상 연동 1. docker로 Rabbit MQ 설치 컨테이너 이름 : rabbitmq 백그라운드로 실행 docker run -d --name rabbitmq -p 5672:5672 -p 8080:15672 --restart=unless-stopped rabbitmq:management 2. management url 접속 # default username, password는 둘다 gue karla.tistory.com 1. RabbitMqProducer 파일 생성 yml 값 변수 매핑 RabbitTemplate 선언 @Service @Log4j2 public class RabbitM..
[RabbitMQ] rabbitmq 설치 및 설정, spring 3.0이상 연동
·
RabbitMQ
1. docker로 Rabbit MQ 설치 컨테이너 이름 : rabbitmq 백그라운드로 실행 docker run -d --name rabbitmq -p 5672:5672 -p 8080:15672 --restart=unless-stopped rabbitmq:management 2. management url 접속 # default username, password는 둘다 guest로 입력 http://localhost:15672/ 3. admin, vhost 추가 (옵션) 4. Queue, Exchange 생성 queue : SKT, KT, LG,emailbroker1, emailbroker2라는 이름의 총 5개의 큐 생성 exchange : SKT, KT, LG 3개의 큐는 각자의 exchage 생성 ..
[CICD] Jenkins + ArgoCD + k8s | CI, 젠킨스 파이프라인, Jenkinsfile, MSA
·
DevOps
GitHub - Guts-Gun/KITe_backendContribute to Guts-Gun/KITe_backend development by creating an account on GitHub.github.com 구축 순서1. Jenkins Pipeline & Github webhook 설정2. Jenkinsfile 작성3. ArgoCD 구축 Jenkins PipelineJob들을 순차적 혹은 병렬적으로 실행시키거나 작성한 스크립트로 이벤트들을 연속적으로 실행시키는 등의 일을 지원하는 기능Job 하나 작성할 때 대부분 GUI로 제공받아 마우스로 체크해서 설정했다면 Pipeline은 이러한 내용들을 스크립트를 통해 더 딥하고 유연하게 작성할 수 있음작성하려는 배포 플로우가 복잡하다면 pipeline ..
마이크로서비스 분산 트랜잭션 관리, 보상 트랜잭션, MSA Transaction | Two Phase Commit, Saga Pattern
·
Architecture
2PC (Two Phase Commit) 분산 시스템에서 트랜잭션을 변경할 수 있는 기능을 제공하는 방식 Transaction Coordinator가 각 서비스의 Commit. Rollback 을 제어하는 형태로 트랜잭션을 관리함 2PC는 서비스가 증가할수록 시스템의 대기 시간이 길어지며, 이는 응답시간의 증가를 초래함 Lock을 잡아야 하는 Row의 범위가 크거나 트랜잭션 기간이 긴 경우 시스템에 엄청난 대기시간을 발생하므로 수명이 매우 짧은 작업에만 사용하는 것을 권장 마이크로서비스 전체에서 상태 변경을 조정하기 위해 2PC와 같은 분산 트랜잭션을 사용하지 않는 것이 좋음 2PC는 결국 Coordinator를 기반으로 강력한 결합을 유도하고, 데이터에 직접적인 Lock을 잡고 처리하기 때문에 서비스간..