본문 바로가기

분류 전체보기44

Prometheus + Grafana 설정 시 사용한 주소 정리 Spring Boot, Prometheus, Grafana를 연동하면서 여러 URL을 다뤘다.특히 macOS·Linux·Windows·Docker Desktop 환경 차이 때문에처음에는 localhost 주소로 접근이 안 되는 문제가 있었고,해결 과정에서 왜 특정 주소를 써야만 하는지 자연스럽게 알게 되었다.이 글에서는 프로젝트 구축 과정에서 실제로 사용한 주소들을 정리한다.1. Spring Boot Actuator 주소✔ http://localhost:8081/actuator/prometheusSpring Boot가 Prometheus에게 제공하는 메트릭 엔드포인트.Prometheus는 push 방식이 아니라 pull 방식즉, Prometheus가 이 URL로 직접 접근해서 메트릭을 가져감actuato.. 2025. 11. 15.
Prometheus + Grafana 모니터링 Spring Boot에 추가하기 Spring Boot 애플리케이션을 운영하다 보면, API 응답 속도 저하나 DB 커넥션 풀 부족, CPU·메모리 spike 등 다양한 장애 신호들이 발생할 수 있다.이런 문제는 로그만으로는 절대 정확히 보이지 않는다.그래서 이번 프로젝트에 Prometheus + Grafana 기반 모니터링 시스템을 직접 구축했다.1. 전체 구조 [ Spring ↔ Prometheus ↔ Grafana 데이터 흐름 ] 사용자가 API 호출 ↓Spring Boot- 요청 처리 시간 기록- HTTP metrics 생성- JVM/DB/Redis 상태 기록- 메트릭을 /actuator/prometheus 에 노출 ↓Prometheus- 5초마다 Spring Boot에서 메트릭을 pull- 시계열 DB에.. 2025. 11. 15.
서비스 모니터링의 다음 단계 ‘좋은 Metric’을 설계하고 관리하는 법Prometheus와 Grafana를 이용하면 시스템과 애플리케이션의 상태를 시각화할 수 있다.하지만 단순히 모니터링 환경을 구축하는 것만으로는 충분하지 않다.무엇을 측정할지, 왜 측정하는지를 명확히 해야 한다.즉, **좋은 Metric(측정 지표)**를 정의하고, 이를 기반으로 개선 사이클을 운영하는 것이 핵심이다.🧭 1. 성능 측정의 출발점 — 목표 정의모니터링의 목적은 “문제를 감으로 파악하지 않고 수치로 판단하는 것”이다.그 시작은 명확한 목표 정의다.다음 질문에 먼저 답해야 한다.질문예시 답변어떤 성능을 개선하고 싶은가?API 응답 속도, 페이지 로딩 시간, 서버 처리량 등사용자 입장에서 중요한 지표는 무엇인가?실제 유저의 응답 대기 시간, 에러율서버.. 2025. 11. 6.
Prometheus와 Grafana 이해하기 서비스 운영을 위한 모니터링 기초: Prometheus와 Grafana 이해하기서비스 운영 환경에서 장애를 빠르게 발견하고 성능 저하 문제를 사전에 대응하기 위해서는 모니터링 시스템이 필요하다. 특히 트래픽이 증가하고 시스템이 복잡해질수록, 단순히 로그만 확인해서 문제를 찾는 방식으로는 한계가 발생한다. 이때 사용하는 대표적인 오픈소스 도구가 Prometheus와 Grafana다.Prometheus란?Prometheus는 애플리케이션과 서버에서 발생하는 상태 데이터를 주기적으로 수집하고 저장하는 시스템이다.이 데이터는 시계열(Time-series) 형태이며, 특정 시점의 값을 지속적으로 저장한다.주요 특징애플리케이션 또는 시스템에서 노출되는 /metrics 엔드포인트 데이터를 주기적으로 수집수집된 데이터.. 2025. 11. 6.
트랜잭션(Transaction) 이해 1. 트랜잭션이란?트랜잭션은 데이터베이스 작업의 최소 단위입니다.여러 작업(쿼리)을 하나로 묶어 모두 성공(commit) 하거나 모두 실패(rollback) 시키는 역할을 합니다.예: 주문 서비스재고 차감 성공 + 주문 생성 성공 → commit재고 차감 성공 + 주문 생성 실패 → rollback (재고 차감도 되돌아감)즉, 업무의 일관성을 보장하기 위한 핵심 개념입니다.2. 트랜잭션 범위 지정 (@Transactional)Spring에서는 @Transactional 애노테이션으로 트랜잭션의 범위를 지정할 수 있습니다. @Servicepublic class OrderService { @Transactional public void order(Long itemId, Long userId) { .. 2025. 9. 24.
데이터 페이징(Pagination) 기법 서비스 개발을 하다 보면 대부분의 목록 조회 API에서 페이징(Pagination) 이 필요합니다.단순히 “페이지 나누기”로만 보면 간단해 보이지만, 데이터 양이나 사용자 경험(UX) 에 따라 선택해야 할 페이징 방식이 달라집니다.이번 글에서는 대표적인 페이징 기법들을 정리하고, 각각 간단한 예제를 통해 차이를 알아보겠습니다.1. 단순 페이징 (Simple Pagination)개념가장 직관적인 방식입니다.데이터를 전부 가져온 다음, 메모리에서 잘라서 보여주는 방식이죠.// 예시: 전체 리스트에서 subList로 잘라내기List list = fetchAllData(); // DB에서 모든 데이터 불러옴List page = list.subList(0, 10); // 첫 10개만 사용 특징구현이 아주 간단합니.. 2025. 9. 19.