- 최종프로젝트 21일차, 중간발표도 있었고 많은게 지나갔다.
- 프로젝트를 진행하면서 몇가지 문제와 해결을 하여서 기록하려고 한다.
- Paging을 구현하면서 인자로 받을게 많아졌다.
페이지번호
,사이즈
,정렬기준
,정렬방향
+검색어
,카테고리
,상태
- 그렇다 보니 Controller의 함수가 상당히 지저분해졌다.
- 이런느낌이었다.. 위 사진에
@RequestBody
로검색어
,카테고리
,상태
를 받는 상황이었다.
- 다른 웹서비스를 참고해보았는데,
검색어
,카테고리
,상태
등 검색옵션또한 URL에 포함하여 요청을 보내는것을 확인했다.
- 이런 느낌으로
@RequestParam
이 7개가 되는 상황이 발생하였다.- 이대로는 너무 지저분한것 같아서 방법을 찾다가
@ModelAttribute
를 알게 되었다.
@ModelAttribute
는 클라이언트로부터 일반 HTTP 요청 파라미터나 multipart/form-data 형태의 파라미터를 받아 객체로 사용하고 싶을 때 이용된다.@ModelAttribute
는 "가장 적절한" 생성자를 찾아 객체를 생성 및 초기화한다.- 객체 생성 및 초기화 > Data Binding > Validation 순서로 진행된다.
- Data Binding은 getter/setter가 존재하는 변수에 한해서 이루어진다.
@ModelAttribute
를 사용해서 이렇게 깔끔해졌다.
제목
,카테고리
,상태
는SearchRequest
를 통해 받고, 나머지는Pageable
을 통해 받았다.
- 프로젝트에 이미지를 업로드 하는 부분도 있는데, 과연 이미지는 Controller에서 어떻게 받아야할까
찾아보았다.
MultipartFile
로 받으면 된다!
- 지난번 글에서 캐싱처리에서 직렬화, 역직렬화가 무엇인지 다루었다.
- Paging을 캐싱처리하던도중 오류가 발생하였는데, 찾아보니 PageImpl이 기본생성자를 갖고있지 않아서 직렬화가 불가능해서 발생한 오류인것으로 파악했다.
- 그래서 PageIm 를 상속받는 RestPage 를 만들었다. 만들면서 직렬화도 가능하게 생성자도 만들어주었다.
중간 발표가 끝났다. 발표를 굉장히 잘했다고 칭찬받아서 기분이 매우 좋다.
특히, 프로젝트 아키텍처에 대해서 극찬을 받아서 매우매우 기분이 좋다.
이제 남은건 유저테스트와 최종발표인데, 생각보다 시간이 참 빠른것 같다.
남은 기간도 최선을 다해서 성공적은 프로젝트가 되도록 노력해야겠다.