페어 프로그래밍을 처음 접하게 된 것은 소프트웨어공학 수업 시간에 애자일 방법론을 배우고 있었을 때였다. 그때만 해도 페어 프로그래밍을 직접 해보는 경험은 없을 것 같고, 교수님께서도 자세한 설명이 없으셔서 그냥 알아만 두자라며 넘어갔던 것으로 기억한다.
그렇게 대충 지나갈 줄 알았지만, 부트캠프 활동을 통해 페어 프로그래밍을 경험해 볼 좋은 기회를 얻게 되어서 이에 대한 내용을 자세하게 정리해보고자 한다.
페어 프로그래밍이란?
위키백과에 따르면 페어 프로그래밍(동료/쌍 프로그래밍)은 애자일 소프트웨어 개발 중 하나로 하나의 컴퓨터에서 두 사람의 프로그래머가 작업하는 방법이라고 한다.
전체적인 페어프로그래밍 과정을 간략하게 설명해 보겠다.
1. 두 사람의 역할을 코드를 작성하는 사람인 드라이버와 코드 리뷰를 진행하는 내비게이터로 나눈다.
2. 역할을 토대로 프로그래밍을 진행한다.
3. 두 프로그래머는 수시로 역할을 바꾸어 전체 과정을 반복적으로 진행한다.
이제 각 역할이 어떤 작업을 수행하는지 자세하게 알아보겠다.
내비게이터(Navigator)
자동차에 달려있는 내비게이션이 목적지까지의 경로를 결정하는 것처럼 개발 방향을 결정하는 역할을 수행하는 것으로 이해할 수 있다.
1. 코드의 방향과 전략을 결정한다. 주로 설계, 구조, 알고리즘을 생각하고 결정하는데 관여한다.
2. 코드의 미래 방향을 제시하고, 문제 해결 전략을 논의하며, 코드 작성 과정을 지속적으로 검토 후 평가한다.
3. 문서화와 주석 작성에 도움을 준다.
드라이버(Driver)
자동차 운전자가 내비게이션이 알려준 경로를 따라 주행하여 목적지에 도착하는 것처럼 내비게이터의 지시에 맞춰 실제로 코드를 작성하는 역할을 수행하는 것으로 이해할 수 있다.
1. 내비게이터의 지시를 따라 코드를 작성한다. 실제로 코드를 타이핑하여 기능 구현을 진행한다.
2. 개발 중 발생한 버그에 대한 디버깅을 진행하여 문제를 해결한다.
내비게이터와 드라이버의 교체
페어 프로그래밍의 효율적인 진행과 성공적인 결과를 위해선 주기적으로 내비게이터와 드라이버가 교체되어야 한다.
1. 교체가 진행되지 않으면 반복적인 작업에 지루함을 느끼고, 이에 따라 집중력이 떨어질 수 있어 효율적인 진행에 방해될 수 있다.
2. 양쪽 개발자가 모두 코드를 작성하고 설계를 하는 과정에 참여함으로써 다양한 측면에서 프로젝트를 이해하고 개선하도록 하는 것이 페어 프로그래밍의 목적인데, 교체를 진행하지 않으면 당연히 성공적인 페어 프로그래밍이 될 수 없다.
역할 교체의 주기는 권장 주기가 정해져 있는 것이 아니기에 함께 개발하는 동료와 협의하여 결정하면 된다.
1시간, 90분 같은 일정한 주기에 맞춰 교체할 수도 있을 것이고, 또는 작은 단위 작업의 완료나 식사 시간과 같은 이벤트의 발생에 따라 교체할 수도 있을 것이다.
그리고 교체 시기에 맞춰 종종 10분 정도의 짧은 휴식도 함께 진행한다면 집중력을 잃지 않고 성공적으로 페어 프로그래밍을 진행할 수 있을 것이라고 생각한다.
페어 프로그래밍의 장단점
장점
1. 지식 공유
서로가 다른 분야의 기술을 알고 있을 때나 특정 분야에 강점이 있는 팀원이 있는 상황에서 지식 공유를 원활하게 진행할 수 있다. 또한 새로운 팀원에게 팀의 개발 환경이나 개발 스타일에 대해 알려줄 때, 문서를 통해 전달하는 방식보다 빠르게 팀의 지식을 공유할 수 있다.
2. 같이 고민하기
개발 진행 시에 어디서부터 진행해야 할지 감을 잡기 어려운 경우가 많이 있다. 이때, 동료와 대화를 통해 함께 고민한다면 빠른 결정을 가능하게 해 주고, 작업 시간을 줄여주게 된다.
특히 처음 접하는 언어나 프레임워크를 사용할 때 혼자서 하게 되면 지치기도 하고, 중간에 그만두고 원래 방식으로 돌아가는 경우가 많지만, 페어 프로그래밍을 하게 되면 이전의 방식이 아닌 새로운 방법에 대한 도전이 조금 쉬워지고 포기하지 않는 자세를 가지게 된다.
3. 업무에 대한 집중도 상승
동료와 함께 작업을 하다 보니 휴대폰 사용과 같은 개발 외의 활동에 소비되는 시간이 줄어들게 될 것이고, 이는 업무에 대한 집중도를 상승시키기에 개발에만 온전히 집중할 수 있다.
4. 지속적인 코드 리뷰와 개발 방향의 지속적인 유지
페어 프로그래밍을 통해 서로의 코드에 대한 즉각적인 코드 리뷰가 가능하다.
코딩 도중에 발생하는 오타와 같은 작은 실수부터 설계 측면의 결함까지 소스코드에 대한 피드백을 가장 빠르게 받을 수 있다.
실시간 코드 리뷰와 함께 올바른 설계가 됐는지, 개발의 목적에 맞는 방향으로 가고 있는지에 대해서 팀원 간의 지속적인 대화를 통한 확인 및 유지가 가능하다.
5. 팀원들이 모두 관여할 수 있는 코드 상태
페어 프로그래밍을 진행하게 되면 특정 개발 업무의 담당자가 여러 명이 되기 때문에, 특정한 팀원 만이 가능한 일이 최소화되고 누구나 해당 업무를 처리할 수 있기에 병목 현상을 줄일 수 있다. 그리고 팀으로서 특정 기능에 대한 업무만이 아니라 전체 프로젝트에 대해서 함께 고민하고 개발을 할 수 있다.
6. 팀원에 대한 이해도 증가
페어 프로그래밍을 진행하면서 코드에 대한 이해뿐만 아니라, 팀원과 같이 일을 하고 많은 대화를 나누면 팀원에 대한 이해를 할 수 있게 된다.
이런 팀원들에 대한 이해 과정은 팀워크에 좋은 영향을 끼칠 뿐만 아니라, 팀을 단단하게 만들어 주는 기초가 되고 함께 성장할 수 있는 계기를 마련한다.
단점
1. 생산성 저하
단순하게 생각하면, 한 명이 할 일을 두 명이 하고 있으니 생산성이 절반으로 떨어질 것으로 생각할 수 있다.
실제로도 혼자 진행할 때에 비해 결함이 존재할 확률을 낮추고, 팀 전체의 이해도를 높일 수는 있으나 생산성은 떨어지는 현상을 경험한다고 한다. 15% 시간이 더 걸리고, 15% 결함이 줄었다는 몇몇 논문에서의 연구 결과도 있다.
2. 키보드 정복
실제로 시니어 개발자와 주니어 개발자가 함께 페어 프로그래밍을 진행할 때에 시니어 개발자가 키보드를 정복하여, 아무 말 없이 코드를 완성해 가고, 주니어 개발자는 코드를 따라가기에만 급급한 경우가 자주 발생한다고 한다.
이런 경우에는 점차 상호 간의 대화는 줄어들고, 주니어 개발자는 페어 프로그래밍에 대한 흥미를 잃게 되고, 방관자가 되어서 개발이 끝나게 된다.
3. 감정적 스트레스와 피곤함
마음이 맞고, 좋은 사람과 항상 개발을 진행 한다면 좋겠지만, 어쩔 때는 마음이 맞지 않은 팀원과 함께 하게 될지도 모른다. 혹은 마음은 잘 맞는 사람이더라도 개발하는 스타일이 매우 다를 수도 있다.
사람의 성격이나 개발 스타일이 쉽게 바뀌거나 짧은 시간에 개선할 수 있는 사항이 아니기 때문에 이런 이유에서 발생한 어려움은 해결하기 매우 어렵다.
그리고 잘 맞지 않는 사람과 함께 하는 페어 프로그래밍은 혼자 진행할 때와는 비교할 수도 없는 극심한 감정적 스트레스와 함께 피곤함을 몰고 올 것이다.
페어프로그래밍 시 사용하면 좋은 VS Code Extension
Live Share라는 VS Code의 확장 프로그램이 페어프로그래밍 진행 시 유용하게 사용된다고 한다.
VS Code에서 열려있는 다른 동료의 코드를 함께 보기, 참여자의 Read-Only / 편집 가능 여부 설정을 할 수 있을 뿐만 아니라 특정 유저를 팔로우하는 기능, 특정 유저에게 포커스 기능, 참여자 간의 채팅 기능까지 정말 다양한 기능을 제공하니 VS Code를 사용하여 페어 프로그래밍을 진행할 경우에 사용하는 것을 추천하고 싶다.
Just Remember: Don’t Type
참고한 아티클의 마지막에는 위와 같이 강조하고 있다.
시니어든 주니어든, 누구랑 같이 페어 프로그래밍을 하든 상관없이 코드를 타이핑을 하는 것보다 개발 과정에서의 대화를 하는 것이 더 중요하다고 강조한다.
"대화를 통해 서로의 생각을 공유하자." 이것이 페어 프로그래밍을 잘하기 위한 가장 중요한 방법임을 깨닫고, 페어 프로그래밍에 임한다면 더욱 성공적인 페어 프로그래밍이 되지 않을까 생각한다.
빨리 가고 싶으면 혼자 가고, 멀리 가고 싶으면 함께 가라.
지금 당장의 개발 진행보다 개발 팀 전체의 성장을 통한 "함께 자라기"를 이루고 싶다면 페어 프로그래밍을 시도해 보는 것이 어떨까?
출처
'개발 > 개발 팁' 카테고리의 다른 글
Docker 환경에서의 Spring Boot Auto Reload (Hot Reload) (0) | 2024.11.30 |
---|---|
SSAFY 11기 전공자 합격 후기 (면접 스터디 X) (0) | 2024.01.13 |
[부스트캠프 웹・모바일 8기] 네이버 부스트캠프 챌린지 회고 (3) | 2023.08.08 |
AWS 사용하여 배포 시 사용하는 명령어 (0) | 2023.06.21 |
AWS 서비스의 종류 (0) | 2023.02.01 |