불필요한 기술을 쓰지 않는 기술
기능을 개발하다보면 미래를 생각하게 된다. 내가 적용한 기술이 향후 사용자가 늘고 트래픽이 증가했을 때 잘 견딜 수 있을지에 대한 염려가 들때가 많다.
보편적으로 아직 불필요한 기술을 적용하여 개발속도를 늦추고 유지보수가 어렵게 하는 것을 기술지향적인 개발이라고 일컫는다.
그리고 그 대척점에 있는 것을 고객지향적인 개발이라고 일컫는데, 이는 가능한 단순한 기술을 적용하여 빠른 문제해결과 피드백을 받는 기민한 스타일을 말한다.
하지만 논리적으로 보면 기술지향적인 개발 과 고객지향적인 개발은 서로 반대급부가 아니다.
예를 들어 고객지향적인 개발에서 단순히 빠르게 문제를 해결하는데만 집중한다면 장기적으로 유지보수성이 낮아지고 기술부채의 승수효과로 인해 개발 비용이 가속될 수 밖에 없다. 따라서 이러한 지향을 절대적 선으로 치부할 수는 없다.
각 용어가 가지고 있는 의미를 해체하여 다시 따져볼 필요가 있다.
기술지향적인 개발에 대한 내러티브는 사실 성능과 비용 절약에 초점이 맞춰져있다. 이를 위해서 미래에 증가할 부하와 비용에 대비하여 준비하는 것이다.
고객지향적인 개발에 대한 내러티브는 빠른 출시와 개선, 가치 창출로 이어진다.
각 키워드를 한곳에 모으면 다음과 같다.
- 성능
- 비용 절약
- 빠른 출시와 개선
- 가치 창출
성능과 비용은 시계열을 기준으로 지속적으로 우상향하는 사용량에 따라 필요해 증가할 필요가 있다. 즉 요구 시점에 따른 목표기준이 변화한다.
빠른 출시와 개선, 가치창출은 그에 다르게 현재 요구 받고 있으므로 당장의 충족여부가 중요한 영역이다.
이를 적절히 조합한 좋은 개발 철학을 나름대로 정의해보자면 다음과 같다.
- 향후 사용량 증가에 따른 기술 전환을 쉽게 할 수 있도록 추상화를 도입한다.
- 미래의 자신과 동료를 위해 기술 전환 시점을 평가 가능한 시스템을 도입한다.
- 이를 보험으로 삼아 당장의 요구사항을 충족할 수 있는 가장 단순하고 빠른 기술을 적용하여 구현한다.