pair-programming을 위한 4가지 팁
페어 프로그램밍의 개념과 이점
페어 프로그램밍이란?
페어 프로그래밍은 두 명의 개발자로 구성된 팀이 각각 개별적인 역할을 맡아 수행하는 민첩한 협업 소프트웨어 개발 방식입니다. 역할은 드라이버(driver)와 네비게이터(navigator)로 나누어집니다. 드라이버는 컴퓨터에서 직접 작업하고 내비게이터는 전체 프로그래밍 방향에 집중합니다.
페어 프로그래밍의 목적은 한 대의 컴퓨터에서 사용자 스토리를 디자인, 코딩 및 테스트하는 것입니다. 드라이버가 키보드를 주로 사용하지만, 중요한 것은 각 개발자 역할이 동등한 시간과 책임을 가지고 개발의 각 부분을 완료해야 한다는 것입니다. 드라이버는 코드를 작성하고 내비게이터는 이를 검토하며, 필요에 따라 두 팀원 간에 이러한 역할을 전환할 수 있습니다.
단순한 업무 그 이상입니다.
선임 지원 엔지니어인 Ronald van Zon은 페어 프로그램을 통해 팀원들이 해결되지 않은 티켓에만 집중하는 대신 업무 외의 삶에 대해 이야기할 수 있는 기회를 제공한다고 설명합니다.
사람들은 누군가를 직접 만나면 “크리스마스는 어땠어요?”, “어떻게 지내세요?” 와 같은 안부를 묻습니다. 이렇게 사적인 대화를 해두면 나중에 또 만났을때 또 그때의 이야기를 물어볼 수 있습니다. 이런점에서 사교적인 측면이 있습니다.
"정말 재미있어요. 업무에 정말 집중하고 있는데 매우 어려운 티켓를 받았을 때, 아이디어를 던져줄 사람이 있다는 것은 정말 좋은 일입니다.”
문제를 더 명확하게 볼 수 있습니다.
짝을 지어 프로그래밍하면 자신의 판단에만 의존하는 대신 팀원이 질문을 던져 미처 생각하지 못했던 아이디어를 제시하고, 놓칠 수 있는 부족한 부분을 파악할 수 있습니다.
"예를 들어, 이미 십만 가지를 시도했지만 다음에 무엇을 해야 할지 잘 모르겠는 매우 장기적인 티켓가 하나 있었습니다. 그 문제에 대해서 그룹과 대화하고 상황을 설명하는 것만으로도 다음 단계가 무엇인지 깨닫는 데 도움이 되었습니다. 하루 종일 그 문제를 들여다봤어도 혼자서는 해결책을 찾지 못했을 거예요." 라고 Ronald는 말합니다.
수석 지원 엔지니어 Arihant Godha는 페어 프로그래밍이 큰 성과를 거둔 또 다른 시나리오를 설명합니다. "페어링 중 한 번은 열차 병합과 관련된 복잡한 고객 문제를 해결했는데, 여러 팀을 페어링하여 가장 큰 고객 중 한 명에게 장애가 되는 중요한 문제를 파악했습니다. 문제를 파악하는 데 그치지 않고 개발자가 문제를 해결할 수 있을 때까지 해결 방법을 찾았습니다. 그리고 문제를 해결할 수 있었습니다."
지식을 공유할 수 있습니다.
'백지장도 맞들면 낫습니다'는 속담이 있습니다. 페어 프로그래밍을 사용하면 서로 다른 분야의 전문가인 엔지니어가 함께 힘을 합쳐 하나의 문제를 해결할 수 있습니다.
"티켓에 대한 페어링은 문제 해결을 위해 협업할 수 있는 좋은 방법입니다."라고 선임 지원 엔지니어인 Cynthia Ng는 말합니다. "각자가 서로 다른 부분에 대한 전문 지식을 가지고 있기 때문에 다양한 영역을 포괄하는 단일 제품을 사용하는 GitLab에서 특히 유용합니다. 다른 사람들이 어떻게 문제에 접근하고 해결하는지를 보면 자신의 작업에도 큰 도움이 됩니다."
지원 엔지니어 Anton Smith는 "페어링 콜을 통해 다른 지원 엔지니어와 대화하는 것만으로 많은 지식을 습득하고 흡수할 수 있다는 것을 알게 되었습니다."라고 말합니다.
최상의 솔루션에 도달하기
"문제에는 여러 가지 해결 방법과 여러 가지 접근 방식이 있을 수 있습니다."라고 Arihant는 말합니다. "때로는 문제 페어링을 통해 문제를 해결하는 데 가장 적합한 접근 방식을 찾을 수 있습니다. 또한 지식을 배우고 공유하는 데에도 도움이 됩니다. 예를 들어 여러 번 주고받는 대신 한 번의 문제 응답으로 필요한 모든 정보를 요청할 수 있다면 이는 훌륭한 사용자 경험입니다."
신시아는 페어 프로그래밍에 대한 과거 경험에서 얻은 구체적인 사례를 공유합니다. "데이빈 워커와 저는 평가판과 평가판의 만료일을 GitLab 고객 포털의 관리자 측에 표시하기 위해 몇 번 페어링했습니다. 병합 요청은 SaaS 평가판 관련 요청을 처리하는 팀의 효율성을 개선하는 데 도움이 됩니다. 페어링은 문제의 범위와 첫 번째 반복 작업으로 무엇을 제공할 수 있는지 파악하는 데 큰 도움이 되었습니다."
페어 프로그래밍의 장점
페어 프로그래밍의 장점은 생성되는 코드를 검토하는 데 도움이 되는 두 개의 눈이 있어 가능한 가장 좋은 코드인 지 확인할 수 있다는 것입니다. 이를 일반적으로 네 개의 눈 원칙이라고 합니다.
이는 다음과 같은 다른 이점으로 이어집니다.
- 코딩 실수 횟수가 감소됩니다.
- 전반적으로 더 나은 코더가 됩니다.
- 다른 숙련된 개발자로부터 배우고, 프로젝트 중 발생한 실수로부터 배울 수 있습니다.
- 더 나은 협업 기술 구축합니다.
이 시스템은 또한 애자일 프로젝트 구조에 따라 개발 프로젝트를 더 작고 구체적으로 정의된 작업으로 나눕니다.
원격 페어링 프로그래밍이 필요한 이유
원격 페어링 팬들과 이야기를 나누다 보면 페어 프로그래밍은 원격으로 진행되어도 손실이 없는 협업의 한 형태라는 것을 알 수 있습니다.
"바로 옆에 앉아서 작업하는 것과 다르지 않아요. 오히려 시간을 낭비하지 않고 더 나은 접근 방식을 동시에 찾을 수 있는 더 좋은 시야를 확보할 수 있습니다."라고 아리한트는 말합니다.
"직접 대면하여 쌍 프로그래밍을 해봤는데 화면 공유 덕분에 원격으로 작업하는 것이 더 쉽다는 것을 알게 되었습니다."라고 Cynthia는 설명합니다. "직접 만나면 함께 작업하는 주요 내용이 한 사람의 화면에 표시되는 경우가 많은 반면, 원격에서는 무엇을 어떻게 보고 있는지 더 잘 제어할 수 있습니다."
원격 페어링을 최대한 활용하는 방법
1. 페어링 시기 파악하기
지금까지 티켓에 집중한 이유는 GitLab의 지원 엔지니어가 원격 페어링을 가장 지지하기 때문입니다. 지원 엔지니어링은 고객 문제를 디버깅하는 경우가 많기 때문에 (일반적으로 무언가를 만드는 데 집중하는 개발자와 비교하여) 페어링이 유용할 수 있습니다. 하지만 실제로는 모든 개발자가 문제에 봉착했을 때 페어링을 통해 도움을 받을 수 있습니다.
Ronald는 GitLab의 지원팀에 합류하기 전 15년 이상 개발자로 일했으며, 그중에는 회사 전체에서 유일한 개발자로 일한 1년도 포함되어 있습니다. "제가 금방 깨달은 한 가지는 문제가 생겼을 때 대화할 상대가 없다는 것이었는데, 이는 일을 어렵게 만들었습니다."
사무실의 방해 없이 고립된 공간에서 작업할 수 있다는 것은 정말 좋은 일입니다. "해결하기 어려운 문제에 부딪히기 전까지는 효과가 있습니다."라고 Ronald는 말합니다. "문제를 해결하는 코드 한 줄에 도달하기 전까지 3일을 문제 해결에 소비하는 것은 정말 짜증나는 일입니다." 도전 과제에서 아무런 진전이 없다면 아마도 페어링을 해야 할 때일 것입니다.
2. 명확한 의제를 가지고 참여하기
모든 사람의 시간을 존중하기 위해 모든 회의는 의제를 정하고 시작하는 것이 좋으며, 페어 프로그래밍 세션을 예약하는 것도 예외는 아닙니다.
"세션에 대한 기대치나 목표를 설정하는 것이 중요하다고 생각합니다. '어떤 옵션이 있는지 살펴보기'와 같이 상당히 일반적인 내용일 수도 있지만, 중요한 것은 세션 중에 무엇을 하고 싶은지 서로가 같은 생각을 가지고 있는지 확인하는 것입니다."라고 Cynthia는 말합니다.
아리한트도 동의합니다: "의제를 미리 정해야 문제 진술을 이해할 충분한 시간을 확보할 수 있습니다." 그렇지 않으면 20분 동안 티켓이나 버그 보고서를 읽다가 함께 작업할 내용을 찾지 못할 수도 있습니다.
3. 한 번에 하나씩 버그 해결
아리한트는 "버그를 해결하려면 한 번에 한 가지 문제씩 해결하고 재현을 시도하세요."라고 조언합니다. 문제가 서로 연결되어 있다고 생각되면 두 개 이상의 문제를 해결하려고 시도하고 싶을 수도 있지만, 첫 번째 문제를 해결하기 전까지는 알 수 없습니다.
4. 큰 소리로 말하세요!
원격 또는 대면 페어링 시에도 마찬가지입니다. 자유롭게 말하면 문제의 근원을 더 빨리 파악하는 데 도움이 됩니다. Anton은 "의견을 말하는 것을 두려워하지 마세요."라고 조언합니다. "잘못된 것이 있더라도 문제의 원인을 제거하는 데 도움이 되고 대안적인 아이디어가 떠오를 수도 있습니다."
원격 페어링 방법
GitLab에서는 임시 페어링 세션과 예약된 페어링 세션이 혼합되어 있습니다. "페어링은 지원팀 온보딩의 일부로 필수이며, 사람들이 참여하여 누구와 페어링할지 결정할 수 있는 지원 도넛 앱 채널도 있습니다."라고 Cynthia는 설명합니다.
반복적인 페어링 세션은 엔지니어가 팀원들과 연결 상태를 유지하는 데 도움이 될 수 있지만, 업무가 폭주하거나 문제가 발생했을 때는 자발성이 도움이 될 수 있다고 Anton은 말합니다. "티켓 위반을 막기 위해 대기열에서 작업하는 경우, 때때로 Slack에 Zoom 룸 링크를 공개적으로 게시하여 누구나 참여할 수 있도록 합니다."라고 말합니다.
아리한트는 "누군가와 페어링하고 싶을 때는 팀 채팅에서 요청하거나 캘린더 초대를 보내면 됩니다. 특정 주제나 그룹을 위한 것이라면 개인 페이지에서 집중 분야나 기술을 확인하여 파트너로 가장 적합한 사람을 찾습니다."
또한 지원 페어링을 위한 전용 이슈 트래커가 있어 팀원들이 누구와 어떤 이슈에 대해 페어링을 했는지 추적할 수 있습니다.
엔지니어를 위한 더 많은 원격 협업 사례를 공유할 시리즈의 다음 포스팅을 기대해 주세요.
GitLab 및 여러 기업은 페어 프로그래밍(짝 프로그래밍)을 통해 혼자 해결하기 어려운 과제들을 해결해 나가고 있습니다. 그렇다면 페어 프로그래밍이 무엇이고, 어떤 장점이 있는 지 확인해보고, 또 원격 페어 프로그래밍의 장점 및 적절한 활용을 위한 4가지 팁까지 알아보는 글을 소개합니다.
페어 프로그램밍의 개념과 이점
페어 프로그래밍이란?
페어 프로그래밍은 두 명의 개발자로 구성된 팀이 각각 개별적인 역할을 맡아 수행하는 민첩한 협업 소프트웨어 개발 방식입니다. 역할은 드라이버(driver)와 내비게이터(navigator)로 나누어집니다. 드라이버는 컴퓨터에서 직접 작업하고 네비게이터는 전체 프로그래밍 방향에 집중합니다. 필요에 따라 두 팀원 간에 이러한 역할을 전환할 수 있습니다.
페어 프로그래밍은 애자일 방법론의 목적으로, 빠르고 효과적인 소프트웨어 개발을 위해 사용됩니다. 이 방식은 개발자 간의 협업과 효율성을 높이며, 코드 품질을 향상합니다.
페어 프로그래밍의 장점
단순한 업무 그 이상입니다.
페어 프로그래밍은 업무 외의 삶에 관해 이야기할 기회를 제공합니다. 이렇게 사적인 대화를 나누면 팀원들 간의 사교적인 측면이 생기며, 이는 어려운 과제를 해결할 때 아이디어를 던져줄 사람이 생기는 긍정적인 효과를 줍니다.
문제를 더 명확하게 볼 수 있습니다.
자신의 판단에만 의존하는 혼자 하는 프로그래밍과는 반대로 짝을 지어 프로그래밍하면 팀원들과 다양한 이야기를 하면서 아이디어를 교류하고 새로운 해결 방법이나 놓칠 수 있던 부분을 점검할 수 있습니다.
지식을 공유할 수 있습니다.
페어 프로그래밍은 서로 다른 분야의 전문가인 엔지니어가 함께 힘을 합쳐 하나의 문제를 해결합니다. 그래서 서로 다른 엔지니어와 대화하는 것만으로 다양한 지식을 습득하고 흡수할 수 있습니다.
최상의 솔루션에 도달할 수 있습니다.
티켓 페어링을 통해 문제 해결 방법을 찾고 지식을 공유하며, 대화를 효율적으로 진행하고, 작업 범위를 파악할 수 있습니다. 티켓을 페어링 할 때에는 필요한 정보를 한 번에 요청하는 것이 좋습니다.
그 외의 장점
- 코딩 실수 횟수가 감소됩니다.
- 전반적으로 더 나은 개발자가 됩니다.
- 다른 숙련된 개발자로부터 배우고, 프로젝트 중 발생한 실수로부터 배울 수 있습니다.
- 더 나은 협업 기술을 구축하는 것에 기여합니다.
이 시스템은 또한 애자일 프로젝트 구조에 따라 개발 프로젝트를 더 작고 구체적으로 정의된 작업으로 나눕니다.
원격 페어 프로그래밍의 장점
원격 페어 프로그래밍은 협업의 한 형태로, 시간을 절약하면서 더 나은 환경에서 작업을 할 수 있습니다. 화면 공유를 통해 더 쉽게 작업할 수 있으며, 원격에서는 무엇을 어떻게 보고 있는지 더 잘 제어할 수 있어 오히려 직접 만나서 작업하는 것보다 원활한 작업을 할 수 있습니다.
원격 페어 프로그래밍을 최대한 활용하는 4가지 팁
1. 페어링 시기 파악하기
고립된 공간에서 방해 없이 혼자 작업할 수 있다면 집중은 잘 된 것입니다. 그러나 한 가지는 문제가 생겼을 때 대화할 상대가 없다면 이는 일을 더욱 어렵게 만들 것입니다. 도전 과제에서 아무런 진전이 없다면 아마도 페어링을 해야 할 때일 것입니다.
2. 명확한 의제를 가지고 참여하기
페어링을 하기 전에 모든 사람의 시간을 존중하기 위해 사전준비를 잘 준비하는 것이 좋습니다. 의제를 미리 정하고 작업할 세션도 미리 예약해야 합니다. 특히 의제는 미리 정합니다. 그래야 문제를 이해하는데 충분한 시간을 확보 할 수 있기 때문입니다. 그렇지 않으면 20분 동안 과제나 버그 보고서를 읽다가 함께 작업할 내용을 진행하지 못할 수도 있습니다.
3. 한 번에 하나씩 버그 해결하기
버그를 해결하려면 한 번에 한 가지 문제씩 해결하고 재현을 시도합니다. 문제가 서로 연결되어 있다고 생각되면 두 개 이상의 문제를 해결하려고 시도하고 싶을 수도 있지만, 첫 번째 문제를 해결하기 전까지는 알 수 없습니다.
4. 큰 소리로 말하기
원격 또는 대면 페어링 시에도 마찬가지입니다. 자유로운 대화는 문제의 근원을 더 빨리 파악하는 데 도움이 됩니다. 의견을 말하는 것을 두려워하지 않아야 합니다. 잘못된 것이 있더라도 문제의 원인을 제거하는 데 도움이 될 수도 있고 대안적인 아이디어가 떠오를 수도 있습니다.
GitLab 및 여러 기업은 페어 프로그래밍을 통해 혼자 해결하기 어려운 과제들을 해결해 나가고 있습니다. 페어 프로그래밍의 직접 사용해보고 몸소 페어프로그램의 이점을 확인해보세요.
본 포스트는 영문 포스트를 우리말로 번역하고 요약 및 내용을 추가한 글입니다.
사전 동의 없이 2차 가공 및 영리적인 이용을 금하며, 온·오프라인에 무단 전재 또는 유포할 수 없습니다.
Fabbro
Software Engineer
DevOps 도입이 필요하신가요?
인포그랩 전문가가 맞춤 을 도와드립니다.