먼저 밝혀두자면 이 글은 예전에 썼던 성공적인 야크쉐이빙이란 글에 살을 붙인 것입니다.

야크 쉐이빙(yak shaving)이란 말이 있습니다. 한가지 일을 하려고 하는데 점점 연관성이 떨어지는 일을 하게 되는 일을 말합니다. 예를 들면 프로그램 하나를 짜려고 하는데 테스팅 자동화를 하면 좋다고 해서 테스팅 도구를 찾다가 마땅한게 없어서 직접 만들면서 mock객체를 만드는 것 같은 경우입니다. 나도 상당히 자주 야크 쉐이빙을 했고, 그 결과 망했습니다.

사실 거의 모든 야크 쉐이빙은 필연적으로 망합니다. 그러므로 글 제목에서 언급한 실패하는 Yak Shaving이란 사실 거의 모든 야크 쉐이빙을 의미합니다. 제가 가장 최근에 한 실패 사례는 Hikikomori 프로젝트입니다. 간단히 소개하자면 일본 아니메를 좋아하는 필자를 위해 대신 아니메를 수집해주는 별로 좋지 않은 프로그램입니다. 개발을 하다보니 점점 추가하고 싶은 기능 등이 늘어났는데, 이것을 무분별하게 늘려나가다보니 프로그램 자체는 동작도 안되고 어디부터 손대야할지 모르는 코드가 되어버렸습니다. 그 와중에도 아니메를 보고싶은건 참을 수 없어서 그냥 평소처럼 Windows 데스크탑에서 아니메를 구해서 보고 말았습니다. 결국 프로젝트는 먼지만 쌓이고 있습니다.

하지만 실패만 하는 것은 아닙니다. 가끔씩 야크 쉐이빙에 성공하는 경우가 있습니다. 야크 쉐이빙도 경우와 방법에 따라서는 성공할 수도 있다는 것이죠.

여기부턴 실제 제 경험입니다. 문제의 시발점은 예전에 쓰던 텀블러 블로그의 코드 하이라이팅입니다. 예전 블로그의 코드 하이라이팅은 사용할 수 없는 수준이었습니다. 이걸 고쳐서 쓸까 생각해봤는데 영 맘에 들지 않았습니다. 어차피 고쳐도 문법 강조 같은것도 되지 않을 것이기에 저로써는 만족하지 못할 것이기 때문입니다. 그래서 블로그를 새로 만들기로 했습니다. 그래서 꽤 많은 삽질을 했습니다. Jekyll을 배우고, Liquid를 배웠습니다. 기본 틀로 쓴 테마의 Sass 구문을 들어 엎었습니다. 테마를 들어 엎어가며 여러기능을 추가하다보니 내가 뭘 하고 있는건가 싶었습니다. 이대로 가다간 블로그에 코드가 첨부된 글을 쓴다는 목적이 날아가버리는 것 아닌가 싶었습니다.

하지만 일단 어찌되었건 성공했습니다. 아마 성공요인은 너무 멀리 가지 않았던 덕인 것 같습니다. 아마 저기서 더 멀리 갔더라면 중도에 질려서 포기했을지도 모릅니다. 그리고 계속 minimal한 코드에서 시작해서 점진적으로 발전하는 프로그램이 가시적으로 보였기 때문에 질리지 않았던 것 같습니다.

제 경우에 빗대어 좀 더 자세히 이야기해보자면 저의 경우는 Jekyll을 이용해서 블로그를 만든다는 중심 목표에서 크게 벗어나지 않으면서 여러가지 삽질을 했습니다. Liquid 문법을 보며 고생을 했지만 결과적으로 Pagination이 완성되었고, Bootstrap Sass 버전을 분석하며 고생했지만 결과적으로 블로그가 좀 더 화면 크기에 잘 대응하게 변했습니다. 많은 이들이 Jekyll 블로그에서 기대하는 기능의 범주를 벗어난 것을 만들게 되었지만 내가 깎아내리는 하나하나의 야크 털 조각들이 가시적으로 내가 만들고자 하는 블로그의 형태를 만들어가고 있었습니다. 그리고 그 결과 저는 지금 이 블로그에 글을 쓰고 있습니다.

고로 야크 쉐이빙을 할 것이라면 너무 멀리 가지 말아야 합니다. 내가 만약 Jekyll 플러그인을 만든다고 Ruby를 배운다던가 하는 식으로 더더욱 멀리 갔더라면 이 블로그는 존재할 수 없었을 것입니다. 성과를 체감하는 것도 중요하다고 생각합니다. 소스를 고쳐도 성과가 눈 앞에 보이지 않으면 사람은 금방 지쳐버립니다. 일단 눈에 보이는 성과가 나타나도록 야크 쉐이빙 자체를 유도해야할 필요가 있습니다.

그리고 또 한가지 덧붙이자면, 실패한 야크 쉐이빙이라할지라도 야크를 죽여버리진 않는게 좋다고 생각합니다. 언젠가 다시 필요한 때가 올 수도 있습니다. 필자의 경우는 머지 않아 Windows 데스크탑을 못 쓰게될 처지에 놓였는데 이럴 경우 다시 Hikikomori를 고쳐서 돌려야 합니다. 깎다 말은 야크의 털을 다시 깎아서라도 써야하는 상황이 올 수 있다는 것입니다.다물론 그런 경우라도 일단은 동작부터 하게 만드는 것이 더 중요하겠지만 말입니다.