왜 이런 짓을 하게 되었는가
이 글은 일단 제목부터 심상치 않은 글이다. “멀쩡한 랩탑 두고 왜 이런 짓을 하는건가?” 하는 어그로 글일 수도 있겠다. 물론 나도 같은 생각을 했었고, 몇 해에 걸친 고민과 삽질 끝에 1차 시도를 마치게 되어 다른 분들에게 도움이 되었으면 좋겠다는 생각으로 글을 남긴다.
내가 얼마 전까지 사용하던 기기 구성은 아래와 같았다.
- 2017년형 맥북 프로 터치바 15인치
- 2016년형 맥북 12인치
- 아이패드 프로 10.5인치
15인치 맥북 프로는 회사 지급품이자 메인 개발 머신이고, 맥북 12인치는 가볍게 들고나가 개발을 할 일이 있을 때나 회사에서 주로 회의만 하는 날에 가벼운 서브 머신으로 들고나가곤 했다. 특별한 일이 없으면 아이패드 프로를 들고 나가서 대중교통 안에서 책을 읽거나 Luna DIsplay와 함께 외장 디스플레이로 사용했다. 어느정도 나누어진 역할에 따라 각 기기를 만족스럽게 쓰고는 있었지만, 요즘 내 생활 패턴 상 안맞는 부분이 있었다.
- 맥북 12인치는 1주일에 한두번밖에 쓰지 않는다.
- 아이패드는 자주 쓰지만 주로 집이나 책상 위 등 한정된 공간에서만 사용한다. 원격 근무 위주로 하다 보니 대중교통을 이용할 일이 적어진데다, 대중교통에서 꺼내드는 것도 점차 귀찮아져서 가벼운 독서는 아이폰을 이용한다.
어차피 나에게 아이패드는 반드시 사용하는 기기이고, 15인치의 무거움만 감수하면 12인치는 굳이 필요가 없기 때문에 두 기기를 처분하고 아이패드 프로 3세대 12.9인치를 들이기로 결심했다. 펜슬, 폴리오 커버까지 셋트 다 갖추어 사니까 이번에 나온 신형 맥북 에어 13인치 가격과 비슷했다 💸
이번에 산 아이패드는 화면이 꽤 큰 것 치고는 무게도 현실적으로 괜찮고, 성능은 차고 넘치기 때문에 몇일 동안 써본 결과 아주 만족스럽다. 하지만 이 글은 기기를 리뷰하는 글이 아니라 아이패드를 통해 어떻게 원격 개발 환경을 구축하는가를 이야기하는 글이기 때문에 사용기가 궁금한 분들은 유튜브나 커뮤니티 곳곳에 있는 사용기를 참고하시기 바란다.
이전에도 아이패드로 가벼운 개발을 시도해보려고 했던 적이 여러 번 있었다. 문제는 내가 프론트엔드 개발자 라는 것인데, iOS에서 적당한 IDE나 텍스트 에디터도 없는 데다 결과물을 바로 확인해보기도 어렵고 브라우저의 개발자 도구를 이용하기도 어렵다. 불가능하진 않지만 여러모로 한정적이다.
구글에 ‘iPad pro web development’ 같은 검색어로 여러 글을 찾아 보았지만 언제나 비슷한 결론에 이른다. ‘VPS 등으로 원격 머신을 세팅하여 그 머신에 SSH, mosh 등으로 연결하여 vim 으로 코딩을 한다’ 는 것이다. vim빠로서 별로 마다할 선택지는 아니지만, 다시 강조하건대 내가 개발하는 분야는 웹 브라우저의 개발자 도구 없이는 제대로 된 개발을 할 수가 없다. 그게 아니라면 멀리 돌아갈 필요 없이 몇몇 좋은 앱이 있다. 특히 파이썬 사용자라면 Pythonista라는 앱을 강력하게 추천한다. 이건 진짜 iOS용 파이썬 IDE다.
요즘은 codesandbox.io, glitch.com 같은 서비스가 있어서 가벼운 샌드박싱은 충분히 가능하긴 하지만, PC버전에 비해 iOS 사파리로 프로그램을 만들 때 자동완성이나 키 입력 등의 제약이 좀 있다. 그래서 관심 있는 분들은 사용해보면 좋지만 이 글에서 이야기하는 본격적인 개발과는 조금 다르다.
그리고 결국 마지막에 이르러 “원격 데스크탑으로 내 맥에 접속해서 개발을 한다” 라는 원초적인 선택지를 고르게 되었다.
iOS용 원격 데스크탑 앱을 고르고 설정하기
몇몇 원격 접속 앱들이 있지만 여러 앱을 사용해 보고 두 가지 앱이 아주 좋다는 결론을 냈다.
- Jump Desktop - 보통 최고의 원격 데스크탑 앱으로 꼽힌다. 호환되는 비싼 마우스를 쓰면 iOS 원격 앱에서 마우스도 쓸 수 있다는 어마어마한 장점이 있지만 스크린에 터치하는데 좀 익숙해지면 마우스는 굳이 필요 없겠다는 생각이 들었다.
- Screens - 맥 계열에 역사와 전통이 깊은 VNC 앱이다. VNC 프로토콜의 한계 상 소리 출력은 되지 않지만 Jump Desktop보다 훨씬 뛰어난 사용자 환경을 제공한다. 인앱(In-app) 구매를 하면 다른 iOS 기기를 트랙패드처럼 쓸 수 있게 해주는 기능도 제공한다.
두 앱 다 호스트가 되는 맥에 연결 앱을 설치해주고 자체 계정으로 로그인을 해주면 대체적으로 설정이 완료된다. (네트워크 환경에 따라 수동 설정을 해야 하는 경우도 있다) 처음에는 Jump Desktop 만으로 모든게 해결될 줄 알았는데 밖에 나오니 연결이 안될 때가 있고, UI가 좀 아쉬워서 Screens를 시도해 보고 있다. 원격으로 접속 시 제대로 호스트가 잡히지 않을 수 있다는 단점을 극복하기 위해 집 공유기에 OpenVPN 설정을 하여 언제든지 외부에서 VPN 접속을 할 수 있도록 만들었다.
또한 아무리 맥에 원격 접속을 위한 데몬이 돌아가고 있다 하더라도 잠자기 상태면 전혀 연결이 되지 않기 때문에 맥을 켜두고 밖에 나오면서 Amphetamine(암페타민)같은 앱으로 스크린을 닫아도 잠들지 않게 만드는 것도 중요하다.
그러면 외부에서도 아래와 같이 원격 앱에서 접속 가능한 상태가 된다. (위는 Jump Desktop, 아래는 Screens)
아이패드에 블루투스 키보드를 연결한 환경에서 사진과 같이 VSCode를 띄우고 블로그의 간단한 태그를 수정한 다음 배포하는 것 까지 생각보다 깔끔하게 가능했다. 또 한가지 유의할 점은 호스트 맥의 디스플레이 해상도를 미리 1440x900 정도로 조절해두는 게 보기 편하다는 것이다. 아마 더 작은 아이패드를 쓰고 있다면 1280x800 정도의 해상도가 편하리라 생각한다.
참고로 Jump Desktop은 아이패드 앱으로 원격 호스트에 접속할 때 해상도를 아이패드 네이티브 해상도에 맞게 조절하는 기능을 최우선적으로 열심히 개발하고 있다고 한다. 윈도우 호스트에 접속할 때는 이미 잘 되는 기능이지만, 윈도우 머신이 없기 때문에 실험해보지 못했다.
몇 가지 트러블슈팅
원격 접속 환경이 일반 맥과 완전히 동일하지 않기 때문에 사용자가 직접 버릇을 바꾸어야 하는 불편한 점이 몇개 있다. 다행히도 나는 참을만하면 내가 직접 버릇을 고치는 편이기 때문에 몇 달 적응해보고 실제 어떻게 활용하고 있는지 추가로 포스팅할 예정이다. 그 전에 몇 가지 눈에 띄는 불편한 점을 어떻게 해결했는지 공유하고자 한다.
- 스팟라이트(혹은 알프레드)를 Cmd+Space로 쓸 수 없다 - iOS의 스팟라이트가 실행되기 때문인데, 호스트 머신의 스팟라이트 단축키를 Alt+Space로 변경하면 충돌이 나지 않는다. 나는 기존대로 Cmd+Space는 바꾸지 않은 채 Keyboard Maestro라는 앱으로 별도의 키바인딩을 했다. 굳이 이 앱 아니어도 BetterTouchTool 정도만 되어도 충분하다. (어차피 나는 둘 다 쓴다)
- 만약 한영 전환을 Cmd+Space로 쓰는 분이 있다면 마찬가지로 불편할 텐데, 나는 이미 오래 전부터 Shift+Space로 한영 전환을 하고 있기 때문에 별 문제가 되진 않았다.
- macOS Mojave에서 VNC 프로토콜의 키보드 입력이 좀 꼬여있는지 애플이 수정할 예정이라고 한다. 그 전에는 컨트롤+방향키 조합, 펑션키 입력 등에 제약이 있기 때문에 미션 컨트롤을 부르는 단축키를
Ctrl+Shift+M
등으로 임의 설정을 해주어야 한다고 한다. 참고 링크 - ESC키를 쓸 수 없다. 외장 블루투스 키보드를 아이패드에 연결한 채 ESC를 누르면 홈 화면으로 돌아올 것이다. 만약 vim 사용자라면
Ctrl+[
을 사용하는데 익숙해져야 할 것이다. - iOS 환경에서 Caps Lock 버튼을 임의로 Ctrl로 바인딩 할 수 없다. iOS가 아닌 환경에선 여태까지 그렇게 써 왔는데 안되는게 아쉽지만, 자주 원격 접속을 하진 않을 테니까 견딜만 하다.
- 마우스가 안된다는 것은 보통 치명적인 단점이긴 한데 사전에 이야기한 대로 아직은 손가락이나 애플 펜슬을 이용하여 포인팅을 대신 해도 쓸만하다. 직접 터치한 부분이 마우스 클릭이 되는 터치 모드보다는 실제 트랙패드처럼 손가락 움직이는대로 마우스 커서가 움직이는 트랙패드 모드를 사용하는게 나에게 더 맞았다.
- 분명 암페타민으로 맥을 잠들지 않게 했음에도 밖에 나가서 접속하려고 하면 원격 앱으로 맥에 접속할 수 없는 상태가 되는 경우가 많았다. 최대한 불안 요소를 없애기 위해 언제든지 집 공유기 VPN으로 접속할 수 있도록 만든 뒤, 공유기 설정으로 들어가 맥에다 직접 패킷을 쏴 주어 깨우는 방식으로 문제를 해결했다.
마치며
아직 간단히 몇 줄을 수정한 뒤 커밋-푸시하는 정도의 단계만 수행해봤지만, 조금만 익숙해지면 하루 정도 밖에 나와서 아이패드로만 일을 하거나 사이드 프로젝트를 하는 정도는 별로 무리 없이 진행할 수 없으리라 기대한다. 특히 Jump Desktop 쪽에서 아이패드 해상도 대응 업데이트만 되면 더더욱 괜찮은 환경을 구축할 수 있을 것 같다.
아직까진 삽질만 잔뜩 하고 눈에 띄는 성과가 없긴 하지만 몇개월 더 이런 방식으로 아이패드를 활용해 보면 어떻게 느끼게 될지 궁금하다.
추가 업데이트
(2019년 3월 9일) Jump Desktop의 iOS, Mac Client 버전이 업데이트 되면서 불편했던 점이 아주 많이 개선되었다. 업데이트 로그는 다음과 같다.
- Dynamic resolution switching for Fluid connections: Jump can now update the remote resolution to match your local device’s resolution and orientation.
- Wake-On-Lan for automatic connections: Jump will try to wake up your remote machine before connecting (there are some limitations here though)
- Better keyboard compatibility with games and 3D applications
- Horizontal scrolling support.
- Synchronize automatic connection names
- Physical keyboard improvements
- External screen improvements
업데이트 내역에서 중요한 개선은 3가지였다. 가로 스크롤이 가능해졌고, 원격 접속 상태에서 아이패드 해상도에 맞게 조절이 가능하며 블루투스 키보드 입력 시 제대로 입력되지 않았던 일부 키 동작들이 수정된 것이다.
덕분에 실질적으로 서브 랩탑을 대체할만한 수준까지 사용성이 많이 좋아졌다고 생각한다. Screens는 그저 사용성 좋은 VNC 애플리케이션에 지나지 않아서 이제는 자주 쓰기 힘들 것 같다.