현상
SQLServer - JPA 조합으로 paging을 통해 데이터들을 list 형태로 불러오는 과정에서 특정 조건으로 Sorting을 하면 데이터의 중복이나 누락이 발생했다. 예를 들어 아래 사진과 같은 상황에서 Code-asc 조건으로 sorting을 하면 page 6의 가장 마지막 데이터와 page 7의 가장 처음 데이터가 중복되었다. 그리고 Sorting을 하지 않았을때와 했을 때 누락되는 데이터가 있었다.
원인과 해결책
해결책
hibernate에서 참조로 하는 SQLServerDialect를 SQLServer2012Dialect로 변경해준다.
from
import org.hibernate.dialect.SQLServerDialect;
to
import org.hibernate.dialect.SQLServer2012Dialect;
원인
참조 1)에 따르면 SQLServer와 hibernate의 레거시 문제로, hibernate와 특정 버전의 SQLServerDialect의 조합에서 일어나는 문제인 것 같다. 참조 1글이 거의 10년이 다 된 글이라 SQLServerDialect 2008에서 문제가 있었다고 다루고 있다. 그리고 JPA 강의에서 배운 것처럼 SQLServer의 sql에서 pagination을 구현한 방식이 hibernate에서 Dialect를 통해 자동으로 문법을 변경하는 과정에서 뭔가 문제가 있었던 것으로 생각된다. pagination이나 sql에 대한 지식이 없어서 정확한 원인 분석이 어렵다.
배운점
현상 분석을 효율적으로 하자
문제가 발생했을 때, 현상 분석을 정확히 해야하는 것을 알고 있다. 그런데 현상 분석을 하는 Tool도 매우 중요하다는 것을 배웠다. 그림 1에서 볼 수 있듯이 총 데이터 개수가 164개이고, response body가 JSON 형태로 표기된다. Sorting을 했을 때와 안했을 때 이 164개의 데이터를 비교해서 데이터의 누락이나 중복이 없는지 봐야했는데 나는 이걸 각 데이터의 id값을 엑셀에 수기로 입력하는 방식으로 했다. 처음부터 이런것은 아니고, JSON을 파싱하는 자바 객체를 찾아봤는데, 현장에 문제 해결책을 빨리 전달해줘야하는 상황이라 공부하고 적용할 시간이 없었다. 그래서 아쉬움이 컸다.
그런데 회사 파트장님께서 문제를 해결해주시고 난 뒤, JSON 파싱 객체를 제외하더라도, 회사 동료분은 실서버 Cloud의 Query문을 확인해보면 되지 않았었느냐는 동료분의 조언이 있었다. 아직 안 익숙한 점도 있겠지만, 너무 마음이 급했던 것 같다. 그래서 현상 분석이 필요할 때 내가 가진 tool이 어떤 것들이 있나 잘 고민해보고 최적의 tool을 적용해야 현상 분석을 효율적으로 할 수 있겠다는 생각이 들었다. 좋은 경험이었다.
어쨌든 JSONObject는 공부하자.
참조
2) 문제를 해결하고 이슈를 공유해주신 회사 파트장 Lde님 감사합니다.
'Programming-[Backend] > JPA' 카테고리의 다른 글
[TIL] JPA Expressions Date 오늘 날짜 또는 상수 값 넣기 : dateTemplate, SQL function(내장함수) (0) | 2022.05.17 |
---|---|
[링크] JPA Map 결과 리턴(결과 집합 그루핑) (0) | 2022.02.21 |
[Querydsl][작성중] 6. 실무 활용 - 사용자 정의 Repository (0) | 2021.12.09 |
[Querydsl] 5. 중급 문법 - 벌크연산, SQL function, 동적 검색 적용 API 개발해보기 (0) | 2021.12.08 |
[Querydsl] 4. 중급 문법 - Projections, BooleanBuilder (0) | 2021.12.06 |