JVM/SpringCloud 13

모니터링(Micrometer, Prometheus, Grafana)

Micrometer 애플리케이션의 메트릭 수집을 단순화하고, JVM 기반의 애플리케이션에서 사용하기 쉬운 메트릭 API를 제공하는 라이브러리이다. 특히 스프링 기반의 애플리케이션에서는 Micrometer가 스프링의 메트릭 제공에 통합되어 사용된다. 또한, 다양한 모니터링 시스템과의 통합을 지원하여 Prometheus, Grafana, InfluxDB, Datadog 등 다양한 백엔드로 메트릭을 전송할 수 있다. 여러 Micrometer의 기능 중 하나로 Timer가 있다. Timer는 특정 코드 블록이나 메서드의 실행 시간을 측정하고 해당 지표를 메트릭으로 수집한다. 호출 빈도와 지연 시간을 시계열로 기록하여 애플리케이션의 동작을 모니터링할 수 있다. @Timed 어노테이션은 Micrometer에서 제공..

JVM/SpringCloud 2024.01.03

Zipkin

ZipkinZipkin은 분산 시스템에서의 추적 및 모니터링을 위한 오픈 소스 소프트웨어이다. 주로 마이크로서비스 아키텍처에서 사용되며 서비스 간 통신과 연관된 각 단계의 지연 시간 및 성능을 추적하여 문제를 식별하고 해결하는 데 도움이 된다.SpanSpan은 하나의 요청에 사용되는 작업의 단위이다. 예를 들어, 서비스 간의 요청 또는 로컬 작업과 같은 작업 단위를 나타낼 수 있다. Span은 시작 시간, 종료 시간, 태그 등의 정보를 포함하여 특정 작업에 대한 세부 정보를 기록한다.TraceTrace는 관련된 여러 Span들의 모음으로, 전체 작업의 흐름을 나타낸다. 서비스 간의 요청이 발생하면, 해당 요청에 대한 Span이 생성되고, 이러한 Span들이 모여 Trace를 형성한다. Trace는 전체 ..

JVM/SpringCloud 2024.01.03

Resilience4J - CircuitBreaker

Circuit Breaker 서킷 브레이커는 연결의 성공/실패를 카운트하여 실패율이 임계치를 넘어섰을 때 자동적으로 접속을 차단하는 시스템이다. 마이크로서비스 아키텍처에서 서비스 간 통신에서 발생할 수 있는 장애와 지연으로부터 전체 시스템의 안정성을 유지하는데 도움이 되는 중요한 디자인 패턴이다. Sliding Window 서킷 브레이커는 슬라이딩 윈도우를 통해 호출 결과를 저장하고 집계한다. 슬라이딩 윈도우의 방식은 마지막 N개의 호출 결과를 집계하는 카운트 기반과 마지막 N초 간 일어난 호출 결과를 집계하는 시간 기반이 있다. Circuit Breaker State 닫힌(Closed) 상태 초기 상태로, 모든 호출이 허용된다. 서비스 호출 중 에러 비율이 설정된 임계값을 넘어가면 서킷 브레이커는 열린..

JVM/SpringCloud 2024.01.02

Kafka를 활용한 데이터 베이스 비동기 통신

이벤트 중심 아키텍처 JDBC 또는 JPA를 사용하여 DB에 직접 접속하는 경우, 애플리케이션과 DB 간의 동기 상태로 인해 서비스 지연 및 다른 서비스에 대한 영향이 발생할 수 있다. 또한, 트래픽이 증가하거나 DB Locking이 발생할 경우 성능 문제가 발생할 수 있다. 이러한 문제를 해결하기 위해 Kafka Sink Connector를 사용하면 비동기 방식의 데이터 처리, 데이터 전달의 효율적인 관리, 안정적인 클러스터 구성, 서비스 간의 느슨한 결합, 이벤트 중심 아키텍처 등 다양한 이점을 얻을 수 있습니다. 특히 대용량 및 다중 서비스 환경에서는 MQ와 같은 서비스의 도입이 유용할 수 있다. Dto data class KafkaOrderDto( val schema: Schema, val pay..

JVM/SpringCloud 2024.01.01

Kafka를 활용한 마이크로 서비스간 비동기 통신

라이브러리 implementation("org.springframework.kafka:spring-kafka") kafka Consumer 설정 @Configuration @EnableKafka class KafkaConsumerConfig { // 토픽에 접속하기 위한 설정 정보 @Bean fun consumerFactory(): ConsumerFactory { val properties = mapOf( ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG to "127.0.0.1:9092", ConsumerConfig.GROUP_ID_CONFIG to "consumerGroupId", ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG to StringD..

JVM/SpringCloud 2024.01.01

마이크로서비스간 동기 통신

동기식 HTTP 통신 클라이언트가 요청을 보내고, 서버는 해당 요청에 대한 응답을 즉시 반환하는 방식으로 요청에 대한 응답이 필요한 경우 사용된다. 간단하며 직관적인 구조로 에러 처리가 상대적으로 쉬운 장점이 있지만 클라이언트는 응답을 기다려야 하므로, 블로킹이 발생할 수 있으며 서비스의 의존성이 높아질 가능성이 있다. Spring Boot의 RestTemplate을 이용하는 방식과 Spring Cloud의 Feign Client를 이용한 방식이 있다. RestTemplate RestTemplate 빈 등록 Spring Boot를 사용한다면, RestTemplate은 기본적으로 빈으로 등록되어 있다. 따라서 별도의 설정 없이 주입하여 사용할 수 있다. 그러나 Spring Boot를 사용하지 않는다면, R..

JVM/SpringCloud 2023.12.30

Spring Cloud Config Server의 암호화

Config Server의 암호화설정 정보를 평문으로 관리하는 것은 보안 문제를 일으킬 우려가 있다. Spring Cloud Config Server는 암호화된 프로퍼티 값을 제공하기 위해 대칭 키 또는 비대칭 키를 사용할 수 있다. 대칭키를 이용한 암호화 동일한 키를 암호화와 복호화에 사용하는 방식으로 처리 속도가 빠르다는 장점이 있지만 키 교환의 어려움과 키 관리의 문제가 있다. 라이브러리 implementation("org.springframework.cloud:spring-cloud-starter-bootstrap") bootstrap.ymlencrypt: key: abcdefghijklmnopqrstuexyz1234567890 bootstrap.yml 이란? 부트스트랩 단계에서 사용되는 설정 파..

JVM/SpringCloud 2023.12.30

Spring Cloud Bus

Spring Cloud Bus Spring Cloud Bus는 분산 시스템에서 구성 변경 및 이벤트 전파를 지원하는 도구이다. 이를 통해 여러 서비스 인스턴스 간에 구성 변경을 효율적으로 전파하고, 런타임 중에 애플리케이션 상태를 모니터링하고 관리할 수 있다. 이벤트 버스: Spring Cloud Bus는 이벤트 버스를 사용하여 분산된 서비스 간에 이벤트를 전파한다. 이를 통해 구성 변경, 애플리케이션 이벤트 등을 브로드캐스트할 수 있습니다. 구성 변경 전파: Spring Cloud Config와 통합하여 구성 서버에서 가져온 구성 정보를 변경할 때 이를 모든 서비스 인스턴스에 효과적으로 전파할 수 있다. 애플리케이션 상태 모니터링: 애플리케이션의 상태 변경, 이벤트, 구성 변경 등을 모니터링하고 이를 ..

JVM/SpringCloud 2023.12.28

Spring Cloud Config

Spring Cloud Config Spring Cloud Config는 Spring 프레임워크 기반의 분산 시스템에서 설정 관리를 간편하게 하기 위한 도구이다. 여러 마이크로서비스가 함께 동작하는 환경에서 중앙화된 설정을 적용하고, 이를 외부에서 동적으로 수정할 수 있도록 지원한다. 중앙화된 저장소: 설정 정보는 외부 저장소에 저장되어 중앙화되며, 보통 Git과 같은 버전 관리 시스템을 사용한다. 이를 통해 변경 이력을 추적하고, 여러 환경에 대한 설정을 효과적으로 관리할 수 있다. 외부에서의 설정 관리: 서비스를 중지시키지 않고도 설정을 변경할 수 있다. 이는 서비스의 재시작 없이도 동적으로 설정을 갱신할 수 있어, 높은 가용성을 유지하면서도 설정을 최신 상태로 유지할 수 있음을 의미한다. 애플리케이..

JVM/SpringCloud 2023.12.27

Spring Swagger(Springdoc) 통합 설정

Spring Boot에서는 여러 개의 모듈이나 서비스를 포함하는 분산 시스템에서 API 문서를 통합하고자 할 때, 주로 Swagger 문서를 Aggregator 또는 Gateway에서 통합하는 방식이 사용된다. 이를 위해서는 각 서비스의 Swagger 문서를 중앙 집중화된 위치에서 통합하거나, 서비스 간에 문서를 병합하는 방법을 사용할 수 있다. 두 방식 중 어느 것을 선택할지는 시스템의 구성과 요구사항에 따라 다를 수 있다. 중앙 집중화된 위치에서 통합하는 경우 Gateway에 부하가 집중될 수 있지만, 서비스 간 문서 병합은 각 서비스가 직접적으로 책임을 지게 된다. 중앙에서 통합하는 방식Spring Gateway나 중앙에서 각각의 서비스의 api-docs의 path를 호출하는 방식이다. spring..

JVM/SpringCloud 2023.12.27