좋아, 이어서 **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 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 같은 외부 시스템과의 통합 내용을 다루면 좋아. 계속 이어서 써줄까?