공든탑이 미쳐 날뛰고 있습니다.

가끔은 오랫동안 짜놓은 코드들이 얽히고 얽혀 수습이 불가능한 영역으로 가는 경우가 발생한다. 그나마 분석/설계가 잘 된 프로그램들이라면 그런 상태가 덜 할 수도 있다. 하지만 어차피 코드는 얽히게 되어있다. 일본의 전대물 시리즈 (국내에서는 파워레인져 시리즈) 들을 보면 처음에는 로봇들의 합체가 안정적으로 여러 바리에이션이 나오지만, 차후에 합체해야 되는 놈들이 늘어날 수록 프로모션이 수습이 안 되는 모습을 특촬덕들은 매년 볼 수 있다. 일본에서 그래도 나름 잔뼈 굵은 장난감 만드는 놈들도 이런 상황인데 프로그래머라고 다를 게 없다.

코드들은 처음에는 나름 분리되어 잘 돌아간다. 하지만 덩치가 커지면 커질 수록 여러 객체들은 점점 서로 의존성이 엮여가는 성향을 보인다. 특히나 수시로 요건사항이 변하는 상황에서는 이런 성향이 더 강해질 수 밖에 없다. 흔히 말하는 레거시 코드(legacy code) 가 되어가는 것이다. 물론 잘 돌아간다면 문제가 없다. 하지만 이런 코드가 눈에 보인 다는 것은 문제가 발생하였거나 수정해줘야 되는 부분이 있을 것이다.

혼돈, 파괴, 망가

이럴 때 내가 가장 추천하는 방법은 코드를 박살 내는 것이다. 이미 얽히고 얽혀 수정할 방법을 찾을 수 없는 코드는 버리는 게 상책이다. 물론 시간이 많이 들 것이다. 하지만 차후 발생하는 사이드 이펙트들을 막기위해 수많은 시간을 소비하는 것보다는 낫다고 생각한다.

코드를 처음부터 짠다는 것은 어떻게 보면 큰 모험같이 보인다. 하지만 만약 자신이 짜놓은 코드라면 생각보다 의외로 시간이 적게 든다. 여기서 자신이 짜놓은 코드란 것은 자기가 직접 이해하고 타이핑한 코드를 뜻한다. 의미도 모르고 코드 복붙해놓고 염치없이 자기가 짠 코드라고는 하지 말자. 아무튼 자신이 직접 이해하고 짠 코드라면 이미 머릿속에 흐름은 박혀 있다. 적어도 처음 짤 때처럼 로직에 대한 고민 은 덜 수 있다는 것이다. 당신이 이제 고민해야 되는 것은 보다 안정적이고 확장가능한 설계 뿐이다.

이런 과정을 일반적으로 리팩토링 이라고 한다. 이 리팩토링 과정은 한번 짠 걸 다시 짜야되는 상황이라 정말 귀찮고 번거로운데다가 지겨운 작업일 수도 있다. 하지만 당신이 이미 리팩토링을 고려해야 되는 상황에 처했다는 것은 이미 이 레거시 코드에 발목이 잡혔음을 뜻한다. 즉 이 새로움이라고는 눈꼽만큼도 없는 리팩토링 과정은 당신의 숙명이라는 것이다. 묵묵히 받아들여라.

개인적으로는 이 리팩토링 과정은 인지하고나서 부터 빠른 시간내에 진행 하는 것이 좋다고 생각한다. 왜냐하면 아직까지 사용된 로직을 조금이나마 더 기억하고 있을 때 진행하는 것이 아무래도 덜 힘들고 빠르지 않겠는가? 거기다가 덩치가 커지면 커질 수록 해야 될 일은 더 많아지기 마련이다. 그리고 레거시 코드를 해결하지 않고 수정해나가면 코드는 점점 더 얽혀나가기 마련이다. 최대한 덩치가 작고 수습할 수 있을 때 확장을 고려해서 새로 잡아놓는 것이 미래를 위한 투자 라는 것을 명심하자.

명장은 도구를 가리지 않는다.

옛말에 “명장은 도구를 가리지 않는다.” 라는 말이 있다. 실제로 인터넷을 뒤져보면 메모장으로 코딩하는 사람 그림판으로 코딩하는 사람 등등 별별 인간이 보인다. 모 사이트에서는 메모장으로 프로그래밍 안 해본 것들이 뭘 알겠냐고 하는 말도 나오기도 한다. 하지만 명심하자. 당신은 명장이 아니다. 적어도 도구는 가려쓰고 잘 써야 된다.

그림판 코딩(미친짓)

흔히 프로그래밍에 쓰는 툴 IDE 역시 수많은 프로그래머들의 고민과 애환이 담긴 슬픈 전설이 있는 물건이다. 인텔리센스와 파일관리 빌드셋팅 등 적어도 당신이 삽질할 구석을 하나라도 줄여주는 녀석이다. 이런 고마운 녀석들을 굳이 마다하고 수작업을 하겠다는 것은 인류의 진화를 무시하는 처사이다.

물론 구슬이 서말이라도 꿰어야 보배고 건프라가 수십개라도 조립해야 건담이라는 말이 있듯이 IDE도 잘 사용해야 IDE처럼 쓸 수 있게 된다. 제대로 기능을 이해 하지 못한다면 기능많은 메모장 에 불과하다. 단축키는 다 못 외우더라도 중요한 건 익혀놓고 무슨 기능이 있는 지는 충분히 이해해 두는 것이 좋다. 이 IDE를 잘 사용하는 것도 개발속도를 높여주고 당신의 휴식시간을 보장해 줄 수 있다는 것을 항상 명심하자.