본문 바로가기

Study Information Technology

스프링 부트 액츄에이터를 이용한 헬스 체크 엔드포인트 생성

728x90
반응형

스프링 부트 액츄에이터를 이용한 헬스 체크 엔드포인트 생성

Overview

스프링 부트 액츄에이터(Spring Boot Actuator)는 애플리케이션의 상태를 모니터링하고 관리하는 데 유용한 기능을 제공합니다. 특히 헬스 체크(Health Check) 엔드포인트를 통해 애플리케이션의 상태를 외부에서 쉽게 확인할 수 있습니다. 이 기능은 애플리케이션의 신뢰성을 유지하는 데 중요한 역할을 하며, 모니터링 도구와 통합하여 실시간으로 시스템의 건강 상태를 파악할 수 있습니다. 이번 글에서는 스프링 부트 액츄에이터를 사용하여 헬스 체크 엔드포인트를 생성하는 방법을 상세히 설명하겠습니다.

1. 스프링 부트 액츄에이터란?

스프링 부트 액츄에이터는 애플리케이션의 상태, 메트릭, 환경 정보를 제공하는 다양한 엔드포인트를 포함하고 있는 모듈입니다. 이를 통해 애플리케이션의 성능 및 상태를 실시간으로 모니터링할 수 있으며, 다음과 같은 유용한 기능을 제공합니다:

  • 헬스 체크(Health Check): 애플리케이션의 건강 상태를 확인할 수 있는 엔드포인트.
  • 메트릭(Metrics): 애플리케이션의 성능 지표를 제공.
  • 환경 정보(Environment): 애플리케이션이 실행되고 있는 환경의 정보 제공.

2. 헬스 체크 엔드포인트 설정

스프링 부트 프로젝트를 생성한 후 액츄에이터를 설정하는 과정은 다음과 같습니다.

2.1. 의존성 추가

먼저, pom.xml 파일에 스프링 부트 액츄에이터 의존성을 추가해야 합니다. 다음 코드를 <dependencies> 태그 안에 삽입합니다.

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

이 외에도, 스프링 부트 버전과 호환되는 의존성을 사용해야 합니다. 최신 버전을 사용하는 것이 좋습니다.

2.2. 헬스 체크 엔드포인트 활성화

스프링 부트 액츄에이터는 기본적으로 일부 엔드포인트가 비활성화되어 있습니다. application.properties 파일에 다음 설정을 추가하여 헬스 체크 엔드포인트를 활성화할 수 있습니다.

management.endpoints.web.exposure.include=health
management.endpoint.health.show-details=always

이 설정은 헬스 체크 엔드포인트를 외부에서 접근할 수 있도록 하고, 헬스 체크의 세부 정보를 항상 보여주도록 설정합니다.

3. 헬스 체크 엔드포인트 사용

스프링 부트 애플리케이션을 실행한 후, 헬스 체크 엔드포인트는 기본적으로 /actuator/health 경로에서 접근할 수 있습니다. 브라우저나 Postman과 같은 HTTP 클라이언트를 통해 다음과 같이 요청을 보내면 됩니다.

GET http://localhost:8080/actuator/health

정상적으로 설정이 완료되었다면, 다음과 같은 JSON 형식의 응답을 받을 수 있습니다.

{
  "status": "UP"
}

이 응답은 애플리케이션이 정상적으로 작동하고 있음을 의미합니다. 만약 문제가 발생했다면, "status": "DOWN"과 같은 응답을 받을 수 있으며, 문제가 발생한 원인에 대한 추가 정보를 제공받을 수 있습니다.

4. 헬스 체크 커스터마이징

스프링 부트 액츄에이터의 헬스 체크는 기본적으로 다양한 컴포넌트(데이터베이스, 메시지 큐 등)의 상태를 체크할 수 있도록 설정되어 있습니다. 필요에 따라 커스터마이징도 가능합니다.

4.1. 커스텀 헬스 인디케이터 추가

커스텀 헬스 인디케이터를 추가하면 특정 서비스나 컴포넌트의 상태를 체크할 수 있습니다. 예를 들어, 특정 API의 상태를 체크하는 헬스 인디케이터를 만들어 보겠습니다.

import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

@Component
public class CustomHealthIndicator implements HealthIndicator {

private final RestTemplate restTemplate = new RestTemplate();

@Override
public Health health() {
try {
String apiUrl = "https://api.example.com/health";
String response = restTemplate.getForObject(apiUrl, String.class);
if ("OK".equals(response)) {
return Health.up().build();
} else {
return Health.down().withDetail("Error", response).build();
}
} catch (Exception e) {
return Health.down().withDetail("Error", e.getMessage()).build();
}
}
}

이 코드는 특정 API에 대한 헬스 체크를 수행하여, 응답이 "OK"일 경우 애플리케이션이 정상임을 나타내고, 그렇지 않을 경우 에러 정보를 포함하여 상태를 "DOWN"으로 반환합니다.

5. 에러 처리 및 디버깅

헬스 체크 엔드포인트에서 에러가 발생할 수 있으며, 이 경우 적절한 에러 메시지를 반환해야 합니다. 예를 들어, 외부 API에 접근할 때 네트워크 문제나 API 서버의 문제로 인해 연결이 실패할 수 있습니다. 이때 발생하는 에러 메시지와 함께 적절한 상태를 반환하도록 설정할 수 있습니다.

예를 들어, 위의 커스텀 헬스 인디케이터에서 API 호출이 실패했을 때, Health.down()을 사용하여 애플리케이션의 상태를 "DOWN"으로 설정하고, 에러 메시지를 추가합니다.

} catch (Exception e) {
return Health.down().withDetail("Error", "Failed to reach external API: " + e.getMessage()).build();
}

이런 방식으로 애플리케이션의 상태를 명확하게 알 수 있도록 하는 것이 중요합니다.

6. 참고 문서

스프링 부트 액츄에이터를 활용하여 헬스 체크 엔드포인트를 설정하면, 애플리케이션의 안정성을 높이고 문제 발생 시 빠르게 대처할 수 있는 강력한 도구가 됩니다.

반응형