Published on

1장. 소개

1장. 소개

프로그램이 단순히 동작 하도록 만드는 것은 엄청난 기술을 필요로 하지 않습니다.

개발을 조금만 배웠고, 대학생이더라도 좋은 라이브러리들이 많기 때문에 금방 만들 수 있죠.

하지만 프로그램을 제대로 만드는 것은 다른 이야기 입니다.

프로그램을 제대로 만드는 것은 상당히 어려운 일이며, 적정 수준의 지식과 기술을 갖춰야합니다.

프로그래머는 그러기 위해 노력해야 하지만, 놀랍게도 만들면 끝이라는 개발자가 많은게 현실입니다.

우리 대부분은 좋은 설계를 바탕으로 작업하며 즐거움을 느끼기보다, 개판인 설계를 보며 욕하는 일이 더 많을겁니다.

왜 좋은 설계를 하지 않고 개발을 시작했을까?

인적자원과 시간이 무한정으로 있다면 어느 팀도 이렇게 하지 않았을거라 생각합니다;

하지만 회사에서 일을 하다 보면 시간이 굉장히 부족합니다.

특히 스타트업의 경우 유지보수가 문제가 아니라, 당장 시장에 내놓고 선점을 해야하기 때문에 더더욱 빠르게 만들어야 하죠.

그래서 빨리 시장에 내놓아야 한다는 이유로, 시장애 내놓으면 또 다른 태스크가 밀렸기 때문에 작업을 하다보면 자연스레 기존 코드는 방치되어 나중에는 간단한 기능 하나 추가에도 일주일이 걸리는 일이 생겨납니다.

이렇게 막무가내로 개발 되어 나간 제품 때문에 시간이 지날수록 회사는 프로그래머를 많이 고용하지만, 성과는 없는 신기한 현상에 봉착합니다.

책에서는 실제 사례를 가지고 이야기 합니다.

인원을 급속도로 늘어 인력비는 증가하지만, 실질적으로 코드 라인은 거의 늘어나지 않습니다.

여기서는 단순히 코드 라인을 가지고만 판단하였습니다.

이건 회사 입장에서도 굉장한 손해입니다.

돈은 돈대로 나가고 간단한 기능 추가나 변경은 굉장히 느리게 되기 때문입니다.

이쯤되면 처음에는 빨리 만들어 내라고 했던 사람들에게서 왜 코드를 생각없이 그렇게 짰냐는 말을 들을 수도 있습니다.

그럼 어떻게 설계를 하면 되는가?

우리는 좋은 개발 기법인 TDD를 알고 있습니다. (알고 있다고 가정하겠습니다.)

테스트를 작성함으로써 추후 변경사항에 대해 사이드 이펙트를 확인하기 쉽고, 테스트가 모두 성공하면 정상적으로 기능을 추가 혹은 변경 했다고 믿을 수 있기 때문입니다.

또한 TDD로 개발을 하게 되면 자연스레 설계도 좋아집니다.

TDD단순 테스트 코드 작성은 조금 다른 의미입니다.

TDD는 테스트를 먼저 작성하고 실제 로직을 작성하는 반면, 단순 테스트 코드 작성은 실제 로직을 작성하고 테스트 코드를 뒤에 추가하는 것입니다.

요즘은 테스트 코드를 작성하는 회사가 많아졌습니다.

그럼에도 여전히 테스트 코드를 작성하지 않는 회사들은 존재하며, 이유는 간단합니다.

시간이 없으니까. 유지보수가 문제가 아니라 당장 개발해서 결과를 내야하는 게 우선이기 때문입니다.

스타트업에 나중은 없습니다.

하지만 책에서는 이런 말이 틀렸다고 합니다.

제이슨 고먼이라는 개발자는 정말 테스트를 작성하면 개발속도가 더 느린가 판단하기 위해 6일 간 정수를 로마 숫자로 변혼하는 단순한 프로그램을 만들기로 합니다.

3일은 TDD로 개발하고, 3일은 그냥 개발을 했는데, 놀랍게도 TDD를 작성하며 제일 느리게 완성되었던 날이 TDD 없이 개발하여 제일 빨리 끝난날보다도 빨랐다는 겁니다.

테스트 코드를 작성하면 당연히 작성해야할 로직이 더 많아지니까 더 오래 걸릴것이라 생각하지만, 실제로는 어차피 로직을 작성하고 서버를 실행하여 실제 동작을 확인하는 과정이 존재하기 때문에 기능이 하나 추가될 때마다 테스트 코드를 작성한 것과 안한 것의 차이는 더 많이 나게 됩니다.

이렇게 테스트 코드를 모두 작성해 놓는다면 기능 추가 혹은 변경 시간은 거의 일정한 속도로 유지됩니다.

기능을 추가하고 테스트 코드를 돌려 보면 어디가 사이드 이펙트가 났는지 단번에 알아챌수 있기 때문입니다.

하지만 테스트 코드를 작성하지 않으면 모든 기능에 대해 하나하나 테스트 해보며 사이드 이펙트가 있는지 확인해야 합니다.

어떻게 그 많은 기능을 다 테스트하냐 하며 그정도 확인도 안하고 기능 추가하고 배포할 생각이라면 이런 논의는 무의미 할거 같습니다.

즉 시간이 없어서 테스트 코드를 못짠다는 것은 거짓말이며 막무가내로 짜낸 로직이 단기간으로 봤을 때 속도가 빠르다는 것 또한 거짓말입니다.