Validation(유효성 검증)

: 올바르지 않은 데이터를 걸러내고 보안을 유지하기 위해 데이터 검증은 여러 계층에 걸쳐서 적용된다. Client 데이터는 조작이 쉬울 뿐더러 모든 데이터가 정상적인 방식으로 들어오는 것도 아니기 때문에, Server에서 데이터 유효성을 검사해야 할 필요가 있다. 그래서 서버는 요청 데이터를 신뢰하지 않는다.

  • 벨리데이션 라이브러리는 꼭 필요하지만 귀찮은 유효성 체크를 어노테이션으로 쉽게 처리하도록 도와준다.
  • DTO에 필드는 검사해서 컨트롤러로 가기 전에 검사

종류

  • @Size
  • @NotNull
  • @NotEmapy
  • @NotBlank
  • @Max
  • @Min

실습해보기

  1. postman으로 null값을 넣어보기
  2. H2 DB에서 체크
  3. content에 null값이 들어감 -> 에러 터짐
    => 그래서 에러처리보다 DB조회 전에 벨리데이션으로 체크해야 성능이 향상된다.
  4. https://mvnrepository.com/ 에서 라이브러리 추가
  5. TodoDTO에 데이터를 받아오는 객체의 필드값에@NotBlack 추가
  6. TodoControllerApiV2에 컨트롤러 매개변수에 @Validated추가
  7. 상태코드가 자동으로 400으로 보내짐
  • 에러 내용이 자동으로 세팅됨

에러 핸들링

  • 협업 시 ResDTO로 보내줄 때 예외처리를 해서 에러를 정제해서 보내줘여함으로 에러 핸들링이 필요함

실습해보기

  1. 에러 확인 -MethodArgumentNotValidException
  2. 예외처리 @RestControllerAdvice, @ControllerAdvice 추가 및 함수생성해 @ExceptionHandler 추가
  • exception.getBindingResult().getFieldErrors()를 이용해서 에러 메시지를 가공해서 전달한다.
  1. 에러 리스트를 찾아서 가공

AOP(Aspect Oriented Programming)

  • 객체 지향 프로그래밍을 조금 더 원활하게 하는 것
  • 관심분리 / 횡단관심
  • Advice : 부가적인 관심 영역
  • 공통 기능이 언제 어디서 실행되느냐
    - @Before / @After
    : Request, Response를 건드릴 수 없다.(입출력데이터를 조작불가)
    - @Arount
    : Request, Response를 건드릴 수 있다.(입출력 데이터를 조작가능하다.)

실습해보기

  • CommonAdvice.java


로그

실습해보기

  • todo.log

HttpEntity / ResponseEntity

  • 상태코드 / 헤더 / 바디
  • StatusCode (200,400,500 등)
  • Headers (Cookie 등)
  • Body (ResDTO)
  • 200 OK
    요청이 성공적으로 되었습니다. (GET)
  • 201 Created
    요청이 성공적이었으며 그 결과로 새로운 리소스가 생성되었습니다. (POST)
  • 400 Bad Request
    이 응답은 잘못된 문법으로 인하여 서버가 요청을 이해할 수 없음을 의미합니다.
  • 401 Unauthorized
    비록 HTTP 표준에서는 "미승인(unauthorized)"를 명확히 하고 있지만, 의미상 이 응답은 "비인증(unauthenticated)"을 의미합니다. 클라이언트는 요청한 응답을 받기 위해서는 반드시 스스로를 인증해야 합니다.
  • 403 Forbidden
    클라이언트는 콘텐츠에 접근할 권리를 가지고 있지 않습니다. 예를들어 그들은 미승인이어서 서버는 거절을 위한 적절한 응답을 보냅니다. 401과 다른 점은 서버가 클라이언트가 누구인지 알고 있습니다.
  • 405 Method Not Allowed
    요청한 메소드는 서버에서 알고 있지만, 제거되었고 사용할 수 없습니다.
  • 500 Internal Server Error
    서버가 처리 방법을 모르는 상황이 발생했습니다.

HTTP 상태 코드

실습해보기

  1. Controller 리턴값 변경

  2. CommonExceptionHandler 리턴값 변경

  1. Service 리턴값도 변경

다른방법

  1. EntityNotFoundException 클래스 만든기
  • 생성자 두개 만들어주기(메시지 받는거 하나 안 받는거 하나)
  1. CommonExceptionHandler에 메소드 만들어주기

  2. Service

  • 메세지 안 받는거
  • 메시지 받는거

0개의 댓글