Collective Ownership

공동 소유권(Collective Ownership)은 코드 소유권(Code Ownership)에 대한 방법이다. 공동으로 코드를 소유한다는 것은 내가 작성한 코드를 내 허락 없이 수정해도 무방하다는 것이다. 나아가, 공동의 코드에 문제가 생기면 내 코드가 아니더라도 자발적으로 문제해결에 나서는 정신이다.

코드 소유권은 다음과 같이 강한, 약한 그리고 공동의 소유권으로 구분할 수 있다. 첫번째로, 강한 코드 소유권은 코드를 클래스, 함수나 파일등의 모듈로 나누어 각각 특정 개발자에게 할당하는 방식이다. 개발자는 자기가 소유한 모듈에 대해서만 변경할 수 있다. 다른 사람이 모듈을 변경하려면 변경요청을 해야 한다. 빠르게 수정하길 원한다면 패치를 코드소유자에게 보내면 된다. 두번째로, 약한 코드 소유권은 모듈을 할당받지만 다른 사람의 코드도 수정할 수 있게하는 방식이다. 모듈을 소유한 사람은 자신의 코드에 책임을 지면서 동시에 다른사람이 변경한 부분도 계속 확인해 줘야 한다. 만약 다른 사람이 소유한 모듈을 많이 변경해야 한다면 먼저 모듈 소유자에게 말해주는게 좋다. 마지막으로, 코드 공동소유는 별도의 모듈 소유자가 없고 팀 전체가 코드를 공유하며 누가 어떤 코드라도 변경할 수 있는 것이다. 코드 소유권이 존재하지 않는 것처럼 보이지만, 개인이 아닌 팀이 소유한다고 볼 수 있다. [1:http://martinfowler.com/bliki/CodeOwnership.html]

코드 공동소유라는 말은 XP(eXtreme Programming)에서 사용되는 용어이다. 우리는 강한 코드 소유권을 인정할 이유가 없다고 생각한다. 오히려 한명의 개발자가 코드를 독점해버리면 개발에 리스크는 커질 것이다. 강한 코드 소유권을 인정하면 본인이 소유한 분야에 익숙해지기 쉬워져 개발 속도를 높일 수 있다는 주장이 있을 수 있다. 그리고 이건 사실이다. 하지만, 장기적으로 코드를 여러명이 공동으로 소유하고 보게 하는게 이익이 된다. 이는 코드에 대한 전반적인 이해와 품질을 높여주고 오류는 줄게 할 수 있다.

코드를 공동소유하게 되면 내가 작성한 코드를 수정하는 다른 개발자의 질문을 통해 통찰력을 얻을 수도 있다. 더불어, 다른 사람이 내가 작성한 코드를 본다는 사실은 개발자가 스스로를 통제하는데 도움을 주기도 한다. 다수의 개발자가 코드 변경에 참여할 때 코드는 지속적으로 확인되고 리팩토링 될 수 있다. 코드에 대한 책임을 모두가 가지게 되면 한사람이 책임을 지는 것보다 좋다. 특히 그 사람이 프로젝트를 떠낫을 때 더욱 이익이 크다.

하지만, 주의하여야 할 것이 몇가지 있다. 첫번째로, 전문가를 잃어버리면 안된다는 것이다. 누군가 하나의 분야에 노련한 전문가가 있다면 이를 포기하게 하면 안된다. 그에게 다른 영역을 개발할 수 잇게 하면서 해당 분야에 전문가로 인정해 주는게 유리 할 것이다. 두번째로, 코드 공동소유가 아무나 임의로 코드를 바꿀 수 있다는 것을 의미하는 것은 아니라는 것이다. 코드 공동소유권한은 우리의 코드를 마음껏 해킹해도 된다는 허락은 아니다. 세번째로, 코드 공동소유가 우리의 모든 코드를 상세히 이해하고 있어야 한다는 것을 의미하는 것은 아니라는 것이다. 코드 공동소유를 한다는 것은 우리가 우리의 시스템 어떤 부분에 대해서도 겁을 먹거나 도망가지 않는다는 다짐이다. 마지막으로, 코드 공동소유가 지적 재산을 유출할 수 있는 리스크로 생각해서는 안된다는 것이다. 우리가 코드와 지혜를 함께 소유하지 않는다면, 이들을 영원히 잃어버리게 될 것이다.


… 글 작성시 출처를 정리하지 않았기에 출처가 없는 부분이 많다. 출처는 확인 후 따로 달도록 하겠다.