기본적인 API 동작
1. 클라이언트는 데이터를 다양한 방법을 통해 담아 API로 호출한다
2. API에 해당하는 컨트롤러는 해당 요청을 처리한다
3. 데이터가 정상적으로 처리된다
4. 컨트롤러 안에 있는 비즈니스 로직 처리를 수행한다
5. 비즈니스 로직이 완료되면 다시 Controller로 돌아가 클라이언트에게 성공 Status와 응답 데이터를 전송한다.
Global Exception
Global Exception을 야기하는 비정상 동작 처리가 되는 과정
- 클라이언트가 데이터를 담아 API로 호출을 한다,
- 컨트롤러는 이에 대한 처리를 진행한다
- 데이터의 처리가 안전하게 수행되지 않고 예외가 발생한다.
- 비즈니스의 로직을 처리하지 않고 @RestControllerAdvice / @ExceptionHandler로 구성한 GlobalException이 캐치한다.
- @ExceptionHandler( ~~ ) 로 발생한 에러에 대한 응답을 클라이언트에게 전달한다.
좀 더 자세히 설명해보자 데이터 처리가 정상적으로 처리되지 않고 Exception이 발생한다면 비즈니스 로직으로 들어가지 않고 @RestControllerAdvice/@ExceptionHandler 로 구성된 GlobalException에서 에러를 캐치한다.
이렇게 발생한 에러는 발생으로 멈추는 것이 아닌 클라이언트에게 응답(response)형태로 전달하게 된다.
즉, @ControllerAdvice/@RestControllerAdvice으로 등록되어 있는 클래스에서 @ExceptionHandler 어노테이션에 등록된 해당 에러의 이름이 있는 메소드가 실행된다 그에 반환값으로 status는 200으로 전달하고 오류 사항을 응답 메세지로 나타내주는 역할을 하게 되는 것이다.
@ControllerAdvice
발생한 에러를 도중에 @ControllerAdvice로 선언한 클래스 내에서 발생한 에러를 처리할 수 있도록 하는 어노테이션이다.
해당 어노테이션은 Spring AOP를 사용한 어노테이션이다.
@RestControllerAdvice
@RestController로 선언한 지점에서 발생한 에러를 도중에 @RestControllerAdvice로 선언한 클래스 내에서 이를 캐치하여 Controller내에서 발생한 에러를 처리할 수 있도록 하는 어노테이션이다
해당 어노테이션 또한 Spring AOP를 사용한 어노테이션이다.
@ControllerAdvice 와 @RestControllerAdvice 의 차이점 이는 Controller 와 RestController의 차이와 똑같다. 어노테이션을 구성하는 어노테이션 중 ResponseBody 어노테이션이 존재하므로 JSON으로 제공한다.
@ExeptionHandler()
() 안에 들어갈 내용으로 각종 에러들 중 하나가 들어가게 되고 해당 exception 이 발생하면 해당 어노테이션이 붙어있는 메소드가 실행된다. 그렇다면 응답의 코드는 HttpStatus.ok 처럼 200을 응답하게 되고 정작 내용은 해당 내용은 오류이다. 라고 전달하게 되는 것이다.
코드 예시
Business Exception
Business Exception을 야기하는 비정상 동작 처리가 되는 과정
- 클라이언트가 데이터를 담아 API로 호출을 한다,
- 컨트롤러는 비즈니스 로직으로 데이터 값을 전달하게 된다
- 비즈니스 로직에서 처리를 하는 도중 Exception이 발생하게 된다
- 대부분 try - catch 문으로 혹은 if 문으로 예외가 발생 할 만한 위치에 throw new BusinessExceptionHandler()를 작성한다. 이후에는 GlobalException이 관리하는 @ExceptionHandler(BusinessExceptionHandler.class)를 가진 메소드가 실행된다.
- 이때 응답으로 데이터를 보내게 되는 것이다
비즈니스 로직 예외처리란
자바 계층 구조 중 Business Layer에서 발생하는 에러를 캐치하여 오류를 발생시키지 않고 응답 메세지로 클라이언트에게 전달해주는 기능을 의미한다. 해당 기능을 통해 고유한 코드를 구성해서 어떠한 에러가 어디에서 왜 발생하는지에 대해 추적 또한 가능하다
또한 해당 예외처리를 사용하는 이유는 클라이언트와 서버의 통신 중 웹 자체의 에러를 발생 시키지 않고 오류에 대한 추적이 가능하게끔 클라이언트에게 커스텀 코드를 보낸다.
자바 계층 구조란
자바는 크게 Presentation Layer, Business Layer, Persistence Layer, Database Layer 로 나뉘어져 있다.
API 요청이 발생한다면 각각의 계층을 차례대로 전달하고 마지막인 데이터베이스 계층에서 처리하고 다시 역순으로 반환된다.
여기서 현재 우리가 다루는 Business Layer는 코드 내에서 실질적인 로직 처리를 수행하는 레이어이다. 해당 레이어에서는 일반적으로 인터페이스로 Service와 Implements로 ServiceImpl에 해당되는 파일이며 실질적인 구현체에서 비즈니스 로직을 처리한다.
'프로젝트 > 개인 프로젝트' 카테고리의 다른 글
Postman을 통한 테스트 자동화(Feat. 테스트 시나리오) (1) | 2023.10.13 |
---|---|
EC2의 서버와 로컬 서버의 응답 시간은 왜 차이가 나는 것일까? (0) | 2023.09.12 |
Pageable의 Page 와 Slice의 성능 테스트 (0) | 2023.09.11 |
페이징(Pagination) (0) | 2023.09.08 |