짝 프로그래밍(Pair Programming)

[!tldr] 한줄 요약 두 명이 한 컴퓨터에서 드라이버-내비게이터 역할을 교대하며 함께 코딩하는 실천법으로, 코딩이 아닌 대화와 협력을 통해 함께 자라는 것이 본질이다.

핵심 내용

정의

두 명의 개발자가 한 대의 컴퓨터 앞에서 함께 코드를 작성하는 익스트림 프로그래밍(XP)의 핵심 실천법이다. 단순히 같이 앉아있는 게 아니라, 계획·논의·코드 리뷰를 동시에 수행하는 능동적 협력이다.

두 가지 역할

역할은 주기적으로 교대한다. 교대 기준은 세 가지:

주요 스타일

1. 드라이버-내비게이터(Driver-Navigator)

가장 전통적인 방식. 한 명이 코딩하면 다른 한 명이 실시간 검토 및 큰 그림을 제시한다.

2. 핑퐁(Ping-Pong)

테스트 주도 개발(TDD) 기반 개발에 적합하다. A가 실패하는 테스트 작성 → B가 구현 코드 작성 → B가 새 실패 테스트 → A가 구현. 한 명이 키보드를 독점하는 문제를 구조적으로 해결한다.

3. 강한 스타일(Strong Style)

"아이디어가 코드가 되려면 반드시 다른 사람의 손을 거쳐야 한다." 경험자가 내비게이터, 초보자가 드라이버 역할을 맡는다. 신입 온보딩에 특히 효과적이다.

4. 몹 프로그래밍(Mob Programming)

여러 명이 돌아가며 드라이버를 맡는 확장 형태. 커뮤니케이션 비용을 줄이고 코딩 스타일을 통일하는 데 효과적이다.

왜 효과적인가

도전과제와 대응

도전과제대응 방안
피로감포모도로 기법(25분 작업 + 휴식), 하루 최대 6시간
키보드 독점핑퐁 스타일로 강제 교대
기술 수준 차이강한 스타일로 초보자에게 키보드를, 5초 규칙
감정적 마찰심리적 안전감(Psychological Safety) 확보가 전제
생산성 저하 우려약 15% 더 시간 소요되나 결함 절반 감소로 총 비용 절감

김창준의 관점

김창준은 짝 프로그래밍에 대해 실용주의적 접근을 강조한다:

워드 커닝햄과의 짝 프로그래밍 경험에서 김창준은 두 가지를 배웠다:

  1. 작은 단계로 나누기: 워드는 문제를 예상보다 훨씬 세밀하게 분절하고, "더러운" 중간 상태의 코드도 과감히 사용한다. 미학적 기준보다 학습과 진행 속도를 우선시한다.
  2. 예상치 못한 상황에 대한 태도: 에러 상황에서 "Hm... That's interesting"이라고 반응한다. 예상 못한 상황 하나하나가 학습으로 가는 길이다.

성공을 위한 핵심 원칙

  1. 타이핑보다 대화가 중요하다 — 직접 코딩하지 말고 지시하고 질문하기
  2. 실수하도록 두기 — 실수는 학습 기회. 5초 규칙(드라이버 실수 지적 전 5초 대기)
  3. "모른다"고 말할 수 있는 환경심리적 안전감이 전제
  4. 정기적 휴식 — 지속적인 대화와 집중은 체력을 소모한다
  5. 불편함은 성장의 신호 — 다양한 배경의 팀일수록 초기 불편함이 크지만, 이를 극복한 팀은 더 강력한 성과를 낸다

예시

[!example] 핑퐁 스타일 (TDD 기반) A: isEven(3)false를 반환하는 테스트를 작성한다 B: isEven 함수를 구현하여 테스트를 통과시킨다 B: isEven(-2)true를 반환하는 테스트를 작성한다 A: 음수도 처리하도록 구현을 수정한다 → 역할이 자연스럽게 교대되고, 테스트와 구현이 동시에 진행된다

[!example] 강한 스타일 (온보딩) 시니어(내비게이터): "여기서 UserServicefindById 메서드를 호출해보세요" 주니어(드라이버): 키보드로 직접 입력하며 코드베이스를 익힌다 시니어: 이해가 어려우면 더 구체적으로 — "10번째 줄에서 const user = await 까지 입력해보세요" → 아이디어는 시니어의 머릿속에서 나오지만, 반드시 주니어의 손을 거쳐야 한다

참고 자료

관련 노트