[MSA] Spring Boot + Kafka를 사용한 채팅 (3) (Feat : Prometheus + Grafana)
·
Spring/MSA
이번에 할 작업은 Jmeter를 사용해 로드밸런싱이 적용된 채팅 서버에 부하 테스트를 한 후, Prometheus + Grafana을 사용해 서버 상태를 모니터링하는 것이다.   👨🏻‍💻 Prometheus프로메테우스는 서버의 시계열 데이터를 수집하고, 이를 시각화하며, 경고 알림을 제공하는 오픈소스 모니터링 도구이다.  주요 특징 중 하나는 서비스 디스커버리(Service Discovery) 기능이다. 서비스 디스커버리 덕분에 URL만 설정하면 Spring Actuator 의 메트릭을 손쉽게 수집할 수 있다.  또한, 데이터 조회는 프로메테우스 전용 쿼리 언어인 PromQL 을 사용해 간편하게 할 수 있다.  프로메테우스 아키텍처는 다음과 같다.     👨🏻‍💻 Grafana그라파나는 프로메..
[MSA] Spring Boot + Kafka를 사용한 채팅 (2)
·
Spring/MSA
이전 글에서 여러개의 서버에서도 Kafka를 사용한다면 채팅기능을 충분히 구현할 수 있다는 것을 증명했다.  React 애플리케이션이 각각 3000, 3001 등의 포트를 사용하고, 백엔드 서버는 8081, 8082 등의 포트에서 실행될 경우, 각 프론트엔드에서 직접 해당 백엔드로 요청을 보내는 구조를 구현할 수 있다.  그러나 Spring Cloud Gateway를 사용하면, 프론트엔드에서 게이트웨이로 요청을 전송하고, 게이트웨이가 각 백엔드 서비스로 적절히 분산 처리해주는 방식으로 관리할 수 있다.→ 더 유연한 아키텍처 설계 가능!  그리고 이전엔 하나의 EC2에서 채팅 서버를 실행했지만, 이번엔 MSA 구조로 변경해보기로 했다.  아키텍처 구조는 아래와 같다. 위의 구조를 보면 알 수 있듯이 프론트..
[MSA] Spring Boot + Kafka를 사용한 채팅 (1)
·
Spring/MSA
채팅 기능을 구현할 때 Spring Boot에서는 주로 STOMP나 Redis를 이용해 WebSocket 기능을 개발한다.  그런데 MSA를 학습하면서 Kafka를 사용하는 과정에서, Kafka의 동작 방식이 Redis를 이용한 채팅 기능 구현과 매우 유사하다는 느낌을 받았다.  이는 Kafka의 Producer와 Consumer가 Redis의 Publisher와 Subscriber 역할을 하고, Kafka는 Kafka 브로커, Redis는 메시지 브로커가 존재하는 형태가 매우 유사하게 느껴졌기 때문이다.  이후 관련 정보를 더 찾아보니 Kafka를 이용해 채팅 기능을 구현한 사례들을 발견했다. 그래서 이번에는 모놀리틱 아키텍처 기반의 채팅 서버가 아닌, MSA 기반의 채팅 서버를 직접 구현해보고자 결심..
[MSA] Spring Boot + MSA (2) (Feat : Kafka)
·
Spring/MSA
Kafka Kafka란, 분산 메시지 스트리밍 플랫폼으로, 여러 개의 서비스가 분리되어 있더라도 각각의 서비스간에 데이터를 실시간으로 전송 및 처리할 수 있도록 돕는 역할을 한다. 이를 통해 마이크로 서비스간의 데이터 동기화 상태를 유지할 수 있다. 위의 그림을 보면 알 수 있듯이 Kafka Cluster는 이벤트 메시지 브로커를 담당한다. Producer에게 이벤트를 받고, 해당 이벤트를 Consumer 가 가져갈 수 있게 한다.  내부 구조는 다음과 같다.브로커브로커는 Kafka 클러스터의 핵심 구성 요소로, Kafka 서버이다.여러 개의 브로커가 모여 Kafka Cluster를 형성하며, 각 브로커는 특정 파티션 데이터를 관리한다.Producer가 보낸 메시지를 받아 저장하고, Consumer가 메..
[MSA] Spring Boot + MSA (1)
·
Spring/MSA
SpringBoot에서의 MSA는 크게 3가지로 분류된다.서비스 등록 센터 - Eureka ServerAPI 라우팅 - API Gateway서비스 인스턴스 - Eureka Cilent 그리고 Spring 환경에선 위의 3가지를 사용해 MSA를 편리하게 구축하고자 Spring Cloud 를 사용한다.  서비스 등록 센터 - Eureka Sever Eureka Client 에 등록된 각 서비스(Member, Order, Product …)를 관리하는 서버이다.   build.gradleimplementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'testImplementation 'org.springframework.b..