Skip to content
isdnetworks
Go back

옛 판에만 있던 기능

옛 화면을 새 화면으로 바꾸고 옛것을 닫았다. 며칠 뒤 그거 어디 갔냐는 문의가 왔다.

Table of contents

Open Table of contents

증상 — 어디 갔냐는 문의

새 화면을 만들 때는 옛 화면을 열어 놓고 보이는 것을 전부 옮겼다.

옛 화면
  목록에서 여러 개 선택 → 일괄 상태 변경   (버튼이 아래쪽에 작게 있었다)
  주소창에 ?export=1 을 붙이면 엑셀로 받아진다  ← 이건 아예 몰랐다

첫째는 버튼이 작아서 못 봤고 둘째는 화면에 아예 없었다.

?export=1 은 아는 사람만 쓰던 것이었다. 화면에 단추도 없고 다른 화면에서 이어지는 길도 없어서 눈으로 옮기는 방식으로는 잡힐 수가 없었다.

legacy/order/list.php 를 열어 두고 만들었는데도 그랬다. 화면에 그려지는 부분만 읽고 $_GET 을 보는 분기는 지나친 것이다.

옮기면서 빠진 것이 있었다

화면을 보는 대신 옛 코드를 읽었다.

$ grep -n "if (\$_GET\|if (\$_POST\|isset(\$_GET" legacy/order/list.php

주소나 값에 따라 갈리는 자리가 넷 나왔다.

?export=1      엑셀 내려받기
?print=1       인쇄용 화면
?debug=1       쿼리 출력 (개발용)
&mode=simple   간략 보기

넷 중 새 화면에 있는 것은 하나도 없었다.

문의가 온 것은 ?export=1 하나였고 나머지 셋은 아무도 말하지 않았다. 말이 안 나왔다고 안 쓰는 것은 아니라서 그것부터 갈라야 했다.

?debug=1 처럼 개발용으로 만든 것이 섞여 있을 수도 있다. 넷을 같은 무게로 옮기면 안 쓰는 기능을 새 화면에 그대로 들여오게 된다.

검증 — 접속 로그로 실제 사용을 셌다

전부 옮길 필요는 없으니 실제로 불리는지를 셌다.

$ awk '{print $7}' /var/log/nginx/access.log.* | grep "order/list" | grep -o "?.*" | sort | uniq -c | sort -rn
  41022 ?page=1
   8204 ?export=1
    112 &mode=simple
      3 ?print=1

export 는 석 달에 8천 번이고 print 는 세 번이다.

debug 는 로그에 아예 없었다. 개발 환경에서만 쓰던 것이라 운영 로그에 남을 일이 없었다.

숫자가 있으니 무엇을 옮길지가 그 자리에서 갈렸다. 로그가 없었으면 넷을 다 옮기거나 다 버리는 쪽으로 갔을 것이다.

access.log 가 석 달치 남아 있던 것이 이번에 컸다. 로그 보관 기간이 짧았으면 &mode=simple 의 112회 같은 수는 안 나왔을 것이다.

대응 — 닫기 전의 리다이렉트

순서를 이렇게 잡았어야 했다.

1. 옛 화면의 진입점을 전부 찾는다 (주소 인자 포함)
2. 접속 로그로 실제 사용을 센다
3. 쓰이는 것을 새 화면에 옮긴다
4. 옛 화면을 바로 닫지 말고 새 화면으로 보낸다
5. 한 달간 지켜보고 닫는다

4번을 건너뛰고 바로 404가 나게 한 것이 이번의 실수였다.

// 옛 주소로 오면 새 주소로 보내면서 로그에 남긴다
log_message('info', '옛 주소 접근: ' . $_SERVER['REQUEST_URI']);
redirect('/order/list' . ($_GET ? '?' . http_build_query($_GET) : ''));

REQUEST_URI 를 통째로 남기니 어떤 인자를 붙여 들어오는지까지 보인다.

쓰는 사람은 화면이 안 열려야 말을 하고 그때는 이미 며칠이 지난 뒤다. redirect 로 보내면서 남기면 아무도 불편하지 않은 상태로 같은 정보가 모인다.

한 달쯤 두면 달마다 한 번 쓰는 기능까지 걸린다. 분기나 연말에만 쓰는 것이 있으면 그보다 더 길게 둬야 한다는 뜻이기도 하다.

안 옮긴 것과 물어본 것

안 옮긴 것은 이유와 함께 적어 뒀다.

옮기지 않은 기능

?print=1     인쇄용 화면. 3개월간 3회 사용. 필요하면 브라우저 인쇄로 대체
?debug=1     개발용. 새 화면은 별도 도구 사용
&mode=simple 간략 보기. 112회 사용. 새 화면의 컬럼 숨기기로 대체 가능

나중에 왜 없느냐는 물음이 오면 이 표로 답할 수 있다.

mode=simple 은 새 화면의 컬럼 숨기기로 같은 일을 할 수 있어서 그 방법을 안내에 적었다. 없앤 것과 다른 방법으로 옮긴 것은 받는 쪽에서 다르게 들린다.

코드와 로그를 다 봤는데도 못 찾은 것이 있었다. 만들고 나서 쓰던 사람들에게 물었더니 셋이 나왔고 그중 하나가 이것이었다.

목록에서 마우스 오른쪽 → 새 탭에서 열기가 안 된다

새 화면이 자바스크립트로 이동하게 돼 있어서 <a> 가 아니었다. 링크로 바꾸니 해결됐는데 이런 것은 코드에도 access.log 에도 안 남는다.

제약 — 옛 코드에 적어 둔 날짜

새 화면이 자리 잡을 때까지 옛 코드를 지우지 않았다.

legacy/order/list.php     남김 (2018-03 이후 삭제 예정)

지울 날짜를 같이 적어 두지 않으면 그 파일은 영영 남는다.

석 달 뒤에 access.log 를 다시 보니 옛 주소 접근이 0이었고 그때 지웠다. 날짜가 없으면 지울지 말지를 볼 때마다 다시 고민하게 된다.

정리


Share this post on:

Previous Post
결제 수단에 따라 달랐던 약관
Next Post
같은 조정인데 문구가 둘이었다