2025-04-08T19:56:24
This commit is contained in:
146
docs/actuator/05_ex.md
Normal file
146
docs/actuator/05_ex.md
Normal file
@@ -0,0 +1,146 @@
|
||||
좋아, 마지막 **5부. 실전 활용과 사례 연구**를 작성해볼게. 이 파트는 실무에서 액추에이터를 어떻게 문제 해결, 무중단 배포, 장애 대응에 활용할 수 있는지를 중심으로 구성할게.
|
||||
|
||||
---
|
||||
|
||||
## **5부. 실전 활용과 사례 연구**
|
||||
|
||||
---
|
||||
|
||||
### **20장. 액추에이터 기반 장애 진단**
|
||||
|
||||
#### 메모리 부족 및 GC 감지
|
||||
|
||||
- `/actuator/metrics/jvm.memory.used`, `/jvm.gc.pause` 활용
|
||||
- 메모리 사용량이 한계치 근접 시 Slack, 이메일 알림 연동 가능
|
||||
|
||||
#### 예시: 알림 트리거 (Spring + Slack Webhook)
|
||||
|
||||
```java
|
||||
if (memoryUsed > threshold) {
|
||||
slackService.notify("Memory usage high: " + memoryUsed);
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### 슬로우 요청 감지
|
||||
|
||||
- `/actuator/metrics/http.server.requests`
|
||||
- `max`, `mean`, `count`, `percentile` 등 분석 가능
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "http.server.requests",
|
||||
"measurements": [
|
||||
{ "statistic": "count", "value": 1500 },
|
||||
{ "statistic": "max", "value": 5.1 },
|
||||
{ "statistic": "mean", "value": 0.4 }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
> 평균 응답 시간이 급증하면 서비스 병목 가능성 있음
|
||||
|
||||
---
|
||||
|
||||
### **21장. 헬스 체크 기반 무중단 배포 전략**
|
||||
|
||||
#### Blue-Green / Rolling 배포
|
||||
|
||||
- `readiness` 체크를 통해 트래픽 분산
|
||||
- 서비스 준비가 되지 않은 인스턴스는 요청을 받지 않음
|
||||
|
||||
#### Kubernetes 예시
|
||||
|
||||
```yaml
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /actuator/health/readiness
|
||||
port: 8080
|
||||
```
|
||||
|
||||
> readiness 상태가 `UP`이 될 때까지만 트래픽 전달
|
||||
|
||||
---
|
||||
|
||||
#### Custom readiness indicator
|
||||
|
||||
```java
|
||||
@Component("readiness")
|
||||
public class CustomReadinessIndicator implements HealthIndicator {
|
||||
public Health health() {
|
||||
if (dbIsReady()) {
|
||||
return Health.up().build();
|
||||
}
|
||||
return Health.down().withDetail("error", "DB not connected").build();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### **22장. 실무 프로젝트 적용 사례**
|
||||
|
||||
#### 사례 1. 마이크로서비스 아키텍처 모니터링
|
||||
|
||||
- 수십 개의 서비스 각각 `/actuator/health`, `/metrics` 제공
|
||||
- Prometheus가 모든 서비스 상태 및 메트릭 수집
|
||||
- Grafana에서 전체 시스템 상태 시각화
|
||||
|
||||
#### 사례 2. 장애 조기 감지 시스템 구축
|
||||
|
||||
- 액추에이터 메트릭 + 슬랙 연동
|
||||
- 알림 예시:
|
||||
- DB 커넥션 풀 소진 경고
|
||||
- 평균 응답 시간 증가
|
||||
- 디스크 공간 부족
|
||||
|
||||
#### 사례 3. 운영 리소스 최적화
|
||||
|
||||
- `/metrics` 기반으로 JVM Heap 사이즈 분석
|
||||
- GC 튜닝 전후 성능 비교
|
||||
- 특정 컨트롤러 호출 수 분석하여 리팩토링 대상 선정
|
||||
|
||||
---
|
||||
|
||||
### **23장. 운영 자동화와 연동 사례**
|
||||
|
||||
#### Jenkins + 액추에이터 연동
|
||||
|
||||
- 배포 후 `/actuator/health`로 상태 확인 후 다음 스텝 진행
|
||||
- 실패 시 롤백 스크립트 실행
|
||||
|
||||
#### 예시
|
||||
|
||||
```groovy
|
||||
stage('Health Check') {
|
||||
steps {
|
||||
script {
|
||||
def status = sh(script: 'curl -s http://app:8080/actuator/health | jq -r .status', returnStdout: true).trim()
|
||||
if (status != 'UP') {
|
||||
error("App is not healthy")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### **요약**
|
||||
|
||||
- 액추에이터는 단순한 상태 확인 도구를 넘어, 장애 진단, 성능 분석, 배포 전략의 핵심 역할을 한다
|
||||
- 실시간 모니터링과 연동하면 복잡한 운영 환경에서도 안정성을 확보할 수 있다
|
||||
- 마이크로서비스, 클라우드, CI/CD 파이프라인 등 다양한 환경에서 유용하게 쓰인다
|
||||
|
||||
---
|
||||
|
||||
### **부록**
|
||||
|
||||
- A. 주요 설정 정리표
|
||||
- B. Micrometer 메트릭 이름과 설명 목록
|
||||
- C. 에러 사례별 Trouble Shooting 가이드
|
||||
|
||||
---
|
||||
|
||||
이걸로 **스프링 부트 액추에이터 실전 가이드**의 전체 구성은 완성이야. 필요하다면 각 부에 대해 더 자세한 세부 목차나 코드 중심 실습 내용도 추가할 수 있어. 출간용 원고로 다듬을 계획이야?
|
||||
Reference in New Issue
Block a user