오늘 생긴 문제는 헬스장 정렬 기능을 개발하던 중, "가격 낮은 순/높은 순" 선택 시 URL에는 파라미터가 추가되지만 실제로 헬스장 목록이 정렬되지 않는 문제가 발생했다.
처음에는 JavaScript 문제인가 싶었지만, 코드를 확인해보니 정렬 관련 코드가 index.jsp 파일 내 세 곳에 중복으로 작성되어 있었다. 원인을 찾기 위해 전체 흐름을 다시 살펴보았고, Controller에서는 `getAllGymsWithSort()` 메서드를 호출하고 있었지만 정작 Service와 Mapper에는 해당 메서드가 구현되지 않았다는 사실을 발견했다. 게다가 가격 기준 정렬을 위한 SQL 쿼리도 gym-mapper.xml에 작성되지 않은 상태였다. 결국 프론트엔드는 정상적으로 요청을 보내고 있었지만, 백엔드가 그 요청을 처리할 수 없었던 것이다.
개발 기록을 확인해보니 초기화면 구성 당시 하드코딩으로 임의에 데이터환경을 만들었었고 해당 화경에서 정렬 기준을 테스트하려고 했기에 생긴 문제였었다.
문제를 해결하기 위해 먼저 중복된 JavaScript 코드 2개를 삭제하고 마지막 script 태그의 코드만 남겼다. 그 다음 GymMapper 인터페이스에 `selectAllGymsWithSort()` 메서드를 추가했고, Service와 ServiceImpl에도 동일하게 메서드를 구현했다. 마지막으로 gym-mapper.xml에 PRODUCT 테이블과 LEFT JOIN하여 1개월 회원권 가격을 기준으로 정렬하는 쿼리를 작성했다. 이때 1개월 회원권이 없는 헬스장도 조회되되 맨 뒤로 가도록 `NULLS LAST`와 `CASE WHEN` 구문을 활용했다. 서버를 재시작한 뒤 다시 테스트하자 정렬이 정상적으로 작동했고, 선택한 정렬 옵션도 페이지 새로고침 후에 유지되었다.
이번 경험을 통해 코드 중복은 관리도 어렵고 버그의 원인이 될 수 있다는 점을 실감했다. 또한 기능 개발 시 프론트엔드부터 백엔드까지 전체 데이터 흐름을 먼저 설계하고 단계별로 구현해야 한다는 기본 원칙을 다시 한번 깨달았다. 특히 MyBatis 쿼리에서 NULL 값 처리와 정렬 조건의 정확한 매칭이 얼마나 중요한지도 배웠고, 작은 누락 하나가 전체 기능을 마비시킬 수 있다는 점도 느꼈다.
'-- 오늘 있었던 개발 일기' 카테고리의 다른 글
| 오늘의 개발 문제 : React props 화면에 아무것도 안 보인다... (0) | 2025.11.26 |
|---|---|
| 오늘의 개발 문제 : 실행 환경 보안 정책 (0) | 2025.11.24 |
| 오늘의 개발 문제 : 더미데이터 (0) | 2025.11.19 |
| 오늘의 개발 문제 : 초기 로직을 점검하고 수정하는 습관이 필요 (0) | 2025.11.18 |
| 오늘의 개발 문제 : 목록이 보이질 않는다.. (0) | 2025.11.14 |