Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

Ruff! Ruff!

[Spring Boot] - 유효성 검증, 예외처리, RestTemplate 본문

Java/Spring Boot

[Spring Boot] - 유효성 검증, 예외처리, RestTemplate

maeng-kim 2024. 3. 5. 18:12

본 게시물은 유튜브 채널 '어라운드 허브 스튜디오'의 스프링 부트 강의를 들으며 작성한 게시물입니다.
https://youtube.com/@around.hub.studio?si=wB1YEVq-ulj1r4Ao

 

어라운드 허브 스튜디오 - Around Hub Studio

우리에게 필요한 정보를 담는 '어라운드 허브 스튜디오'입니다! 📌 영상은 매주 수요일 7시 업로드 중입니다. [ 정보 ] 알고 싶은 컨텐츠, 동영상 건의 👉 around.hub.official@gmail.com 도서 판매 👉 서

www.youtube.com


17 ~ 20강 내용

<17 - 유효성 검증>

1. 유효성 검사란?
-서비스의 비즈니스 로직이 올바르게 동작하기 위해 사용되는 데이터에 대한 사전 검증 작업 필요

-유효성 검사 혹은 데이터 검증이라고 부름. 흔히 Validation이라고 부름

-데이터의 검증은 여러 계층에서 발생하는 흔한 작업

-Validation은 들어오는 데이터에 대해 의도한 형식의 값이 제대로 들어오는지 체크하는 과정을 뜻함

2. 일반적인 유효성 검사의 문제점
일반적인 어플리케이션에서 사용되던 Validation의 문제점

  1. 어플리케이션 전체적으로 분산되어 존재
  2. 코드의 중복이 심함 (코드가 복잡해짐)
  3. 비즈니스 로직에 섞여 있어 검사 로직 추적이 어려움

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)

 

=> 목표하는 응답 에러 표시를 위해 필요한 것

  1. error type : HttpStatus → reasonPhrase
  2. error code : HttpStatus → value
  3. message : 상황별 디테일 Message

 

 

 

 

 

 

<20 - RestTemplate 사용법(for HTTP 통신)>

RestTemplate란?

-스프링에서 제공하는 Http 통신 기능을 쉽게 사용할 수 있게 설계되어 있는 템플릿

-http 서버와의 통신을 단순화하고 RESTful 원칙을 지킴

-동기 방식으로 처리, 비동기 방식으론 AsyncRestTemplate이 있음

-RestTemplate 클래스는 REST 서비스를 호출하도록 설계되어 http프로토콜의 메소드에 맞게 여러 메소드를 제공

대부분 Entity로 받는 방식을 사용. (object vs entity)