사내에서 엔지니어의 Code review를 하던 중 저는 `이건 돈을 버리는 코드에요` 라고 말했습니다.
우린 수많은 코드를 남기며 좋은 코드가 무엇일지에 대해 고민합니다. 시장에서는 가독성, 성능, 유지 보수성과 같은 특성들을 내세워 좋은 코드에 대한 몇가지를 설명하고 정의합니다. 이런 이야기는 이제 슬슬 지겨워지기도 합니다.
가독성이 떨어지는 코드를 누가 좋아할까요?
낮은 성능을 발휘하는 코드를 누가 좋아할까요?
유지 보수가 안되는걸 누가 좋아할까요?
그런데 여기서 한가지 재미난 생각을 해봅시다. 위에 열거된 모든 사항들은 비용과 직교합니다. 가독성이 떨어지면 팀원이 해당 코드를 읽는데에 문제가 생기고 이는 더 많은 비용(시간)을 필요로 하게됩니다. 낮은 성능? 이는 비지니스에 직접적인 영향을 줄 가능성이 큽니다. 유지 보수에 효과적인 코드는 향후 유지 보수에 들어가는 비용을 절약합니다.
좋은 코드는 ‘저비용 코드’ 입니다.
이 글은 시장에 나와있는 모든 프로그래밍 기법이나 조언들이 ‘비용 절약’을 위해 존재한다는 것을 이야기하기 위해 작성 되었습니다.
이름만 잘 정해도 돈이 절약된다.
이와 같은 코드가 있다고 가정해봅시다. 분명히 주석은 ‘메인 함수’이므로 중요한 함수임이 틀림없습니다.
그러나 이 함수의 이름은 ‘AAA’입니다. 도무지 어떠한 역할의 함수인지 알 수 없어 사용하기 위해 코드를 직접 해석합니다. 만약 이러한 코드를 직접 해독한다면 그 비용은 만만치 않을 것입니다.
이름을 붙여봅시다. ‘void OrderByDescending(…)’
사용하기 위한 비용은 1초입니다.
위 코드는 실제로 컴파일 되지 않습니다. 이해를 위해 제가 무작위로 복사,붙여넣기 하였습니다.
재사용만 잘해도 돈이 절약된다.
‘단일 책임 원칙’으로 소스 코드를 분리한다면 이는 재사용이 가능합니다. 재사용만 잘해도 돈이 절약됩니다. 우선 다시 만들 필요가 없을 뿐더러 기능 추가와 같은 유지 보수에서 더 빛을 봅니다. 복리로 일할 수 있게 되는거죠.
자동화만 잘해도 돈이 절약된다.
자동화는 대부분의 시나리오에서 항상 정답입니다. 엔지니어가 쏟는 몇시간의 비용을 단 몇초로 절약할 수도 있기 때문이죠.
그렇지만 자동화도 단점이 있습니다. 해당 자동화에 이해력이 없는 인원은 왜 이런 자동화가 필요했는지에 대한 지식이 없기에 그와 관련된 부분에서 미숙한 지식을 쌓게 될수도 있습니다.
정적 언어만 써도 돈이 절약된다.
여러분이 애플리케이션 프로그래머라면 정적 언어만 써도 돈을 절약할 수 있습니다.
시장에서는 많은 프로젝트가 동적 언어를 활용하여 작성됩니다. 그러나 동적 언어는 실수를 유발할 수 있으며 장기적인 유지 보수에서 코드 추적을 어렵게 합니다.
또한 대부분의 동적 언어들은 모든 사항을 런타임 시점에 처리합니다. 그러나 대부분의 결정 사항이 컴파일 시점에 있을 수록 이점이 큽니다.
실제로 돈을 버는 코드를 써서 돈을 번다.
특정 이슈의 처리 시점은 비지니스에 큰 역할을 할 수도 있습니다. 그러한 이슈를 엔지니어 개인의 품질 유지 자존심으로 적시에 처리할 수 없다면 이는 돈을 버리게합니다.
물론 그러한 품질 유지는 매우 좋은 생각이지만, 부채를 활용하는 것도 전략입니다. 매니저와 대화를 나누고 부채를 활용 해보십시오.
하지만 이러한 부채는 매우 위험한 전략입니다. 쌓아둔다면 향후 더 많은 돈을 잃게 합니다. 부채 해결에 대한 방안을 반드시 계획해둡시다.
마치며
‘저비용 코드’에 대한 몇가지 사례를 열거해봤지만 현실은 이것보다 매우 많습니다. 서점에 나열된 모든 좋은 코드에 관련된 책들은 ‘저비용’을 위해 쓰여졌습니다.
또한 자동화 테스트 코드 작성, 오픈 소스 활용…. 심지어 Agile, DevOps, 컴퓨터 성능 등등 시장에서 유행하는 많은 기술 기반 사항들은 비용과 연결될 수 있습니다.
뛰어난 프로그래머는 좋은 코드를 쓰지 않고 좋은 코드를 남깁니다.