클라우드

LivenessProbe와 ReadinessProbe 완전 이해하기

Jinwookoh 2025. 5. 6. 23:34

 

쿠버네티스를 사용하는 개발자라면 LivenessProbe와 ReadinessProbe는 반드시 이해하고 있어야 할 개념입니다. 이 두 가지는 컨테이너의 상태를 모니터링하고, 장애 대응과 트래픽 분산을 보다 안정적으로 하기 위한 핵심 기능입니다. 하지만 그 목적과 작동 방식이 유사해 보이기 때문에 처음에는 헷갈리기 쉽습니다. 이번 포스팅에서는 LivenessProbe와 ReadinessProbe의 차이점, 설정 방법, 실무에서의 활용 전략까지 자세히 알아보겠습니다.


1. LivenessProbe란?

LivenessProbe는 컨테이너가 살아 있는지(live) 여부를 판단합니다. 즉, 컨테이너가 동작은 하고 있지만 내부적으로 문제가 있어 정상적인 작업을 수행하지 못하고 있다면, 쿠버네티스는 이를 감지해 컨테이너를 자동으로 재시작합니다.

✅ 예시

웹 애플리케이션이 무한 루프에 빠져 응답은 하지 않지만 프로세스 자체는 죽지 않은 상태라면, LivenessProbe가 이를 감지하고 재시작함으로써 서비스 장애를 빠르게 복구할 수 있습니다.

✅ 설정 예시

livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 10
  periodSeconds: 5
  failureThreshold: 3

2. ReadinessProbe란?

ReadinessProbe는 컨테이너가 트래픽을 받을 준비가 되었는지(readiness) 를 확인합니다. 만약 애플리케이션이 부팅 중이거나, 의존하는 외부 서비스(DB 등)가 아직 준비되지 않았다면 쿠버네티스는 해당 컨테이너에 트래픽을 전달하지 않습니다.

✅ 예시

Spring Boot 애플리케이션이 실행되었지만 아직 DB 연결이 완료되지 않았다면, ReadinessProbe가 준비되지 않은 상태로 판단하고, 로드밸런서에서 트래픽을 차단합니다.

✅ 설정 예시

readinessProbe:
  httpGet:
    path: /ready
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 5
  failureThreshold: 3

3. 차이점 비교

항목 LivenessProbe ReadinessProbe

목적 살아있는지 판단 트래픽을 받을 준비가 되었는지 판단
실패 시 동작 컨테이너 재시작 트래픽 라우팅 대상에서 제외
영향 Pod 재생성 트리거 서비스 연결 여부에만 영향
사용 시기 장기 실행 중 오류 탐지 초기 기동 지연, 외부 의존 대기

4. 주의할 점 및 베스트 프랙티스

✅ initialDelaySeconds는 반드시 설정하자

  • 컨테이너가 기동되자마자 Probe가 실행되면 false-negative(오탐)으로 인해 재시작이 반복될 수 있습니다.

✅ failureThreshold와 periodSeconds 조합으로 민감도 조절

  • 너무 민감하게 설정하면 일시적 장애에도 불필요한 재시작이 발생합니다.
  • 너무 느리면 실제 장애 감지가 늦어질 수 있습니다.

✅ 프로브 로직은 별도 엔드포인트로 분리

  • /healthz나 /ready 같은 경량 엔드포인트를 만들어, 내부 로직과 분리된 안정적인 체크가 가능하도록 구성하세요.

✅ ReadinessProbe 없이 배포 시 주의

  • 준비되지 않은 Pod에도 트래픽이 들어와 장애가 확산될 수 있습니다. Canary 배포나 롤링 업데이트 시 반드시 설정하세요.

5. 실무 적용 예시: Spring Boot에서의 헬스 체크

Spring Boot에서는 Actuator를 이용하면 헬스 체크 엔드포인트를 쉽게 구성할 수 있습니다.

management:
  endpoints:
    web:
      exposure:
        include: health, readiness
  endpoint:
    health:
      show-details: always

그리고 /actuator/health 또는 /actuator/readiness를 Probe 경로로 지정하면 됩니다.


결론: 두 가지는 함께 써야 완성됩니다

  • LivenessProbe는 자체 복구(self-healing) 를 위한 장치입니다.
  • ReadinessProbe는 트래픽 제어를 통한 안정성 확보 기능입니다.

컨테이너가 제대로 동작하는지 감시하고, 준비가 된 상태에서만 트래픽을 허용함으로써 쿠버네티스 환경에서의 장애를 최소화할 수 있습니다. 두 프로브는 함께 설정할 때 가장 큰 효과를 발휘하므로, 프로덕션 환경이라면 반드시 두 개를 모두 구성해야 합니다.