-
스프링 부트 - 실패 분석기Web/환경설정 관련 2024. 5. 14. 12:59
실패 분석기란
- 애플리케이션에서 발생한 실패/예외를 감지하고 해당 이슈를 이해하는 데 도움이 되는 정보 제공
장점
- 에러에 대한 상세한 메시지를 제공해서 문제의 근본 원인과 해결책을 결정할 수 있게 돕는다.
- 애플리케이션 시작 시점에 검증을 수행해서 발생할 수 있는 에러를 가능한 빨리 파악할 수 있다.
1. 실패 분석 시나리오
요구 사항
- 의존하고 있는 외부 REST 서비스를 사용할 수 있는지 애플리케이션 시작 시점에 확인
- 서비스 사용 불가 시 상세한 내용 확인
시나리오
- 애플리케이션이 강아지의 상세 정보를 외부 API https://dog.ceo/dog-api/에서 가져온다.
- 해당 API가 제대로 작동하지 않으면, 애플리케이션을 실행할 수 없음으로 API상태를 점검해야한다.
작업 절차
- ContextRefreshedEnvent를 사용해서 검증 프로세스를 구동한다. (애플리케이션 시작 시점)
- API가 사용할 수 없는 상태라면, 런타임 에러를 던진다. (UrlNotAccessibleException - 사용자 지정 예외)
- 해당 예외가 발생하면, 호출되는 UrlNotAccessibleFailureAnalyzer를 작성한다.
- 마지막으로, spring.factories 파일에 위 클래스를 이용하여 작업을 수행한다.
- spring.factories는 src/main/java/META-INF 디렉터리에 있는 파일로 애플리케이션 시작 시점에 스프링으로 로딩하는 특수 파일이다. 여러 가지 설정 클래스에 대한 참조가 포함돼 있다.
2. 커스텀 실패 분석기 생성
- 먼저 간단한 RuntimeException을 하나 만들자
- 아래 예외는 url이 접근 불가능할 때 발생하는 예외이다.
import lombok.Getter; @Getter public class UrlNotAccessibleException extends RuntimeException{ private String url; public UrlNotAccessibleException(String url){ this(url,null); } public UrlNotAccessibleException(String url, Throwable cause){ super("URL "+url+"is not accessible",cause); this.url = url; } }
- 다음으로 애플리케이션 시작 혹은 재시작에 작동하는 핸들러를 작성하자
- 임의로 작성한 url은 접근 불가능하다. 따라서 예외를 던진다.
@Component public class UrlAccessibleHandler { @Value("${api.url:https://dog.ceo/}") private String url; @EventListener(classes = ContextRefreshedEvent.class) public void listen(){ //외부 API URL에 접근 할 수 없는 상태이다. throw new UrlNotAccessibleException(url); } }
- UrlNotAccessibleException예외에 대한 실패 분석기 클래스를 만들자
- AbstractFailureAnalyzer 클래스를 상속하고, analyze 메서드를 작성하면 된다.
- 해당 메서드는 FailureAnlysis 클래스를 return한다. 해당 클래스 생성자에는 에러메시지, 해야할 행동, 예외클래스 순서로 파라미터를 넣으면 된다.
public class UrlNotAccessibleFailureAnalyzer extends AbstractFailureAnalyzer<UrlNotAccessibleException> { @Override protected FailureAnalysis analyze(Throwable rootFailure, UrlNotAccessibleException cause) { //에러 메시지, 행동, 발생한 예외로 이루어짐 return new FailureAnalysis("Unable to access URL ="+cause.getUrl(), "Validate the URL and ensure it is accessible",cause); } }
- 마지막으로, scr/main/resources/META-INF/spring.factories 파일에 다음을 작성하면 등록이 완료된다.
- 해당 파일과 경로가 없다면, 만들면 된다.
org.springframework.boot.diagnostics.FailureAnalyzer=\ com.example.manyConfig.config.failure.UrlNotAccessibleFailureAnalyzer //여러개의 실패분석기를 등록하고 싶으면, 해당 실패분석기 구현체에 전체 경로를 ,로 구분해서 넣으면 된다.
- org.springframework.boot.diagnostics.FailureAnalyzer가 키 값이 구현체 전체 경로이다.
- \은 그냥 띄어쓰기 이어쓰기 용도로 삽입한 것 -> Linux나 git cli에서 \ 넣어서 명령어 여러개 적는 거랑 같은 용도임
- 결론적으로 다음과 같이 잘 정리된 에러 로그를 확인할 수 있다.
참고자료
https://www.baeldung.com/spring-boot-failure-analyzer
'Web > 환경설정 관련' 카테고리의 다른 글
스프링 부트 모니터링(2.1) - Health 엔드포인트 탐구 (0) 2024.05.14 스프링 부트 모니터링 (1) - 액추에이터 기본 설정 (0) 2024.05.14 스프링 부트 구성 - @Import, @Conditional 활용 (0) 2024.05.13 스프링 부트 애플리케이션 시작 시 코드 실행 (CommandLineRunner) (0) 2024.05.10 Spring boot - 설정 파일 관리 (@Profile, @ConfigurationProperties,@Value,@PropertySource) (0) 2024.05.10