Skip to content
isdnetworks
Go back

거의 안 여는 자리가 있었다

(수정됨)

코드 정리를 하면서 어디부터 손댈지 정해야 했는데 눈에 거슬리는 곳부터 고르는 대신 숫자를 먼저 내 보기로 했다.

Table of contents

Open Table of contents

조치 — 여는 빈도 측정

반년치 커밋 이력에서 파일별로 수정된 횟수를 뽑아 정렬했다. git 공식 문서의 git-log 페이지대로 --name-only 는 커밋마다 바뀐 파일 이름만 내므로 uniq -c 로 세면 된다.

$ git log --since="6 months ago" --name-only --pretty=format: | sort | uniq -c | sort -rn | head -20
   88 app/Services/OrderService.php
   62 app/Http/Controllers/OrderController.php
   41 app/Models/Order.php
    1 app/Legacy/OldReportGenerator.php
    0 app/Legacy/LegacyImporter.php

자주 여는 것과 안 여는 것이 뚜렷하게 갈렸는데 OrderService.php 는 반년에 수십 번을 열었고 app/Legacy/ 쪽은 반년에 한 번 열거나 아예 열지 않았다.

판단 기준 — 정리 대상의 우선순위

정리의 값은 그 코드를 얼마나 자주 읽는지에 비례한다. 수십 번 여는 파일을 읽기 쉽게 만들면 그 이득이 그 횟수만큼 나고, 아무도 안 여는 파일은 아무리 깔끔하게 만들어도 그것을 볼 사람이 없다.

그래서 OrderService.php 부터 정리하고 반년에 한 번 여는 OldReportGenerator.php 는 손대지 않았다. 정리하고 싶은 코드와 정리해야 할 코드가 같지 않다는 것이 숫자로 갈렸다.

안 여는 곳의 처리

안 여는 곳은 정리 대신 다른 것을 했는데 구조는 그대로 두고 무엇을 하는 코드인지를 파일 맨 위 주석 /* … */ 에 적었다.

/* 2019 년 이관 때 쓴 것. 지금은 월 1회 배치에서만 부른다.
   입력: 옛 시스템의 CSV. 출력: order 테이블
   담당: 없음. 문제가 나면 배치를 멈추고 담당을 정한다 */

담당이 정해져 있지 않다는 사실도 함께 적었고 반년 뒤에 그 파일을 열었을 때 읽는 시간이 실제로 줄었다.

안 여는 것 중에서도 도는 것과 안 도는 것을 갈랐다. laravel.log 에서 이름을 찾아 보니 LegacyImporter.php 는 로그에도 없어서 돌지 않는 코드였다. 없애는 데는 두 가지 방법이 있었는데 바로 지우는 것과 archive/ 로 옮겨 두고 기다리는 것이다. 뒤쪽을 골랐다. 이유는 반년치 로그에 없다는 것이 연 1회 배치까지 가려 주지는 않아서다. 대신 세 달 동안 죽은 코드가 저장소에 남는 것을 감수했다. 근거는 지운 뒤에 배치가 실패하면 그때는 어느 파일이었는지부터 다시 찾아야 한다는 점이다. 세 달 동안 아무 일이 없는 것을 확인한 뒤 지웠다.

고침 횟수와 참조 횟수

git log 의 고치는 횟수와 grep -r 의 참조되는 횟수를 따로 세어 보니 둘이 서로 다른 것을 가리키고 있었다.

파일                     고침  참조
OrderService.php          88    41
OrderStatusEnum.php        2    62

OrderStatusEnum.php 는 거의 안 고치는데 grep -r 로 세니 수십 곳에서 참조하고 있었다. 안 고치니 정리 대상은 아니지만 여기를 고치면 그 수십 곳에 영향이 가므로 조심할 대상이다. 자주 고치는 곳과 많이 참조되는 곳은 다른 이유로 중요하고 다른 방식으로 다뤄야 했다.

영역별 성격을 표로 만들어 두고 새로 합류한 사람에게 그 표를 먼저 보였다. 어디를 주로 보게 될지와 어디를 조심해야 하는지가 그 표에서 갈린다.

다시 열었을 때 읽을 것

정리를 안 하기로 한 app/Legacy/ 에서 문제가 났는데 반년 만에 열었더니 무엇을 하는 코드인지 몰라 파악에만 하루가 걸렸다.

그 뒤로 안 여는 곳에도 최소한을 넣었는데 무엇을 하는지와 입력이 어디서 오는지와 실패하면 어떻게 되는지와 주의할 점 네 줄이다.

/* 이 파일은 자주 안 고친다. 고칠 일이 생기면 아래를 먼저 읽는다.
   무엇: 월 1회 옛 시스템 CSV 를 읽어 order 에 넣는다
   입력: /data/legacy/*.csv (매월 1일 상대가 올린다)
   실패하면: 배치가 멈추고 알림이 온다. 재실행은 --date 로 그 달만
   주의: 인코딩이 EUC-KR 이다 */

네 줄을 적어 둔 것만으로 하루 걸리던 파악이 한 시간 안으로 줄었다. 정리는 안 하더라도 다시 열었을 때 읽을 것은 남긴다.

정리


Share this post on:

Previous Post
결과를 만든 확인 행위
Next Post
스스로를 봉인하는 되먹임 없는 경로