매뉴얼 화면에서 사이드바 메뉴가 뒤섞이던 모델 키 충돌 해결
목차
menuList 가 두 개였음
매뉴얼 자동 생성 화면을 손보다 이상한 현상을 만났음. 본문에 떠야 할 항목 리스트가 가끔 사이드바 메뉴로 둔갑함. 새로고침하면 또 바뀜. 캐시 의심부터 했지만 아니었음.
원인은 단순했음. 공통 인터셉터에서 모든 화면에 menuList 라는 이름으로 GNB/사이드바용 메뉴를 모델에 꽂아주고 있었음. 그런데 매뉴얼 생성기에서도 본문에 출력할 가이드 항목을 menuList 로 담고 있었음. 동일 키. 어느 쪽이 마지막에 들어가느냐에 따라 결과가 달라짐.
어떻게 해결했는가
이름만 바꾸면 끝나는 문제였음. 본문용은 manualMenuList 로 변경.
| 변수 | 의미 | 주입 위치 |
|---|---|---|
menuList |
GNB/사이드바 공통 메뉴 | 공통 인터셉터 |
manualMenuList |
매뉴얼 본문 항목 | 매뉴얼 생성 컨트롤러 |
model.addAttribute("menuList", ...) // 공통 메뉴 (전역)
model.addAttribute("manualMenuList", ...) // 매뉴얼 전용
템플릿 쪽도 동일하게 바꿔주고, 매뉴얼 화면이 정상 렌더링되는지 확인. 한 줄짜리 fix 처럼 보이지만 의도치 않게 다른 화면을 망가뜨릴 수 있는 충돌을 끊어낸 변경이라 PR 사이즈에 비해 효과가 컸음.
회고 포인트
- 공통 모델 키는 사실상 예약어임. 인터셉터/필터에서 자동 주입되는 키를 화면에서 다시 쓰면 충돌. 팀 내 공통 키 목록을 README 어딘가에 박아두는 게 나음.
- 변수명에 도메인 접두어 붙이기.
list,data,items,menuList같은 일반 명사는 다른 곳에서 쉽게 겹침.manualXxx,partnerXxx처럼 기능 접두어를 붙이면 충돌이 줄어듦. - 재현되는데 원인이 안 보일 땐 모델 덤프부터. 화면이 이상하면 컨트롤러 로직보다 모델에 무엇이 어떤 키로 들어갔는지를 먼저 찍는 게 빠름. 인터셉터의 부작용을 가장 빨리 잡는 길.
리뷰어 입장에서도 menuList 두 개를 동시에 보는 것보다 이름이 갈라져 있으면 PR 해석이 훨씬 쉬워짐. 작은 가드레일을 하나 친 셈.
다음
댓글 0
첫 댓글 달아줘.