경희대학교 컴퓨터공학부 하계 리턴 백엔드(스프링부트) 스터디 6주차 - 트랙장 최현영

  1. 예외 처리

    1. 자바에서는 대개 Try~ Catch, Throw, Throws 로 예외를 처리한다.
    2. 예외[Exception]
      1. 입력 값의 처리가 불가능하거나, 참조된값이 잘못된 경우 등으로 애플리케이션이 정상적으로 동작하지 못하는 상황을 의미한다.
        1. 예외는 개발자가 직접 조작을 할 수 있는 오류로, 미리 Try~Catch문을 활용하여 조작이 가능하다.
    3. 에러[Error]
      1. 개발자가 처리할 수 없다.
      2. StackOverFlow, OutOfMemory 등과 같은 에러는 하드웨어 리소스와 관련한 문제가 대표적인 에러의 예이다.
        1. 하드웨어 자원을 늘이던가, 최적화 기법으로 자원의 낭비를 방지하는 쪽으로 비지니스 로직을 구현해야 한다.
  2. 예외 클래스

    https://velog.io/@codepark_kr/자바-이론-예외-처리

    https://velog.io/@codepark_kr/자바-이론-예외-처리

  3. Checked / Unchecked Exception

    1. Checked Exception

      1. 컴파일 단계에서 확인이 가능하고 예외 처리가 가능한 Exception

      2. 대개, Input/Output Stream[키보드 입력 및 모니터 출력]과 관련하여 알고리즘과 같은 입출력을 하려고 할때, 인텔리제이 또는 이클립스에서 IOException을 throws하라고 예외처리하라고 빨간줄 쳐진걸 본 경험이 있을텐데, IOException이 Checked Exception이기 때문이다.

        스크린샷 2023-09-04 오전 11.12.30.png

    2. Unchecked Exception

      1. 웹 애플리케이션이 실행되고 있는 도중에 발생할 수 있는 Exception이다.
      2. 실행 중에 발생할 수 있는 예외이기 때문에, 비지니스 로직을 짤 때 try부터 감싸고 본다. [클린코드 발췌]
      3. RuntimeException, NullPointerException, illegalArgumentException이 대표적인 Unchecked Exception이다.
  4. 예외처리를 해보자

    1. 예외처리를 하는 방법은 대개, try{ ~ } catch(Exception e){ ~~} 구문을 사용한다.

      스크린샷 2023-09-04 오전 11.15.23.png

    2. 스프링 부트에서 예외처리를 한다고 했을 때, 클라이언트의 요청이 예외를 발생시키면, 예외 처리된 내용이 다시 클라이언트의 응답으로 가야한다.

      1. 왜냐면, 뭐가 문제인지 알아야하기 때문에><
    3. 예외가 발생했을 때, 클라이언트에 오류 메시지를 전달하려면 각 레이어[서비스 레이어, 리파지토리 레이어 등]에서 발생한 예외를 엔드포인트[프레젠테이션(컨트롤러) 레이어]에 전달해야한다.

      1. @RestControllerAdvice와 @ExceptionHandler를 통해 모든 컨트롤러 레이어의 예외를 처리할 수 있다.
  5. 핸들러 클래스

  6. 비지니스 로직 실습

    1. MemberService.class

      스크린샷 2023-09-04 오후 3.29.53.png

      스크린샷 2023-09-04 오후 3.30.17.png

      스크린샷 2023-09-04 오후 3.30.22.png

    b. PostSerivce.class

    스크린샷 2023-09-04 오후 3.30.57.png

    스크린샷 2023-09-04 오후 3.34.28.png

    스크린샷 2023-09-04 오후 3.34.54.png

  7. 정리

    1. 클라이언트[프론트엔드]와의 예외 통신은 정해진 규약으로 수행되어야한다. 서로간의 예외 Code를 정의하여 프론트엔드의 예외처리에 차질이 없도록 해주어야 한다.

      1. 아래 참고
    2. 예시)

      스크린샷 2023-09-04 오후 3.41.08.png