오픈소스 메인테이너의 고충
몇 달 전 시스템 소프트웨어 분야의 OSS 프로젝트를 유지보수하는 한 메인테이너가 내게 메일을 보내왔다. 꽤 크고 활발한 커뮤니티를 가진 프로젝트였다. 그는 심리적으로 너무 지치는 탓에 그렇게 오랜 세월이 지난 뒤에도 프로젝트를 계속 유지하는 것이 힘들다고 했다. 내게 조언을 구하고 싶어 했는데, 내가 조언을 할 입장에 있는지는 잘 모르겠다. 그래도 이 문제에 대해 내가 생각하는 바를 블로그 글로 써보겠다고 답했다. 몇 주가 지났고, 여러 번 글을 쓰기 시작했다가 그만두기를 반복했다. 생각을 충분히 정리할 시간을 갖지 못했기 때문이다. 이제는 내 안의 약점과 고충, 그리고 어떤 일을 — 그것도 부정적인 측면이 있는 일을 — 오랫동안 하다 보면 인간의 마음을 피할 수 없이 파고드는 자유에 대한 갈망 속에서 답을 찾기 위해 스스로를 분석할 수 있었다고 생각한다. 오픈소스 프로젝트를 유지하는 일은 또한 큰 기쁨이자 재미이기도 하며, 지난 10년은 내 직업 인생에서 분명 기억에 남을 시기다. 절대적으로 최고였다고는 할 수 없더라도(어쨌든 스타트업 시절이 더 재미있었다) 그렇다. 다만 여기서는 부정적인 측면에 집중하려 한다. 그것만 있는 것처럼 느끼지 않길 바란다. 분명 좋은 점도 많이 있다.
홍수 효과
나는 빨리 행동하고 빨리 생각하고 경쟁에서 제시간에 이기는 식의 방식을 믿지 않는다. 소셜 네트워크와 채팅, 이메일, 일정으로 가득한 세상 때문에 우리가 늘 집중력을 잃고 사는 것을 좋아하지 않는다. 그래서 Redis 초창기, 아직 시간이 충분했을 때 Redis에 관한 메일을 받으면 발신자가 말하려는 바에 집중할 수 있었다. 그러고는 우리가 논의하던 Redis의 해당 부분을 떠올리고, 문제를 신중히 고민한 끝에 내 진짜 생각을 담아 답장할 수 있었다. 나는 대부분의 사람들이 하는 일이 무엇이든 이렇게 일해야 한다고 믿는다.
소프트웨어 프로젝트가 Redis가 도달한 만큼 유명해지고, 동시에 새로운 소셜 도구들과 사용자를 위해 “거기 있어 주는” 태도 덕분에 개인 간의 소통이 그토록 쉬워지면, 메인테이너가 받는 메시지, 이슈, 풀 리퀘스트, 제안의 양은 기하급수적으로 늘어난다. 동시에 적어도 Redis의 경우 그렇고, 아마 이는 흔한 문제라고 생각하지만, 커뮤니티의 그런 입력을 들여다볼 수 있는 정말 역량 있는 사람의 수는 아주 천천히 는다. 이는 명백한 병목을 만든다. 대부분은 이를 잘못된 방식으로 해결하려 한다. 실용주의를 내세우는 것이다. 우리가 질문을 남긴 뒤 2주 동안 원 작성자의 답이 없으면 이슈를 닫자. 제대로 명시되지 않은 이슈는 모두 닫자. 같은 식의 “인박스 제로” 해법들이다. 현실은 커뮤니티 피드백을 제대로 처리하려면 필요한 시간을 들여야 한다는 것이다. 그렇지 않으면 그저 오픈 이슈가 적은 척하는 것뿐이다. Redis의 각 서브시스템마다 핵심 수준의 전문가를 고용해 OSS를 전업으로 일하게 할 자원이 충분하다면 해결되겠지만, 그건 현실적이지 않다.
그래서 무슨 일이 벌어지는가? 무엇을 볼지, 무엇을 보지 않을지를 점점 더 우선순위를 매기기 시작한다. 그리고 너무 많은 것들과 사람들을 무시하는 자신이 쓰레기처럼 느껴진다. 기여자 입장에서도 당신이 남들이 주는 것에 신경 쓰지 않는다고 느끼게 된다. 복잡한 상황이다. 보통의 결과는 핵심적인 이슈만 주로 처리하고 새로운 것들은 무시하는 태도를 갖게 되는 것이다. 새로운 것들은 아직 코어에 들어오지 않았고, 누가 더 많은 PR과 이슈를 짊어질 더 큰 코드베이스를 원하겠는가? 게다가 그 코드는 내가 평소에 쓰는 프로그래밍 스타일보다 더 복잡하게 짜인 경우가 많아 복잡성만 더 커진다. 나중에 거기서 치명적인 버그가 터졌을 때 근본 원인을 추적하려면 정말 고생이다.
역할의 전환
위에서 말한 “홍수 효과” 문제의 결과로, 당신은 갑자기 하는 일이 바뀐다. Redis가 유명해진 것은 내가 소프트웨어를 설계하고 쓸 줄 안다고 여겨졌기 때문이다. 그런데 지금 내가 하는 일의 대부분은 이슈와 풀 리퀘스트를 들여다보는 것이다. 게다가 나는 내가 받는 기여 중 상당수를 더 잘할 수 있다고 느낀다. Redis에 기여하는 사람들 중에는 나보다 더 뛰어난 프로그래머도 있으니, 그들 중 일부 기여는 내가 할 수 있는 것보다 품질이 더 좋을 것이다. 하지만 큰 수의 법칙상 대다수는 그저 기여자가 당면한 특정 문제를 해결하기 위해 작성된 평범한 수준의 기여가 된다. 반면 내가 Redis를 설계할 때는 Redis를 전체로 바라보며 생각한다. 몇 년째 이걸 만들어 왔기 때문이다. 그래서 당신이 잘하던 일을 더 이상 할 시간이 없어진다. 이는 결국 유기적인 큰 신규 기능이 줄어든다는 뜻이기도 하다. 나의 해결책은? 때로는 몇 주 동안 이슈와 PR 보는 것을 완전히 멈춘다. 코딩이나 설계를 하고 있기 때문이다. 그게 내가 정말 사랑하고 즐기는 일이다. 하지만 이는 다시 심리적으로 훨씬 더 큰 압박을 만든다. 내가 사랑하고 잘할 수 있는 일을 하려면 쓰레기 같은 기분을 감수해야 한다.
시간
같은 프로젝트를 오랫동안 붙잡고 일하는 것과 관련해 적어도 내게는 두 가지 문제가 있다.
첫째, Redis를 하기 전에는 내 인생에서 주 5일을 매일 일해 본 적이 *한 번도* 없었다. 일주일은 일하고 두 주는 쉬고, 또 한 달 일하고 두 달을 사라지는 식이었다. 늘 그랬다. 사람들은 재충전하고 새로운 에너지와 아이디어를 얻어야 창의적인 일을 할 수 있다. 그리고 높은 수준의 프로그래밍은 정말 미치게 창의적인 일이다. Redis 자체도 처음 2년 동안은 그렇게 만들어졌다. 즉, 프로젝트가 가장 빠르게 진화하던 시기다. 내가 원할 때만 일하며 낸 생산성의 합이 매일 꾸준히 일하도록 스스로를 강제할 때의 생산성보다 크기 때문이다.
하지만 혼자 회사를 운영할 때는 그런 들쭉날쭉한 일정이 내 직업 윤리상 허용되었다. Redis로 돈을 받고 일하기 시작하자 내 윤리상 과거의 패턴을 유지하는 것이 더 이상 가능하지 않게 되었고, 그래서 정상적인 일정에 맞춰 일하도록 스스로를 강제하기 시작했다. 이는 이제 몇 년째 내게는 엄청난 고투다. 게다가 나는 그 때문에 내가 할 수 있는 것보다 덜 하고 있다고 확신한다. 하지만 일이 돌아가는 방식이 그렇다. 이 문제를 해결할 방법을 찾지 못했다. Redis Labs에 옛날 일정으로 돌아가고 싶다고 말할 수도 있겠지만, 그건 통하지 않을 것이다. 이제 나는 회사가 아니라 커뮤니티에 “보고”하고 있기 때문이다.
또 다른 문제는 같은 프로젝트를 오래 하는 것 자체가 정신적으로도 복잡한 일이라는 점이다. 나는 과거에 6개월마다 프로젝트를 바꾸곤 했다. 이제 10년 동안 같은 일을 했다. 그 점에서 나는 Redis 안의 하위 프로젝트들을 만들며 정신을 붙잡으려 애썼다. 한때는 Cluster를 했고, 또 한때는 디스크 스토리지(지금은 중단됐다)를, 또 한때는 HyperLogLog 같은 것들을 했다. 기본적으로 프로젝트에 가치를 더하면서도 따로 놓고 보면 다른 일인 것들이다. 하지만 결국에는 이슈와 PR 페이지로 돌아와 매일 같은 것들을 처리해야 한다. “타임아웃 때문에 레플리카 연결이 끊겼다”든가 하는 것들이다. 또 그걸 파고들어야 한다.
두려움
나는 늘 프로젝트의 기술적 리더십을 잃을까 두려웠다. 내가 Redis를 설계하고 발전시킬 만큼 충분히 뛰어나지 않아서가 아니다. 내 방식이 1) 상당수 사용자가 원하는 것, 2) IT 업계 대다수가 생각하는 소프트웨어의 모습과 일치하지 않는다는 걸 알기 때문이다. 그래서 나는 내가 좋다고 믿는 설계와 기능 구성, 느린 개발 속도, 최소한의 프로젝트 규모와 대다수 사용자층이 기대하는 것 사이에서 끊임없이 균형을 잡아야 했다. 다행히 Redis 사용자 중에는 Redis다운 방식을 완벽히 이해하는 사람들도 일정 비율 있어, 때때로 위로의 말을 들을 수 있다.
마찰
어떤 사람들은 완전히 쓰레기 같은 인간이다. 어디에나 있고, 자연스러운 일이다. 내게 물어본다면 프로그래밍 분야에는 다른 분야보다 오히려 괜찮은 사람이 훨씬 많다고 믿는다. 하지만 어쨌든 일정 비율의 완전한 진상은 늘 보게 된다. 인기 있는 OSS 프로젝트의 리더로서 어떤 식으로든 그런 사람들과 맞닥뜨려야 하고, 어쩌면 그것은 Redis 개발 과정에서 내가 한 일 중 가장 스트레스 받는 일 중 하나였다.
허무함
때로 나는 소프트웨어가 아무리 훌륭해도 수백 년 살아남을 책을 쓰는 것만큼 거대해지지는 못할 거라고 생각한다. 그 자체로 훌륭하지 않아서가 아니라, 소프트웨어는 부수적으로 “유용”하기 때문에 더 유용한 무언가가 나타나면 대체될 것이기 때문이다. 나도 다른 활동을 할 시간을 갖고 싶다. 그래서 가끔은 내가 하는 모든 일이 결국 허무하다고 느낀다. 우리는 시스템을 설계하고 만들 것이고, 새로운 시스템이 등장할 것이다. 하지만 그냥 소프트웨어 안에 머무는 사람, “소프트웨어의 큰 아이디어” 안에 머무는 사람이 아닌 사람이 과연 새로운 이정표를 세울 수 있을까? 때때로 나는 거대한 아이디어를 다룰 잠재력이 있었는데, 소프트웨어에 대해 생각하는 대신 소프트웨어를 작성하는 데 집중하느라 그 잠재력을 쓰지 못했다고 생각한다. 이는 기본적으로 가면 증후군의 반대이니, 나는 스스로를 꽤 대단하게 보고 있는 셈이다. 그러니 더 겸손해야겠다. 죄송하다.
그렇다 해도 나는 정말 사랑하는 일을 하며 수년을 보낼 수 있었고, 그 덕에 친구와 인정, 돈도 얻었으니 나쁜 거래였다고 말하고 싶지는 않다. 그럼에도 프로젝트가 유명해진 뒤 버티기 위해 몹시 고투하는 사람들을 나는 완전히 이해한다. 이 블로그 글은 그들을 위해 바친다.
글을 무작위로 읽기