액츄에이터(Actuator)
스프링 부트에서 액츄에이터(Actuator)는 애플리케이션의 모니터링 및 관리 기능을 제공합니다. 특히 액츄에이터는 성능과 관련된 다양한 매트릭(지표)을 제공합니다. 주요 매트릭은 다음과 같습니다:
- JVM 메트릭
- jvm.memory.*: JVM 메모리 사용량(Heap, Non-Heap, GC 등)을 확인할 수 있습니다.
- jvm.threads.*: JVM 내 쓰레드 개수와 상태 등을 추적합니다.
- CPU 메트릭
- system.cpu.usage: 시스템의 전체 CPU 사용률을 나타냅니다.
- process.cpu.usage: 애플리케이션이 사용하는 CPU의 비율을 확인할 수 있습니다.
- GC (Garbage Collection) 메트릭
- jvm.gc.*: GC에 의해 청소된 메모리 양, GC 발생 빈도 등을 보여줍니다.
- HTTP 요청 메트릭
- http.server.requests: HTTP 요청의 처리 시간, 요청 횟수, 상태 코드별 요청 수 등을 확인할 수 있습니다.
- 데이터소스 메트릭
- hikaricp.connections.*: 데이터베이스 풀의 연결 상태와 관련된 정보(활성 연결 수, 최대 연결 수 등)를 제공합니다. HikariCP나 다른 데이터베이스 커넥션 풀이 설정된 경우에 유용합니다.
- 캐시 메트릭
- cache.*: 애플리케이션이 사용하는 캐시 정보(캐시 조회 성공, 실패 등)를 제공합니다.
- 파일 디스크 메트릭
- disk.*: 디스크 용량과 사용률 정보를 제공합니다.
- 로그 관련 메트릭
- logback.*: 로깅 관련 설정을 기반으로 로그 발생 빈도 및 에러 로그 수 등을 확인할 수 있습니다.
이러한 매트릭은 /actuator/metrics 엔드포인트를 통해 접근할 수 있습니다.
그라파나(Grafana)
그라파나(Grafana)는 다양한 데이터 소스로부터 수집한 데이터를 시각화하여 대시보드 형태로 보여주는 오픈 소스 도구입니다. 주로 모니터링 및 분석을 위해 사용되며, 애플리케이션이나 서버의 성능 데이터를 한눈에 파악할 수 있도록 도와줍니다.
주요 특징
- 다양한 데이터 소스 지원:
- Grafana는 Prometheus, MySQL, InfluxDB, ElasticSearch, Graphite 등 다양한 데이터 소스를 지원합니다. 이 덕분에 여러 시스템에서 수집한 데이터를 하나의 대시보드에 통합할 수 있습니다.
- 대시보드 시각화:
- 데이터를 실시간 그래프, 막대 그래프, 게이지, 테이블 등 다양한 형태로 시각화하여 사용자가 쉽게 이해할 수 있습니다.
- 각 대시보드는 커스터마이징이 가능하며, 원하는 메트릭만 선택해서 보여줄 수 있습니다.
- 알림 기능:
- 특정 조건을 설정해 알림을 받을 수 있습니다. 예를 들어, CPU 사용률이 일정 수준 이상으로 높아지면 알림을 설정하여 빠르게 문제를 인지할 수 있습니다.
- 데이터 탐색 및 쿼리:
- Grafana는 SQL 기반의 쿼리 작성이 가능하여 데이터의 특정 부분을 탐색하거나 필터링할 수 있습니다.
- 다양한 필터와 매개변수를 적용해 데이터를 다각도로 분석할 수 있습니다.
사용 예시
- 서버 모니터링: CPU 사용량, 메모리 사용량, 디스크 I/O 등을 실시간으로 모니터링할 수 있습니다.
- 애플리케이션 모니터링: API 요청 속도, 에러 발생률, 사용자 세션 정보를 시각화하여 앱 상태를 파악할 수 있습니다.
- 비즈니스 데이터 시각화: 비즈니스와 관련된 데이터를 대시보드로 만들어 고객 활동, 매출 현황 등을 분석할 수 있습니다.
Grafana는 직관적이고, 오픈 소스 기반이라 무료로 사용할 수 있어 모니터링, 성능 분석, 데이터 시각화가 필요한 다양한 분야에서 널리 사용됩니다.
JmsTemplate과 @JmsListener
JmsTemplate과 @JmsListener는 스프링에서 JMS(Java Message Service) 기반의 메시징 기능을 지원하는 도구로, 애플리케이션 간 알림을 비동기적으로 주고받을 때 유용합니다. 이를 통해 메시지를 보내고 수신하여 시스템 간 통신을 원활하게 할 수 있습니다.
1. JmsTemplate
JmsTemplate은 스프링에서 JMS 메시지를 보내는 데 사용하는 유틸리티 클래스입니다. 메시지를 발송할 때 간편하게 사용할 수 있으며, 메시지 전송 로직을 단순화하여 코드에서 직접 메시지 큐에 연결하는 복잡성을 줄여줍니다.
사용 예제
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service;
@Service
public class AlertSenderService {
@Autowired
private JmsTemplate jmsTemplate;
public void sendAlert(String message) {
// 큐 이름과 메시지를 사용해 알림 전송
jmsTemplate.convertAndSend("alertQueue", message);
System.out.println("알림 전송됨: " + message);
}
}
설명:
- convertAndSend 메서드는 큐에 메시지를 전송합니다. 여기서는 "alertQueue"라는 큐에 알림 메시지를 보냅니다.
- 이 방식으로 비동기적으로 메시지를 보내 알림을 전달할 수 있습니다.
2. @JmsListener
@JmsListener는 JMS 메시지를 수신하는 리스너로, 특정 큐나 토픽을 구독하여 메시지를 받을 때 실행할 메서드를 정의합니다. JMS로 들어오는 메시지를 자동으로 처리하는 역할을 합니다.
사용 예제
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
@Component
public class AlertReceiver {
@JmsListener(destination = "alertQueue")
public void receiveAlert(String message) {
// 메시지를 수신할 때 처리하는 로직
System.out.println("수신된 알림: " + message);
// 알림을 처리하는 로직 추가
}
}
설명:
- @JmsListener(destination = "alertQueue")를 사용하여 "alertQueue"라는 큐에서 메시지를 받으면 receiveAlert 메서드가 호출됩니다.
- 메시지를 자동으로 수신하여 처리합니다. 여기서 알림 메시지를 수신하고, 특정 동작을 수행할 수 있습니다.
JmsTemplate과 @JmsListener를 활용한 알림 시나리오
- 알림 보내기: JmsTemplate을 사용해 특정 큐에 알림 메시지를 보냅니다. 예를 들어, 사용자에게 이메일 알림을 보내거나 새로운 이벤트가 발생했음을 알릴 때 사용할 수 있습니다.
- 알림 수신 및 처리: @JmsListener를 통해 큐를 구독하여 알림을 수신하고 필요한 로직을 수행합니다. 예를 들어, 메시지를 받아 사용자에게 알림을 전달하거나 데이터베이스에 기록하는 등의 처리를 할 수 있습니다.
이러한 방식으로 JmsTemplate과 @JmsListener를 함께 사용하여 시스템 간의 비동기 메시징과 알림 기능을 쉽게 구현할 수 있습니다.
'Study Memo' 카테고리의 다른 글
2024.12.02(월) { VPC와 LAN, VLAN } (0) | 2024.12.02 |
---|---|
2024.11.12(화) { Promise 기반 } (0) | 2024.11.12 |
2024.10.29(화) { 토큰&세션&JWT, 로그인 요청처리 } (0) | 2024.10.29 |
2024.10.28(월) { 세션고정, XSS, CSRF, Credential } (0) | 2024.10.28 |
2024.10.25(금) { 동적 배치 트랜잭션, 커서와 ResultSet, placeholder (0) | 2024.10.25 |