매스프레소(콴다)
/ 조회수 : 2011
최근에 콴다 안드로이드 서비스에 빠르게 확인할 작업이 필요했습니다. 저 혼자 작업하기에는 부족한 부분이 있어서 저의 부족한 부분을 채워주면서 같이 작업을 할 동료를 구해 2주정도 같이 페어 프로그래밍으로 작업을 했습니다.
이전부터 애자일 개발 방법론중 하나인 페어 프로그래밍을 개발중에 간간히 진행하고 있었는데, 페어 프로그래밍을 하면서 느낀 장단점에 대해서 그리고 페어 프로그래밍을 성공적으로 하려면 어떻게 하는게 좋을지에 대해서 공유해 봅니다.
페어 프로그래밍은 애자일 개발 방법론 중의 하나로 하나의 개발 가능한 PC 에서 두 명의 개발자가 함께 작업하는 것을 말합니다. 네비게이터(navigator)가 전략을 제시하고 드라이버(driver)가 실제 코드를 작성하며, 이 열할을 각자 번갈아가며 수행합니다. 짝 프로그래밍이라고도 합니다.
저희는 한대의 pc 에서 네비게이터와 드라이버가 번갈아가면서 1시간 작업 10분 휴식을 하면서 페어 프로그래밍을 진행했습니다.
페어 프로그래밍을 하면 좋은점
지식 공유
웹쪽의 기술은 약하지만 서버쪽 인프라에 대해서 제가 잘 알고 있고, 저와 같이 작업한 팀원은 실제 구현에 필요한 기술을 잘 알고 있기 때문에, 서로가 몰랐던 부분을 많이 배울 수 있게 된다. 같이 페어 프로그래밍을 진행하면 서로가 다른 분야의 기술을 알고 있을때 혹은 새로운 멤버가 들어올때, 팀의 개발환경이나 해당 기술에 대해서 공유해 줄 수 있다. 이미 개발문서로 팀의 개발환경이나 개발 스타일 등에 대한 문서를 전달하는 방식보다 빠르게 팀의 지식을 공유하기에 좋은 방법이다.
2. 같이 고민하기
매일 동일한 루틴의 작업을 할때는 문제가 없지만, 새로운 일이나 어디서 부터 살펴봐야 하는지 모를때 같이 고민해 줄 사람이 있다는건 복이라 생각하고 페어를 통해 함께 대화를 하면서 빠르게 결정하게 해주고 작업 시간을 줄여주게 된다. 특히 처음 접하는 언어나 프레임워크를 사용해야 할때 혼자서 하게 되면 지치기도 하고, 중간에 그만두고 원래 방식으로 가게 될때가 많지만, 페어를 하게 되면 이전의 방식이 아닌 다른 방법에 대한 도전을 시도하게 된다.
3. 업무에 대한 집중도 상승
출근해서 퇴근 할때까지 페어로 짝과 함께 작업을 하다보니 업무 외적으로 소비되는 시간이 많이 줄어들게 된다. 메신저를 보거나 메일을 확인하는 시간이 페어를 하는 시간에는 불필요한 일이 되기 때문에 오로지 업무에만 집중을 하게 된다. 실제로 페어를 하는 날이면 지치고 체력소모가 많이 발생한다.
4. 코드 리뷰 및 개발 방향의 지속
페어 프로그래밍을 하다 보면 서로가 서로의 코드에 대해서 코드 리뷰를 실시간으로 할 수 있다. 타이핑 도중에 발생하는 작은 실수부터 설계 결함까지 소스코드에 대한 피드백을 가장 빠르게 받게 되고, 이를 통해 결함을 줄일 수 있어서 일정한 수준의 코드 품질을 유지할 수 있다. 페어로 함께 개발을 하면 실시간 코드 리뷰와 함께 올바르게 설계를 하고 개발의 목적에 맞는 방향으로 가고 있는지에 대해서 팀원간의 지속적인 대화와 확인이 가능하게 된다.
5. 팀원들이 건드릴 수 있는 코드의 상태
개발자들은 모두 자신의 담당업무가 있고 해당하는 업무에 대해서만 처리가 가능하다. 다른 팀원이 해당 업무를 처리하기는 쉽지 않다. 페어를 하게 되면 업무에 대한 담당자가 1명 이상이 되기 때문에, 누구라도 해당 업무를 처리할 수가 있게 된다. 그리고 팀으로서 해당 업무만이 아니라 전체 제품에 대해서 함께 고민하고 개발을 할 수 있다. 특정한 팀원 만이 가능한 일이 줄어들게 되고 업무에 대한 병목을 줄일 수 있게 된다.
6. 팀원 제대로 알기
같은 개발팀으로 일을 하여도 업무적으로 같은 일을 하지 않는다면, 팀원에 대해서 제대로 알기 어렵게 되고, 하루에 몇번 보지 못하는 팀원의 행동만을 가지고 팀원을 알게 된다. 하지만 페어를 진행하면서 팀원들과 같이 일을 하고 많은 대화를 나누면 팀원들에 대한 장단점을 잘 알게 되고, 자연스럽게 같은 팀원으로 같은 일을 하고 있다는것을 느끼게 된다. 이렇게 자연스럽게 작업을 통해서 이루어지는 팀워크가 좋은 영향을 줄 수도 있고, 나쁜 영향을 줄 수 도 있지만 팀을 단단하게 만들어 주는 기초가 되고 서로가 발전할 수 있는 계기를 마련하기도 한다.
페어 프로그래밍을 하면 안 좋은 점
1. 생산성 저하
많은 사람들이 2명이 함께 페어 프로그램을 한다고 하면 한 명이 할 일을 두명이 하고 있으니 생산성이 반으로 줄어든다고 생각한다. 직접 페어 프로그래밍을 하다보면 생산성이 떨어지는 것을 경험 하기도 하지만, 생산성이 높은 반면에 해당 작업에 대해서 알고 있는 사람은 줄어들게 되고 결함이 있는 작업이 존재할 확률은 더 높아진다.
2. 키보드 성애자
실제 페어 프로그래밍을 하다보면, 시니어와 주니어 개발자가 같이 하는 경우가 많다. 드라이버와 네비게이터의 역할이 물 흐르듯 변경되어야 하지만 시니어 개발자는 5분, 10분 더 키보드를 잡고 있거나 중간에 절대반지처럼 키보드를 납치해서 코드를 완성시키고 싶은 욕망에 사로 잡히게 된다. 시니어 개발자는 생산성이 저하되는것을 참지 못하고 아무말없이 코드를 완성해 나가고, 그걸 보고 있는 주니어 개발자는 어떤 기능이 완성되었는지 모르고 코드를 따라가기에 벅차다. 이렇게 반복되면 점차 대화는 줄어들고 기능은 완성 되었지만 주니어 개발자는 더 이상 페어로 작업 하는데 대한 흥미를 잃게 되고, 페어를 하지만 방관자가 되어서 개발이 끝나게 된다.
3. 감정 문제
마음이 잘 맞는 사람과 함께 일을 하면 좋겠지만, 개발하는 스타일이 매우 다르거나 생각하는 바가 다른 사람과 함께 작업을 하다보면 작업이 힘들어 질때가 있다. 이런 부분들은 페어 프로그래밍을 하면서 쉽게 바뀌거나 개선 되지 않는 문제이기 때문에 해결하기 어려운 문제다.
4. 피로도 상승
페어를 함께 하루 종일 집중해서 하다보면 개발에 대한 집중도는 증가하지만 피로도 또한 증가한다. 하주종일 끊임없이 대화를 하면서 많은 에너지를 소모하지 않도록 중간 중간 쉬는 시간을 가지면서 체력적으로 힘들지 않게 해야 한다. 필요하다면 페어를 진행하지 않고 각자의 생각을 정리할 시간을 가지고 난 뒤, 서로의 생각을 이야기 해보는 시간을 갖는게 좋다.
페어 프로그래밍 해보기
현실적으로 페어 프로그래밍을 하기란 생각보다 쉽지 않다.
개발에 필요한 시간과 인력은 부족한데, 생산성을 줄이며 페어를 해야할까 라는 생각이 들때도 있다.
실제로 페어를 해보면 매우 어렵다. 옆에서 코드를 지켜보는 것보다는 빠르게 개발하고 결과를 확인하고 싶은 마음에 자꾸만 키보드에 손이 간다. 모르는 부분에 막힐때면 빨리 검색을 해서 막힌 부분을 풀고 싶어진다. 어떻게 하면 해볼 수 있을까?
페어에서 가장 중요한 부분은 코딩을 많이 하는게 아닌 팀원과 대화를 하면서 문제를 같이 풀어 나가는 것이 중요하다.
문제에 대해서 같이 고민하고 대화를 통해서 문제의 해결법을 찾아야 한다. 무작정 코딩만을 하면서 해결법을 찾아 나가면 너무나 쉽게 지치고 나홀로 코딩을 하고 싶어진다.
코딩을 하면서도 자신이 생각하고 있는 방향에 대해서 파트너와 항상 대화를 하면서 진행해야 한다. 그렇지 않으면 드라이버는 개발만 하게 되고, 옆의 네비게이터는 화면만 멍하게 쳐다보게 될 것이다. 항상 현재 자신이 작업하고 있는 상황에 대해서 설명하고 자신의 생각을 공유해야 한다.
키보드를 잡고 있는 사람에게 모든 일을 맡기고, “잘하겠지?” 라고 생각하면서 보고 있지 말고 더 나은 코드를 생각하고 더 좋은 방법이 없는지 생각해야 한다. 생각을 하지 않게 되면 대화가 멈추게 되고, 대화가 멈추면 페어로 작업을 할 이유가 없어진다.
아직은 홀로 페어 프로그래밍을 하고 있지만 많은 분들과 페어를 할 수 있는 상황이 되면 좋을 것 같습니다.
개인의 성장도 중요하지만 팀의 성장을 위해서라면 페어 프로그래밍은 좋은 선택이 될 수 있습니다.