[Spring Boot #32] 스프링 부트 Actuator, JConsole, VisualVM, 스프링 Admin
| 스프링 부트 Actuator
스프링 부트 어플리케이션은 actuator라는 모듈을 통해 어플리케이션 상태를 종합적으로 정리해서 제공해줍니다. 이를 통해 스프링 부트 어플리케이션 운영을 손쉽게 할 수 있죠.
actuator는 다양한 Endpoints(사용자나 디바이스같은 IT 서비스의 최종 목적지)를 제공하여 이 다양한 Endpoints를 통해 어플리케이션의 운영 정보를 알 수 있습니다.
| Actuator 접근하기
프로젝트 구조
+---src
| +---main
| | +---java
| | | \---com
| | | \---tutorial
| | | \---actuator
| | | ActuatorApplication.java
| | |
| | \---resources
| | | application.properties
| | |
| | +---static
| | \---templates
의존성 추가
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
소스 코드
@SpringBootApplication
@RestController
public class ActuatorApplication {
@GetMapping("/hello")
public String hello(){
return "hello";
}
public static void main(String[] args) {
SpringApplication.run(ActuatorApplication.class, args);
}
}
위 프로젝트를 실행하고 어플리케이션의 상태를 알고자 할 때 다음에 소개하는 방법들을 써서 어플리케이션에 접속할 수 있습니다.
JConsole
jconsole 을 cmd 라인에 칩니다.
C:\Users\user\actuator>jconsole
다음과 같이 local에 구동되고 있는 jvm 위에서 실행되고 있는 어플리케이션의 목록이 나옵니다. 여기서 현재 어플리케이션에 해당되는 것을 클릭합니다.
Secure connection을 사용하지 않는 상태이므로 Insecure 상태로 접속합니다.
아래와 같이 Heap Memory 상태, Threads 개수 클래스 개수등 어플리케이션의 상태를 나타내는 metric이 표시됩니다.
VisualVM
https://visualvm.github.io/download.html 서 VisualVm을 다운 받습니다.
다운로드 받은 후 VisualVM을 실행하면 다음과 같은 화면이 출력됩니다. 여기서 스프링 부트 어플리케이션을 클릭합니다.
다음과 같이 어플리케이션의 상태를 체크할 수 있습니다.
HTTP
스프링 부트 application.properties 파일에 다음과 같이 설정을 한 후 모든 웹 요청에 대해서 actuator가 어플리케이션의 상태를 반환하게 끔 설정합니다.
# application.properties
management.endpoints.web.exposure.include=*
| 스프링 부트 Admin
스프링 Admin은 actuator 정보를 UI로 쉽게 볼 수 있는 오픈소스 프로젝트입니다.
Admin 서버
프로젝트 구조
+---src
| +---main
| | +---java
| | | \---com
| | | \---tutorial
| | | \---springadmin
| | | SpringAdminApplication.java
| | |
| | \---resources
| | | application.properties
| | |
| | +---static
| | \---templates
의존성 추가
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
소스 코드
@SpringBootApplication
@EnableAdminServer
public class SpringAdminApplication {
public static void main(String[] args) {
SpringApplication.run(SpringAdminApplication.class, args);
}
}
Client
프로젝트 구조
+---src
| +---main
| | +---java
| | | \---com
| | | \---tutorial
| | | \---actuator
| | | ActuatorApplication.java
| | |
| | \---resources
| | | application.properties
| | |
| | +---static
| | \---templates
의존성 추가
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
소스 코드
@SpringBootApplication
@RestController
public class ActuatorApplication {
@GetMapping("/hello")
public String hello(){
return "hello";
}
public static void main(String[] args) {
SpringApplication.run(ActuatorApplication.class, args);
}
}
application.properties
spring.boot.admin.client.url=http://localhost:8080
management.endpoints.web.exposure.include=*
server.port = 18080
서버를 구동한뒤 클라이언트를 admin 서버에 접속시키면 다음과 같이 클라이언트의 어플리케이션의 정보가 웹 상에 나타나게 됩니다.
'Spring Framework > Spring boot #2' 카테고리의 다른 글
[스프링 부트/ Spring Boot] 스프링 게시판 만들기 - 부트로 쉽게 구현한 Spring 게시판 (0) | 2021.03.25 |
---|---|
스프링 부트로 OAuth2 구현(페이스북, 구글, 카카오, 네이버) (0) | 2021.03.25 |
[Spring Boot #31] 스프링 부트 RestTemplate, WebClient (0) | 2021.03.25 |
[Spring Boot #30] 스프링 부트 시큐리티 커스터마이징 (0) | 2021.03.25 |
[Spring Boot #29] 스프링 부트 시큐리티 (0) | 2021.03.25 |
[Spring Boot #28] 스프링 부트 몽고DB(Mongo DB) 연동하기 (0) | 2021.03.25 |
[Spring Boot #27] 스프링 부트 레디스(Redis) 연동하기 (0) | 2021.03.25 |
[Spring Boot #26] Flyway를 이용한 데이터 마이그레이션 (0) | 2021.03.25 |