TIL

[250321 TIL] 일정 관리 과제 완성

도원좀비 2025. 3. 21. 20:00

📆오늘 구현한 주요 내용

1️⃣  페이징 처리 구현

  • 일정 목록을 페이지 단위로 나누어 조회할 수 있도록 설계
  • Controller → Service → Repository까지 파라미터 page, size를 통해 흐름 연결
  • 쿼리에서 LIMIT, OFFSET을 사용하여 필요한 범위만 조회
  • 범위 밖 페이지 요청 시 빈 배열 반환
  • GET /schedules/paged?page=1&size=5

2️⃣전역 예외 처리기 구현 (@ControllerAdvice)

  • 예외를 하나의 핸들러에서 통합적으로 관리
  • 일반 예외는 ExceptionResponse, 검증 실패는 ValidationExceptionResponse로 구분
  • 응답 형식:
    • ExceptionResponse: status, message, timestamp
    • ValidationExceptionResponse: status, messages (Map<String, String>), timestamp

 

3️⃣유효성 검증 적용 (@Valid)

  • @RequestBody @Valid를 활용해 사용자 입력값 자동 검증
  • DTO에 @NotBlank, @NotNull 등을 적용하여 필드별 검증 메시지 작성
  • 예외 발생 시 MethodArgumentNotValidException으로 전환됨
  • 발생한 MethodArgumentNotValidException를 GlobalExceptionHandler에서 예외처리

🤔 오늘 배운 점 / 느낀 점

  • @Valid는 컨트롤러 메서드에 진입하기 전 자동으로 동작하며, 실패 시 MethodArgumentNotValidException 발생
  • @ExceptionHandler로 예외 종류를 구분해 처리하면 유지보수가 훨씬 쉬워진다
  • 유효성 검증 실패는 하나의 필드가 아닌 여러 필드에서 동시에 발생할 수 있기 때문에 Map 구조로 응답을 설계해야 한다
  • 서비스 계층에서는 ResponseStatusException을 통해 도메인 예외를 명확하게 처리하는 것이 좋다
  • 검증 실패 메시지를 DTO에 직접 작성하고 전역에서 꺼내 사용하는 흐름을 통해 표현과 제어를 분리하는 구조를 익힘