자바스크립트를 활성화 해주세요

macOS의 화면 공유: 페어 프로그래밍 준비하기

 ·  ☕ 10 min read

지금까지 페어 프로그래밍 환경을 경험해 본 결과, 양 쪽 모두 macOS를 쓴다면 기본 제공되는 화면 공유 기능을 사용하는 것이 제일 나은 것 같다. 먼저 글의 목적에 맞게 macOS에서 화면 공유 기능을 사용하는 법을 설명하고, 후반부에 다른 페어 프로그래밍 환경 경험과 장단점을 비교해 보도록 하겠다.

현재 macOS의 언어 설정을 영어로 설정해서 스크린샷은 영어로 보이지만, 한국어 환경과 큰 차이는 없는 편이다. 혹시나 한글 번역으로 메뉴 순서가 바뀌는 경우 등을 고려해 공식 문서 등을 참고하여 한국어 환경의 이름도 찾아서 같이 작성했다. 또한 공식 문서로 링크도 걸어놨으니, 필요하다면 해당 문서도 참고하기를 바란다.

화면 공유 설정하기

화면 공유 설정을 위한 공식 문서를 참고해도 된다.

먼저 시스템 환경설정 (System Preferences)공유 (Sharing)를 선택한다.

화면 공유 (Screen Sharing) 체크 박스를 선택하여 활성화한다. 특정 사용자만 가능하게 설정할 수도 있지만, 대부분 개인 장비로 사용할 것이고 대부분 관리자 계정으로 사용할 테니 추가 설명은 생략하도록 하겠다.

화면 공유 시작하기

앞의 설정은 화면을 공유해줄 서버 측의 설정을 했다고 볼 수 있다. 이제 클라이언트에서 접속하는 방법을 알아보자. (공식 문서를 참고해도 된다.)

참고로 macOS에서 제공하는 화면 공유 기능은 RFB 프로토콜을 사용하는 VNC를 바탕으로 하고 있다. (위 설정 과정에서도 vnc://192.168.35.9/ 식으로 표현된 것을 확인할 수 있다) 그러므로 현재 macOS를 외부에서 접속할 수 있게 IP를 고정시켜주고 포트 포워딩만 한다면 굳이 macOS가 아니더라도 RealVNC, TightVNC 등의 다른 플랫폼 클라이언트를 통해 화면 공유 및 원격 제어가 가능하다.

참고로 기본적인 VNC는 속도가 느려서 원격으로 동영상을 보기 힘든 수준인데, macOS끼리 원격 접속하는 경우 가끔 끊기긴 하지만 볼 만한 수준의 속도가 나온다. macOS끼리 연결에서는 추가적인 영상 가속 기술이 적용되는 것 같다.

화면 공유 앱으로 접속하기

화면 공유 앱의 경우 macOS의 모든 앱을 모아놓은 LaunchPad에서 찾을 수 없다.

대신 Spotlight 혹은 그 기능을 대체하는 Alfred화면 공유 혹은 Screen Sharing을 검색하면 화면 공유 앱을 실행할 수 있다.

화면 공유 앱이 실행되면 위 스크린샷과 같이 단순하게 접속할 컴퓨터의 이름이나, 애플 ID를 입력하라는 화면이 나타난다.

  • 여기서 애플 ID를 입력하면 상대 macOS의 IP를 몰라도 화면 공유가 가능하다.
    (애플 ID에 해당하는 메일 주소, 혹은 해당 ID가 등록된 연락처 이름만 입력해도 된다)
    이 방식은 상대방과 화면을 공유한다 가정하므로, 화면을 공유해 주는 측에서 허가해 줘야 가능하다.
    영상 가속 기술로 동영상도 볼 만한 수준으로 연결되며, 상대방과 음성 통화도 기본으로 연결된다.
  • 여기서 IP 주소나 컴퓨터의 이름을 입력하면 VNC로 원격 접속하게 된다.
    이 방식은 원격 접속 방식이므로, 원격 접속을 위한 계정 정보만 있다면 (ID/PW) 허가 없이 바로 접속된다.
    macOS뿐만 아니라 리눅스 등 VNC 서버가 동작 중인 다른 환경에 원격 접속도 가능하다.
    macOS로 접속하는 경우 동일하게 영상 가속 기술은 적용되지만, 음성 통화는 적용되지 않는다.

메시지 앱으로 접속/공유하기

상대와 자주 화면 공유하게 되는 경우, 메시지 (Messages) 앱을 통해서 상대에게 화면 공유를 요청하거나 내가 먼저 화면 공유를 제안할 수 있다. 공식 문서를 참고해도 된다. 왜 연락처 (Contacts) 앱에서는 안 되는지 이해할 수 없지만 넘어가도록 하자.

상대의 애플 ID로 어떤 메시지든 보내서 개별적인 대화창을 만들면, 오른쪽 위의 세부 사항 버튼을 누르면 상대 애플 ID에 대한 추가 메뉴가 나온다. 여기서 공유 (share) 메뉴를 누르면 나의 화면 공유하기 (Invite to Share My Screen)나, 친구의 화면 보기 (Ask to Share Screen) 메뉴로 나의 화면 공유를 제안하거나, 상대방의 화면 공유를 요청할 수 있다.

화면 공유 허가, 사용하기

화면 공유를 요청하면 상대측에서 요청 정보를 확인하고 허가해 줘야 실제 화면 공유가 진행된다. 앞서 언급했듯 VNC로 원격 접속하는 경우는 허가하지 않아도 진행할 수 있다.

위와 같이 접속하려는 애플 ID의 정보를 알려주며 화면 공유를 허락/거절/차단할 수 있다.

화면 공유를 허가할 때 화면을 볼 수 있는 수준만 제공할지, 제어까지 허락할지 선택할 수 있다. 화면 공유가 시작된 이후에도 변경할 수 있다.

화면이 공유되면 위와 같이 메뉴 바에 아이콘이 나타난다. 해당 아이콘을 눌러 화면 공유를 종료하거나, 아까 설정한 권한을 조정할 수 있다.

원격 접속하고 있는 상대 측에서는 위와 같이 연결된 모니터가 모두 보인다.

오른쪽 위의 모니터를 눌러, 특정 모니터만 볼지, 여러 모니터를 다 볼지 선택할 수 있다. (아이콘을 자세히 보면 정확히 어느 위치의 모니터인지 알려주고 있다) 모니터 선택 외에도 제어 권한을 요청하거나, 클립보드(복사-붙여넣기 내용) 공유 등의 설정도 가능하다.

화면을 공유 받는 상대방(클라이언트)이 화면을 클릭하면 화면 공유자(서버)에게 위와 같이 해당 부분이 확대되어 나타난다. 화면 공유자에게 설명할 때 유용하게 사용할 수 있다.

문제 해결하기

화면 공유 기능을 사용하다가 생긴 문제들과 해결법에 대해 간략하게 공유하도록 하겠다.

음성 통화 듣기/말하기 문제

화면 공유를 진행할 때, 가끔 화면은 잘 나오는데 소리가 잘 나오지 않는 경우가 있다. 혹은 이어폰으로 소리를 듣고 싶은데 강제로 모니터로 나오는 상황이 발생할 수도 있다. 이 문제는 위에서 봤던 메뉴 바의 화면 공유 아이콘이나, 화면 공유 앱의 설정 창에서 해결할 수 없다. 심지어 시스템 환경설정 (System Preferences)사운드 (Sound)에서 기본 장치를 변경해도 음성 통화에 반영되지 않는다.

화면 공유를 사용할 때, 제어 센터를 눌러보면, FaceTime이 마이크를 사용하고 있다고 알려주고 있다. 즉, 음성 통화는 FaceTime을 활용하는 것이라 예상할 수 있다.

FaceTime을 켜고, 상단 메뉴의 비디오 (Video)를 누르면 아래 마이크와 음성 출력 장치를 선택할 수 있다. 여기서 원하는 장치로 재설정하면 된다.

VNC 서버 설정하기

외부에서 VNC 접속을 원하는 경우 네트워크 설정이 필요할 것이다. 딱히 VNC 원격 접속이 필요하지 않더라도, 가끔 화면 공유가 잘 안되는 경우 동일하게 설정해주면 해결되는 경우가 있다고 한다. 보통 이런 네트워크 설정은 macOS 쪽에서 설정하는 것이 아니라 공유기(라우터)에서 설정해줘야 하는데, 이건 공유기 제품마다 다르므로 설정 과정을 보여주기 힘든 점 양해 바란다.

외부에서 VNC로 접속하기 위해 공유기에서 설정해 줘야 하는 내용은 요약하면 다음과 같다. 본인이 사용 중인 공유기 제품명/제조사 정보와 함께 아래 내용을 검색해서 해결하면 될 것이다.

  1. 현재 macOS의 내부 IP를 고정하기 (DHCP 주소를 고정하거나, macOS에서 정적 IP로 설정하기)
  2. 고정된 내부 IP에 VNC 포트 포워딩 설정하기 (5900 TCP/UDP 설정)
  3. 외부에서 공유기로 접근할 수 있게 고정 IP를 신청하거나, DDNS로 도메인 주소 연결하기

추가로 화면은 잘 나오는데 소리가 안 나오는 경우, FaceTime이나 기타 애플 서비스와 관련된 포트를 열어줘야 할 수도 있다. 포트 포워딩과 관련된 정보는 공식 문서에서 확인할 수 있다.

다른 페어 프로그래밍 환경 비교하기

원칙대로 페어 프로그래밍은 두 사람이 하나의 컴퓨터, 동일한 모니터, 하나의 키보드/마우스만 가지고 역할을 나눠 개발하는 방식을 제안한다. 이때, 키보드를 잡고 실제 코드를 작성하는 사람을 드라이버라 부르며, 코드에 대한 방향성만 조언하는 사람을 내비게이터라 부른다.

여기서 내비게이터는 역할이 변경되기 전까지 드라이버의 키보드를 뺏으면 안 된다. 코드를 직접 불러주는 식으로 과도하게 세세한 명령을 내려도 안 되고, 진행 방향에 대한 가이드만 해야 한다.
실제 코드 작성은 드라이버가 해야 하며, 내비게이터의 제안을 최대한 수용하며 코드를 작성해야 하지만 기계적으로 따를 필요는 없다. 가끔 내비게이터가 이미 생각해서 조언했을 법한 사소한 내용에 대해 질문을 해도 되고, 일정 부분에 대해서는 제안을 거부하고 자기 방식대로 해봐도 된다. 코드를 작성하는 행위보다 내비게이터와 같이 소통하는 것이 더 중요하다. 안 좋은 방식으로 진행해보며 실수 경험을 바탕으로 성장하거나, 내비게이터의 제안보다 더 나은 코드를 작성할 수도 있다.

그리고 페어 프로그래밍의 효과를 극대화하려면 드라이버내비게이터 역할을 번갈아 가면서 해야 한다.

페어 프로그래밍에 대한 설명, 준비과정에 대한 설명이 길었다. 왜 결국 페어 프로그래밍 환경으로 macOS의 화면 공유를 선택했는지, 다른 것 대비 어떤 장점이 있는지 설명하도록 하겠다.

물리적인 페어 프로그래밍

코로나로 원격 근무나 온라인 모임이 있기 전까지는 대부분 물리적으로 한 책상에 컴퓨터를 두고 둘이 앉아서 진행했을 것이다.

물리적으로 같은 컴퓨터, 같은 키보드/마우스를 사용하다 보면, 본인만의 편의성을 위해 설정한 부분이 서로 불편할 수도 있다. 예를 들어 각자 사용하는 키보드 레이아웃이 다르면 역할을 교체할 때마다 불편함을 느낄 수도 있다. 그 외에 모니터나 자리의 불편함 등 추가적인 불편함은 더 상세하게 언급하지 않아도 대충 눈치챘을 것이다.

그에 비해 화면 공유는 물리적인 장소의 제약을 벗어날 뿐만 아니라, 위에서 언급한 단점을 대부분 해결할 수 있다.
심지어 같은 장소에서 근무하더라도 화면 공유를 통한 페어 프로그래밍 진행이 가능하다. 다만 음성 통화 기능은 끄거나 음소거해야 하울링 같은 문제가 발생하지 않을 것이다.

IDE의 페어 프로그래밍 환경 플러그인

Visual Studio Code를 사용하면 Live Share를 통해 한 개발 환경에서 여러 명이 붙어서 작업할 수 있다. 이 외에도 인기 있는 JetBrains사의 IDE들(IntelliJ IDEA, PyCharm, Goland 등)은 CodeWithMe 플러그인으로 페어 프로그래밍을 진행할 수 있다. 심지어 콘솔에서만 개발할 때에도 tmux를 활용하면 같은 콘솔 화면을 볼 수 있다.

사실 IDE별 플러그인은 깊이 사용해 보지 않았기 때문에 비교할 자격이 있을지 걱정이 된다. (예전에 내가 사용해 봤을 때는 음성 통화가 지원되지 않았지만, 글을 쓰는 지금은 음성 통화 기능도 지원되는 것 같다) 하지만 내가 생각하기에 확실한 단점이 있으므로 그 부분을 언급하도록 하겠다.

개발 작업이라는 게 IDE에서만 모든 것이 해결되지 않는다. 개발을 하다 보면 공식 API 문서나, 설계 문서 등을 참고해야 할 수도 있다. 하지만 공유되는 환경이 IDE뿐이므로, 해당 문서에 대한 자료는 개별적으로 확인해야 한다.

페어 프로그래밍 관련 경험이나 주의사항을 찾아보면, 특히 내비게이터가 직접 코드를 작성하지 않으므로 집중하지 않게 되는 문제가 발생할 수 있다고 한다. 최대한 같은 화면을 보면서 이야기해야 집중이 유지되므로, 내비게이터가 자기 노트북이나 핸드폰에서 개별적으로 검색해보지 말고, 드라이버에게 이것저것 찾아보자고 명령/제안하는 식으로 진행해야 한다고 한다. 이런 면에서 IDE만 공유되는 상황은 불편할 수도 있다.

이 외에도 개발 환경과 실행/디버깅/측정 환경이 개별적이라면 현재 상황을 확인하기 힘들 수도 있겠다. 백엔드 개발에서 REST API 요청을 대신 하는 도구라던가, 멀티미디어 처리 결과를 확인하기 위해 IDE에 통합할 수 없는 측정 도구를 사용하는 경우 등을 생각하면 될 것 같다.

화상 통화 도구를 통한 페어 프로그래밍

이런 문제를 고려한다면 Google Meet나, Zoom, Teams, Jitsi 등의 화상 통화 도구를 사용해도 괜찮을 것이다.
실제로 화면 공유 기능에 문제가 있을 때는 이쪽을 많이 활용한다.

다만 문제라면 생각보다 화면 공유 영상의 속도가 끊긴다는 점, 카메라를 켜지 않아도 생각보다 시스템에 걸리는 성능 부하가 심하다는 단점이 있다. (카메라를 켜면 높은 확률로 부하가 심해서 오래 진행하기 힘들다) 이 부분은 환경에 따라 화면 공유도 비슷할 것 같긴 한데 지금까지 경험에 따르면 상대적으로 부하가 적은 편으로 보인다. 결정적으로 내비게이터가 포인터로 드라이버에게 화면의 특정 부분을 가리키면서 의사소통 할 수 있다는 점이 가장 큰 차이일 것 같다. (Zoom은 전용 클라이언트를 사용하니 이런 기능이 제공될 수도 있을 것 같은데, 확인해보지 못했다)


JaeSang Yoo
글쓴이
JaeSang Yoo
The Programmer

목차