스프링 부트 - 핵심 원리와 활용 : 액츄에이터

jkky98·2024년 11월 4일
0

Spring

목록 보기
68/77

프로덕션 준비 기능

애플리케이션을 실제 운영 단계(production level)에서 가동할 때에 기능이 적절히 돌아가는 것만큼 중요한 사항이 지속적인 모니터링이다. 애플리케이션이 현재 살아있는지, 로그가 잘 찍히고 있는지, 서버 하드웨어 리소스가 어느정도 부하로 이용되고 있는지 지속적으로 확인해야 한다. 이러한 비기능적 기능을 프로덕선 준비 기능이라고 한다.

스프링 부트의 Actuator는 위의 내용의 목적을 충족하는 프로덕션 준비 기능을 다음과 같이 매우 편리하게 이용할 수 있도록 한다.

//build.gradle
implementation 'org.springframework.boot:spring-boot-starter-actuator' // actuator 추가

액츄에이터 시작

Actuator를 gradle에 추가하고 gradle refresh를 해주면 http://localhost:8080/actuator 의 url 접근이 활성화된다. 액츄에이터는 다양한 기능을 제공하지만 꽤나 방대한 정보를 주기 때문에 필요한 정보들만 조회가능하도록 설정하기 위해 application.yml에 지정된 형식의 설정이 필요하다.

 management:
   endpoints:
     web:
       exposure:
		include: "*"

위와 같이 설정을 주게 된다면 web에서 actuator가 제공하는 모든 정보를 볼 수 있다.

management:
  info:
    java:
      enabled: true
    os:
      enabled: true
    env:
      enabled: true
  endpoint:
    shutdown:
      enabled: true
    health:
      show-details: always
  endpoints:
    web:
      exposure:
        include: "*"

위와 같이 endpoints가 아닌 endpoint에서 상세한 설정으로 세부 항목들에 대한 자세한 설정이 가능하다.

엔드포인트 설정

위의 예시에서 엔드포인트를 모두 띄워놓아보았는데 엔드포인트를 사용하기 위해서는 2가지 과정이 필요하다.

  1. 엔드포인트 활성화
  2. 엔드포인트 노출

엔드포인트 노출은 해당 엔드포인트의 내용을 어디서 볼지에 대한 결정이다.(JMX or HTTP)

노출에 앞서 엔드포인트들은 활성화가 되어있어야한다. 정리하면 사용할 엔드포인트들을 활성화하고 이를 보여줄 곳을 선택하는 순서이다.

 management:
   endpoints:
     web:
       exposure:
		include: "*"

이 yml설정에서는 web:을 통해 엔드포인트 노출에 대한 선택을 http(web) 방식으로 지정했다.

shutdown

엔드포인트중에 기본적으로 꺼져있는 유일한 엔드포인트로 shutdown이 존재한다. shutdown은 서버를 종료시키는 요청을 수행하며 이 요청은 POST로 하여금 http://localhost:8080/actuator/shutdown를 수행해야 한다.

요청만 보내면 서버가 다운되기 때문에 기본적으로 비활성화 되어있다.

shutdown을 켜기 위해서는 endpoint.shutdown.enabled를 true로 주어야 한다.

엔드포인트 세부설정

자주 사용하는 엔드포인트는 여러가지 존재하지만 2가지로 하여금 어떤 느낌으로 설정을 조작해서 액츄에이터를 이용하는지 알아보자.

헬스 정보

접근 경로: http://localhost:8080/actuator/health

기본 동작: {"status": "UP"}

헬스정보를 자세히 보기 위해 endpoint.health.show-details: always를 설정파일에 주어 애플리케이션 health에 대한 자세한 정보를 볼 수 있고 다음과 같이 보여진다.

status이외에 db에 대한 정보 disk공간에 대한 정보 ping에 대한 정보를 주는 것을 보여준다. 이때 db, diskSpace, ping은 헬스 컴포넌트에 해당하고 이중 하나라도 "DOWN"된다면 어플리케이션의 status는 "DOWN"으로 바뀐다.

Java, OS 정보

어떤 자바 버전이 사용되었는지, OS 정보들을 보여주기 위해 다음과 같은 설정을 줄 수 있다.

management:
  info:
    java:
      enabled: true
    os:
      enabled: true
    env:
      enabled: true

info이하에 필요한 것들을 작성해서 세부조회를 켤 수 있다. info만 특이하게도 endpoint아래에 무언가를 입력하는 것이 아닌 management: 아래에 endpoint와 같은 레벨로 작성한다.

보안

액츄에이터를 사용하는 경로를 서비스 이용자들도 접근이 가능할 경우 당연히 보안적으로 심각한 문제가 발생할 수 있다.

포트 변경

만약 유저들이 애플리케이션을 8080포트로 접근한다면 8080포트 이외의 포트들은 모두 내부망에서만 접근이 가능하도록 셋팅하고 액츄에이터를 타 포트로 옮겨놓으면 8080에서는 접근이 불가능하다.

profile
자바집사의 거북이 수련법

0개의 댓글