Ruff! Ruff!
[Spring Boot] - 유효성 검증, 예외처리, RestTemplate 본문
본 게시물은 유튜브 채널 '어라운드 허브 스튜디오'의 스프링 부트 강의를 들으며 작성한 게시물입니다.
https://youtube.com/@around.hub.studio?si=wB1YEVq-ulj1r4Ao
17 ~ 20강 내용
<17 - 유효성 검증>
1. 유효성 검사란?
-서비스의 비즈니스 로직이 올바르게 동작하기 위해 사용되는 데이터에 대한 사전 검증 작업 필요
-유효성 검사 혹은 데이터 검증이라고 부름. 흔히 Validation이라고 부름
-데이터의 검증은 여러 계층에서 발생하는 흔한 작업
-Validation은 들어오는 데이터에 대해 의도한 형식의 값이 제대로 들어오는지 체크하는 과정을 뜻함
2. 일반적인 유효성 검사의 문제점
일반적인 어플리케이션에서 사용되던 Validation의 문제점
- 어플리케이션 전체적으로 분산되어 존재
- 코드의 중복이 심함 (코드가 복잡해짐)
- 비즈니스 로직에 섞여 있어 검사 로직 추적이 어려움
3. 자바의 Validation
Bean Validation / Hibernate Validator
-앞서 나온 문제를 해결하기 위해 자바에서 Bean Validation이라는 데이터 유효성 검사 프레임워크를 제공함
-Bean Validation은 Bean Validation 명세에 대한 구현체
-스프링부트의 유효성 검사 표준은 Hibernate Validator를 채택
-2.3버전 부터는 starter-validation을 추가해야함
4. Validation관련 어노테이션
<18 - 예외처리>
1. 스프링부트의 예외처리 방식
-스프링부트의 예외처리 방식은 크게 2가지가 존재함. (어노테이션을 사용하는 방식)
a. @ControllerAdvice를 통한 모든 Controller에서 발생할 수 있는 예외 처리
b. @ExceptionHandler를 통한 특정 Controller의 예외 처리
@ControllerAdvice로 모든 컨트롤러에서 발생하는 예외를 정의하고
@ExceptionalHandler를 통해 발생하는 예외 마다 처리할 메소드를 정의
모든 예외 클래스는 Throwable 클래스를 상속 받고 있음
Exception은 수많은 자식 클래스가 있음
RuntimeException은 Unchecked Exception이며, 그 외 Exception은 Checked Exception으로 볼 수 있음
Checked Exception : 문법적 오류로 이미 알고 있음 → 컴파일 시에 에러가 나타남 → 반드시 처리해야함
2. @ControllerAdvice, @RestControllerAdvice
-컨트롤러어드바이스는 스프링에서 제공하는 어노테이션
-@Controller or @RestController 에서 발생하는 예외를 한 곳에서 관리하고 처리할 수 있게 하는 어노테이션
-설정을 통해 범위 지정 가능 + default값으로 모든 컨트롤러에 대해 예외 처리를 관리
(@RestControllerAdvice(basePackages=”com.example.maeng”)와 같이 패키지 범위 설정 가능)
-예외 발생 시 json 형태로 결과를 반환하기 위해선 @RestControllerAdvice를 사용하면 됨
3. @ExceptionHandler
-예외 처리 상황이 발생하면 해당 Handler로 처리하겠다고 명시하는 어노테이션
-어노테이션 뒤에 괄호 붙여서 어떤 ExceptionClass를 처리할지 설정할 수 있음
(@ExceptionHandler(00Exception.calss)
-Exception.class는 최상위 클래스로 하위 세부 예외 처리 클래스로 설정한 핸들러가 존재하면, 그 핸들러가 우선처리하게 되며, 처리 되지 못하는 예외 처리에 대해 ExceptionClass에서 핸들링함
-@ControllerAdvice로 설정된 클래스 내에서 메소드로 정의할 수 있지만, 각 Controller 안에 설정도 가능
-우선순위 : 전역설정(@ControllerAdvice)핸들러 < 지역 설정(Controller)핸들러
<19 - 서비스 특성에 맞춘 예외처리>
- Custom Exception
<예시>
1. Exception 구조
대부분의 내용은 Throwable에 정의 되어있음
*Exceptional의 생성자 주의 -> 메세지를 받음
2. Throwable 구조
Exception이 상속받고 있는 Throwable 클래스의 구조
앞서 말한 메세지 => private으로 선언된 메세지
메세지를 받아서 메세지 값으로 넣고 있음
getMessage로 메세지를 가져오게 됨
3. HttpStatus
-Enum 클래스임 -> 서로 관련있는 상수들을 모아 심볼릭한 명칭의 집합으로 정의한 것. 클래스처럼 보이게 하는 상수
- HttpStatus는 3가지 값으로 구분됨
-> int, Series(카테고리), String(reasonPhrase)
=> 목표하는 응답 에러 표시를 위해 필요한 것
- error type : HttpStatus → reasonPhrase
- error code : HttpStatus → value
- message : 상황별 디테일 Message
<20 - RestTemplate 사용법(for HTTP 통신)>
RestTemplate란?
-스프링에서 제공하는 Http 통신 기능을 쉽게 사용할 수 있게 설계되어 있는 템플릿
-http 서버와의 통신을 단순화하고 RESTful 원칙을 지킴
-동기 방식으로 처리, 비동기 방식으론 AsyncRestTemplate이 있음
-RestTemplate 클래스는 REST 서비스를 호출하도록 설계되어 http프로토콜의 메소드에 맞게 여러 메소드를 제공
대부분 Entity로 받는 방식을 사용. (object vs entity)
'Java > Spring Boot' 카테고리의 다른 글
[Spring Boot] - 테스트코드 적용하기, 테스트 커버리지 확인하기 (0) | 2024.03.05 |
---|---|
[Spring Boot] - API, Lombok, DB, JPA, LogBack (1) | 2024.03.02 |
[Spring Boot] - 디자인 패턴, API, Pom파일, Swagger (0) | 2024.02.28 |
[Spring Boot] - 스프링부트 프로젝트 시작하기(Maven) (0) | 2024.02.28 |