1. 기술부채? 똥싸고있네!

기술부채 (Technical Debt)라는 말이 있다. 워드 커닝햄 (Ward Cunningham)이라는 작자에 의해서 고안된 은유라고 하는데, 엉망인 프로그래밍은 부채로 압박받는 것과 같다고 한다는 뜻이란다. 개발업계에서 가끔 보이는 말인데, 솔직하게 말하자면 우리가 여기에 흔하게 잘 쓰는 표현이 있다. “똥을 싼다.” 라는 아주 유서깊고 직설적이면서 확실하게 와닿는 친근하기까지 한 표현이 있다. 너무 직설적이라 좀 그런가? 그럼 “대변을 싼다.” 라고 하면 된다. 좀 더 고상하게 하면 “배설한다.” 라는 표현으로 바꿔도 된다. 이 글에서는 기술부채 같은 되도않은 고상함은 벗어던지고 개발자가 싸는 똥에 대해서 뿌직뿌지직하며 얘기해불까 한다.

2. 똥코레이션!!!

태초에 최초 개발자가 싸놓은 똥이 있다. 여기에 다른 개발자가 와서 거기에 똥을 얹는다. 어느 똥이 더 큰지는 안 중요하다. 중요한 건 똥이라는 것일 뿐. 어차피 똥+똥은 똥일뿐이니까. 여기에 계속해서 개발자들이 똥을 얹어서 빅똥을 만들어 간다. 물론 다른 사람이 똥이라는 것을 알면 안 되니까 적당히 겉을 그럴 듯 하게 포장을 한다. 다른 사람들은 그럴 듯한 포장을 보고 만족하지만 중요한 것은 그 그럴 듯한 포장조차 똥이다!!!

이것이 바로 개발에서 흔히 보이는 똥코레이션 패턴 이다. 똥위에 똥을 싸고 똥으로 감싼다. 똥은 점점 커져서 빅똥이 된다. 누군가가 치울때까지 이 똥들은 악취를 풍기며 개발자를 압박하게 된다. 이렇게 압박받는 개발자는 결심하게 된다. 치우냐고? 그럴리가 있나. 개발자는 도주하게 된다. 그리고 이 똥은 다른 누군가에게 넘어가게 된다.

3. 아름다운 사람은 머문자리도 아름답습니다.

이 끝없는 똥돌리기를 막는 방법은 근원적으로 누군가가 나서서 변기물을 내려줘야 된다. 기존에 쌓인 똥들은 멀리멀리 정화조로 치워줘야 새로운 똥을 싸든 아니면 제대로 만들던지 할 수가 있다. 아니면 점점 거대해진 똥에 결국엔 똥밭이 되는 상황이 발생할 것이다.

하지만 이 변기물을 내리고 새로 만드는 과정이 결코 순탄하지 않을 것이다. 왜냐하면 개발자들은 기존에 있던 것이 거대한 똥덩어리인 것을 알지만 다른 사람들 특히 높은 분들은 그럴듯한 겉만 보았기 때문에 그것이 똥인지를 모른다. 결국 그들이 보기에는 개발자들이 멀쩡한 것을 엎어버리고 새로 만드는 뻘짓을 하는 것처럼 보이기 마련이다. 결국 이 중요한 변기물을 내리는 것조차도 개발자들에게는 큰 압박으로 다가오게 되는 것이다.

4. 그래서 우리는 왜 똥을 싸고 있는가?

그러면 개발자들은 왜 똥을 싸는가? 흔히 드는 이유로는 “급박한 개발일정”, “수시로 바뀌는 기획”, “부적절한 개발 프로세스” 등이 있다. 물론 이것들이 가장 큰 이유이기도 하다.

하지만 우리가 잊고 있거나, 알고 있으면서도 스스로 머릿속에서 부정하고 있는 것이 있다. 모든 코드는 결국에는 똥이 된다. 앞에서 든 이유는 시작부터 똥을 싸는 이유이다. 물론 저 상황 속에서도 똥을 싸지 않는 사람들도 있고, 대부분의 개발자들은 똥을 안 쌀려고 한다. 하지만 모든 코드는 수명이 있다. 코드는 작성된 순간부터 점점 부패하기 시작하여 어느 순간이면 그 수명을 다해 똥이 된다. 똥이 되지 않는 코드는 오직 수정/업데이트 등이 없는 불변의 프로그램 뿐이다. 애초에 그딴 불변의 프로그램이란 있을 수 없으니 결국 코드는 결국 수명을 다하는 것이다.

여기서 흔히 디자인 패턴을 떠올리는 사람들이 있을 것이다. 하지만 개발해본 사람이라면 알 것이다. 디자인 패턴이 커버할 수 있는 범위는 한계가 있다. 우리의 프로그램들은 점점 업데이트를 해가며 그 내부가 바뀌어져 간다. 디자인 패턴이 오리를 고무오리로 때로는 청둥오리로 바꿀 수 있다면 우리의 수정은 오리가 워싱턴 DC가 되고 또 그 워싱턴 DC가 우주의 기운이 되어야 된다. 하지만 이 변화들이 급격하게 이루어지지는 않기 때문에 어느정도는 디자인 패턴이 그 변화를 커버해줄 수 있고 코드의 수명을 늘려주어 변기물을 내려야 되는 순간을 미뤄줄 수 있다. 하지만 결국에는 코드들은 똥이 된다.

5. 결국 오늘도 우리들은 똥을 싼다.

개발자들은 오늘도 똥을 싼다. 새로운 똥을 싸기도 아니면 다른 빅똥에 똥을 얹기도 한다. 때로는 아주 거대한 빅똥을 투척하기도 한다. 이것은 개발자의 숙명이며 벗어날 수 없는 운명의 데스티니 이다. 하지만 때때로 자신 또는 누군가가 싼 똥들을 치워가며 오늘도 우리들은 그렇게 개발이라는 이름을 똥을 싼다.