Search
Duplicate
🚀

페어 프로그래밍이란? (feat. VSCode Live Share)

간단소개
페어 프로그래밍이 무엇인지 살펴보고, Visual Studio Code 에서 짝과 함께 코딩하는 방법을 소개합니다.
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
개발방법론
Scrap
태그
VSCode
페어 프로그래밍
Agile
9 more properties
목차

페어 프로그래밍(pair programming) 개요

출처 : 짤봇
페어 프로그래밍(pair programming)은 두 사람이 한 짝이 되어 같이 프로그래밍 하는 것을 의미한다. 애자일(Agile) 방법론의 하나로, 빠른 피드백을 바탕으로 실제 작동 가능한 소프트웨어를 개발하는 것이 목표이다. 동료 프로그래밍, 쌍 프로그래밍, 짝 프로그래밍이라고도 한다.
한 사람은 전략을 제시하는 네비게이터(Navigator) 역할을 하고, 다른 사람은 실제 코드를 작성하는 드라이버(driver) 역할을 한다. 그리고 이 역할을 일정 주기를 바탕으로 번갈아가며 수행한다.

네비게이터(Navigator)

문제 해결 방법을 논리적으로 생각하고, 그 과정을 상대에게 말로 설명한다. 이때, 네비게이터는 코드를 직접 말하거나 키보드를 잡지 않는다. 이 역할의 핵심은 “어떤 식으로 문제를 해결할 수 있는지 명확히 설명하는 것”이다.
네비게이터는 드라이버가 코드를 작성하는 동안 관찰자의 입장으로 코드를 검토하고, 지식을 전달하며 생각을 공유한다. 코드의 세부사항은 드라이버에게 맡기고, 드라이버보다 넓은 관점으로 설계, 구조에 대한 문제와 버그를 파악하는데 집중한다.

드라이버(driver)

드라이버는 키보드를 통해 직접 코드를 작성하는 사람이다. 네비게이터가 설명한 논리적 방식대로 실제 코드를 작성하는 역할을 한다. 드라이버는 작성하는 모든 코드에 대해 네비게이터에게 설명하며 작업을 진행한다.
또한, 드라이버는 네비게이터의 질문과 의견에 적극적으로 응해야 한다. 네비게이터의 가이드를 이해하려고 노력하며, 현재의 목표를 완수하는데 집중해야 한다.

역할을 나누어서 진행하는 이유는?

각 역할에 따라 코드에 대해 서로 다른 두 관점을 가지게 하기 위해서다.
드라이버는 기술적인 요소와 세부사항을 생각하고, 네비게이터는 관찰자 입장에서 코드 전체의 구조를 설계하고 생각해야 한다.

페어 프로그래밍의 장단점

장점

1. 지식 공유

서로의 지식을 공유하고 상대방이 가진 기술적인 스킬과 좋은 습관을 배울 수 있는 기회가 된다. 팀에 새로운 멤버가 합류할 경우, 페어 프로그래밍을 통해 팀의 개발 스타일, 환경 등을 공유할 수 있다.

2. 높은 집중력 유지

짝과 함께 개발을 하기 때문에 메신저를 보거나 핸드폰을 보는 등 불필요하게 사용하던 개인적인 시간을 최소화하고 개발에 집중할 수 있다.

3. 빠른 피드백

코드를 작성하며 크고 작은 오류를 실시간으로 수정할 수 있다. 또한, 문제 접근 방식이나 코드 컨벤션을 공동으로 합의함에 따라 코드 리팩토링이 수월해진다.

4. 나무와 숲을 모두 보는 연습

드라이버는 작은 목표를 해결하는데 집중하고, 상세한 코드를 생각한다.
네비게이터는 더 넓은 시야를 갖고 설계, 구조에 대한 문제와 버그를 파악하는데 집중한다.

단점

1. 체력 소모

지속적으로 말을 주고 받아야 하고, 코드를 작성해야 하기 때문에 체력 소모가 심하다. 따라서 페어 프로그래밍을 수행할 때는 주기적으로 휴식을 취해주어야 한다. 필요하다면 각자의 생각을 정리하고 서로의 생각을 이야기 하는 시간을 갖는 것이 좋다.

2. 생산성 저하

“백지장도 맞들면 낫다"는 말이 있다. 실력이 비슷하다면 시너지 효과가 나지만, 실력이나 지식 수준에 차이가 많이 난다면 한 쪽은 많은 시간을 들여서 지식을 전달하고 설명해야 한다.

3. 감정 문제

마음이 잘 맞는 사람과 일을 하면 좋겠지만, 개발 스타일이나 의사소통 방식이 많이 다르다면 작업이 힘들어진다. 작성한 코드에 대한 피드백이 상대방 자체에 대한 공격으로 받아들여지지 않도록 주의해야 하며, 리뷰를 받는 사람도 코드와 감정을 분리해서 생각할 줄 알아야 한다.

페어 프로그래밍의 종류

1. 핑퐁 프로그래밍

페어 프로그래밍과 TDD(Test-Driven Development)를 조합한 기법이다.
다음과 같은 방식으로 진행할 수 있다.
1.
A가 실패하는 테스트 케이스를 작성하고, 키보드를 B에게 넘긴다. (ping)
2.
B가 테스트를 통과하도록 코드를 작성한다.
3.
B가 실패하는 새로운 테스트 케이스를 만들고, 키보드를 A에게 넘긴다. (pong)
4.
A가 테스트를 통과하도록 코드를 작성한다.
또는, A는 테스트만 짜고, B는 구현만 하는 방법도 있다.

2. pomodoro 기법

포모도로 기법은 일정 시간을 간격으로 일과 휴식을 반복하는 기법이다. 일을 짧은 시간 단위로 분배하고 관리해서 시간당 효율을 높이는 시간관리 기법으로 유명하다.
페어 프로그래밍에 포모도로 기법을 적용하면 다음과 같이 진행할 수 있다.
1.
다음에 진행할 작업을 결정한다.
2.
Driver 와 Navigator 역할을 나눈다.
3.
타이머를 합의한 적정 시간으로 설정한다. (전통적으로 25분)
4.
타이머가 울리면 작업을 멈춘다.
5.
짧은 휴식(5 ~ 10분) 후 역할을 교대하여 다시 시작한다.
6.
위의 과정을 3~4회 반복 후, 15~30분 정도 길게 휴식한다.

3. Strong-Style

드라이버는 네비게이터가 지시하지 않은 어떤 작업도 수행하지 않는 방식이다. 이 방법은 지식 전달에 유용한 방식이며, 네비게이터가 작업에 대해 풍부한 경험을 갖고 있고, 드라이버는 언어나 도구 사용에 있어 초심자일 때 유용하다.
드라이버는 네비게이터를 전적으로 신뢰하고, 불완전한 이해 상태를 편안하게 생각해야 한다.
이 방식은 마이크로 매니징에 가깝지만, 능동적인 수행을 통한 학습으로 초기 지식 전달을 위한 온보딩 도구가 될 수 있다. 지나치게 이용해서는 안되며, 이후에는 역할을 전환할 수 있어야 하며, 마이크로 매니징을 벗어나는 것을 목표로 해야 한다.

페어 프로그래밍 가이드

1. 모니터는 가능하면 가운데에 위치한다.

드라이버와 네비게이터는 동등한 관계에서 작업을 진행해야 한다. 누군가가 주인이라는 느낌이 들지 않게 화면을 가운데에 두고 앉는 것이 좋다.
만약, A가 B보다 해당 작업에 대해 잘 알고 있다면, A는 B에게 모든 것을 설명을 하기 보다는 질문을 던짐으로써 생각을 자극하는 것도 좋은 방법이다.

2. 산만한 요소 제거하기

메신저 확인, 휴대전화 사용은 자제한다. 상대방이 무례하다고 생각할 수 있고, 집중력을 흐트릴 수 있다. 집중력이 흐려졌다면 휴식 시간을 가진 후에 진행한다.

3. 마이크로 매니징 피하기

상대방이 생각할 여지를 남겨두지 않고, 계속 지시를 한다면 상대가 좌절감을 느낄 수도 있다. “여기에 변수 a 를 선언하세요.”, “printf 를 찍어서 확인해보세요.” 와 같이 코드를 한 줄씩 읊어주거나 지시하지 않도록 유의해야 한다. 드라이버는 네비게이터의 가이드 안에서 스스로 생각하여 코드를 작성할 수 있어야 한다.

4. 조바심 내지 않기

상대방의 잘못된 행동이나 코드를 보고 얘기하기 전에는 최소 5초 정도는 기다린다. 드라이버가 이미 알고 있는 상황이라면 네비게이터의 개입은 드라이버의 흐름을 방해할 수 있다. 네비게이터는 오류가 있다고 판단되면 약간의 텀을 두고 기다렸다가 말하는 것이 좋다.

5. 키보드 독점 지양

어느 한 쪽이 생산성이 떨어진다고 판단되거나, 답답함을 참지 못해 키보드를 독점하면 상대방은 코드를 작성하는 것에 두려움을 느낄 수도 있다. 페어 프로그래밍은 혼자서 하는 것이 아닌 함께 하는 것이며, 서로에 대한 존중과 이해를 보여줄 수 있어야 한다.

Visual Studio Code 로 페어 프로그래밍하기

Visual Studio Code 의 확장 프로그램인 Live Share 는 온라인으로 페어 프로그래밍을 진행할 때 유용하게 사용할 수 있다.
공동으로 코드 편집이 가능하며, 터미널 실행 결과도 함께 공유할 수 있다.

사용법

1.
Visual Studio Code 에서 확장 프로그램을 설치한다.
2.
설치가 완료되면 아래의 사진과 같이 좌측 탭에 새로운 아이콘이 생성된다.
3.
상대방과 공유하고 싶은 폴더를 Command + O (Windows 는 Ctrl + O) 를 눌러 선택한다.
4.
2번에서 생성된 Live Share 아이콘을 선택하고, Share 버튼을 클릭하면 아래와 같은 이미지가 VSCode 상단에 표시된다. Github 또는 Microsoft 계정을 선택해서 로그인한다.
5.
로그인이 정상적으로 되면 상대방에게 공유할 수 있는 링크가 생성된다. 링크를 복사해서 상대방에게 공유한다.
6.
공유 받은 사람은 게스트(익명) 또는 Github 나 Microsoft 계정을 이용해서 접속할 수 있다. 어떤 것을 선택하든 큰 상관은 없다.
7.
게스트로 접속하는 경우, 사용하고자 하는 닉네임을 입력하고, Enter 를 입력한다.
8.
위의 과정이 끝나면 링크를 공유한 사람의 VSCode 좌측 하단에 접속 요청 알림이 뜬다. 공동으로 편집하고자 하는 경우 Accept read-write 를 선택한다.
9.
성공적으로 접속이 완료되면 좌측의 Participants 항목에 아래와 같이 유저가 추가된다.
10.
위의 과정이 정상적으로 수행되었다면, 아래와 같이 동일한 파일을 수정할 수 있게 된다.
11.
현재 상대방이 편집 중인 파일을 계속해서 따라가고 싶다면 Live Share 탭에 들어가서 상대방의 이름을 클릭하면 된다. (Following 기능)
우측 화면에서 파일을 이동하면 좌측에서도 동일한 파일로 이동하는 것을 볼 수 있다.

참고자료