Chapter 17. 스프링 관리하기

ChapJun·2022년 4월 9일
0
  • Chapter 16 에서는 스프링 부트 액추에이터를 이용해 HTTP 엔드포인트를 통해 JSON 형태의 데이터 받는 방법을 소개하였고, Chapter 17 에서는 엑추에이터의 JSON 데이터를 활용한 frontend 어플리케이션을 사용하는 방법에 대해 소개한다.

17.1 스프링 부트 Admin 사용하기

스프링 부트 Admin은 관리용 frontend 웹 애플리케이션이다.

이를 사용하기 위해서는 스프링 부트 Admin 서버를 생성한 후 스프링 부트 애플리케이션 Admin 클라이언트를 하나 이상 등록하여 설정 후 사용하면 된다.

17.1.1 Admin 서버 생성하기

# Admin 서버 의존성 추가 (독립 실행형 어플리케이션)
# pom.xml
<dependency>
	<groupId>de.codecentric</groupId>
	<artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>


@SpringBootApplication
@EnableAdminServer
public class DemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}

}

웹 브라우저에서 http://localhost:9090 접속하면 아래 그림과 같은 화면을 볼 수 있다.

17.1.2 Admin 클라이언트 등록하기

  1. 각 애플리케이션이 자신을 Admin 서버에 등록한다.

Admin 클라이언트 애플리케이션 구성하기

# Spring Boot Admin (Client) 의존성 추가
# pom.xml
<dependency>
	<groupId>de.codecentric</groupId>
	<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>

# application.yml
spring:
  application:
    name: ingredient-service
  boot:
    admin:
      client:
        url: http://localhost:9090

  1. Admin서버가 유레카 서비스 레지스트리를 통해서 서비스를 찾는다.

Admin 클라이언트 찾기

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<groupId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

유레카에 등록된 모든 애플리케이션을 Admin 서버가 자동으로 찾아서 그것의 액추에이터 데이터를 보여주게된다.

17.2 Admin 서버 살펴보기

Admin 서버에서 볼 수 있는 정보들

  • 애플리케이션의 건강 상태 정보와 일반 정보
  • Micrometer를 통해 발행되는 메트릭과 엔드포인트
  • 환경 속성
  • 패키지와 클래스의 로깅 레벨
  • 스레드 추적 기록 정보
  • HTTP 요청의 추적 기록
  • 감사 로그

17.2.1 애플리케이션의 건강 상태 정보와 일반 정보 보기

액추에이터는 건강 상태 정보와 일반 정보를 /health와 /info 엔드포인트를 통해 제공한다.

Admin 서버는 Details 탭에서 이 정보를 보여준다.

Details 탭의 화면을 스크롤하면 아래 그림과 같이 JVM으로부터 받은 애플리케이션 정보의 유용한 통계를 볼 수 있으며, 여기에는 메모리와 스레드를 보여주는 그래프들과 프로세스 정보가 포함된다.

17.2.2 핵심 메트릭 살펴보기

/metrics 엔드포인트로부터 제공되는 정보는 애플리케이션에서 생성되는 메트릭이며, 모든 엑추에이터 엔드포인트 중 가장 덜 인간 친화적인 형태일 것이다. 그러나 Admin 서버가 Metrics 탭의 UI를 사용해서 일반인이 알아보기 쉽게 한다.

Metrics 탭에선 관찰점을 설정하면 이것에 관련된 정보를 보여준다. 이 메트릭들은 새로 갱신하지 않아도 자동 업데이트되어 실시간 데이터를 보여준다.

17.2.3 환경 속성 살펴보기

액추에이터의 /env 엔드포인트는 스프링 부트 애플리케이션의 모든 속성 근원(JVM 시스템, 명령행 인자, 환경 변수 등)으로부터 해당 애플리케이션에 사용할 수 있는 모든 환경 속성을 반환한다. 이렇게 반환되는 JSON 응답이 보기 어려운 것은 아니나 Admin 서버는 더 보기 좋은 형태로 제공한다.

여기서는 수백 개의 속성이 나타날 수 있으므로, 보려는 속성 내역을 속성 이름이나 값으로 필터링할 수 있다.

또한 Environment Manager를 활용하여 환경 속성 값을 설정하거나 변경할 수 있게 해준다.

17.2.4 로깅 레벨을 보거나 설정하기

액추에이터의 /loggers 엔드포인트는 실행 중인 애플리케이션의 로깅 레벨을 파악하거나 변경하는 데 도움이 된다.

기본적으로 모든 패키지와 클래스의 로깅 레벨을 보여주지만, 이름이나 로깅 레벨로 필터링 할 수 있다.

17.2.5 스레드 모니터링

/threaddump 앤드포인트는 애플리케이션에서 실행 중인 스레드의 상태 스냅샷을 제공한다.

각 스레드의 상태를 보여주는 Threads 탭의 막대 그래프는 지속적으로 변경된다. 이때 스레드가 실행 중이면 초록색으로, 대기 중이면 노란색이 되며, 중단되면 빨간색이 된다.

각 스레드에 관한 더 자세한 정보를 보려면 리스트에 있는 스레드 중 원하는 것을 클릭하면 된다. 그러면 해당 스레드에 관한 현재의 스택 기록과 함께 이력 데이터가 확장되어 나타난다.

17.2.6 HTTP 요청 추적하기

스프링 부트 Admin UI의 HTTP Traces 탭에서는 액추에이터의 /httptrace 앤드포인트로부터 받은 데이터를 보여준다. 처음에는 100개의 가장 최근 요청들만 보여주지만, 이후로는 추적이 계속된다.

위 그림의 초록색은 성공적인 요청을, 노란색은 클라이언트 에러를 빨간색은 서버 에러를 나타낸다.

그래프 아래쪽에는 추적 이력 데이터가 나타나며, 애플리케이션에서 받은 각 요청을 한 행으로 보여준다. 그리고 원하는 행을 클릭하면 해당 행이 확장되면서 요청 헤더와 응답 헤더를 포함하는 해당 요청에 관한 추가 정보를 보여준다.

17.3. Admin 서버의 보안

Admin 서버는 관리자만이 봐야 하는 애플리케이션 상세 내용을 노출하는 정보가 포함된다. 따라서 Admin 서버의 보안이 중요하고, Admin 서버에 보안을 추가하는 방법을 소개한다.

17.3.1 Admin 서버에 로그인 활성화하기

Admin 서버는 스프링 부트 애플리케이션이므로 다른 스프링 부트 애플리케이션에 하듯이 스프링 시큐리티를 사용해서 처리할 수 있다.

그리고 무작위로 생성되는 비밀번호를 Admin 서버의 로그에서 계속 찾을 필요가 없도록 간단한 관리자 이름과 비밀번호를 application.yml 파일에 구성하면 된다.

# pom.xml
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-security</artifactdId>
</dependency>

# application.yml
spring:
  security:
    user:
      name: admin
      password: 53cr3t

17.3.2 액추에이터로 인증하기

16장에서 엑추에이터 엔드포인트의 보안을 처리하는 방법을 설명하였다. 이렇게 하면 액추에이터 엔드포인트에 지정한 인증 정보를 모르는 모든 사람의 접근을 막을 수 있다. 엑추에이터 엔드포인트가 인증 정보를 제공하지 않으면 Admin 서버도 엑추에이터 엔드포인트를 소비할 수 없게 된다.

Admin 서버의 클라이언트 애플리케이션 자신을 직접 Admin 서버에 등록하거나, 유레카를 통해 발견되게 함으로써 자신의 인증 정보를 Admin 서버에 제공할 수 있다. 만일 Admin 서버의 클라이언트 애플리케이션이 직접 Admin 서버에 등록한다면 등록할 때 자신의 인증 정보를 Admin 서버에 전송할 수 있다.

  1. 앤드포인트에 접근하는 데 사용할 수 있는 인증 정보는 각 클라이언트의 application.yml에 아래와 같은 속성을 지정한다. (Admin 서버 직접 등록)

spring:
  boot:
    admin:
      client:
        url: http://localhost:9090
        instance:
          metadata:
            user.name: ${spring.security.user.name}
            user.password: ${spring.security.user.password}
            
  1. Admin 서버가 유레카를 통해 클라이언트 애플리케이션을 발견하도록 한다면 아래와 같이 속성을 설정해야 한다. (유레카를 통한 발견)
eureka:
  instance:
    metadata-map:
      user.name: admin
      user.password: password

요약

  • 스프링 부트 Admin 서버는 하나 이상의 스프링 부트 애플리케이션으로부터 액추에이터 엔드포인트를 소비하고 사용자 친화적인 웹 애플리케이션에서 데이터를 보여준다.

  • 스프링 부트 애플리케이션은 자신을 클라이언트로 Admin 서버에 등록할 수 있다. 또는 Admin 서버가 유레카를 통해 클라이언트 애플리케이션을 찾게 할 수 있다.

  • 애플리케이션 상태의 스냅샷을 캡쳐하는 액추에이터 엔드포인트와는 다르게, Admin 서버는 애플리케이션의 내부 작업에 관한 실시간 뷰를 보여줄 수 있다.

  • Admin 서버는 액추에이터 엔드포인트의 결과를 쉽게 필터링해 주며, 경우에 따라서는 그래프로 데이터를 보여준다.

  • Admin 서버는 스프링 부트 애플리케이션이므로 스프링 시큐리티를 통해 사용할 수 있는 어떤 방법으로도 보안을 처리할 수 있다.

profile
Chap Chap

0개의 댓글