제발 Stale 봇을 잘못된 방식으로 사용하지 마세요

!
경고: 이 글이 작성된 지 365일이 넘었습니다. 글의 정보가 오래되어 부정확할 수 있습니다.

(번역 참고사항: 글 자체에 번역이 안된 영어 단어들은 개발자 용어로 딱히 한글 번역 문구가 존재하지 않는 단어들이라 그대로 두었습니다. 매끄럽게 번역되지 않은 부분 양해 부탁합니다. 만약 읽기 힘드시면 영어 버전을 읽는 것을 추천합니다.)


깃허브의 여러 프로젝트들은 “깃허브 stale 봇"이라는 것을 사용하여 오랫동안 업데이트되지 않은, 즉 stale-한 issue (그리고 pull request)들을 닫아버립니다. 봇은 자동으로 issue들을 확인하고 댓글을 달아 issue가 아직도 관련성이 있는지 확인한 후, 리포지토리 주인이 설정한 시간값 안에 답글이 달리지 않을 경우 issue를 자동으로 닫아버리는 방식입니다.

이는 사용자와 개발자에게 매우 안 좋은 결과를 가져옵니다.

오래된 issue들은 묻혀버립니다

Issue 리포트는 말 그대로 치운다고 해서 사라지는 것이 아닙니다. Stale 봇을 사용하여 닫아버려도 프로젝트에서 버그가 사라지는 것은 아니니까요.

사실, 프로젝트에 더욱 안 좋을 수도 있는데, 이제 버그의 관련된 모든 정보가 깃허브 Issue 탭의 “닫힘 (Closed)” 섹션으로 묻혀버리기 때문입니다. 사람들이 기존 issue를 찾지 못하면 뭘 할까요? 새로운 issue를 만들겠죠. 그러면 이제 해야 할 일은:

가) 새로운 issue를 중복 항목으로 표기하고 예전 issue를 다시 열거나, 아니면

나) 중복된 issue 글들을 병합하는 방법을 찾거나, 아니면

다) 기존 issue에서 관련된 모든 정보를 새로운 issue로 복사/붙여넣기하게 만들어 사용자들을 화나게 만드는 것입니다.

이어지는 것은…

추가 일

Stale 봇은 개발자의 할 일을 줄여주기보다, 아이러니하게도 더욱 많은 할 일을 만들게 됩니다. Issue들이 묻히고 중복된 issue들이 새로 쌓이면서, 봇의 원래 목적의 정반대를 달성하게 되는, 역효과를 불러옵니다. 따라서 코드를 작성하기보다 독자 여러분은 봇을 수시로 지켜보고 점검하며 프로젝트의 사용자들이 깊은 빡침 화가 오를 때 이에 대응해야 하기도 합니다.

지저분한 쓰레드

독자의 프로젝트의 사용자들이 활발하게 활동하며 issue가 아직도 관련성이 있다고 봇에게 수시로 답장하는 상황을 가정해보겠습니다. 봇이 활성화된 이상, 다음과 같은 대화가 issue 안에서 일어납니다:

Stale봇: Issue에 활동이 없는 것 같습니다. 닫을까요?

Stale봇이 stale 태그를 추가했습니다.

사용자: 아니요, 아직 관련성이 있습니다.

Stale봇이 stale 태그를 제거했습니다.

(시간이 지난 후)

Stale봇: Issue에 활동이 없는 것 같습니다. 닫을까요?

Stale봇이 stale 태그를 추가했습니다.

사용자: 아니요… 아직 관련성이 있습니다.

Stale봇이 stale 태그를 제거했습니다.

개발자: 수정 작업을 하고 있는데, 지금은 의존성 X를 기다리고 있는 중이에요.

Stale봇: Issue에 활동이 없는 것 같습니다. 닫을까요?

Stale봇이 stale 태그를 추가했습니다.

개발자: 죽여줘요

Stale봇이 stale 태그를 제거했습니다.

봇 없는 같은 대화:

개발자: 수정 작업을 하고 있는데, 지금은 의존성 X를 기다리고 있는 중이에요.

(시간이 지난 후)

개발자: 의존 프로젝트가 버그를 수정해서, 이제 패치를 만들 수 있어요!

개발자가 feature-fix 브랜치를 병합했습니다.

개발자가 완료 상태로 issue를 닫았습니다.

개발자와 사용자의 입장에서 무슨 쓰레드가 선호도가 더 높을지 알 것 같습니다.

하지만…

물론, stale 봇을 위한 한 가지 사용처가 있다는 점은 인정하겠습니다. 사용자의 피드백을 기다리고 있을 때 말이죠.

만약 사용자가 X 정도의 시간 안에 (여기에서 X는 독자의 참을성을 바탕으로 정합니다) 답장하지 않는다면, stale 봇이 issue를 닫더라도 괜찮다고 생각하는데, 제 생각에는 이런 경우 issue가 그 사용자에게 그렇게 중요하지 않았음을 짐작할 수 있는데, 만약 아니었다면 사용자가 추가적인 정보 (예를 들어 디버깅 로그 등)을 제공할 필요성을 느꼈을 것입니다.

따라서 봇이 특정 태그 (예를 들어, awaiting-user-feedback (사용자 피드백 기다리는 중))를 지닌 issue만을 모니터링하게 만들어, 이 태그가 issue에 추가되었을 경우에만 카운트다운을 하게 만드세요.

솔직히 stale 봇을 위한 유일한 사용 목적이라고 저는 생각하고, 실제로 “오래된” 버그 리포트들을 처리하는데 도움을 준다고 생각합니다.

결론

특정 issue에 답글이 오랫동안 달리지 않더라도 issue가 오래된 것은 아닙니다! 제발 stale 봇을 잘못된 방식으로 사용하지 말아주세요. 프로젝트 사용자들 (그리고 개발자들)이 감사할 거예요. :)

댓글