| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- input
- Java
- javascript
- java테스트
- 자바스크립트
- list
- SpringBoot
- 배열
- CSS
- 정규식
- js
- 자바
- junit
- Array
- Eclipse
- 문자열
- string
- 자바문법
- vscode
- Visual Studio Code
- 스프링부트
- 테스트자동화
- 단위테스트
- math
- HashMap
- html
- ArrayList
- 인텔리제이
- IntelliJ
- junit5
- Today
- Total
어제 오늘 내일
[Spring Boot] "서버가 죽었는지 살았는지 어떻게 알죠?" 프로메테우스 & 그라파나로 간지나는 대시보드 만들기 본문
[Spring Boot] "서버가 죽었는지 살았는지 어떻게 알죠?" 프로메테우스 & 그라파나로 간지나는 대시보드 만들기
hi.anna 2026. 3. 20. 00:16
서버 개발자의 불안감은 배포가 끝난 뒤부터 시작됩니다.
"지금 잘 돌아가고 있나?", "메모리가 부족하진 않나?", "에러가 많이 나진 않나?"
이걸 확인하려고 매번 터미널 들어가서 로그(tail -f)를 볼 수는 없죠. 오늘은 데이터 수집(Prometheus)과 시각화(Grafana)의 끝판왕 도구들을 사용해, 내 서버의 상태를 한눈에(Dashboard) 보는 법을 알려드립니다.
1. 모니터링 3대장 구조 이해하기
이 시스템은 3단계로 동작합니다.
- Spring Boot Actuator: "내 상태 정보(CPU, 메모리, 요청 수)를 알려줄게!" (데이터 제공자)
- Prometheus (프로메테우스): "내가 주기적으로 가서 그 정보를 긁어올게!" (데이터 수집가 - Time Series DB)
- Grafana (그라파나): "수집된 데이터를 예쁜 그래프로 보여줄게!" (데이터 시각화)
2. Spring Boot 설정 (Actuator 열기)
먼저 스프링 부트가 자기 정보를 뱉어내도록 설정해야 합니다.
① 의존성 추가 ()
dependencies {
// 1. 상태 정보 공개용
implementation 'org.springframework.boot:spring-boot-starter-actuator'
// 2. 프로메테우스가 이해할 수 있는 포맷으로 변환용
implementation 'io.micrometer:micrometer-registry-prometheus'
}
② 설정 파일 수정 ()
보안상 기본적으로는 닫혀있으므로 열어줘야 합니다.
management:
endpoints:
web:
exposure:
include: prometheus # 프로메테우스용 엔드포인트 개방!
endpoint:
prometheus:
enabled: true
이제 서버를 켜고 http://localhost:8080/actuator/prometheus에 접속해 보세요.
알 수 없는 텍스트들이 쫘르륵 뜬다면 성공입니다! (이걸 사람이 읽는 게 아니라 프로메테우스가 읽습니다.)
3. 수집가와 화가 설치하기 (Docker Compose)
Prometheus와 Grafana를 서버에 직접 설치하면 복잡합니다. Docker를 쓰면 명령어 한 방에 끝납니다.
작성
프로젝트 루트나 서버의 적당한 곳에 파일을 만듭니다.
version: '3'
services:
prometheus:
image: prom/prometheus
container_name: prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml # 설정 파일 연결
ports:
- "9090:9090" # 프로메테우스 접속 포트
grafana:
image: grafana/grafana
container_name: grafana
ports:
- "3000:3000" # 그라파나 접속 포트
depends_on:
- prometheus
작성 (수집 설정)
같은 폴더에 만드세요. "어디서 데이터를 긁어올지" 알려주는 파일입니다.
scrape_configs:
- job_name: 'spring-boot-app'
metrics_path: '/actuator/prometheus'
scrape_interval: 5s # 5초마다 긁어와!
static_configs:
- targets: ['host.docker.internal:8080'] # 로컬 실행 시
# - targets: ['내-EC2-IP:8080'] # 서버 배포 시
실행!
docker-compose up -d
4. 그라파나 대시보드 꾸미기
이제 브라우저에서 http://localhost:3000 (서버라면 http://서버IP:3000)으로 접속합니다.
- 초기 ID/PW: admin / admin
① 데이터 소스 연결
- 왼쪽 메뉴 Configuration (톱니바퀴) -> Data Sources
- Add data source -> Prometheus 선택
- URL 입력:
http://prometheus:9090(도커 컨테이너 이름 사용) - 맨 아래 Save & Test 클릭 -> 초록색 성공 메시지 확인!
② 대시보드 가져오기 (Import) ★꿀팁
그래프를 하나하나 만들 필요 없습니다. 전 세계 고수들이 만들어둔 걸 가져다 씁시다.
- 왼쪽 메뉴 Create (+) -> Import
- Import via grafana.com 입력칸에
4701입력 후 Load 클릭
- 4701번은 'JVM (Micrometer)'라는 아주 유명한 스프링 부트용 대시보드입니다.
- Prometheus 데이터 소스를 선택하고 Import 클릭!
5. 결과: 이게 내 서버라고?
짜잔! 🎉
갑자기 화면에 CPU 사용량, 메모리(Heap) 상태, 초당 요청 수(RPS), 에러 발생률, 톰캣 쓰레드 상태 등이 실시간 그래프로 움직이기 시작합니다.
이제 여러분은:
- 트래픽이 몰릴 때: 그래프가 치솟는 걸 보며 희열을 느끼고,
- 에러가 날 때: 붉은색 그래프를 보며 빠르게 대응할 수 있습니다.
- 상사에게: "현재 서버 리소스 현황입니다."라며 멋진 링크를 보낼 수 있습니다.
[시리즈를 마치며] 개발자가 된다는 것
지금까지 총 20여 개의 포스팅을 통해 Spring Boot의 기초부터 JPA, 테스트, 배포, 그리고 모니터링까지 숨 가쁘게 달려왔습니다.
- "객체지향"이 무엇인지 고민했고 (DI/IoC)
- "데이터"를 안전하게 다루는 법을 배웠으며 (JPA, Transaction)
- "자동화"를 통해 게으름의 미학을 실천했고 (CI/CD)
- "안정성"을 위해 끊임없이 의심했습니다 (Test, Monitoring)
이 모든 과정을 따라오신 여러분은 이미 "혼자서 서비스를 만들고 운영할 수 있는 개발자"입니다.
기술은 계속 변하지만, "왜(Why) 이렇게 쓰는지" 원리를 고민했던 이 시간들이 여러분을 더 단단한 개발자로 만들어 줄 것입니다.
긴 시리즈를 함께해 주셔서 감사합니다. 여러분의 코딩이 언제나 Build Success이길 응원합니다! 🚀
- 끝 -
