커서 기반 무한 스크롤을 구현해보려는데 프론트 단을 할 줄 몰라서 그냥 스프링에서 로직 처리를 했다
Repository DI 시키는 부분 아래에다가 그냥 뿌려준 List lastId 값을 전역화 시켜서 API 요청이 올때마다 Get으로는 lastId를 초기화, 스크롤 이벤트 리스트 추가 요청 Post로는 lastid가 0이 아닌 경우를 제어문으로 처리한 뒤 ++ 해주게 만들었는데 잘 동작한다
js는 그냥 스크롤 이벤트만 확인해서 요청을 보내게 처리했다
해놓고 보니 뭔가 MVC 패턴도 깨지는 것 같은 느낌이고 View 단에서 처리할 로직을 가져온 것 같긴한데 프론트 개발자와 협업하게 된다면 불필요한 로직이 사라지고 lastID만 가지고 와서 커서 기반으로 Where 절을 써서 리스트를 날려주면 되니 더 쉬울 것 같다
OFFSET 메소드 자체가 데이터 테이블의 row 수가 늘어날수록 skip할 index 분량이 많아져 성능이 구려지다 보니 대용량 데이터 처리 연습은 커서 기반으로 SEQ을 어떻게 Where절 조건식으로 날려 원하는 인덱스를 바로 타게할까 고민하면서 짜는게 맞는 것 같다
굳이 또 나중에 서버 단에서 무한스크롤 로직 구현을 해서 리스트를 뿌려줘야 한다면 나중에는 그냥 깔끔하게 객체를 하나 만들어서 import 시킬 것 같다
(repository 사이에 primitive 타입 변수가 선언 되어있으니 꼴보기 싫음 ㅋ)
그 외 테스트용 메소드 타임체크 및 로그 저장 AOP와 슬로우쿼리 발생 시 개발자 연락처로 발송하는 백오피스용 기능들을 만들어서 넣어봤는데, 당장은 크게 활용처가 없지만 서비스가 커질수록 유용할 것 같다. 만들면서 재밌기도 했고.