3.4 KiB
3.4 KiB
좋아, 이어서 3부. 보안과 커스터마이징을 작성해볼게. 액추에이터를 실무에 적용할 때 꼭 필요한 보안 설정과 사용자 정의 방법을 중심으로 정리할게.
3부. 보안과 커스터마이징
12장. 액추에이터 엔드포인트 보안
기본 설정
Spring Security를 사용할 경우, 액추에이터 엔드포인트는 기본적으로 인증이 필요함.
application.yml에서 노출 대상 설정
management:
endpoints:
web:
exposure:
include: health, info, metrics
WebSecurityConfigurer를 통한 제어
@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에서 설정
spring:
security:
user:
name: admin
password: admin123
13장. 액추에이터 엔드포인트 커스터마이징
엔드포인트 비활성화
management:
endpoint:
metrics:
enabled: false
엔드포인트 경로 변경
management:
endpoints:
web:
base-path: /manage
결과:
/manage/health,/manage/info등의 경로로 변경됨
관리 포트를 분리
management:
server:
port: 8081
/actuator는 8081 포트에서만 노출됨. 일반 API는 기존 8080에서 제공됨
14장. 사용자 정의 엔드포인트 만들기
기본 구조
@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호출 시 결과 반환
{
"service": "My Service",
"status": "Running",
"timestamp": "2025-04-07T10:00:00Z"
}
WriteOperation 예시 (POST)
@WriteOperation
public String updateSomething(@Selector String id, @Nullable String value) {
// 업데이트 처리
return "Updated " + id + " to " + value;
}
POST
/actuator/customstatus/myconfig?value=test등으로 호출 가능
15장. 상태 분류 및 외부 연동 대응
Health 상태 분류 예시
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 같은 외부 시스템과의 통합 내용을 다루면 좋아. 계속 이어서 써줄까?