상위 상품의 이미지를 하위에서 대신 쓰는 기능이 필요해서 찾아보니 이미 있었는데 주석 처리돼 있었다. 변수 정의는 살아 있고 조건도 그대로인데 본문만 주석이라 풀면 될 것처럼 보였다.
Table of contents
Open Table of contents
이력이 말한 이유
풀기 전에 언제 그렇게 됐는지를 이력에서 봤다. 커밋 메시지가 정보 반영 버그를 고쳤다는 내용이었고 버그를 고치면서 끈 것이었다.
차이와 관련 변경을 같이 보니 이유가 나왔다. 이 대체 로직이 편집 화면에 있어서 하위에 이미지가 없을 때 상위 것을 대신 보여 주는데 사용자는 이미지가 있다고 보고 저장하고 저장 로직은 하위에 이미지가 없다고 안다. 보이는 것과 실제 있는 것이 어긋나는 상태였고 그래서 껐다.
자리가 다른 같은 로직
내가 필요한 것은 전송 경로에서의 대체였다. 마켓으로 보낼 때 하위에 이미지가 없으면 상위 것을 보내려는 것이다.
같은 로직인데 자리가 달랐다. 편집 화면은 사용자가 그 값을 보고 저장을 결정하므로 표시와 실제가 같아야 하고 전송 경로는 읽어서 보내기만 하며 저장으로 돌아오지 않는다. 그래서 상위 대체는 전송 경로에만 적용하고 편집 화면은 하위 자신의 값만 표시하기로 범위를 한정했다. 이력을 안 봤으면 주석을 풀었을 것이고 같은 버그가 다시 났을 것이다.
한 커밋에 섞인 두 변경
이력을 보다가 같은 커밋이 다른 것도 고치고 있는 것을 발견했다. 작업 발행 코드가 조건문과 루프 안에 들어 있어서 취소할 기존 작업이 없으면 발행이 아예 안 되는 상태였다.
그 커밋이 발행을 루프와 조건 밖으로 꺼내서 고쳤다. 이 커밋은 편집 화면의 대체 로직 비활성화와 작업 발행 재구조화라는 성격이 다른 두 변경을 담고 있었는데 메시지는 하나였다. 어느 쪽이 그 버그였는지 메시지로는 알 수 없고 차이를 다 읽어야 갈리는데 커밋 하나가 한 가지를 하면 메시지가 곧 설명이 된다.
주석 처리의 함정
이번 건에서 다시 확인한 것이 있다. 주석 처리된 코드는 왜 껐는지를 알려 주지 않는다.
지웠으면 이력을 봐야 하고 이력에는 커밋 메시지가 있는데 주석으로 남기면 파일 안에 있으니 이력을 안 보고 풀면 되겠다고 넘어가게 된다. 역설적으로 지우는 쪽이 더 안전하고 굳이 주석으로 남기려면 왜 껐는지를 같이 적어야 한다.
정리
- 주석 처리된 로직을 되살리기 전에 왜 껐는지 이력을 본다
- 편집 화면에서 대체 표시를 하면 보이는 것과 실제가 어긋난다
- 읽기만 하는 경로와 저장으로 돌아오는 경로는 다르다
- 같은 로직이라도 자리가 다르면 판단이 달라진다
- 한 커밋이 성격이 다른 두 변경을 담고 있으면 메시지로는 못 가른다
- 발행이 조건문과 루프 안에 있으면 그 조건이 안 맞을 때 통째로 안 돈다
- 주석 처리는 왜 껐는지를 알려 주지 않는다
- 지우고 이력에 맡기는 쪽이 더 안전하다