[slackbot] 빌드머신 점검하다가 문득 봇을 짜보았다

회사에서 빌드머신으로 사용중인 맥미니 장비들은 주기적으로 몇가지 관리가 필요하다.

최근에 유니티6로 엔진 업데이트한 이후 빌드머신에 갖가지 이슈들이 생기면서 디스크 용량 체크를 해보던 중이었다.

이거 코드 작업 조금만 하면 만들 수 있겠다는 생각이 들었고, 미루면 아마 영영 실천으로 옮기지 않게 될 것 같아 생각난 김에 바로 만들었다.

powershell

처음엔 ssh 연결로 커맨드를 실행해서 장비마다 df -h 결과를 받아오고 있었다. 그러다 세 대 쯤하다보니, 서버 주소만 다르고 동일한 커맨드를 반복 실행하고 있길래, 파워쉘에서 loop를 돌아 output을 수집하도록 스크립트를 작성해 돌렸다.

그리고는 내가 이걸 눈으로 읽어서 엑셀에 수작업으로 정리해 팀원들에게 공유했다.
다음에 동일한 작업을 해야 할 때, 파워쉘 스크립트를 재사용할 수 있도록 정리해서 vcs에 올렸다.

근데 만약 다음에 디스크 공간 확인을 해야 할 때, 다른 멤버가 이 스크립트를 사용하려면 ssh 키 설정도 되어 있어야 하고, 스크립트 실행 환경도 잘 맞아야 하고. 혹시 제대로 실행되지 않으면 디버깅도 해야 할거고.. 뭔가 매끄럽지 않을 것 같은 생각이 들었다. 그리고 프로그래머가 아니면 애초에 엄두도 못 낼 일이다. 그래서 그냥 누구나 확인할 수 있게 팀 내 메신저로 쓰는 슬랙에 기능으로 만들어 붙이면 좋겠다고 생각했다.

slackbot

slack bot은 이슈트래커 연동 등 이미 다른 용도로 만들어 사용중인 실행파일이 있다. 새로운 기능 추가도 용이하도록 어느정도 준비도 되어 있다. 필요한 건 의지 뿐이다. 지금 마음 먹었을 때 바로 해야 한다. 오늘이 지나기 전에 기능을 완성해서 릴리즈 하고 싶었다.

슬랙봇이 떠있는 장비에서 ssh 키를 생성해 모든 빌드머신에 등록해주었다. 슬랙봇은 윈도우 2019에서 실행중인데, 이번에 여기에도 openssh 서버를 열고 ssh로 접속해서 설정을 진행했다. 나중엔 슬랙봇 실행 os 자체도 linux로 변경하면 좋겠다.

ssh 명령으로 df -h | grep -e ....를 실행하고 결과를 파싱하는 건 어렵지 않게 진행됐다. C# 참 좋은 언어인데, 사람들이 많이 모르는 것 같다.

그리고 markup? 출력은 몇 번의 삽질 끝에, 최종의 형태로 다듬었다. 이런 작업도 참 재미있다. 나는 서버 말고 클라이언트 개발을 했어도 참 잘했을거야. 아무도 칭찬 해주지 않으니까 이럴 때 내가 실컷 칭찬해준다. 잘한다 아주.

최종 형태도 조금 아쉽긴 하다. 오와 열이 딱 맞지 않아. slack api의 block kit에서 테이블 형태 레이아웃을 지원해주면 좋을텐데 그런게 없다.
나름대로 지금 표현할 수 있는 수준에서 최선을 다해 보았다.
머신별로 서로 다른 디스크의 전체 크기가 눈으로 쉽게 들어오게 하고 싶었고, 용량 대비 사용량이 어느 정도인지도 한 눈에 들어오게 하고 싶었다.

다시 한 번 감상해보는 최종 결과물.

ansible을 쓰면 좀 더 좋았을까?

최근데 linux 진영의 생태계를 뒤늦게 살펴보고 있다. 이런 식으로 여러 장비에 수행하는 공통 작업은 주로 ansible을 통해 처리하는 듯 하다. ansible은 알게 된지 얼마 되지 않아 조만간 좀 더 깊이 공부할 생각이다.

ansible을 썼다면 결과물이 좀 더 좋았을까.

아니라는 생각이 들어서 슬랙봇으로 작업을 했다. ansible이 정확히 어디까지 지원해줄 수 있을지는 모르지만, 프로그래머가 아닌 직군의 팀원들도 명령을 수행하고 결과를 확인하기에는 슬랙봇으로 붙여두는 것보다 더 좋을 수 없다고 생각했다. 혹여나 ansibble 공부해보고 개선될만한 여지가 있다면 그 때 다시 수정하는 것도 나쁘지 않겠다.

Know-how

요즘은 기능을 구현하는 방법을 알아내는 것은 아주 쉬운 일이 되었다. 유튜브도 GPT도 원하는 질문의 대답을 너무 빠르게 친절하게 알려준다.

어떻게 하면 만들 수 있지?하는 호기심은 실천의 원동력을 제공해준다. 모르는 것을 알고 싶다는 마음이 의지를 만들고, 그 때문에 책과 자료를 찾으며 공부를 하게 된다.

하지만 요즘은 그 해답에 너무나 빠르게 접근한다. 방법을 알아내는 동안 얻게되는 부수적인 지식도 없고, 이 산인지 저 산인지 몰라 일단 헤딩해보는 여러가지 다른 삽질들도 없다. GPT는 (거의) 정확한 정답을 알려주고, 질문만 잘하면 거의 바로 쓸 수 있는 코드도 작성해준다.

방법을 알아내고 나면 동기가 갑자기 떨어진다. 아~ 나 그거 할 줄 알아. 요래요래 하는거지? 그럼 더이상 뭔가를 알고 싶다는 흥미는 급격히 떨어지고, 다시 유튜브와 인스타를 열고 무한 도파민의 세상으로 다이브 하게된다. 여기가 프로그래머 성장을 막는 중요한 고비라는 생각이 든다.

머리에서 원리를 깨우친 것과, 실제로 손끝에서 코드를 만들어 결과물을 내는 것에는 엄청난 차이가 있다. 막상 해보고 나서야 현실과 생각이 다르다는 것을 깨닫는 경우도 많이 있다. 돌아가는 코드를 직접 만들어 보기 전에는 내 생각을 완벽히 검증할 방법이 달리 있을까.

그래서 만들었다. 오늘이 지나기 전에 만들어야 한다고 생각했다. 아무도 시키는 사람 없었지만 해야 한다고 생각했다. 하루가 넘긴 했지만 (완성 스샷을 보면 시간이 12:34…) 그래도 만들었다.

눈에 띄는 변화는 없을지 모르지만. 나는 오늘 다시 조금 성장했다고 생각한다.

잘했다. 아주.
You did a great job.