Spring Boot Actuator란 무엇인가

2024. 4. 27. 19:38Spring Boot/Common

반응형

들어가며

Spring Boot Actuator는 Spring Boot 어플리케이션의 운영 관리 도구이다.

제공되는 주요 기능은 다음과 같다.

  • Health Check : 어플리케이션의 실행 상태와 이슈 여부 체크
  • Metrics Endpoint : 각 엔드포인트별 요청에 대한 CPU나 메모리 자원 사용, 요청 수 등 성능 분석
  • Info Endpoint : 버전 번호나 빌드 번호와 같은 어플리케이션 정보 제공
  • Configuration Endpoint : 어플리케이션의 설정 정보 제공

Spring Actuator로 RESTful Web Service 구현하기

가이드 분서를 따라 간단한 Hello World 어플리케이션에 Spring Actuator를 주입해볼것이다.

Dependency - build.gradle

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.boot:spring-boot-starter-web'
}

spring-boot-starter-actuator가 주입되었으므로 /actuator/health 엔드포인트에 요청을 보낼 수 있다.

$ curl localhost:8080/actuator/health
{"status":"UP"}

Representation - Greeting.java

public class Greeting {
    private final long id;
    private final String content;

    public Greeting(final long id, final String content) {
        this.id = id;
        this.content = content;
    }

    public long getId() {
        return id;
    }

    public String getContent() {
        return content;
    }
}

Representation - Resource Controller

@Controller
public class HelloWorldController {
    private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();

    @GetMapping("/hello-world")
    @ResponseBody
    public Greeting helloWorld(@RequestParam(value = "name", defaultValue = "World") String name) {
        return new Greeting(counter.incrementAndGet(), String.format(template, name));
    }
}

/hello-world 에 대한 엔드포인트를 지정하였으므로 호출하면 응답을 받을 수 있다.

$ curl localhost:8080/hello-world
{"id":1,"content":"Hello, World!"}

서버 포트와 Management 포트 분리하기 - applicaion.yaml

server:
  port = 9000

management:
  server:
    port: 9001
    address: 127.0.0.1

포트를 9000번으로 변경하였으므로 더이상 8080 포트로의 요청은 응받을 받을 수 없고, actuator 엔드포인트는 9001번 포트에서 응답을 받을 수 있다.

$ curl localhost:8080/hello-world
curl: (7) Failed to connect to localhost port 8080 after 0 ms: Couldn't connect to server
$ curl localhost:9000/hello-world
{"id":1,"content":"Hello, World!"}
$ curl localhost:9001/actuator/health
{"status":"UP"}%                                 

Resources

반응형