이 글은 '스프링 부트 핵심 가이드 - 스프링 부트를 활용한 애플리케이션 개발 실무' 책을 통해 학습한 내용을 정리한 글입니다.
액추에이터 (Actuator)
https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html
Actuator는 HTTP 엔드포인트나 JMX를 활용해 어플리케이션을 모니터링하고 관리할 수 있는 기능을 제공하며 spring-boot-starter-actuator 종속성을 추가해야 사용할 수 있다.
엔드포인트
- 엔드포인트는 어플리케이션의 모니터링을 사용하는 경로이다.
- 스프링 부트내에 여러 내장 엔드포인트가 있으며, 커스텀 엔드포인트를 추가할 수도 있다.
- 기본 엔드포인트 URL로 /actuator 가 추가되며, 이 뒤에 경로를 추가해 상세 내역에 접근한다.
- 다른 경로를 사용하고 싶다면 application.properties 파일에 'management.endpoints.web.base-path=/custom-path' 를 작성하면 된다.
## 엔드포인트 활성화
management.endpoint.shutdown.enabled=true
management.endpoint.caches.enabled=false
## 엔드포인트 노출 설정
## HTTP 설정
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=threaddump, heapdump
## JMX 설정
management.endpoints.jmx.exposure.include=*
management.endpoints.jmx.exposure.exclude=threaddump, heapdump
액추에이터 기능
어플리케이션 기본 정보(/info)
- 가동중인 어플리케이션 정보 확인
- application.properties 파일에 info.으로 시작하는 속성값을 이용하여 제공하는 정보의 범위를 정의
// application.propertie파일 내에 어플리케이션 정보 속성 작성
info.organization.name=wikibooks
info.contact.email=hello1234@gmail.com
imfo.contact.phoneNumber=010-0000-0000
- 이렇게 한 다음, 서버주소/actuator/info URL에 접근하면 정의한 속성 값을 바탕으로 생성된 정보가 JSON 형식으로 제공
어플리케이션 상태 (/health)
- 어플리케이션 상태를 확인
- 주소 : http://localhost:8080/actuator/health
- status의 값으로 UP, DOWN, UNKNOWN, OUT_OF_SERVICE 4가지의 상태 지표를 가짐
- 이 결과는 주로 네트워크 계층 중 L4(Loadbalancing)레벨에서 어플리케이션 상태를 확인하기 위해 사용
- application.properties파일에 'management.endpoint.health.show-details=always' 을 추가하면 상세 정보 확인가
- show-details의 설정 값
- never(기본값): 세부사항 표시하지 않음
- when-authorized: 승인된 사용자에게만 세부상태 표시, 확인 권한은 application.properties에 추가한 management.endpoint.health.roles속성으로 부여 가능
- always : 모든 사용자에게 세부상태 표시
- 만약 어플리케이션에 DB가 연동되어 있다면 인프라 관련 상태까지 확인가능
- detail의 모든 status가 UP이어야 어플리케이션의 상태가 UP으로 표시됨, 만약 DOWN상태인 항목이 있다면 어플리케이션의 상태도 DOWN으로 표기되고 HTTP상태코드도 변경
빈 정보 확인 (/beans)
- 스프링 컨테이너에 등록된 스프링빈의 전체 목록을 표시
json형식으로 빈의 정보 반환
스프링 부트의 자동설정 내역 확인 (/conditions)
- 스프링부트의 자동설정(AutoConfiguration) 조건 내역을 확인
스프링 환경변수 정보 (/env)
- 스프링 환경변수 정보를 확인
- 기본적으로 application.properties 파일의 변수들이 표시되며, OS, JVM의 환경변수도 함께 표시
- management.endpoint.env.keys-to-sanitize 속성을 사용하여 민감한 정보를 가릴 수 있음
로깅 레벨 확인 (/loggers)
- 어플리케이션의 로깅레벨 수준이 어떻게 설정되어 있는지 확인
- GET 메소드로 호출하면 확인이 가능하며 POST 메소드로 호출하면 로깅 레벨을 변경할 수도 있음
커스텀 액추에이터
기존 기능에 내용을 추가하거나, 새로운 엔드포인트를 개발하는 방식으로 구현하며,@Endpoint 가 명시된 클래스를 이용하여 구현
서버 간 통신 (RestTemplate / WebClient)
RestTemplate
RestTemplate은 스프링에서 HTTP 통신 기능을 손쉽게 사용하도록 설계된 템플릿이다. 이것을 이용하면 RESTful 원칙을 따르는 서비스를 편리하게 만들 수 있다. 기본적으로 동기 방식으로 처리되며, 비동기 방식으로 사용하고 싶을 경우 AsyncRestTemplate을 사용하면 된다.
GET 형식 RestTemplate
일반적으로 UriComponentsBuilder 를 사용
// 변수 방식
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:8080")
.path("/api/{name}")
.encode()
.build()
.expand("MyName")
.toUri();
// 파라미터 방식
URI uri2 = UriComponentsBuilder
.fromUriString("http://localhost:8080")
.path("/api/param")
.queryParam("name", "myName")
.encode()
.build()
.toUri();
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.getForEntity(uri, String.class);
return responseEntity.getBody();
POST 형식 RestTemplate
RequestEntity<MemberDto> request = RequestEntity
.post(uri)
.header("my-header", "Wikibooks API")
.body(memberDto);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<MemberDto> response = restTemplate.exchange(requestEntity, MemberDto.class);
WebClient
create() 메서드를 이용하는 방법과 builder()를 이용하는 생성 방법이 있다.
- WebClient는 객체를 생성한 다음 요청을 전달하는 방식으로 동작
- builder()를 통해 baseUrl() 메서드에서 기본 URL을 설정하고 defaultHeader() 메서드로 헤더의 값을 설정
- 한번 빌드된 WebClient는 변경할 수 없다.
- 그러나 Webclient.mutate() 메서드를 사용하면 복제할 수 있다.
'북 스터디 > 스프링 부트 핵심 가이드' 카테고리의 다른 글
[스프링부트] 13장. 서비스의 인증과 권한 부여 (0) | 2023.07.09 |
---|---|
[스프링 부트] 10장. 유효성 검사와 예외 처리 (0) | 2023.06.25 |
[스프링 부트] 09장. 연관관계 매핑 (0) | 2023.06.18 |
[스프링 부트] 08장. Spring Data JPA 활용 (0) | 2023.06.11 |
[스프링 부트] 06장. 데이터베이스 연동 (0) | 2023.06.04 |