Spring - @ModelAttribute, Paging 캐싱

김상엽·2024년 4월 16일
0

Spring

목록 보기
25/26
post-thumbnail

TIL

  • 최종프로젝트 21일차, 중간발표도 있었고 많은게 지나갔다.
  • 프로젝트를 진행하면서 몇가지 문제와 해결을 하여서 기록하려고 한다.

Controller 청소하기

  • Paging을 구현하면서 인자로 받을게 많아졌다.
    페이지번호, 사이즈, 정렬기준, 정렬방향 + 검색어, 카테고리, 상태
  • 그렇다 보니 Controller의 함수가 상당히 지저분해졌다.
  • 이런느낌이었다.. 위 사진에 @RequestBody검색어, 카테고리, 상태를 받는 상황이었다.

  • 다른 웹서비스를 참고해보았는데, 검색어, 카테고리, 상태등 검색옵션또한 URL에 포함하여 요청을 보내는것을 확인했다.
  • 이런 느낌으로 @RequestParam이 7개가 되는 상황이 발생하였다.
  • 이대로는 너무 지저분한것 같아서 방법을 찾다가 @ModelAttribute를 알게 되었다.

@ModelAttribute

  • @ModelAttribute는 클라이언트로부터 일반 HTTP 요청 파라미터나 multipart/form-data 형태의 파라미터를 받아 객체로 사용하고 싶을 때 이용된다.
  • @ModelAttribute는 "가장 적절한" 생성자를 찾아 객체를 생성 및 초기화한다.
  • 객체 생성 및 초기화 > Data Binding > Validation 순서로 진행된다.
    • Data Binding은 getter/setter가 존재하는 변수에 한해서 이루어진다.
  • @ModelAttribute를 사용해서 이렇게 깔끔해졌다.
    • 제목, 카테고리, 상태SearchRequest를 통해 받고, 나머지는 Pageable을 통해 받았다.

이미지 업로드

  • 프로젝트에 이미지를 업로드 하는 부분도 있는데, 과연 이미지는 Controller에서 어떻게 받아야할까
    찾아보았다.
  • MultipartFile로 받으면 된다!

Paging 캐싱 처리하기

  • 지난번 글에서 캐싱처리에서 직렬화, 역직렬화가 무엇인지 다루었다.
  • Paging을 캐싱처리하던도중 오류가 발생하였는데, 찾아보니 PageImpl이 기본생성자를 갖고있지 않아서 직렬화가 불가능해서 발생한 오류인것으로 파악했다.
  • 그래서 PageIm 를 상속받는 RestPage 를 만들었다. 만들면서 직렬화도 가능하게 생성자도 만들어주었다.

오늘의 회고

중간 발표가 끝났다. 발표를 굉장히 잘했다고 칭찬받아서 기분이 매우 좋다.
특히, 프로젝트 아키텍처에 대해서 극찬을 받아서 매우매우 기분이 좋다.

이제 남은건 유저테스트와 최종발표인데, 생각보다 시간이 참 빠른것 같다.
남은 기간도 최선을 다해서 성공적은 프로젝트가 되도록 노력해야겠다.

profile
개발하는 기록자

0개의 댓글