본문 바로가기
개발자

페어 프로그래밍(Pair Programming)이란?

by A6K 2023. 12. 5.

애자일 소프트웨어 개발 방법론 중 하나로 '페어 프로그래밍(Pair Programming)'이라는 것이 있다. 페어 프로그래밍은 두 명의 개발자가 한 컴퓨터를 가지고 프로그램을 설계하고, 알고리즘을 작성, 코드를 작성 밑 테스트를 진행하는 개발방식이다. 동료 프로그래밍, 쌍 프로그래밍 혹은 짝 프로그래밍이라고도 부른다.

운전석과 조수석의 관계가 페어 프로그래밍(Pair Programming)의 핵심이다

두 프로그래머 중 한 명이 '네비게이터(Navigator)' 역할을 수행하여 전략을 제시하고, '드라이버(Driver)'가 실제 코드를 작성하게 된다. 그리고 이 역할은 각자 번갈아가며 수행하게 된다.

이름에서 알 수 있듯이 페어프로그래밍은 운전으로 생각할 수 있다. 자동차를 운전하는 사람을 드라이버라고 말하며, 조수석에 앉아 지도를 보고 방향을 알려주는 사람을 네비게이터라고 할 수 있다. 운전대를 잡은 드라이버는 자동차 앞에 있는 장애물을 피하고, 전방 주시를 하면서 자동차를 조작한다. 네비게이터는 지도를 보면서 큰 그림을 그려주는 역할을 한다.

페어 프로그래밍에서도 마찬가지다. 드라이버는 실제 키보드를 눌러 코드를 작성하는 일을 담당한다. 네비게이터는 드라이버가 작성하는 코드를 리뷰해주는 역할을 한다. 드라이버는 좁은 범위에서의 소스코드에 집중하고, 네비게이터는 프로그램의 큰 설계와 모듈 간 관계에 집중하며 설계에서 벗어나지 않도록 조언해 주는 역할을 수행하게 된다.

페어 프로그래밍의 장점

1. 집중력

프로그래머는 PC를 통해 개발 업무를 진행한다. PC는 우리에게 온 갖 유혹을 던진다. 코딩을 하다가도 레퍼런스를 찾기 위해 웹 브라우저를 켜는 순간 각종 뉴스와 게시판, 유튜브 영상들이 우리의 집중력을 빼앗아가기 위해 노력한다. 특히 재택근무를 하고 있는 경우엔 이런 유혹에 더 취약하기 마련이다.

페어프로그래밍을 하는 도중에는 동료와 함께 개발을 하고 있기 때문에 메신저를 보거나 유튜브 영상을 보는 등의 딴 짓을 최소화할 수 있다. 강제로 집중하게 되는 것이다. (둘이 함께 딴 짓을 하면 모르겠다)

2. 버그의 감소

페어프로그래밍을 하면 작업 중에 크고 작은 오류들을 잡아낼 수 있다. 해결하고자 하는 문제에 대해 좀 더 다양한 각도에서 살펴볼 수 있어 최적의 해법을 찾아낼 가능성이 높아진다. 두 개발자는 서로 다른 경험을 가지고 있을 가능성이 높고, 각자의 경험에 기반해 다른 각도로 문제를 해석하고 솔루션을 찾아낼 가능성이 높아진다. 혼자 일했을 때는 미처 발견하지 못한 최적의 방법을 찾아낼 수도 있기 때문에 좀 더 깔끔한 설계가 나올 수 있다.

코드를 작성하면서 문제에 대해 지엽적으로 집중하다보면 큰 그림을 놓칠 수 있는데, 네비게이터가 옆에서 이를 바로 잡아주면 조기에 문제를 발견하고 바로잡을 수 있다.

3. 성장

개발자는 서로 가지고 있는 지식과 경험이 다르다. 페어 프로그래밍을 하면서 서로의 지식을 공유하고 문제에 대한 새로운 접근 방법을 공유하다보면 서로 성장할 수 있는 기회를 얻게 된다. 특히 나도 모르게 가지고 있었던 안 좋은 습관을 발견할 수도 있고, 내가 가지고 있지 않았던 페어의 스킬을 직접 전달받을 수도 있다. 의견을 주고 받으면서 커뮤니케이션 스킬을 발전시킬 수도 있다.

팀에 새로운 멤버가 합류하는 경우 페어 프로그래밍을 하면 새로운 멤버의 적응이 좀 더 빨라지는 경우가 많다.

4. 결과에 대한 신뢰

개발자는 자신이 작성한 코드에 대해 어느정도 불안감을 가지고 있다. 미처 발견하지 못한 버그가 있을 수도 있고, 생각하지 못한 시나리오로 코드가 사용될 수도 있다. 이 때문에 Pull Request 같은 프로세스를 두기도 하는데, 페어프로그래밍을 하면 이런 불안감을 조금이나마 덜어낼 수 있다.

온라인으로 진행된 연구에 의하면 96%의 프로그래머들이 혼자 프로그래밍을 할 때보다 페어프로그래밍을 할 때 즐거움을 느꼈고, 95%는 페어프로그래밍을 해서 만들어진 결과물에 대해 더 믿음이 가고 결과물에 대한 확신도 늘어났다고 답했다. (Strengthening the case for pair programming)/p>

 페어프로그래밍의 단점

1. 생산성

프로젝트를 진행하면서 두명의 개발자를 하나의 작업에 투입하기 때문에 팀 전체의 생산성은 산술적으로 절반가량 떨어진다. 생산성을 포기하면서 코드의 품질을 향상시켜 미래에 발생할 수 있는 디버깅 작업으로 인한 손해를 줄이는 것이다.

이 때문에 빠르게 코드를 생산해내야 하는 단계에서는 페어프로그래밍이 맞지 않을 수 있다.

2. 압박감

페어프로그래밍의 가장 큰 단점은 스트레스다. 드라이버는 네비게이터가 항상 코딩을 지켜보고 있다는 압박감을 받게 된다. 이 때문에 항상 의식하게되고 긴장하게 된다. 이런 긴장은 스트레스를 불러일으키고 실수를 유발시키기도 한다. 또 한, 장시간 커뮤니케이션을 하다보면 밀려오는 피로감을 피할 수 없게 된다.

이 때문에 페어프로그래밍은 네비게이터와 드라이버가 번갈아가면서 해야한다. 오전에는 A가 오후에는 B가 드라이버를 하는 식으로 적당한 시간을 정해 교대해야한다. 

3. 팀원간의 관계

페어프로그래밍은 드라이버와 네비게이터의 호흡이 중요하다. 간혹 네비게이터가 드라이버에게 작업하나하나를 지시하는 마이크로 매니징을하는 경우가 있다. 이 경우 페어프로그래밍의 장점은 사라지고 단점만 부각된다. 네비게이터는 드라이버에게 자율성을 주고 큰 그림에만 집중해야한다.

또 한, 페어에게 지적을 자주 받게 되면 감정이 상할 수 있다. 페이프로그래밍을 하면서 팀원이 그만뒀다는 우스갯소리도 들린다. 특히 성격이 잘 맞지 않는 사람들을 페어로 붙여주면 부작용이 더 크게 나타날 수 있다.

페어 프로그래밍도 결국 더 좋은 품질의 코드를 만들어 내고, 결과적으로는 버그를 줄여 디버깅에 시달리지 않게 만들어 모두를 행복하게 만들겠다는 개발 방법론이다.

세상에 무조건 좋은 것은 없다. 페어 프로그래밍도 맞는 상황이 있고, 맞지 않는 상황이 있다. 그런 방법론을 잘 가져다 쓰는 것이 매니저의 능력이라 할 수 있겠다.

댓글