Post

Jhipster Docker 개요

Jhipster Docker 개요

Docker 기본 구성 요소와 역할

  • app.yml: 애플리케이션 컨테이너(snuheras)와 DB(PostgreSQL)를 함께 띄우는 컴포즈 파일
    • 앱이 :8080을 외부로 노출하고, DB는 :5432로 대기
    • 앱은 Spring Actuator를 통해 /management/prometheus 엔드포인트로 메트릭을 노출
  • monitoring.yml: 모니터링 스택(Prometheus + Grafana)을 띄우는 컴포즈 파일
    • Prometheus: 정해진 타깃(애플리케이션)의 메트릭 엔드포인트를 주기적으로 “Pull” 방식으로 수집
    • Grafana: Prometheus를 데이터 소스로 삼아 대시보드 시각화
  • prometheus/prometheus.yml: Prometheus가 스크레이핑할 대상 설정
  • grafana/provisioning/datasources/datasource.yml: Grafana가 접속할 데이터 소스 설정
  • grafana/provisioning/dashboards/*: JVM/애플리케이션용 대시보드 자동 프로비저닝
  • 선택 요소
    • zipkin.yml: 분산 추적(Tracing) 수집기
    • sonar.yml: 코드 품질 분석기(SonarQube)
    • jhipster-control-center.yml: JHipster Control Center(서비스 헬스/등록 관제)

포트 매핑

서비스포트접근 URL용도
애플리케이션8080http://localhost:8080메인 애플리케이션
PostgreSQL5432localhost:5432데이터베이스
Prometheus9090http://localhost:9090메트릭 수집기
Grafana3000http://localhost:3000대시보드 시각화
SonarQube9001http://localhost:9001코드 품질 분석기
Zipkin9411http://localhost:9411분산 추적
JHipster Control Center7419http://localhost:7419마이크로서비스 관리

도커 로컬 환경 구성

1
2
3
4
5
docker-compose -f src/main/docker/app.yml up  # 애플리케이션 + 데이터베이스 실행
docker-compose -f src/main/docker/monitoring.yml up  # 모니터링 스택 실행
docker-compose -f src/main/docker/sonar.yml up  # 코드 품질 분석 실행
docker-compose -f src/main/docker/zipkin.yml up  # 분산 추적 실행
docker-compose -f src/main/docker/jhipster-control-center.yml up  # JHipster Control Center 실행

통신 흐름(데이터 흐름)

1
2
3
4
5
[사용자 브라우저] ─HTTP─> [Grafana:3000] ─HTTP(API)─> [Prometheus:9090]
                                            │
                                            └─(Pull)─> [앱:8080/management/prometheus]
[앱:8080] ─JDBC─> [PostgreSQL:5432]
(선택) [앱] ─HTTP─> [Zipkin:9411]
  • 왜 Pull 모델(Prometheus)? 에이전트를 각 서비스에 넣는 Push 모델보다 운영 제어가 단순하고, 타깃 추가/제거가 쉬움.
  • 왜 Micrometer+Prometheus? Spring 진영 표준 조합으로 계측 라이브러리(Micrometer)와 시계열 저장/질의 엔진(Prometheus)이 분리되어 유연함.
  • 왜 Grafana? PromQL 기반 시계열을 대시보드/알림으로 빠르게 시각화 가능, 팀 공용 템플릿화 용이.

왜 이렇게 나눴나(설계 의도)

  • 책임 분리: 앱은 비즈니스 로직과 메트릭 노출만 담당, 수집/보관/시각화는 외부 시스템이 담당
  • 독립적 확장: 트래픽 증가 시 앱은 수평 확장, 메트릭 수집량 증가 시 Prometheus/Grafana를 별도로 스케일
  • 이식성: 로컬/스테이징/운영에서 동일한 Docker 컴포즈 조합을 재사용

네트워킹 관점 포인트

  • 포트 매핑: app.yml이 8080, postgres 5432; monitoring.yml이 9090(Prometheus), 3000(Grafana)를 호스트로 매핑
  • 타깃 주소 지정: Prometheus가 “컨테이너 네트워크 관점”에서 앱을 어떻게 볼지 설정 필요
    • 로컬 맥/윈도에서는 localhost 대신 host.docker.internal을 쓰는 경우가 많음
    • 같은 Compose 네트워크에 둘 경우 서비스명(snuheras-app:8080)으로 접근하기도 함
  • 보안/격리: 개발 편의를 위해 열린 포트/host 네트워크를 쓰지만, 운영에선 네트워크/인증/SSL을 별도 강화

운영에서의 의미

  • 메트릭: 지연시간, 에러율, 스레드/GC, DB 커넥션 풀, 커스텀 비즈니스 카운터 등 추적
  • 대시보드/경보: SLO/SLA, 장애 징후 조기 탐지, 추세 분석
  • 추적(선택): Zipkin으로 요청 단위 지연 구간 파악
  • 품질(선택): Sonar로 코드 품질/취약점 분석

sonarqube

1
2
3
./gradlew test jacocoTestReport
./gradlew sonarqube -Dsonar.login=<token>

This post is licensed under CC BY 4.0 by the author.