안녕하세요. ABC Studio 김영재입니다. 저는 오픈소스 프로젝트 10여 개를 디렉팅하고 개발했으며, 팀에서 소프트웨어를 처음 설계할 때에도 어지간하면 오픈소스로의 전환 가능성을 염두에 두도록 하고 있습니다. 이번 글에서는 이 과정에서 주로 어떤 점을 강조하는지 소개하고자 합니다.
인터넷에서 접할 수 있는 오픈소스 관련 글들은 대부분 오픈소스의 철학을 말하거나 처음 시작하는 사람들을 위한 README 작성법 혹은 라이선스 차이를 설명하는 글이 많은데요. 이번 글에서는 프로젝트의 구조나 구성 방식에 대해서 말하고자 합니다. 더불어 오픈소스 활동을 하면서 가치를 두면 좋을 부분과 네이밍도 언급할 예정인데요. 미리 말씀드리자면 이는 어디까지나 저의 관점일 뿐 절대적인 지침은 아닙니다.
참고로 본 글에서는 '기술 사용자'라는 표현을 종종 사용할 예정입니다. 이는 소프트웨어의 최종 사용자(end-user)가 아닌, 오픈소스로 공개한 기술을 설치하고 운영하는 엔지니어 또는 기술 도입을 검토하는 사람을 일컫습니다.
오픈소스로 개발할 때의 마인드셋
처음 오픈소스로 자신이 만든 것을 공개할 때 그 사실에 마음이 설레는 사람도 있습니다. 지식을 세상에 공헌한다는 거룩한 철학으로 오픈소스의 의미를 설명하는 글도 많습니다. 하지만 저는 그보다는 그저 배포 방식의 하나라고 가볍게 생각하는 편이 좋다고 생각합니다. 오픈소스 개발에 너무 철학적인 의미를 부여하면 두 가지 부작용이 있기 때문입니다.
먼저, 코드의 순수함에 너무 몰두하게 될 수 있습니다. 소프트웨어는 여러 번의 시행착오와 지저분한 디버깅, 실전에서의 장애를 겪으면서 발전합니다. 특히 운영 중인 서비스에서 사용하는 소프트웨어일수록 어쩔 수 없는 요건과 제약으로 원하지 않는 구조로 만들어지거나 분기가 많아지기도 합니다.
오픈소스로 개발하면 이 모든 결점을 보여주고 싶지 않은 마음이 무척 커질 것입니다. 팀원이 아닌, 전후 사정을 모르는 모두가 볼 수 있는 코드에 자신도 원치 않은 구조나 분기점을 넣고 설명하는 일은 대부분 질색할 것이기 때문입니다.
하지만 오픈소스 활동이 그저 배포 방식 중 하나일 뿐이라고 생각하면 마음이 편해질 수 있습니다. 또한 코드의 순수함에 지나치게 몰두하면 타인의 피드백에 고마움을 느끼거나 수용하기 어렵고, 그 피드백이 자신의 관점에 맞는지에 집착하며 시야가 좁아질 수 있는데 이 또한 그저 배포 방식 중 하나라고 생각하면 완화될 수 있습니다.
두 번째로 활동의 의미가 왜곡될 수 있습니다. 오픈소스를 홍보 수단으로 여기며 여느 SNS의 따봉과 같은 의미로 Star 개수를 바라보면 소프트웨어의 발전을 추구하는 것이 아니라 거창한 목표만 말하다가 끝나거나 인기를 끌만한 소재만 다루다가 소프트웨어 고도화에 궁리해야 할 시간을 허비할 수 있습니다.
결국 힘 있는 소프트웨어는 규모가 어떻든 오픈소스 프로젝트에서 소개한 기능을 충실히 실현하면서도 기술 사용자가 직접 설치해서 사용하기 쉬운 소프트웨어이고, 꾸준하게 버그도 잡고 의존성 있는 라이브러리나 환경에 따라 업데이트하며 가꾸는 소프트웨어입니다. 그러므로 외적인 수치에 신경 쓰지 말고 작성한 README 소개 글을 얼마나 충실히 구현했는지, 얼마나 사용자의 기대에 부응하는지에 집중하며 만들어 갈 필요가 있습니다.