예외 공통처리는 어떤 프레임워크를 사용하건 심지어 서블릿만 사용하더라도 잘 알아야 하는 부분이다.
개인적으로 중요한 이유 중 가장 큰 이유는, 비즈니스 로직이 깔끔해지고 관심사가 분리된다는 점인것 같다.
JIRA DC 플러그인 개발은 JAX-RS를 사용한다.
이 JAX-RS는 ExceptionMapper를 사용해야 한다.
긴 말 필요없이 바로 코드를 보면 굉장히 간단하다.
IOExceptionMapper
package kr.osci.aijql.exception;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;
import java.io.IOException;
@Slf4j
@Provider
@Component
public class IOExceptionMapper implements ExceptionMapper<IOException> {
@Override
public Response toResponse(IOException e) {
log.error("[toResponse] IOException, root cause = ", e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
}
}
우선, @Provider 애노테이션을 사용해야 한다. 이 애노테이션은 JAX-RS 런타임에 특정 클래스를 자동으로 등록해서 공통으로 사용할 수 있게 해준다. 대표적으로 이렇게 ExceptionMapper를 구현한 구현체를 등록해서 이 지정된 예외가 발생 시 이 클래스가 호출되도록 말이다.
그리고 보면, @Component 애노테이션도 달려있다. 이전 포스팅에서 설명했듯 스프링 스캐너를 사용한다. 그래서 이 클래스 자체가 빈으로 자동 주입이 되어야 한다. 그래야 이 공통 클래스를 사용할수가 있으니까.
그리고 어떤 예외를 처리할지를 제네릭에 넣어준다. 위 코드는 IOException을 처리하는 클래스이다.
그래서 이 IOException이 어디선가 발생하고 그걸 잡아주지 않는다면 외부로 던져질때 이 클래스를 통한다.
그래서, 위 코드는 개발자가 나중에 알아볼 수 있는 에러로그가 찍히고 500 에러 상태 코드를 가진 반환을 한다. 응답 바디는 에러 메시지가 들어가게 된다. 이렇게 공통 처리할 예외 클래스를 ExceptionMapper로 등록하여 공통 처리할 수 있다.
'Jira & ScriptRunner' 카테고리의 다른 글
Jira DC 플러그인 개발 Part.13 - MySQL로 데이터베이스 변경하기 (0) | 2024.08.20 |
---|---|
Jira DC 플러그인 개발 Part.12 - 브라우저 특정 URL 캐시 지우기 (0) | 2024.08.13 |
Jira DC 플러그인 개발 Part.10 - 로그 설정 (0) | 2024.08.13 |
Jira DC 플러그인 개발 Part.8 이벤트 리스너 등록하기 (0) | 2024.07.23 |
Jira DC 플러그인 개발 Part.7 서블릿 필터 만들기 (Java에서 하던것과 똑같다) (0) | 2024.07.23 |