골드버그 장치?

골드버그 장치란 미국의 만화가 루브 골드버그가 고안한 연쇄 반응에 기반한 장치를 말한다. 말로 설명하기엔 복잡하고 간단한 예시로 영상을 하나 보자.

대충 이러한 장치이다.

이런 골드버그 장치는 어떠한 역할을 수행하기 위하여 수많은 장치들의 복잡한 연쇄 반응을 거치게 된다. 실제로 이러한 복잡한 연쇄 반응은 보는 사람으로 하여금 신기하게 보이기도 하고 또 재미를 느끼게 해주어 이런걸 연구하는 변태들도 세계적으로 많고, 광고등 많은 영역에서 쓰이기도 한다.

그럼 골드버그 코드는?

사실은 명확하게 정해진 용어는 아니다. 혹시나 있는 용어가 아닐까 싶어서 구글에 열심히 찾아봤지만 의외로 이런 용어에 대한 내용은 찾기 힘들었다. 그래서 내가 먼저 썼다는 자뻑을 위해 이 글을 쓰기로 했다.

여기서 골드버그 코드란 복잡한 연쇄반응을 통해 결과를 가져오는 코드를 칭하도록 한다. 물론 단순히 이렇게만 칭하면 대부분의 코드들이 여기에 걸리게 된다. 그래서 다음과 같은 조건들을 걸어보도록 하자.

  1. 코드내의 복잡한 연쇄반응들은 간단한 코드로 대체가 가능하여야 한다.
  2. 코드내의 복잡한 연쇄반응들의 절반 이상은 불필요한 과정이어야 한다.
  3. 코드내의 복잡한 연쇄반응들은 추적하기 힘들어야 한다.
  4. 당연히 코드가 이런 복잡한 과정을 거치는 당위성은 존재하지 않는다.

대충 조건만 보면 뭐 이런 거지같은 조건이 있어? 싶을 테다. 당연하다. 여기서 말하고 싶은건 이 거지같은 조건에 맞아 떨어지는 코드들에 대한 내용이니까.

하지만 의외로 많이 보인다.

저런 거지같은 코드가 의외로 많이 보일때가 많다. 가장 많이 보이는 경우는 다른 사람이 작업하던 프로젝트를 이어받았을 때 그 소스들을 보다보면 많이 보인다. 코드의 대부분은 추적하기 힘들고 이해하기도 어렵다. 심하면 이게 뭐하는 코드인지도 감이 안 올때도 있다. 이런 경우 전임자에게 물어보는게 가장 좋은 해결법이다. 하지만 십중팔구는 아마도 전임자가 퇴사하였거나, 아니면 다른회사에서 작업한 코드를 넘겨받았을 경우가 많다. 왜냐고? 계속 같은 회사에서 얼굴 볼 사람한테 저런 코드를 넘긴다면 아마도 일기토가 벌어질 테니까.

그렇다면 왜 저런 코드를 작성하는 걸까? 코드를 이어받을 사람의 괴로워 하는 모습을 보기 위해서? 아니면 개발자의 내적갈등적을 코드에 예술적으로 담아내기 위해서? 그냥 간단히 말하자면 가장 많고 가장 큰 이유는 SI라서 일 가능성이 크다. SI프로젝트의 가장 큰 특징은 시시각각 변하는 요건사항이다. 항상 짜놓은 코드는 폐기되거나 뒤집어지기 쉽상이다. 거기에 항상 시간은 부족하고 새로 구조를 짜는건 힘들기 마련이다. 그러다보니 이미 짜놓은 코드에 약간의 변형을 가해서 원하는 결과물로 변화시킨다.

물론 처음에는 그런 변형이 적당할 수 있다. 의외로 변형이 가해진 코드는 깔끔하고 잘 돌아간다. 하지만 밀려오는 수정사항에 대응하다보면 코드는 계속해서 변형이 간다. 금속도 계속해서 변형을 하다보면 금속피로로 인해 파손되기 쉽상이다. 코드도 마찬가지로 계속해서 변형이 가해지면 어느순간 코드가 터지거나 터지지 않더라도 이미 감당할 수 없는 괴물이 되어있는 경우가 많다. 그 괴물들의 유형 중의 하나가 골드버그 코드이다.

어떻게 피할 수 있을까?

사실 명확히 어떻게 피할 수 있다고 하기 힘들다. 항상 수정 전에 명확히 구조를 정하고 아키텍쳐를 정확히 수정하면 되는 것이 해법이라고 하지만, 그게 되면 다들 공부를 열심히 해서 서울대 의대에 갔을 것이다. 피하는 방법을 몰라서 못 피하는 것이 아니라 그 방법대로 하기가 힘든 거니까. 원론적인 내용을 떠나서 실제 업무에 적용한다면 마땅한 방법은 그냥 열심히 최대한 잘 하는 방법 밖에 없다. 어차피 개발이 다 그런거니까.