파이프라인처럼 개발하기
어떤 기능을 하는 소프트웨어를 개발하려고 할 때, 전통적으로는 다음과 같이 개발하곤 합니다.
목표를 달성하기 위한 계획을 작성하고, 계획서를 바탕으로 개발해 나갑니다. 이는 많은 기업들에서 채택하는 방식이지만, 개인적으로 무언가를 개발하거나 빠르게 결과물을 만들어내야 하는 경우에는 오버헤드가 너무 큽니다. 또한 이렇게 계획을 세우고 개발하기 위해서는, 도메인 전체에 대한 이해가 전제됩니다. 과연 도메인 전체를 완벽하게 이해하고 기획하는 것이 효율적인 방법일까요? 아닐 것입니다.
이러한 여러 현실적인 문제를 해소하는 좋은 방법으로 “파이프라인” 형태로 개발하는 방법이 도움이 될 수 있습니다. 여러분들이 알고 계실 bash 파이프라인 맞습니다.
$ command1 | command2 | command 3
bash pipeline은 첫번째 명령어의 output을 두번째 명령어의 input으로 넣어 명령어를 실행합니다. 이게 쭉 이어져서 우리가 원하는 결과물로 이어지도록 만드는 것입니다. 전통적인 방식과 다른 점은, 내가 원하는 작업의 가장 핵심적인 목표가 무엇인지 인지하고 그것부터 개발하기 시작하는 것입니다.
이 방식에서, 개발 전에 정해야 할 사항은 딱 두가지입니다.
- 어떤 결과물을 만들어낼 것인가?
- 어떤 작업이 핵심(core)인가?
그리고, 각 작업을 개발합니다. 이때 속도감 있게 개발하기 위해서 하나의 action에 너무 많은 시간을 쓰지 않는 것이 좋습니다. 저는 30분 타이머를 맞춰놓고, 시간 안에 개발하도록 노력합니다. 이런 방식은 다음과 같은 장점을 가집니다.
- 시간 내에 작동하는 결과물이 나옵니다.
- 자연스럽게 가장 중요한 것이 무엇인지 생각하고 개발할 수 있게 됩니다.
물론 그렇게 구현하면 코드 퀄리티가 영 좋지 않게 됩니다만, 저에게는 이것도 몇가지 장점이 되는 것 같습니다. 낮은 코드 퀄리티에 대한 단점을 저는 이렇게 받아들이고 있습니다.
- 리팩토링이 쉬워집니다. 한번에 노력한 코드들은 때론 리팩토링을 하는데 거부감을 주곤 합니다. 이를 코드 퀄리티를 낮추어 좀 더 유기적으로 코드를 수정하도록 도움이 됩니다.
- 의도적 수련의 여지가 많이 남아있게 됩니다. 같은 시간 내에 조금 더 코드 퀄리티를 높이는 식으로 수련할 수 있습니다.
특히 1번이 매우 중요합니다. 자연스럽게 수정하고 변형해 나가는 코드가, 제 도메인에 대한 이해를 반영할 수 있게 되는 것입니다. 이것이 왜 중요한지는 기술 부채 메타포 글에 설명해 두었습니다.
2024. 11. 04