[Spring Boot] Actuator

JUJU·2024년 5월 13일
0

Spring Boot

목록 보기
6/13
본 포스트는 김영한 개발자님의 스프링 부트 강의를 듣고 정리한 것입니다.
※ 코드는 강의에서 사용된 것과 다릅니다.
jaewon-ju Github Address

✏️ 프로덕션 운영

애플리케이션을 개발할 때, 기능 요구사항만을 개발하는 것은 아니다.
개발자는 서비스에 문제가 없는지 모니터링 해야하고, 운영에 필요한 요소들을 포함시켜야 한다.

다음은 운영에 필요한 기능들이다.

  • 지표(metric)
  • 추적(trace)
  • 감사(auditing)
  • 모니터링

Spring Boot가 지원하는 Actuator는 위와 같은 기능들을 편리하게 사용할 수 있도록 도와준다.




✏️ Actuator

우선, Actuator를 사용하기 위해서는 라이브러리를 추가해야 한다.

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

라이브러리를 추가한 뒤에, 웹 애플리케이션을 실행한다.
http://localhost:8080/actuator 에 접속하면 Actuator 기능을 사용할 수 있다.


Actuator의 기능을 EndPoint라고 부르며, 종류가 매우 다양하다.
그 중 중요한 몇가지를 살펴보자.

엔드포인트기능
beans등록된 빈을 모두 보여준다.
configprops@ConfigurationProperties 를 보여준다.
envEnvironment 정보를 보여준다.
health애플리케이션 헬스 정보를 보여준다.
httpexchangesHTTP 호출 응답 정보를 보여준다.
HttpExchangeRepository를 구현한 빈을 별도로 등록해야 한다.
info애플리케이션 정보를 보여준다.
loggers애플리케이션의 logger 설정을 보여준다. 변경도 가능하다!
metrics애플리케이션의 메트릭 정보를 보여준다.
mappings@RequestMapping 정보를 보여준다.
shutdown애플리케이션을 종료한다.
비활성화가 Default이다.

EndPoint를 사용하기 위해서는, http://localhost:8080/actuator/{Endpoint} 로 접속하면 된다.
ex) http://localhost:8080/actuator/beans




✏️ EndPoint 설정

기능(EndPoint)을 사용하기 위해선, 활성화노출이 필요하다.

  • EndPoint 활성화
    : 해당 기능을 사용할지 말지 on, off를 결정하는 것

  • EndPoint 노출
    : 활성화된 EndPoint를 HTTP에 노출할지, JMX에 노출할지 선택하는 것


■ 활성화

shutdown을 제외한 대부분의 EndPoint는 기본으로 활성화되어 있다.
EndPoint를 활성화하기 위해서는 application.yml에 다음과 같이 작성하면 된다.

management:
  endpoint:
    shutdown:
      enabled: true

■ 노출

EndPoint를 활성화하기 위해서는 application.yml에 다음과 같이 작성하면 된다.

management:
  endpoints:
    web:
      exposure:
        include: "health,info"

web에 health, info EndPoint를 노출시킨다.

모든 EndPoint를 노출시키기 위해서는 와일드카드 "*"를 사용하면 된다.




✏️ EndPoint 설명

■ health

  • 애플리케이션이 요청에 응답을 할 수 있는지 판단한다.
  • 데이터베이스가 응답하는지도 체크할 수 있다.
  • 디스크 사용량 또한 확인할 수 있다.

health 정보를 더 자세히보려면 다음 옵션을 지정하면 된다.

management:
  endpoint:
    health:
      show-details: always

health 컴포넌트 중에 하나라도 문제가 있으면 status는 DOWN이 된다.


■ info

  • 애플리케이션의 기본 정보를 보여준다.
  • java: 자바 런타임 정보
  • os: OS 정보
  • env: Environment에서 info.으로 시작하는 정보
  • build: 빌드 정보, META/build-info.properties 파일이 반드시 필요하다.
  • git: git 정보, git.properties 파일이 필요하다.

env, java, os는 기본으로 비활성화 되어 있다.


⚠️ info EndPoint를 활성화 하는 것은 일반적인 방법과 다르다.
다음과 같이, managment 다음에 바로 info가 나온다.

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

■ loggers

  • 로깅과 관련된 정보를 확인할 수 있다.
  • 로그 레벨을 변경할 수 있다.

loggers EndPoint를 사용하면, 애플리케이션을 다시 시작하지 않아도 실시간으로 로그 레벨을 변경할 수 있다.

예를 들어, 특정 클래스의 Log Level을 Trace로 변경하고 싶은 경우,
http://localhost:8080/actuator/loggers/{클래스} 에 POST로 다음과 같이 요청을 보낸다.

{
	"configuredLevel": "TRACE"
}

■ httpexchanges

  • HTTP 요청과 응답을 기록한다.
  • HttpExchangeRepository 인터페이스의 구현체를 빈으로 등록해야 한다.



✏️ 보안

Actuator가 제공하는 기능들은, 애플리케이션 내부 정보를 노출시킨다.
따라서, 외부 인터넷에 EndPoint를 공개시키는 것은 보안상 좋지 앟ㄴ다.

∴ 외부 인터넷에서 EndPoint에 접근하는 것을 막아야 한다.


■ 포트변경

Actuator의 포트를 변경해서 보안을 향상시킬 수 있다.
외부에는 서버에 접속하기 위한 8080포트만을 노출시키고, Actuator는 다른 포트를 설정하는 것이다.

다음과 같이, Actuator의 포트를 8082로 설정할 수 있다. management.server.port=8082




REFERENCE

스프링 부트 - 핵심 원리와 활용, 김영한 개발자님

profile
개발자 지망생

0개의 댓글

관련 채용 정보