화면마다 반복되던 페이징 버그를 DB에서 끝낸 이야기
PostgreSQLReactPaginationRefactoring
01이슈 및 현상
마지막 페이지에서 항목을 삭제하거나 필터를 좁히면 현재 페이지가 총 페이지 수를 초과해 빈 화면이 나오는 페이징 버그가, 화면을 바꿔가며 다섯 달간 열 번 넘게 반복됐습니다.
02원인 파악
페이지 번호 유효성 검증이 프론트엔드 각 화면에 제각각 산재해 있었고 어떤 화면엔 아예 없었습니다. 화면을 하나 추가할 때마다 같은 버그를 하나씩 더 만드는 구조였고, 반복은 코드가 아니라 검증 책임의 위치가 잘못됐다는 신호였습니다.
03해결 방안
검증 책임을 데이터를 가장 잘 아는 계층으로 옮겼습니다. search_t_cell_group_detail DB 함수가 총 건수를 계산한 직후, 요청 페이지가 범위를 벗어나면(page > total_page) 마지막 페이지로 스스로 보정하도록 했습니다.
04결과 및 성과
어떤 화면이 어떤 페이지 번호를 보내도 DB가 유효 범위로 보정하게 되어, 이 커밋 이후 페이징 수정 커밋이 사라졌습니다. 다섯 달간 열 번 고치던 문제가 계층을 옮긴 한 번의 수정으로 종결됐습니다.