(리뷰) 익스트림 프로그래밍

September 6, 2020

최근 들어서 정해진 프로세스를 따르기만하는 것이 아닌가 하는 생각이 들었다. 회사의 프로세스를 따르는 것도 중요하지만 어디든 개선해야 할 부분이 있기 마련이다. 그런데 나는 어떻게 개선해야 할지에 대한 아이디어가 잘 떠오르지 않았다.

익스트림 프로그래밍은 우리가 뛰어난 소프트웨어를 만들려면 어떻게 해야하는지 알려주는 책이다. 개발자도 행복하고, 코드 설계도 훌륭하고, 결함도 적고, 고객도 만족하는 소프트웨어를 만들기 위한 지침이다. 이상적인 개발 프로세스는 어떤 모습일지 궁금했는데 이 책에 그런 내용들이 있었다.

가치, 원칙, 실천 방법

익스트림 프로그래밍(Extreme Programming)은 사람들이 뛰어난 소프트웨어를 개발하기 위한 방법이다. 익스트림이란 단어가 포함된 이유는 개인이 극단으로 팀에 기여할 수 있는 방법을 안내하기 때문이다. 익스트림 프로그래밍은 가치와 원칙, 실천 방법, 이 세 가지 요소에 대해 설명하는 것으로 시작한다.

실천 방법은 익스트림 프로그래밍을 적용해 소프트웨어를 개발할 때 사용하는 기술이다. 여러 실천 방법이 있는데 대표적으로 함께 앉기, 짝 프로그래밍, 테스트 주도 프로그래밍이 있다. 하지만 단순히 실천 방법을 따르기만 한다고 익스트림 프로그래밍을 따라서 일한다고 말하기는 어렵다. 예를 들면 테스트 주도 프로그래밍을 한다면, 테스트를 먼저 작성해서 얻을 수 있는 가치가 무엇인지 이해해야 한다.

가치는 실천 방법에 목적을 부여한다. 익스트림 프로그래밍에서의 가치는 의사소통, 단순성, 피드백, 존중, 용기가 있다. 다만 이러한 가치들은 다소 추상적인 개념인 반면 소프트웨어 개발을 하면서 일어나는 문제는 다양하고 복잡하다. 그래서 실천 방법을 실제로 적용하기는 어려울 수 있다. 저자는 가치와 실천 방법을 이어주는 것이 필요하다고 말하는데, 바로 원칙이다.

원칙은 가치와 실천 방법을 이어주는 다리와 같다. 원칙에는 인간성, 경제성, 자기 유사성, 상호 이익 등이 있다. 실천 방법을 적용하려고 하는데 어려움을 겪을 때 원칙을 제재로 이해하면 도움이 된다고 한다. 그리고 원칙을 잘 이해하고 있으면, 실천 방법이 책에 없더라도 새로운 실천 방법을 고안할 수도 있다.

자주 릴리즈하기

책에서 강조하는 것 중 하나는 릴리즈 주기를 짧게 가져가는 것이다. 릴리즈 주기가 길어지면 그 릴리즈에 포함되는 기능이 많아진다. 기능이 많아지면 결함이 발생할 확률도 높아진다. 결함이 많아서 고객의 불만이 쌓일 때 그것을 회피하고자 릴리즈 주기를 더 길게 가져가는 악순환이 시작될 수도 있다.

피드백은 익스트림 프로그래밍에서 아주 중요한 가치다. 피드백을 받음으로써 우리는 잘못된 부분을 개선할 수 있다. 익스트림 프로그래밍의 목표 중 하나는 내일 더 나아지는 것인데, 피드백을 받을 수 없다면 잘못된 것이 무엇인지 알 길이 없다. 따라서 한 달이나 최소 분기 단위로 릴리즈 주기를 짧게 가져가서 고객의 피드백을 주기적으로 받을 수 있게 한다.

고객과 함께 계획하기

한정된 자원으로 고객에게 의미있는 제품을 빠른 시간에 전달하기 위해서는 우선 순위가 높은 것부터 개발해야 한다. 우선 순위를 잘 아는 사람은 고객이기 때문에, 이터레이션을 계획할 때 고객이 구현할 직접 스토리를 고르게 하는 것이 좋다. (여기에서 고객은 꼭 제품을 사용하는 엔드 유저가 아니더라도, 고객에게 가까운 사람이나 개발 요구사항을 주는 사람을 고객으로 생각해도 된다.)

개발을 시작하기 전에 하는 추정은 크게 틀리기 쉽다. 실제로 개발해보면 예상하지 못한 상황들을 만나기 때문이다. 따라서 계획을 할 때는 추정치를 개선할 수 있도록 빠르게 개발해보는 것도 좋다. 예를 들어서 계획에 일주일이 걸리는 일이라면, 개발과 추정을 개선하는 일을 매일 반복하는 방법도 있다.

서로에게 도움이 되는 일을 하기

관계에서 어느 한 쪽이 손해만 보게 되면 결국 불편해지기 마련이다. 이 규칙은 나와 다른 사람 사이 뿐만 아니라, 나와 미래의 누군가 사이에도 적용될 수 있다. 예를 들어 개발자가 미래의 후임자나, 회사를 위해 장문의 문서를 작성해야 한다고 생각해보자. 문서를 작성하는 사람은 자기 시간을 할애하면서 지루한 문서 작업을 하는 것에 불만이 생길 수 있다. 그리고 긴 문서가 미래의 후임자에게 도움되는 내용이 있다는 보장도 없다.

이럴 때는 나에게도 도움이 되고 미래의 누군가에게도 도움되는 방법을 사용할 수 있다. 테스트 코드를 작성하여 문서를 대체할 수 있도록 하는 것은 좋은 방법이다. 테스트 코드는 업데이트되지 않으면 테스트 실행이 실패하기 때문에, 문서에 비해 업데이트를 하지 않아 문제가 발생할 확률이 적다. 또한 평소에 테스트 코드를 잘 작성하지 않았다면, 테스트 코드를 작성하면서 테스트를 작성하는 방법에 대한 공부도 할 수 있다.

나부터 시작하고 공유하기

이 책을 달달 외운다고 해서 익스트림 프로그래밍에 대해서 잘 이해할 수는 없을 것이다. 만약 이해한다고 하더라도 혼자서만 알고 있고 다른 사람들은 그 방법에 대해서 모른다면 이 책을 읽는 의미가 없어질 것이다. 우선 나부터 시작해야 한다. 그리고 힘들게 경험한 것들을 다른 사람에게 공유할 수도 있어야 한다.

끝으로

익스트림 프로그래밍이나 애자일에 대해 잘 몰랐지만 읽으면서 크게 어려운 내용은 없었다. 다만 이 책이 정말 의미있었던 책이 되기 위해서는 현실에서 직접 실천하려고 해보는 것이 중요할 것이다. 하나의 실천 방법이라도 적용해보고 어려움을 느낄 때는 이 책을 다시 읽으면서 가치와 원칙에 대해 새겨보는 것이 좋을 것 같다.