Files
spring-boot-examples/docs/actuator/03_config.md
2025-04-08 19:56:24 +09:00

162 lines
3.4 KiB
Markdown

좋아, 이어서 **3부. 보안과 커스터마이징**을 작성해볼게. 액추에이터를 실무에 적용할 때 꼭 필요한 보안 설정과 사용자 정의 방법을 중심으로 정리할게.
---
## **3부. 보안과 커스터마이징**
---
### **12장. 액추에이터 엔드포인트 보안**
#### 기본 설정
Spring Security를 사용할 경우, 액추에이터 엔드포인트는 기본적으로 인증이 필요함.
#### `application.yml`에서 노출 대상 설정
```yaml
management:
endpoints:
web:
exposure:
include: health, info, metrics
```
#### WebSecurityConfigurer를 통한 제어
```java
@Configuration
public class ActuatorSecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/actuator/health", "/actuator/info").permitAll()
.requestMatchers("/actuator/**").hasRole("ADMIN")
.anyRequest().authenticated()
)
.httpBasic();
return http.build();
}
}
```
> 인증 필요 시 기본 사용자 정보는 `application.yml`에서 설정
```yaml
spring:
security:
user:
name: admin
password: admin123
```
---
### **13장. 액추에이터 엔드포인트 커스터마이징**
#### 엔드포인트 비활성화
```yaml
management:
endpoint:
metrics:
enabled: false
```
#### 엔드포인트 경로 변경
```yaml
management:
endpoints:
web:
base-path: /manage
```
> 결과: `/manage/health`, `/manage/info` 등의 경로로 변경됨
#### 관리 포트를 분리
```yaml
management:
server:
port: 8081
```
> `/actuator`는 8081 포트에서만 노출됨. 일반 API는 기존 8080에서 제공됨
---
### **14장. 사용자 정의 엔드포인트 만들기**
#### 기본 구조
```java
@Component
@Endpoint(id = "customstatus")
public class CustomStatusEndpoint {
@ReadOperation
public Map<String, Object> customStatus() {
return Map.of(
"service", "My Service",
"status", "Running",
"timestamp", Instant.now()
);
}
}
```
> `GET /actuator/customstatus` 호출 시 결과 반환
```json
{
"service": "My Service",
"status": "Running",
"timestamp": "2025-04-07T10:00:00Z"
}
```
#### WriteOperation 예시 (POST)
```java
@WriteOperation
public String updateSomething(@Selector String id, @Nullable String value) {
// 업데이트 처리
return "Updated " + id + " to " + value;
}
```
> POST `/actuator/customstatus/myconfig?value=test` 등으로 호출 가능
---
### **15장. 상태 분류 및 외부 연동 대응**
#### Health 상태 분류 예시
```yaml
management:
health:
status:
http-mapping:
DOWN: 503
OUT_OF_SERVICE: 503
UP: 200
UNKNOWN: 200
```
> Kubernetes, AWS 등 상태 확인을 위한 HTTP 상태 코드 제어 가능
---
### **요약**
- 액추에이터는 민감한 정보를 다루므로 보안 설정이 필수
- 엔드포인트는 개별적으로 비활성화하거나 커스터마이징 가능
- 사용자 정의 엔드포인트로 비즈니스 모니터링도 가능
- 상태 값은 외부 환경(K8s 등)에 맞게 분류할 수 있음
---
다음은 **4부. 운영 환경 통합**으로 Prometheus, Grafana, Spring Boot Admin 같은 외부 시스템과의 통합 내용을 다루면 좋아. 계속 이어서 써줄까?