개발 slecs

상품 목록 서버사이드 페이징 통일

목차

feat: 상품 옵션 처리 및 페이징, 카테고리 로직 개선

서버사이드 페이징을 표준화하는 작업이었음. 여러 목록 페이지가 각자 다른 방식으로 페이징을 구현하고 있어서 통일함.

MyBatis 쿼리 패턴

<select id="selectList">
  SELECT * FROM product
  WHERE status = 'ACTIVE'
  <if test="keyword != null">
    AND product_nm LIKE CONCAT('%', #{keyword}, '%')
  </if>
  ORDER BY created_at DESC
  LIMIT #{size} OFFSET #{offset}
</select>

페이징 UI 컴포넌트

요소 처리
이전/다음 버튼 첫/마지막 페이지에서 비활성화
페이지 번호 현재 페이지 ±2 범위 표시
총 건수 결과 상단 표시

카테고리/검색 조건 변경 시 page=1 리셋 처리가 빠지는 실수가 많음. 변경 이벤트 핸들러에서 page 파라미터를 1로 초기화하도록 공통화함.

개발 원칙 정리

이 작업을 진행하면서 재확인한 원칙들:

작은 커밋: 변경 단위를 작게 유지해서 코드 리뷰와 롤백이 쉽게.

테스트 먼저: 변경 전 현재 동작을 파악하고, 변경 후 동일하게 동작하는지 확인.

문서 동기화: 코드가 바뀌면 관련 주석과 문서도 같이 업데이트.

원칙 이유
단일 책임 하나의 함수/클래스는 하나의 역할만
명시적 코드 영리한 코드보다 읽기 쉬운 코드
실패 우선 처리 happy path보다 에러 케이스 먼저 설계

댓글 0

첫 댓글 달아줘.