개발로그(001)

원태연·2022년 8월 28일
0

개발로그

목록 보기
1/4
post-thumbnail

2022년 08월 28일(일)

오늘 한 일

FIKA 기능 개발 및 오류 수정
API 추가 개발

발생했던 오류

  1. Image upload API 사용시, 파일 최대 크기를 10MB로 설정하였다. 이를 초과하는 요청에 대해선 FileSizeLimitExceededException이 발생하였고, 500 Interanl Server Error를 응답함.

    catch 문으로 처리하고자 controller layer에 있는 upload API에

        catch(FileSizeLimitExceededException e) {
          	e.~~
        }

    이렇게 걸어두었는데도 예외가 계속 발생했다.

    결론적으론, ExceptonHandler를 통해 해결할 수 있다.

    @ExceptionHandler(FileSizeLimitExceededException.class)
    @ResponseStatus(HttpStatus.PAYLOAD_TOO_LARGE)
    public ResponseEntity<ApiResponse> fileSizeLimitExceeded() {
    	log.warn("[IMAGE UPLOAD FAIL] : Upload size exceeded max size");
    	return new ApiResponse<>(OVER_FILE_UPLOAD_LIMIT).toResponseEntity();
    }
  2. 415 error
    우선 HttpStatus 415은 Unsupported Media Type이다. FIKA프로젝트 중 POST요청 시, 계속 415응답을 받는데 헤메고 있었다.
    결론적으론, Post요청의 Body 값을 @RequestBody로 받는 경우
    요청의 Content-type : application/json이 되어야 한다.

    항상 Content-type : application/json 타입으로 받는 다면 유연하지 못하다. 그래서 @RequestBody대신, @ModelAttribute를 사용하여(혹은 안 적어도 됨) key=value 쌍으로 이루어진 Content-type : application/x-www-form-unlencoded에 대한 요청도 처리할 수 있어야 한다.

배운 점

  1. ExceptionHandler와 (Rest)ControllerAdvice를 통해 예외 처리를 일괄적으로 할 수도 있다. => 유지보수에 유리(?)

  2. FileSizeLimitExceededException가 catch로 잡히지 않는 이유는 내장 톰캣에서 던지는 예외이기 때문이다. SizeLimitExceededException라는 예외도 던지는데, Spring이 MutiPart 예외를 MaxUploadSizeExceededException로 통합해서 관리

    추후 내장 서버가 톰캣이 아니어도, MaxUploadSizeExceededException로 예외를 처리하면 내장 서버가 변경되어도 코드에 손댈일이 적을 듯..?!

  3. 내장 톰캣 서버의 maxSwallowSize라는 게 있음

  4. 415 Error는 처음 알았다..!

앞으로 알아보면 좋은 것

  1. ControllerAdvice의 핵심 개념이 AOP라는데, 아직 이해하지 못하고 있음..
  2. ExceptionHandler를 통해 일괄(?)적으로 예외를 관리하는 코드를 봤음. 더 공부해보고 도입하면 try-catch로 메서드마다 반복되는 코드를 줄일 수 있을 듯 하다
profile
앞으로 넘어지기

0개의 댓글