Spring

Spring Boot에서 코드 없이 health-check 구현하기

jjunhub 2025. 1. 19. 19:46

부제 : Spring Actuator로 health-check endpoint 구현하기

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 

상황

Load Balancer를 붙이면서, EC2(개발서버)로 30초에 한 번씩 살아있는지 요청을 보내기 시작한다. 이를 통해 서버가 건강한지 체크(Health Check)를 진행한다. ( 만약 서버가 건강하지 않다면, 새로운 인스턴스를 다시 띄우거나 하는 등의 조취를 취한다. )

서버 측에서는 이 Load Balancer로부터 요청을 받아줄 endpoint를 설정해야한다. 이를 health-check 엔드포인트라고 부른다.

방법

  1. /health-check 엔드포인트를 직접 구현하기
    -> 이 방법은 200 응답을 반환하는 엔드포인트를 추가로 구현하여 사용하는 것으로 매우 간단하다.
  2. Spring Boot Actuator
    -> 스프링에서 지원하는 상태 점검 의존성으로, 하나의 엔드포인트가 사용한 것뿐만 아니라 이와 연결되어있는 DB등 외부 인프라와의 상태까지도 한꺼번에 점검할 수 있다.

1. /health-check 엔드포인트를 직접 구현하기 (Not Bad)

@RestController
public class HealthCheckController {

	@GetMapping("/health-check")
	public String healthCheck() {
		return "Hi there!";
	}
}

이제 이 엔드포인트를 통해서 ALB에게 서버가 살아있는 지를 알릴 수 있다. 막상 프로젝트에서 해당 엔드포인트를 구현하자니, 어떠한 컨트롤러에 넣어야할 지에 대한 고민이 많이 된다. 이를 Controller를 직접 작성하지 않고, 구현할 수 있는 방법이 없을까하다가 주변에 조언을 구해보니 Spring Actuator 라이브러리에서 Health check를 위한 endpoint를 제공해준다고 하여 도입하게 되었다.

2. Spring Boot Actuator 사용하기

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

이렇게 의존성을 주입한 뒤에, 다음과 같이 설정을 바꿔준다.

management:
  endpoints:
    web:
      base-path: /
      path-mapping:
        health: /health-check

 

이렇게만 설정을 바꿔도 위 1번에서 Controller를 직접 작성하는 것과 동일한 효과를 얻을 수 있다.

이뿐만 아니라, 설정에 따라 단순 스프링 서버 뿐만 아니라 이와 연결되어 있는 외부 서비스들의 상태까지도 함께 점검이 가능하다.

결론

LB가 앞에 존재하는 경우, 서버 측에서는 필연적으로 health check를 위한 end-point를 구성해야하는데, 이러한 간단한 방법으로 구현할수 있음을 알게 되었다. 스프링 부트는 정말 커뮤니티가 활성화된 만큼 필요한 것들은 대부분 만들어져 있다는 생각을 오늘도 하게 된다.