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에 직접 작성하고 전역에서 꺼내 사용하는 흐름을 통해 표현과 제어를 분리하는 구조를 익힘