-
[과제] 일정 관리 앱 만들기 도전 Lv5, Lv6내일배움캠프/과제 2025. 3. 25. 18:24
✅ Lv5. 일정 생성 및 조회
1️⃣ 과제 조건
- 설명
- 예외 상황에 대한 처리를 위해 HTTP 상태 코드(링크)와 에러 메시지를 포함한 정보를 사용하여 예외를 관리할 수 있습니다.
- 필요에 따라 사용자 정의 예외 클래스를 생성하여 예외 처리를 수행할 수 있습니다.
- @ExceptionHandler를 활용하여 공통 예외 처리를 구현할 수도 있습니다.
- 예외가 발생할 경우 적절한 HTTP 상태 코드와 함께 사용자에게 메시지를 전달하여 상황을 관리합니다.
- 예외 상황에 대한 처리를 위해 HTTP 상태 코드(링크)와 에러 메시지를 포함한 정보를 사용하여 예외를 관리할 수 있습니다.
- 조건
- 수정, 삭제 시 요청할 때 보내는 비밀번호가 일치하지 않을 때 예외가 발생합니다.
- 선택한 일정 정보를 조회할 수 없을 때 예외가 발생합니다.
- 잘못된 정보로 조회하려고 할 때
- 이미 삭제된 정보를 조회하려고 할 때
기존에 구현을 하면서 Exception을 처리하고 있어서 Lv5는 무난히 넘어갔다.
✅ Lv6. null 체크 및 특정 패턴에 대한 검증 수행
1️⃣ 과제 조건
- 설명
- 유효성 검사
- 잘못된 입력이나 요청을 미리 방지할 수 있습니다.
- 데이터의 무결성을 보장하고 애플리케이션의 예측 가능성을 높여줍니다.
- Spring에서 제공하는 @Valid 어노테이션을 이용할 수 있습니다.
- 유효성 검사
- 조건
- 할일은 최대 200자 이내로 제한, 필수값 처리
- 비밀번호는 필수값 처리
- 담당자의 이메일 정보가 형식에 맞는지 확인
이 부분도 기존에 Valid 를 사용하여 미리 검증을 해놓았기 때문에 무난하게 구현이 완료된 상태였다.
2️⃣ 트러블 슈팅
그러나 각 valid 에 따라 다른 에러 메세지를 보내고 싶었다.
찾아보니 각 어노테이션에 message를 입력하여 Excpetion을 처리하면 가능했다.
1. ExceptionAdvice 수정
Valid에 실패할 경우 MethodArgumentNotValidException 에러가 발생한다.
에러가 뜬 field를 찾아 message 를 다시 return 해주었다.
@ExceptionHandler(MethodArgumentNotValidException.class)@ResponseStatus(code = HttpStatus.BAD_REQUEST)public Object handleMethodArgumentNotValidException(HttpServletRequest request, MethodArgumentNotValidException e) {log.error("MethodArgumentNotValidException URI : " + request.getRequestURI());log.error("MethodArgumentNotValidException : " + e.getMessage(), e);List<FieldError> fieldErrors = e.getBindingResult().getFieldErrors();FieldError fieldError = fieldErrors.get(fieldErrors.size() - 1); // 가장 첫 번째 에러 필드String fieldName = fieldError.getField(); // 필드명Object rejectedValue = fieldError.getRejectedValue(); // 입력값BaseResponse res = new BaseResponse();res.setJsonResult(JSONResult.validFailBuilder(e, fieldError.getDefaultMessage()));return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(res);}2. 객체 Valid 어노테이션 message 수정
public class ScheduleReqDto {@Schema(description = "일정 내용")@NotBlank(message = "일정 내용을 입력해주세요.")@Max(value = 200, message = "일정 내용은 최대 200자 입력 가능합니다.")private String schedule;@Schema(description = "비밀번호")@NotBlank(message = "비밀번호를 입력해주세요.")private String password;@Schema(description = "작성자 이메일")@NotBlank(message = "작성자 이메일을 입력해주세요.")@Email(message = "유효하지 않는 이메일입니다.")private String email;}public class ScheduleModDto {@Schema(description = "일정 내용")@NotBlank(message = "일정 내용을 입력해주세요.")@Max(value = 200, message = "일정 내용은 최대 200자 입력 가능합니다.")private String schedule;@Schema(description = "비밀번호")@NotBlank(message = "비밀번호를 입력해주세요.")private String password;}일정 내용에는 @Max로 최대 글자수를 제한
public class ScheduleDelDto {@Schema(description = "비밀번호")@NotBlank(message = "비밀번호를 입력해주세요.")private String password;}public class WriterReqDto {@Schema(description = "이름")@NotBlank(message = "이름을 입력해주세요.")private String name;@Schema(description = "이메일")@NotBlank(message = "이메일을 입력해주세요.")@Email(message = "유효하지 않는 이메일입니다.")private String email;}public class CustomPageable {@Schema(description = "페이지 번호 (1부터 시작)", defaultValue = "1")@Min(value = 1, message = "페이지 번호는 1 이상이어야 합니다.")private int page = 1;@Schema(description = "한 페이지에 표시할 데이터 개수", defaultValue = "10")@Min(value = 1, message = "표시 데이터 개수는 1 이상이어야 합니다.")private int size = 10;public int getOffset() {return (this.page - 1) * this.size;}}paging 객체에는 최소 값 @Min 을 설정해주었다.
'내일배움캠프 > 과제' 카테고리의 다른 글
[과제] 일정 관리 앱 JPA (0) 2025.04.04 [과제] 일정 관리 앱 만들기 도전 Lv4 (0) 2025.03.25 [과제] 일정 관리 앱 만들기 도전 Lv3 (0) 2025.03.25 [과제] 일정 관리 앱 만들기 필수 Lv2 (0) 2025.03.25 [과제] 일정 관리 앱 만들기 필수 Lv1 (0) 2025.03.25 - 설명