[SpringBoot]GlobalException 활용한 코드 리팩토링

    코드 리팩토링 전

    아래 코드는 회원가입시 email 중복 체크를 하는 서비스 기능이다. email 파라미터로 member 객체를 가져오지 못하면 "사용 가능한 이메일 입니다." 메시지와 success 필드에 true를 넣어서 프론트에서 분기 처리를 하였다. 

    만약 member 객체를 가져오면 "이미 사용중인 이메일 입니다." 라는 메시지와 success 필드에는 false를 넣어 응답한다.

    위 코드가 지저분한 이유는 try catch 로 인한 에러 처리와 emailCheckResponse를 3군데서 build() 하기 때문이다. try catch를 서비스 에서 사용하지 않으려면 GlobalException을 사용해야 한다.

    GlobalException은 @ExceptionHandler와 @ControllerAdvice를 같이 사용하는 것이다.

    참고 : @ExceptionHandler는 특정 Controller에서 예외 처리를 위한 메서드를 정의 하는것이고 @ControllerAdvice를 사용하여 특정 Controller가 아니라 전체 애플리케이션에 적용 시킬 수 있다.

     

    GlobalException 활용한 리팩토링

    에러 처리는 단순히 메시지와 성공 여부가 있는 ErrorReponse 객체를 반환한다.

    에러가 났음에도 @Exceptionhandler로 정상적으로 에러 처리가 되면 response 상태 코드가 200으로 나가기 때문에 @ReponseStatus로 상태코드를 변경해 줘야 한다.

     

    GlobalException만 사용해도 아래코드처럼 try catch문이 없어져서 훨씬 보기 좋은 코드가 됐다.

     

    emailCheckResponse 객체에 값이 message, success 밖에 없으므로 모든 소스에서 공통으로 사용되는 messageDTO를 만들어서 무분별한 Response 객체를 지워 한층더 깔끔한 리팩토링이 완성했다.

     

    코드 리팩토링 완료

    GlobalExceptoin과 공용 DTO를 만들어서 사용하니 깔끔하고 가독성 좋은 코드가 되었다.

    댓글

    Designed by JB FACTORY