인프라가 다 완성된건 아닌데, 인프라가 내 생각대로 굴러가는지 테스트할 최소 war를 만들기
기존 로컬환경에서 framework 파트에서 만든 뼈대를 바탕으로 세부코드 구현
포스트그레 기반 페이징을 해야함.
화면은 최소한으로 부트스트랩 활용하려고 했는데,
test 통해서 화면없이 이클립스 console 로 기능 테스트 부터
화면까지 만들다가 에러뜨면 그것도 무기력해짐. 백엔드 자잘하게 수정할때마다 건드려야할 영역도 하나 추가되는 셈이고
특히 entity, dto 변수명 바꾸는데 엄청나게 강한 거부감이 개인적으로 생김.
더 나은 건데도 말이지, 틀려도 되는 데 말이지, 고치면 되는데
로컬 포스트그레 SQL에 페이징 기능을 체크할 데이터를 넣는다.
dbeaver 기존 행 복사 기능으로 페이징을 테스트할 수 있게 총 22행 넣음. 100 ~ 121
참고로 수동으로 넣는 것이기 때문에, 기존 시퀀스랑 충돌안나게 100번부터 시작함
https://dejavuhyo.github.io/posts/pagination-in-postgresql/
1페이지당 5개의 글
0번 페이지 쿼리
select * from article
order by article_id
limit 5
offset 0 * 5;
1번 페이지 쿼리
select * from article
order by article_id
limit 5
offset 1 * 5;
2번 페이지 쿼리
select * from article
order by article_id
limit 5
offset 2 * 5;
10 , 5 , 0
= 2 5 , 1 5 , 0 5
= (3-1) 5, (2-1) 5 , (1-1) 5
어느 새 익숙해져서 그렇지 10이 10이지, 이걸 5의 배수, 나아가 0번째부터 세는 컴퓨터 방식을 사람 방식으로 바꾸기 위해
2를 3에서 1 뺀수로 다르게 생각한다는 건 흥미롭지만 신기하다.
나야 그냥 감사
최종 추상화
select * from article
order by article_id
limit [1페이지당 보여주고 싶은 게시글 수]
offset [사람이 화면상에서 클릭한 페이지 번호 - 1] * 5;
추가로 *는 성능차원에서 나중에 칼럼으로 구체화해야함
offset과 limit 공식가이드
https://www.postgresql.org/docs/12/queries-limit.html
한편, postgresql이 offset 지원해줘서 이렇게 쉽게 되는거지, 이거없으면 개인적으로 5시간 써도 페이징 쿼리 못짰음. dbms를 바꾸면 된다.
아쉽게도 oracle sql developer 와 같은 자동 조인 쿼리 생성은 아직 못찾음, 근데 이것만해도 손가락 수명 잘 지킬듯
이제는 이걸 java app에서 작동시켜야함, 그러기 위해서
limit은 constant 이되 여러 개발자가 같이 쓸수있게 해야 하고
offset을 constant value로 처리한 것을 variable로 처리해야서 사용자 입력을 받아야함
create_date, last_update가 서로 길이가 달라서 따로 따로 타입을 지정해주면 효율적인듯한데,
우선, java time 의 LocalDate , LocalDateTime 활용
https://footprint-of-nawin.tistory.com/67
예전에는 Date 썼는데
https://seeminglyjs.tistory.com/197
java 시간 관련 타입이 꽤 골치 아픈 이슈가 있었던 거 같아서 jpa 공부하면서 타입 구체화해야할듯
java.util.Date , java.sql.Date가 서로 다르다
https://hashcode.co.kr/questions/2038/javautildate%EB%A5%BC-javasqldate%EB%A1%9C-%EC%96%B4%EB%96%BB%EA%B2%8C-%EB%B0%94%EA%BE%B8%EB%82%98%EC%9A%94
단순한 쿼리들의 경우 이게 더 편함, 지금은 페이징 구현이 언제 될지 모르니까 이걸로 할 예정
다만 복잡한 쿼리의 경우, 쿼리만 봐도 멘탈 나가는 사이즈가 되기 때문에 별도로 쿼리 빼는 방식이 xml
조금 더 설정해야함
그리고 마이바티스에서 제공하는 selectkey 쓸려면 xml 방식이 필수일듯?
https://developer.android.com/reference/java/util/stream/Stream
수치는 모르는데, 안드로이드에서 쓰이는 스트림 많이 쓰면 성능상 좋다고한듯
gradle도 맛보고
근데 생각보다 웹앱과 모바일 앱 사이의 거리가 멀어서, 우선 뒤로