▶ 전체 일정 조회(READ - GET) 동작 과정
(1) Controller
- @RequestParam(required = false) → 쿼리 파라미터가 없어도 동작
- 클라이언트가 updatedAt과 name을 선택적으로 전달 가능
- GET /schedules → 모든 일정 조회
- GET /schedules?updatedAt=2025-01-31 → 특정 날짜의 일정 조회
- GET /schedules?name=홍길동 → 특정 name 일정 조회
- GET /schedules?updatedAt=2025-01-31&name=홍길동 → 두 조건 모두 충족하는 일정 조회
(2) Service
- scheduleRepository.findAll(updatedAt, name) 호출
- DB에서 조회 조건에 맞는 Schedule 객체 리스트를 가져옴
- map(schedule -> new ScheduleResponseDto(...))
- 가져온 Schedule 객체를 ScheduleResponseDto로 변환
- .collect(Collectors.toList())
- 변환된 데이터를 리스트 형태로 반환
→ 클라이언트는 ScheduleResponseDto 리스트를 받게 됨,
데이터가 없을 경우 빈 리스트 반환( 200 OK [ ] ) *아래 예외 처리 적용 방식 참고
(3) Repository
- 기본 SQL 생성
- "SELECT * FROM schedule WHERE 1 = 1"을 기본 쿼리로 설정
- WHERE 1 = 1을 사용하여 조건을 동적으로 추가하기 쉽게 만듦
- 조건 추가 (updatedAt, name)
- updatedAt 값이 있을 경우, AND DATE(updatedAt) = ? 추가
- LocalDate.parse(updatedAt) 사용 (YYYY-MM-DD 형식 변환)
- name 값이 있을 경우, AND name = ? 추가
- updatedAt 값이 있을 경우, AND DATE(updatedAt) = ? 추가
- 최신 수정일 기준 정렬 (ORDER BY updatedAt DESC)
- 최근 수정된 일정부터 조회
- SQL 실행 및 DTO 변환
- jdbcTemplate.query(...)를 사용하여 SQL 실행
- 결과를 ScheduleResponseDto 객체로 변환 후 반환
→ 조회 조건에 맞는 일정 목록을 최신 수정일 순으로 반환
▶ 예외 처리 적용 방식
Service 비즈니스 로직에서 요청 데이터가 없을 경우 예외 발생하는 법
- List<ScheduleResponseDto> schedules 변수로 변환 후 예외 처리
- 리스트가 비어 있을 경우 ResponseStatusException 발생
public List<ScheduleResponseDto> findAll(String updatedAt, String name) {
// 일정 조회
List<ScheduleResponseDto> schedules = scheduleRepository.findAll(updatedAt, name).stream()
.map(schedule -> new ScheduleResponseDto(
schedule.getId(),
schedule.getName(),
schedule.getTitle(),
schedule.getContents(),
schedule.getCreatedAt(),
schedule.getUpdatedAt()
))
.collect(Collectors.toList()); // 리스트 변환 완료
// 일정이 없을 경우 예외 발생
if (schedules.isEmpty()) {
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "해당 일정이 존재하지 않습니다.");
}
return schedules; // 정상적인 데이터 반환
}
'개발 > 부트캠프' 카테고리의 다른 글
본캠프 : 개인 과제(일정 관리 앱 만들기) 트러블 슈팅 (0) | 2025.02.03 |
---|---|
본캠프 : Spring 기초_특강2_@AllArgsConstructor & @RequiredArgsConstructor (0) | 2025.01.31 |
본캠프 : Spring 기초 강의 완강 요약 (0) | 2025.01.27 |
본캠프 : Spring 기초_특강1_3 Layered Architecture (0) | 2025.01.24 |
본캠프 : Spring 기초_2주차 (1) | 2025.01.22 |