[Spring] 액추에이터에 커스텀 기능 만들기

WOOK JONG KIM·2022년 11월 8일
0
post-thumbnail
post-custom-banner

액추에이터는 개발자의 요구사항에 맞춘 커스텀 기능 설정도 제공

커스텀 방법

  1. 기존 기능에 내용을 추가하는 방식
  2. 새로운 엔드 포인트 개발하는 방식

정보 제공 인터페이스의 구현체 생성

앞서 한 방법처럼 application.properties 파일에 내용을 추가하는 것은 많은 내용을 관리할땐 좋지 않음

커스텀 기능 설정 시엔 별도의 구현체 클래스를 작성해서 내용을 추가하는 방법이 많이 활용 됨

액추에이터에서는 InfoContributor 인터페이스 제공

@Component
public class CustomInfoContributor implements InfoContributor {
    @Override
    public void contribute(Builder builder) {
        Map<String, Object> content = new HashMap<>();
        content.put("code-info", "InfoContributor 구현체에서 정의한 정보입니다");
        builder.withDetail("custom-info-contributor", content);
    }
}

구현체로 설정 후 메서드를 오버라이드 하면 기존 앤드포인트 뒤에 넣고자 하는 내용이 추가 된 것을 볼 수 있다


커스텀 엔드 포인트 생성

@Endpoint 어노테이션으로 빈에 추가된 객체들은 @ReadOperation, @WriteOperation, @DeleteOpeartion을 통해 커스텀 엔드포인트 노출 가능

애플리케이션에 메모 기록을 남길 수 있는 엔드 포인트 생성

@Component
@Endpoint(id = "note")
public class NoteEndPoint {
    
    private Map<String, Object> noteContent = new HashMap<>();
    
    @ReadOperation
    public Map<String, Object> getNote(){
        return noteContent;
    }
    
    @WriteOperation
    public Map<String, Object> writeNote(String key, Object value){
        noteContent.put(key,value);
        return noteContent;
    }
    
    @DeleteOperation
    public Map<String, Object> deleteNote(String key){
        noteContent.remove(key);
        return noteContent;
    }
    
}

@EndPoint 선언하면 액추에이터에 엔드포인트로 자동으로 등록되며 id 속성값으로 경로 정의 가능

@ReadOperation은 HTTP GET 요청에 반응하는 메서드

http://localhost:8080/actuator/note

처음엔 내용을 넣지않아 JSON 형태의 빈 값이 표현 됨

@WriteOpearation은 POST 요청, @DeleteOperation은 DELETE 메서드를 요청함
-> 이를 통해 앤드포인트내 키,값 형태로 입력할 수 있고 제거할수도 있다

profile
Journey for Backend Developer
post-custom-banner

0개의 댓글