오픈소스 메인테이너의 고충
원문은 Salvatore Sanfilippo님이 에 게재했습니다. 이 블로그 구독하기
몇 달 전 시스템 소프트웨어 분야의 OSS 프로젝트를 맡고 있는 메인테이너 한 분이 내게 메일을 보내왔다. 꽤 크고 활발한 커뮤니티를 이끌고 있는 분이었다. 수년째 프로젝트를 유지해 오는 일이 심리적으로 너무 버겁다며 더 이상 이어가기 힘들다는 고민이었다. 내게 조언을 구하고 있었는데, 과연 내가 조언을 할 위치에 있는지는 잘 모르겠다. 그래도 그 문제에 대해 내가 어떻게 생각하는지 블로그 글로 적어보겠다고 답했다. 몇 주가 지났고, 여러 번 글을 쓰다 멈추기를 반복했다. 생각을 충분히 정리할 시간이 없었기 때문이다. 이제는 내 안의 약점과 고충, 그리고 자유에 대한 욕망을 들여다보며 답을 찾았다고 생각한다. 어떤 일이든 부정적인 측면이 있는데, 그것을 오랫동안 계속하다 보면 필연적으로 마음속에 스며드는 것들이다. 오픈소스 프로젝트를 유지하는 일은 큰 기쁨과 재미이기도 하다. 지난 10년은 내 직업 인생에서 분명 기억에 남을 시간이며, 최고의 시간이라고까지는 할 수 없어도(사실 스타트업 시절이 더 재미있었다) 결코 나쁘지 않았다. 다만 이 글에서는 부정적인 측면에 집중하려 한다. 그러니 이것만이 전부라는 인상을 받지는 않았으면 한다. 그 안에는 좋은 것도 많다.
홍수 효과
나는 빨리 행동하고 빨리 생각해서 경쟁에서 제때 이기고 하는 식의 방식을 믿지 않는다. 소셜 네트워크와 채팅, 이메일, 빼곡한 일정 때문에 늘 집중하지 못한 채 살아가는 지금 세상이 싫다. 그래서 프로젝트 초창기, 아직 시간이 충분하던 시절에 Redis에 관한 메일을 받으면 보낸 사람이 정말 하고 싶은 말이 무엇인지에 집중할 수 있었다. 우리가 논의하던 Redis의 관련 부분을 떠올리고, 문제를 신중하게 고민한 뒤 내 진짜 생각을 담아 답장할 수 있었다. 나는 어떤 일을 하든 대부분 사람이 이렇게 일해야 한다고 믿는다.
소프트웨어 프로젝트가 Redis만큼 유명해지고, 동시에 새로운 소셜 도구 덕분에 사람들 사이의 소통이 극도로 쉬워지며, 거기에 사용자가 부르면 언제든 ‘거기’에 있으려는 태도까지 더해지면, 메인테이너가 받는 메시지, 이슈, 풀 리퀘스트, 제안의 양은 기하급수적으로 늘어난다. 반면 최소한 Redis의 경우 그렇고 아마 이는 공통적인 문제일 텐데, 커뮤니티에서 들어오는 그런 입력을 제대로 검토할 수 있는 정말 유능한 사람의 수는 아주 천천히 늘 뿐이다. 당연히 병목이 생긴다. 대부분의 사람들은 이를 잘못된 방식으로 해결하려 한다. 바로 실용주의를 내세우는 것이다. 질문을 남긴 뒤 2주 동안 원래 작성자가 답이 없으면 이슈를 닫아버린다. 명확하게 작성되지 않은 이슈는 전부 닫는다. 그 밖의 ‘인박스 제로’식 해결책들이다. 현실은 커뮤니티 피드백을 제대로 처리하려면 필요한 만큼의 시간을 들여야 한다는 것이다. 그렇지 않으면 그저 프로젝트에 열린 이슈가 적은 척하는 것에 불과하다. 각 Redis 하위 시스템마다 코어 수준의 전문가를 고용해 OSS에만 전념하게 할 만큼 자원이 충분하다면 모를까, 그건 현실적으로 불가능하다.
그래서 어떻게 되나? 점점 더 무엇을 볼지, 무엇을 보지 않을지 우선순위를 매기기 시작한다. 그러면서 수많은 것들과 사람들을 외면하는 자신이 한심하게 느껴진다. 기여자 입장에서는 당신이 남들이 주는 것에 관심이 없다고 느끼게 된다. 복잡한 상황이다. 보통의 귀결은 치명적인 이슈 위주로 대응하고 새로운 것들은 외면하는 태도로 굳어지는 것이다. 새로운 것들은 아직 코어에 들어오지도 않았으니, 누가 더 많은 PR과 이슈를 양산할 더 큰 코드베이스를 원하겠는가? 게다가 평소 자신의 프로그래밍 스타일보다 더 복잡하게 작성된 경우도 많으니, 복잡성은 더 커지고, 거기서 치명적인 버그가 터졌을 때 원인을 추적하려면 정말 막막해진다.
역할의 변화
위에서 말한 ‘홍수 효과’ 문제의 결과로, 갑자기 하는 일 자체가 바뀌어 버린다. Redis가 유명해진 건 내가 소프트웨어를 설계하고 쓸 수 있다고 여겨졌기 때문이다. 그런데 이제 내가 하는 일의 대부분은 이슈와 풀 리퀘스트를 들여다보는 것이 됐다. 그리고 받는 기여 중 상당수는 내가 직접 하면 더 잘할 수 있겠다는 생각이 든다. 물론 Redis에는 나보다 뛰어난 프로그래머들도 기여하고 있어서 어떤 기여는 내가 할 수 있는 것보다 품질이 더 좋기도 하다. 하지만 큰 수의 법칙상 *대부분*은 그저 제출한 사람들에게 당면한 특정 문제를 해결하려고 작성된 평균적인 기여다. 반면 내가 Redis를 설계할 때는 이걸 수년간 써왔기 때문에 Redis 전체를 놓고 생각한다. 결국 당신이 잘하던 일을 할 시간이 더 이상 없는 것이다. 이는 다시 말해 유기적으로 탄생하는 큰 기능이 줄어든다는 뜻이다. 내 해결책은? 때로는 몇 주씩 이슈와 PR 보는 걸 완전히 멈춘다. 코딩이나 설계를 하고 있기 때문이다. 그게 내가 정말 사랑하고 즐기는 일이다. 하지만 그러면 심리적으로 훨씬 더 큰 압박이 생긴다. 내가 사랑하고 잘할 수 있는 일을 하려면 형편없는 기분을 감수해야 하는 것이다.
시간
적어도 내게는 같은 프로젝트를 오랫동안 붙잡고 일하는 것과 관련된 문제가 두 가지 있다.
첫째, Redis를 하기 전까지 나는 *단 한 번도* 일주일 내내 매일 일한 적이 없었다. 일주일 일하고 두 주 쉬고, 한 달 일하고 다시 두 달 사라지는 식이었다. 늘 그랬다. 사람은 창의적인 일을 하려면 재충전하고 새로운 에너지와 아이디어를 얻어야 한다. 그리고 높은 수준의 프로그래밍은 정말 창의적인 일이다. Redis 자체도 처음 2년은 그렇게 만들어졌다. 그때가 프로젝트가 가장 빠르게 발전하던 시기였다. 내가 하고 싶을 때만 일할 때의 생산성을 합친 것이, 매일 일정하게 일하도록 강제될 때의 생산성보다 크기 때문이다.
하지만 혼자 회사를 운영할 때는 내 직업 윤리 덕분에 아주 불규칙한 스케줄을 가질 수 있었다. Redis로 돈을 받으며 일하기 시작하자, 내 윤리상 과거의 방식을 유지하는 게 더 이상 가능하지 않았다. 그래서 나는 정상적인 스케줄에 맞춰 일하도록 스스로를 강제하기 시작했다. 이는 내게 수년간 이어져 온 엄청난 고충이다. 게다가 그렇게 하느라 내가 할 수 있는 것보다 덜 하고 있다는 확신이 들지만, 세상이 그렇게 돌아가는 걸 어쩌겠는가. 이 문제를 해결할 방법을 찾지 못했다. Redis Labs에 옛 스케줄로 돌아가고 싶다고 말할 수도 있겠지만, 그건 통하지 않을 것이다. 이제 나는 회사보다 커뮤니티에 ‘보고’하고 있기 때문이다.
또 다른 문제는 같은 프로젝트를 오래 붙잡고 일하는 것 자체가 정신적으로도 복잡한 일이라는 점이다. 예전에는 6개월마다 프로젝트를 바꾸곤 했다. 그런데 이제는 10년 동안 같은 일을 했다. 그나마 제정신을 유지하려고 Redis 안에서 하위 프로젝트들을 만들어 보았다. 한때는 Cluster를 했고, 또 한때는 disk-storage(지금은 중단됐다)를, 또 한때는 HyerLogLogs를 하는 식이었다. 기본적으로 프로젝트에 가치를 더하면서도, 따로 떼어놓고 보면 다른 일인 것들이다. 하지만 결국에는 다시 이슈와 PR 페이지로 돌아와 매일 같은 것들을 처리해야 한다. “타임아웃 때문에 레플리카 연결이 끊긴다”든가 하는 것들이다. 또 그걸 파헤쳐 보자.
두려움
나는 항상 프로젝트에 대한 기술적 리더십을 잃을까 봐 두려웠다. 내가 Redis를 설계하고 발전시키는 데 충분히 좋지 않다고 생각해서가 아니라, 내 방식이 1) 상당수 사용자가 원하는 것, 2) IT 업계의 대다수가 소프트웨어라고 믿는 것과 맞지 않는다는 걸 알기 때문이다. 그래서 나는 내가 좋다고 믿는 설계, 기능 구성, 개발 속도(느리게), 프로젝트 규모(최소한으로)와, 대다수 사용자층이 내게 기대하는 것 사이에서 끊임없이 균형을 잡아야 했다. 다행히 Redis 사용자 중에는 Redis다운 방식을 완벽하게 이해하는 사람들도 일정 비율 있어, 가끔은 위로의 말을 들을 수 있다.
마찰
어떤 사람들은 완전히 진상이다. 어디에나 있고, 자연스러운 일이다. 내게 묻는다면 프로그래밍 분야에는 다른 분야보다 오히려 좋은 사람이 훨씬 많다고 믿는다. 그래도 어딜 가나 일정 비율의 진상은 있게 마련이다. 인기 있는 OSS 프로젝트의 리더로서, 어떤 식으로든 그런 사람들과 마주해야 하고, 그건 Redis를 개발하면서 내가 겪은 일 중 가장 스트레스가 심한 일 중 하나일지 모른다.
허무함
때로는 소프트웨어가 훌륭하긴 해도, 수백 년 남을 책을 쓰는 것처럼 위대해지지는 못할 거라고 생각한다. 그 자체로 훌륭하지 않아서가 아니라, 부수적으로 유용하기도 해서… 더 유용한 무언가가 나오면 대체되기 때문이다. 나도 다른 활동을 할 시간이 있었으면 좋겠다. 그래서 가끔은 내가 하는 모든 일이 결국 허무하게 느껴진다. 우리는 시스템을 설계하고 만들지만, 새로운 시스템이 계속 등장한다. 그런데 그냥 소프트웨어 안에만 머무르고 “소프트웨어의 큰 아이디어” 안에 머무르지 않는 사람이 과연 새로운 이정표를 세울 수 있을까? 가끔은 내게 큰 아이디어를 다룰 잠재력이 있었는데, 소프트웨어에 대해 생각하기보다 소프트웨어를 쓰는 데 집중하느라 그 잠재력을 발휘하지 못했다는 생각이 든다. 이건 사실상 사기꾼 증후군과는 정반대이니, 내가 스스로를 꽤 대단하게 생각한다는 뜻이겠다. 겸손하지 못해 미안하다.
그렇다고는 해도, 나는 정말 사랑하는 일을 하며 수년을 일할 수 있었고, 그 덕에 친구도, 인정도, 돈도 얻었으니 나쁜 거래였다고 말하고 싶지는 않다. 그럼에도 프로젝트가 유명해진 뒤 버티기 위해 몹시 고군분투하는 사람들의 마음은 충분히 이해한다. 이 글은 그들에게 바친다.
글을 무작위로 읽기
댓글
로그인하고 댓글 남기기