문서를 출력하는 기능이 상용 리포트 뷰어를 쓰고 있었고 통합 부분은 짧은 페이지 하나가 전부였다. 그 파일을 열어 보니 줄 수는 짧은데 손볼 것이 여럿 있었다.
Table of contents
Open Table of contents
51줄짜리 통합 페이지
첫 줄부터 이미 사라진 실행 환경의 이름이 들어간 함수를 부르고 있었다. 그 환경은 오래전에 지원이 끝났고 지금은 아무 관계가 없다.
상용 제품의 함수 이름은 제품이 지나온 역사를 그대로 담고 있어서 지금 무엇을 하는지와 안 맞는 경우가 있다. 이름이 가리키는 것이 이미 없어도 호환을 위해 이름만 남는다.
화석이 된 이름
이름만 보고 이 함수가 무엇을 하는지 짐작하면 틀린다. 그래서 문서를 찾아서 그 함수가 지금 실제로 무엇을 하는지를 확인해야 했다.
이런 자리에는 왜 이 이름인지를 짧게 주석으로 남겼다. 다음 사람이 이름을 보고 지워도 되는 것으로 오해하지 않게 하기 위해서였다.
같은 값을 두 곳에 넣고 있었다
설정 값을 문자열로 넘기는 부분이 있었는데 같은 값을 두 계층에 각각 넣고 있었다. 한쪽만 고치면 다른 쪽이 옛 값으로 남아서 그 값으로 동작한다.
실제로 어느 쪽이 우선하는지를 확인해서 한 곳으로 줄였다. 같은 값이 두 자리에 있으면 그 자체가 언젠가 어긋나는 원인이 된다.
개수를 따로 세는 파라미터
인자를 넘기면서 그 개수를 별도로 적는 자리도 있었다. 인자를 하나 추가하면서 개수를 안 고치면 마지막 것이 조용히 무시된다.
오류가 안 나고 값만 안 들어가므로 나중에 왜 안 되는지를 찾게 된다. 개수를 따로 세는 구조는 그런 창을 만들어 둔다는 것을 알고 써야 했다.
복사한 예제의 잔재
제품 예제를 복사해서 만든 흔적이 남아 있었는데 주석 안에 내부 주소가 그대로 들어 있었다. 안 쓰는 부분을 안 지우면 그것이 그대로 배포된다.
디버그 표시가 켜진 채로 운영에 나가 있는 것도 함께 발견했다. 마지막으로 이 라이브러리를 왜 못 올리는지를 적어 뒀는데 낡았다는 사실보다 그 이유가 다음 판단에 쓰인다.
정리
- 상용 컴포넌트의 API 이름은 제품 역사의 화석이다
- 이름이 가리키는 것이 이미 없을 수 있다
- 이름만 보고 짐작하지 말고 문서로 확인한다
- 같은 값을 두 계층에 넣으면 한쪽만 고쳤을 때 옛 값으로 동작한다
- 개수를 별도로 세는 파라미터는 조용히 무시되는 창을 만든다
- 예제를 복사했으면 안 쓰는 부분을 지운다
- 운영 페이지의 디버그 표시를 확인한다
- 의존 버전은 낡았다가 아니라 왜 못 올리는지를 적는다