어제 오늘 내일

[Spring Boot] "서버가 죽었는지 살았는지 어떻게 알죠?" 프로메테우스 & 그라파나로 간지나는 대시보드 만들기 본문

IT/SpringBoot

[Spring Boot] "서버가 죽었는지 살았는지 어떻게 알죠?" 프로메테우스 & 그라파나로 간지나는 대시보드 만들기

hi.anna 2026. 3. 20. 00:16

 
서버 개발자의 불안감은 배포가 끝난 뒤부터 시작됩니다.
"지금 잘 돌아가고 있나?", "메모리가 부족하진 않나?", "에러가 많이 나진 않나?"

이걸 확인하려고 매번 터미널 들어가서 로그(tail -f)를 볼 수는 없죠. 오늘은 데이터 수집(Prometheus)시각화(Grafana)의 끝판왕 도구들을 사용해, 내 서버의 상태를 한눈에(Dashboard) 보는 법을 알려드립니다.


1. 모니터링 3대장 구조 이해하기

이 시스템은 3단계로 동작합니다.

  1. Spring Boot Actuator: "내 상태 정보(CPU, 메모리, 요청 수)를 알려줄게!" (데이터 제공자)
  2. Prometheus (프로메테우스): "내가 주기적으로 가서 그 정보를 긁어올게!" (데이터 수집가 - Time Series DB)
  3. 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

① 데이터 소스 연결

  1. 왼쪽 메뉴 Configuration (톱니바퀴) -> Data Sources
  2. Add data source -> Prometheus 선택
  3. URL 입력: http://prometheus:9090 (도커 컨테이너 이름 사용)
  4. 맨 아래 Save & Test 클릭 -> 초록색 성공 메시지 확인!

② 대시보드 가져오기 (Import) ★꿀팁

그래프를 하나하나 만들 필요 없습니다. 전 세계 고수들이 만들어둔 걸 가져다 씁시다.

  1. 왼쪽 메뉴 Create (+) -> Import
  2. Import via grafana.com 입력칸에 4701 입력 후 Load 클릭
  • 4701번은 'JVM (Micrometer)'라는 아주 유명한 스프링 부트용 대시보드입니다.
  1. Prometheus 데이터 소스를 선택하고 Import 클릭!

5. 결과: 이게 내 서버라고?

짜잔! 🎉
갑자기 화면에 CPU 사용량, 메모리(Heap) 상태, 초당 요청 수(RPS), 에러 발생률, 톰캣 쓰레드 상태 등이 실시간 그래프로 움직이기 시작합니다.
이제 여러분은:

  1. 트래픽이 몰릴 때: 그래프가 치솟는 걸 보며 희열을 느끼고,
  2. 에러가 날 때: 붉은색 그래프를 보며 빠르게 대응할 수 있습니다.
  3. 상사에게: "현재 서버 리소스 현황입니다."라며 멋진 링크를 보낼 수 있습니다.

[시리즈를 마치며] 개발자가 된다는 것

지금까지 총 20여 개의 포스팅을 통해 Spring Boot의 기초부터 JPA, 테스트, 배포, 그리고 모니터링까지 숨 가쁘게 달려왔습니다.

  • "객체지향"이 무엇인지 고민했고 (DI/IoC)
  • "데이터"를 안전하게 다루는 법을 배웠으며 (JPA, Transaction)
  • "자동화"를 통해 게으름의 미학을 실천했고 (CI/CD)
  • "안정성"을 위해 끊임없이 의심했습니다 (Test, Monitoring)

이 모든 과정을 따라오신 여러분은 이미 "혼자서 서비스를 만들고 운영할 수 있는 개발자"입니다.
기술은 계속 변하지만, "왜(Why) 이렇게 쓰는지" 원리를 고민했던 이 시간들이 여러분을 더 단단한 개발자로 만들어 줄 것입니다.

긴 시리즈를 함께해 주셔서 감사합니다. 여러분의 코딩이 언제나 Build Success이길 응원합니다! 🚀

- 끝 -
 
 

반응형
Comments