Skip to content

fix(sample): 목록 행 번호가 페이지당 건수 대신 페이지 링크 묶음 크기를 쓰던 문제 수정 - #75

Merged
jei007 merged 1 commit into
eGovFramework:mainfrom
wantaekchoi:fix/row-number-uses-page-size
Sep 9, 2026
Merged

fix(sample): 목록 행 번호가 페이지당 건수 대신 페이지 링크 묶음 크기를 쓰던 문제 수정#75
jei007 merged 1 commit into
eGovFramework:mainfrom
wantaekchoi:fix/row-number-uses-page-size

Conversation

@wantaekchoi

Copy link
Copy Markdown
Contributor

수정 사유 Reason for modification

소스를 수정한 사유가 무엇인지 체크해 주세요. Please check the reason you modified the source. ([X] X는 대문자여야 합니다.)

  • 버그수정 Bug fixes
  • 기능개선 Enhancements
  • 기능추가 Adding features
  • 기타 Others

수정된 소스 내용 Modified source

검토자를 위해 수정된 소스 내용을 설명해 주세요. Please describe the modified source for reviewers.

변경 사유

이 저장소는 페이지당 건수와 페이지 링크 묶음 크기를 서로 다른 축으로 나눠 씁니다. EgovSampleController 86행이 pageUnitPaginationInfo.recordCountPerPage 로, 87행이 pageSizePaginationInfo.pageSize 로 넣습니다.

PaginationInfo 에서 pageSizegetFirstPageNoOnPageList·getLastPageNoOnPageList 만 쓰는 링크 묶음 크기이고, 레코드 오프셋은 getFirstRecordIndex(currentPageNo - 1) * recordCountPerPage 로 계산합니다. EgovSample_Sample_SQL.xml 73행의 LIMIT #{recordCountPerPage} OFFSET #{firstIndex} 도 같은 축이고, EgovKrdsPaginationRendererTest 106·107행이 setRecordCountPerPage(10)setPageSize(5) 를 나란히 두는 것도 두 값이 다른 축이라는 전제입니다.

egovSampleList.html 98행의 행 번호 식만 페이지당 건수 자리에 sampleVO.pageSize 를 곱하고 있어 이 규약에서 혼자 벗어나 있습니다.

변경 내용

-						<td class="text-center" th:text="${paginationInfo.totalRecordCount + 1 - ((sampleVO.pageIndex - 1) * sampleVO.pageSize + iterStat.count)}"></td>
+						<td class="text-center" th:text="${paginationInfo.totalRecordCount + 1 - ((sampleVO.pageIndex - 1) * sampleVO.recordCountPerPage + iterStat.count)}"></td>

컨트롤러 91행이 sampleVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()) 로 값을 이미 채워 두므로 템플릿에서 그 값을 쓰도록 했습니다. 컨트롤러·SQL·설정은 그대로입니다.

영향 범위

목록 템플릿은 egovSampleList.html 하나이고 98행은 th:each 안의 No 칸이라 모든 목록 렌더가 이 식을 탑니다. 다만 EgovConfigProperties 16·17행이 pageUnitpageSize 를 모두 10 으로 두고 있어 기본 설정에서는 두 식의 값이 같습니다 — 화면 출력은 바뀌지 않습니다.

두 값을 다르게 잡으면 2페이지부터 어긋납니다. pageUnit=10, pageSize=5, 총 114건이면 2페이지 첫 행이 104 가 아니라 109 로 찍혀 1페이지 6번째 행과 번호가 겹칩니다. sampleVO@ModelAttribute 라 URL 로 pageSize 를 넘겨도 컨트롤러 81행이 프로퍼티 값으로 덮어쓰므로 요청 파라미터만으로는 재현되지 않습니다.

검증

추가한 EgovSampleControllerTestSelectListRowNumberTest 는 중첩 @TestConfiguration 으로 propertiesService 빈을 pageUnit=10·pageSize=5 로 덮어쓰고(테스트 application.propertiesspring.main.allow-bean-definition-overriding=true 가 이미 있습니다), /egovSampleList.do?pageIndex=2 의 렌더 결과에서 첫 No 칸을 뽑아 모델의 paginationInfo 로 계산한 기대값과 비교합니다. 총건수를 하드코딩하지 않고 모델에서 파생시켜 다른 테스트의 INSERT 로 건수가 바뀌어도 깨지지 않습니다.

수정 전 상태를 보려면 템플릿 98행을 되돌린 뒤 같은 명령을 돌립니다.

sed -i '' 's|(sampleVO.pageIndex - 1) \* sampleVO.recordCountPerPage|(sampleVO.pageIndex - 1) * sampleVO.pageSize|' src/main/resources/templates/thymeleaf/sample/egovSampleList.html
mvn -B -Dtest=EgovSampleControllerTestSelectListRowNumberTest test
[ERROR] Failures: 
[ERROR]   EgovSampleControllerTestSelectListRowNumberTest.test_행번호_페이지당건수:89 
expected: 104
 but was: 109
[INFO] 
[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0
[INFO] BUILD FAILURE

수정을 적용하고 같은 명령을 돌린 결과입니다.

mvn -B -Dtest=EgovSampleControllerTestSelectListRowNumberTest test
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] BUILD SUCCESS

전체 스위트(mvn -B test)는 템플릿 98행만 토글해 두 번 돌렸습니다.

결과
수정 전 Tests run: 55, Failures: 1, Errors: 0, Skipped: 0 — BUILD FAILURE
수정 후 Tests run: 55, Failures: 0, Errors: 0, Skipped: 0 — BUILD SUCCESS

실패는 추가한 테스트 하나뿐이고, 기존 54건은 양쪽 모두 통과합니다.

JUnit 테스트 JUnit tests

테스트를 완료하셨으면 다음 항목에 [대문자X]로 표시해 주세요. When you're done testing, check the following items.

  • JUnit 테스트 JUnit tests
  • 수동 테스트 Manual testing

테스트 브라우저 Test Browser

테스트를 진행한 브라우저를 선택해 주세요. Please select the browser(s) you ran the test on. (다중 선택 가능 you can select multiple) [X] X는 대문자여야 합니다.

  • Chrome
  • Firefox
  • Edge
  • Safari
  • Opera
  • Internet Explorer
  • 기타 Others

해당 없음 (기본 설정에서는 화면 출력이 바뀌지 않습니다)

테스트 스크린샷 또는 캡처 영상 Test screenshots or captured video

테스트 전과 후의 스크린샷 또는 캡처 영상을 이곳에 첨부해 주세요. Please attach screenshots or video captures of your before and after tests here.

기본 설정(pageUnit = pageSize = 10)에서는 두 식의 결과가 같아 스크린샷으로 구분되지 않습니다. 위 실행 출력으로 대신합니다.

EgovSampleController 는 두 값을 다른 축으로 나눠 넣는다. 86행은
pageUnit 을 PaginationInfo.recordCountPerPage(페이지당 건수)로,
87행은 pageSize 를 PaginationInfo.pageSize 로 넣는다. PaginationInfo
에서 pageSize 는 getFirstPageNoOnPageList/getLastPageNoOnPageList
에서만 쓰이는 페이지 링크 묶음 크기이고, 레코드 오프셋은
recordCountPerPage 로 계산한다. EgovSample_Sample_SQL.xml 73행의
LIMIT #{recordCountPerPage} OFFSET #{firstIndex} 도 같은 축이다.

그런데 egovSampleList.html 98행의 행 번호 식만 페이지당 건수 자리에
sampleVO.pageSize 를 곱하고 있었다. EgovConfigProperties 가 두 값을
모두 10 으로 두고 있어 기본 설정에서는 결과가 우연히 같지만, 값을
다르게 잡으면 2페이지부터 번호가 어긋난다. pageUnit=10, pageSize=5,
총 114건이면 2페이지 첫 행이 104 가 아니라 109 로 찍혀 1페이지 6번째
행과 번호가 겹친다.

컨트롤러 91행이 sampleVO.recordCountPerPage 를 이미 채워 두므로
템플릿에서 그 값을 쓰도록 바꿨다. 두 값을 다르게 설정하고 2페이지 첫
행 번호를 확인하는 테스트를 추가했다.

@jei007 jei007 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

표준프레임워크에 대한 지속적인 참여에
대단히 감사드립니다.

@jei007
jei007 merged commit fa0e66c into eGovFramework:main Sep 9, 2026
1 check passed
@wantaekchoi
wantaekchoi deleted the fix/row-number-uses-page-size branch September 9, 2026 08:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants