[백엔드] Impl of code structure

adam adam·2022년 10월 5일
0

인프라가 다 완성된건 아닌데, 인프라가 내 생각대로 굴러가는지 테스트할 최소 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를 바꾸면 된다.

dbeaver 자동 sql 활용

아쉽게도 oracle sql developer 와 같은 자동 조인 쿼리 생성은 아직 못찾음, 근데 이것만해도 손가락 수명 잘 지킬듯

이제는 이걸 java app에서 작동시켜야함, 그러기 위해서

limit은 constant 이되 여러 개발자가 같이 쓸수있게 해야 하고

offset을 constant value로 처리한 것을 variable로 처리해야서 사용자 입력을 받아야함

백엔드 구현

java - mybatis

java 시간의 경우 : Article Entity and DTO

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

mybatis mapper 설정

  1. @Select 어노테이션 활용

단순한 쿼리들의 경우 이게 더 편함, 지금은 페이징 구현이 언제 될지 모르니까 이걸로 할 예정

다만 복잡한 쿼리의 경우, 쿼리만 봐도 멘탈 나가는 사이즈가 되기 때문에 별도로 쿼리 빼는 방식이 xml
조금 더 설정해야함

그리고 마이바티스에서 제공하는 selectkey 쓸려면 xml 방식이 필수일듯?

  1. xml 방식

참고자료
https://github.com/devsacti/eveadam_blog/blob/main/src/main/resources/com/eveadam/blog/mapper/article/ArticleMapper.xml

이클립스 개발의 시작과 끝 : clean 하세요

게시판

추가

Android and stream

https://developer.android.com/reference/java/util/stream/Stream

수치는 모르는데, 안드로이드에서 쓰이는 스트림 많이 쓰면 성능상 좋다고한듯

gradle도 맛보고

근데 생각보다 웹앱과 모바일 앱 사이의 거리가 멀어서, 우선 뒤로

0개의 댓글