SPARTA 과제/SPRING

숙련) 일정관리앱 트러블슈팅 (3)

kjw81024 2026. 2. 12. 21:30

페이징 참고자료 

 

https://chaeyami.tistory.com/245

 

[SpringBoot/JPA] Spring Data JPA 페이징 구현하기

쇼핑몰은 홈에서 상품 리스트를 보여준다. 새 상품별, 인기순 등 조건에 따라 리스트를 보여주려고 생각하니 페이징을 해야겠다는 생각을 하게 됐다. Spring Data JPA는 데이터베이스에서 데이터를

chaeyami.tistory.com

 

JPA 에서 페이징 기능을 지원하기 때문에 query String 으로 페이지 번호와 한 페이지 안에 보여줄 요소의 개수를 보내 구현하기로 했다. 정렬을 할 필요는 없기때문에 그냥 findAll 을 그대로 사용해주되 Page 로 받아주면 된다

 

controller 에서는 @RequestParams 를 두개 받아와서 요청에 보내주면 됨 

 

문제1

repostiory 의 메서드 findAllBySchedule (원래는 schedule 에 달린 댓글들을 찾아오는 용도) 의 반환값을 Page<Comment>, 매개변수를 Pagable pagable 로 바꿔야하는데 어떻게 할지 고민이 된다...

 

해결과정

거짓말처럼... 그냥 한 번 값을 둘 다 넣어봤는데 돌아감

Page<Comment> findAllBySchedule_Id(Long schedule_Id, Pageable pageable);

https://docs.spring.io/spring-data/jpa/reference/jpa/query-methods.html

 

JPA Query Methods :: Spring Data JPA

By default, Spring Data JPA uses position-based parameter binding, as described in all the preceding examples. This makes query methods a little error-prone when refactoring regarding the parameter position. To solve this issue, you can use @Param annotati

docs.spring.io

JPA 가 메서드 명을 보고 query method 를 자동으로 생성해주는 건 알았는데 Pageable 은 따로 메서드명에 넣어주지 않아도 동작을 한다는게 신기했다

알아보니 Pageable 은 예외적인 특별 파라미터라서 마지막 파라미터에 넣으면 자동으로 적용됨

 

결론

Pageable 하게 출력하는건 특별 파라미터라서 마지막 매개변수로 넣어주면 해결됨


스탠다드 반 수업 듣고 

오류메시지 출력부분을 바꿔줬다

Exception 을 하나하나 만들었을때는 좀 귀찮아서 몇개 없었는데 이건 만들기 너무 쉬워서 잔뜩 만들어버렸다...

개인적으로 이 핑크색이랑 연두색 조합이 예쁜거같다.. 보기좋아서 한참 보고있었음 

 

API 명세서에 다시 적어줘야할듯하다 

귀찮지만... 완성하면 기분좋을것같다


create 는 vaild 에서 잡혀서 예상한 결과가 출력됐는데 update 는 갑자기 서버 오류라고 뜬다

valid 어노테이션이 그냥 함수 안에만 들어있으면 되는줄 알았는데 검증 해야할 매개변수 앞에 붙어야함 

ResponseEntity<UpdateScheduleResponse> update(
        @PathVariable Long scheduleId, 
        @Valid @RequestBody UpdateScheduleRequest request,
        HttpSession session)

원래 @PathVariable 앞에 붙어있었다...! 

requestBody 어노테이션 앞에 붙여주니 정상적으로 작동한다.

 

결론

@Valid 어노테이션은 검증할 파라미터 앞에만 붙여주기 

아무데나 붙이는 거 아님!

 


죽어라 명세서를 작성했다

https://documenter.getpostman.com/view/51113144/2sBXcBmMaA