전체 글 69

동시성 제어에 Redisson과 Lua Script 사용해보기

Redisson은 Java 기반의 Redis 클라이언트 라이브러리로, Redis의 다양한 기능을 Java 객체 형태로 쉽게 사용할 수 있도록 추상화 계층을 제공합니다. 이를 통해 분산 락, 트랜잭션, 캐싱, pub/sub 등 Redis의 고급 기능을 활용하여 분산 시스템을 구축할 수 있으며, Netty 기반의 비동기 방식으로 높은 성능을 자랑합니다.Lua Script는 경량의 고급 프로그래밍 언어인 Lua를 Redis에서 사용할 수 있도록 해주는 기능입니다. Redis는 기본적으로 한 줄씩 단일 명령어를 처리하는 방식으로 동작하지만, Lua Script를 사용하면 Redis 내에서 여러 명령어를 하나의 원자적 작업으로 처리할 수 있습니다. 현재 시스템에서는 선착순 쿠폰 발급 기능을 구현하기 위해 Redi..

MapStruct 사용해보기

MapStruct는 DTO와 엔티티 간의 변환 작업을 자동화하는 도구이다.중복 코드 제거: DTO와 엔티티 간 변환이 여러 군데에서 필요할 때, 수작업으로 변환 메서드를 작성하는 것보다 자동으로 변환을 처리해주어 코드 중복을 줄일 수 있다.성능 최적화: MapStruct는 컴파일 시점에 변환 코드를 생성하기 때문에 런타임 성능에 큰 영향을 주지 않으며, Reflection을 사용하는 방식보다 훨씬 빠르다.유지보수성 향상: 변환 로직이 변경될 경우, 일관되게 관리되기 때문에 코드의 유지보수가 용이하다. MapStruct – Java bean mappings, the easy way!MapStruct Spring Extensions 1.1.3 released March 14, 2025 It is my ple..

커스텀 어노테이션과 AOP를 사용해서 권한 체크해보기

AOP (Aspect-Oriented Programming, 관점 지향 프로그래밍) : 프로그램의 핵심 로직과는 별개로, 공통적으로 반복되는 부가적인기능(관심사)을 한 곳에 분리해서 모듈화하는 프로그래밍 방식 AOP Concepts :: Spring FrameworkLet us begin by defining some central AOP concepts and terminology. These terms are not Spring-specific. Unfortunately, AOP terminology is not particularly intuitive. However, it would be even more confusing if Spring used its own terminology. Arou..

Redis를 활용한 BlackList 관리 중 깨달은 문제

access_token이 노출이 되었다는 가정하에 BlackList에 등록해주는 기능을 구현하던 중 아무생각 없이 Redis에 저장하는 시간을 대충 저장하게 되면서 깊은 생각에 빠지게 되었다. access_token을 Redis에 BlackList로 저장한 뒤, 만료시간을 사용자 정의로 지정해주면서 실제 BlackList에 등록된 access_token이 언제까지 유효한지 알 수 없다는 생각이 들면서 개선해보기로 마음을 먹었다.Beforeaccess_token을 BlackList로 관리하는 과정에서 임의로 1시간으로 지정함.1. BlackList에 등록된 access_token이 언제 만료되는지 알 수 있는가?2. BlackList에 등록된 access_token의 만료 시간이 BlackList에 등록된..

Grafana Alert Manager와 Kakao Open API 나에게 보내기 연동해보기 (feat. 좋지 않은 결과)

문득 이메일, slack, discord 등등 다양하게 Grafana에서 제공해주는 기능들을 보다보니 카카오톡 메시지로 알람을 받으면 좋을 것 같다는 생각을 하게 되었다. (하고 싶은 건 다 해보는 스타일...) 사실 좋은 방법은 아니지만 실제로 카카오톡 메시지를 받으면 신기할 것 같아서 진행해보았다. 우선 Discord, Slack에서 Webhook을 사용하듯이 직접 Grafana에서 사용할 Webhook용 Controller를 만들어야 한다.{ "client": "Grafana", "client_url": "http://grafana.local/alerting", "event_type": "alerting", "incident_key": "some-unique-key", "service_k..

Grafana Alert rules 정하기

이제 어떤 상황이 발생하면 알람을 보낼 수 있게 Alert rule을 정해보자 Grafana로 알람 보내기MSA 환경에서는 각각의 서비스가 독립적으로 배포되고 운영됩니다. ex)유저 서비스, 결제 서비스, 주문 서비스 등.이때 발생할 수 있는 문제점에는 만약 서비스 수가 많아질수록 모니터링이 복잡seungg8361.tistory.comAlert rules에서 New alert rule을 클릭해준다.간단하게 스프링 부트 애플리케이션을 종료되면 알람을 보낼 수 있도록 설정해보겠다. 2. Define query and alert condition 에서 Metrics를 클릭하고 Metrics explorer을 보면 여러가지 설정을 할 수 있다.우선 애플리케이션의 문제 발생 시 알람을 보내기 위해 이전에 설정해 ..

Grafana로 알람 보내기

MSA 환경에서는 각각의 서비스가 독립적으로 배포되고 운영됩니다. ex)유저 서비스, 결제 서비스, 주문 서비스 등.이때 발생할 수 있는 문제점에는 만약 서비스 수가 많아질수록 모니터링이 복잡해지고, 서비스 간 통신 장애, 특정 서비스만 에러 발생 등의 문제가 발생할 수 있다. 이런 문제를 해결하기 위해 Grafana에서는 알림을 보낼 수 있는 기능이 있다. 만약 서비스가 느려지거나 특정 지표(CPU, 메모리, 에러율 등)가 기준치를 넘을 경우 자동으로 감지해서 알림을 보내준다. 이러한 기능으로 로그를 보지 않고도 자동 알림을 통해 문제를 인지할 수 있어 운영 부담이 줄어들고, SLA(Service Level Agreement)를 만족하기 위해 실시간 모니터링과 빠른 대응을 할 수 있다. Grafana..

Grafana에서 Loki로 로그를 모니터링 해보자 (feat. 로그 수집 전략)

Loki는 Grafana Labs에서 개발한 로그 집계 시스템이다. 주로 로그 데이터를 저장하고, 라벨 기반의 메타데이터를 사용하여 로그를 효율적으로 검색할 수 있다는 장점이 있다.Loki를 사용해보기에 앞서서 MSA 환경에서 로그 관리가 왜 중요한지에 대해 먼저 알아보자 우리가 관리하는 서비스들은 점점 늘어나면서 각각의 서비스는 독립적으로 배포되고, 서로 다른 서버 또는 컨테이너에서 실행되게된다.이런 경우에 하나의 요청이 여러 서비스를 거칠 때 로그를 종합적으로 추적하기가 어렵고, 어디에서 문제가 발생했는지 알기가 점점 더 까다로워지기 때문에 시스템 상태를 모니터링하고, 잠재적인 문제를 사전에 발견하는데 필요하다. 로그를 수집하는 전략 중에 Sidecar 패턴, 에이전트 방식, Push 방식에 대해서 ..

Grafana를 사용해보자

Prometheus를 사용해보자Prometheus란 시간에 따라 수집된 시계열 데이터를 기반으로 하는 모니터링 및 경고 시스템으로, 서버, 컨테이너, 애플리케이션, 마이크로서비스 등에서 메트릭을 수집하고, 이를 저장 및 분석하는seungg8361.tistory.com이전에 사용했던 Prometheus를 Grafana를 통해 확인해보자 Grafana는 오픈소스 데이터 시각화 및 모니터링 도구로, 대시보드를 생성하고 데이터를 그래프나 차트 형태로 표현하며, 알림 기능으로 모니터링을 강화할 수 있다. 주요기능대시보드 : 데이터를 시각화할 수 있는 대시보드를 생성할 수 있도록 한다. ex) 그래프, 차트, 게이지 등데이터 소스 지원 : Prometheus, Elasticsearch, MySQL, PostgreS..

Prometheus를 사용해보자

Prometheus란 시간에 따라 수집된 시계열 데이터를 기반으로 하는 모니터링 및 경고 시스템으로, 서버, 컨테이너, 애플리케이션, 마이크로서비스 등에서 메트릭을 수집하고, 이를 저장 및 분석하는 도구이다. 구성 요서Prometheus 서버 : 메트릭 데이터를 수집하고 저장하는 핵심 컴포넌트로, 각 애플리케이션 또는 엔드 포인트로부터 데이터를 주기적으로 스크랩하여 시계열 데이터 베이스에 저장한다.시계열 데이터베이스 : 시간에 따라 변화하는 데이터를 효율적으로 저장하고 조회할 수 있도록 최적화된 데이터베이스Exporters : 특정 애플리케이션이나 시스템의 메트릭 데이터를 Prometheus가 이해할 수 있는 형식으로 변환해주는 도구 ex) micrometer-registry-prometheus 의존성 ..