본문 바로가기

Spring

스프링 부트 - Production-ready Features - (1) start, 엑츄에이터

이 포스팅은 인프런 김영한님의 스프링 부트 핵심 원리와 활용 강의에 기반하여 작성된 포스팅입니다. 먼저 스프링 공식 문서를 첨부하겠습니다. 스프링 공식 문서 Production-ready Features , Production-ready Features에서 제공하는 서비스는 Monitoring, Metrics, Auditing, and more. 라고 말합니다.

 

전투에서 실패한 지휘관은 용서할 수 있지만 경계에서 실패하는 지휘관은 용서할 수 없다. 이 말은 서비스를 운영하는 개발자에게 맞추어 보면 모니터링은 잘 해야 된다는 것이다.

 

실전 프로젝트에서는 엘라스틱 빈스톡에서 제공하는 모니터링 기능을 이용해서 CPU 사용량 , 헬스 체크 지표를 사용했던 적이 있었습니다. 이 외에도 튜닝에 따라 다양한 메트릭을 설정할 수 있기는 합니다. 다만 튜닝 과정이 초심자에게는 번거롭고 때에 따라 비용이 들어갈 수 있다고 합니다. 

 

번거롭다. 비용이 들어간다. 스프링 부트 프로젝트의 Production-ready Features 이용하면 손쉽게(세부적으로 들어가면 떠또 손쉽지는 않더라~) 그리고 무료로 모니터링이 가능합니다. 아래와 같이 주요 지표들을 한눈에 볼 수 있습니다.

JVM 메모리 사용 및 EC@ CPU 이용률
Connection Pool

 

Production-ready Features, 프로메테우스, 그라파나를 활용하여 모니터링을 해보도록 하겠습니다. 오늘은 이 중 엑츄에이터를 알아보도록 하겠습니다. Production-ready Features 기능을 사용하기 위해서는 아래 의존성을 추가해야 합니다. 

implementation 'org.springframework.boot:spring-boot-starter-actuator'

그럼 엑츄에이터의 몇 가지 기능을 살펴봅시다.


엔드 포인트 설정

엔드포인트를 사용하려면 다음 2가지 과정이 모두 필요하다.

1. 엔드포인트 활성화

2. 엔드포인트 노출

 

엔드포인트 활성화는 해당 기능의 사용 여부 (on, off)를 나타낸다.

엔드포인트 노출은 활성화된 엔드포인트를 HTTP에 노출할 지 JMX에 노출할 지 선택하는 것이다.


Loggers

 

Loggers 엔드포인트를 사용하면 로깅과 관련된 정보를 확인하고, 실시간으로 변경할 수도 있다.

 

먼저 프로젝트의 모든 Log 레벨을 확인하려면 아래 엔드포인트로 요청을 보내면 된다.

{protocol}://{host}/actuator/loggers

응답을 받으면 아래와 같이 로그 레벨을 확인할 수 있다.

 

 

실전 프로젝트를 진행할 당시, 로그레벨 때문에 서버를 재배포한 기억이 있었는데 엑츄에이터를 사용하면 실시간으로 로그 레벨을 변경할 수 있다는걸 알게 되었다. 

 

실시간으로 로그 레벨을 변경하기 위해서는 POST 요청을 보내야한다.

 

실제로 로깅 레벨이 변경했는지 GET 요청을 보내보면 변경된 것을 확인할 수 있다.

 

단, 설정 정보에 로깅 레벨을 변경하는 것은 아니기 떄문에 서버를 재시작하면 로깅 레벨은 설정 정보에 설정한대로 초기화 화됩니다.

 

 

HTTP 요청/응답 기록 - httpexchages


이것도 실전 프로젝트 당시 고민했던 부분이다. 실전 프로젝트에서는 정상 응답(2xx)이 아닐 경우, 슬랙을 통해 알림을 보낸다. 실제로 슬랙을 통해 에러를 받아보니까 에러에 점점 무뎌진다. 특히 400 에러는 대부분 서버에서 의도한 에러이기 때문에 굳이 확인을 해서 얻을 수 있는 이점이 없는 경우도 존재한다.

 

우선 HttpExchangeRepository를 빈으로 등록해야 httpexchages 엔드 포인트를 이용할 수 있다.

 

@Bean
public HttpExchangeRepository httpExchangeRepository() {
    return new InMemoryHttpExchangeRepository();
}

 

영한님의 말에 의하면 이 기능은 매우 단순하고 기능에 제한이 많다고 한다.그래서 개발 단계에서만 사용하고, 실제 운영 서비스에서는 모니터링 툴이나 네이버 오픈 소스인 핀포인트 Zipkin 같은 다른 기술을 사용하는 것이 좋다고 말씀하셨다. 실전 프로젝트는 끝났지만 유지보수가 계속된다면 도입을 고려해보아야겠다.

 

 

엑츄에이터와 보안


actuator 와 관련된 모든 앤드포인트가 노출되어 있다. 이를 막는 것이 좋다.

1. 내부망 설정

2. 필터, 인터셉터 등으로 접근 제한

 

가장 좋은건 내부망으로 분리하는 것이라고 한다. 근데 일단 이 방법을 모르기 때문에 실전 프로젝트에 적용할 때는 2번 방법을 우선적으로 사용하려고 합니다.