시작
글을 쓰고 있는 시점 저는 공군에서 현역으로 복무하고 있습니다. 군대에서 개발하는 방법은 많지 않습니다.
- 싸지방에서 개발하거나
- 공군의 경우 태블릿을 활용할 수 있습니다. 하지만, 싸지방 PC에서는 개인적으로 프로그램을 설치할 수 없습니다. 태블릿도 마찬가지로 일반적인 방법으로는 개발에 필요한 프로그램들을 설치하기가 어렵습니다.
그럼에도 방법은 있습니다. 저는 아이패드를 활용해 개발하고 있습니다. 지금 보시는 이 블로그도 군대에서 아이패드로 개발했습니다. 오늘은 제가 어떻게 아이패드에서 개발을 할 수 있었는지 몇 가지 방법을 공유해보겠습니다.
iSH
개발을 하려면 터미널에 접근해 쉘 명령어를 사용할 수 있어야 합니다. 갤럭시 탭에서는 쉘에 접근할 수 있다고 하지만 아이패드에서는 완전히 불가능 입니다. 그런데 iSH라는 앱을 사용하면 흉내는 내볼 수 있습니다. 앱스토어에서 무료로 다운 가능합니다.
iSH는 iOS와 아이패드에서 Alpine Linux 쉘을 샌드박스로 띄워 사용할 수 있게 만든 앱입니다. apt install 이나 curl 커맨드를 사용하여 여러가지 패키지들을 설치해 볼 수 있습니다. 저는 node.js 와 neovim을 설치 해보았습니다. 설치까지는 무리 없이 잘 되었습니다.
하지만 node.js 같은 경우에는 14 버전이 설치되었습니다. 요즘 나오는 툴과 프레임워크들을 사용하려면 최소 node 20은 되어야 합니다. 패키지 매니저가 참조하는 리파지토리 주소 값을 알파인 리눅스 공식 리파지토리로 변경하면 node 20 버전 설치가 가능합니다.
성공적으로 node 20을 설치 후 기대하는 마음으로 create-next-app으로 next.js 까지 생성해보았습니다.
하지만 설치 속도가 매우 느려 몇십 분이 지나도 완료되지 않았습니다. 샌드박스 환경의 성능 한계인 것으로 보입니다. 이렇게 계속 기다려서 어찌저찌 프로젝트 생성을 완료한다고 해도 이 제한된 환경에서 개발은 어려워 보입니다.
따라서 다른 방법을 찾아보기로 했습니다.
클라우드 컴퓨팅 활용
클라우드에 VM instance를 띄워서 아이패드에서 SSH로 접속해 원격으로 개발하는 방법도 있습니다. 유명한 클라우드 서비스 제공업체로는 Amazon Web Services (AWS)와 Google Cloud Platform (GCP)가 있습니다.
각 클라우드 서비스 제공업체마다 VM 인스턴스의 명칭이 다릅니다. 예를 들어, AWS에서는 EC2, GCP에서는 Compute Engine이라고 부릅니다.
AWS에서는 EC2를 조금 더 쉽고 저렴하게 사용해 볼 수 있는 Lightsail이라는 서비스도 있습니다. 지금 이 글을 쓰는 시점에서는 AWS의 Lightsail은 가입 후 첫 3개월동안은 무료로 사용해 볼 수 있고 GCP는 3개월 동안 자유롭게 사용할 수 있는 300 달러 크래딧을 줍니다.
VM을 띄우는 방법은 각 서비스 문서에 자세히 설명되어 있습니다. VM을 띄운 후, 아이패드에서 SSH 클라이언트 앱을 사용해 접속할 수 있습니다. 제가 아이패드에서 추천하는 SSH 클라이언트 앱은 Termius 입니다. 무료이고 제일 사용 경험이 좋았습니다.
SSH로 접속한 후, 코드 작성은 Vim, Neovim 혹은 Nano 이런 프로그램을 사용하면 됩니다. 저는 Neovim을 사용했습니다. 플러그인과 LSP를 잘 설정해주면 VS Code 부럽지 않은 개발환경을 구축할 수 있습니다.
Neovim 개발 환경 구축하는건 다음 기회에 자세히 다뤄보겠습니다.
하지만, 이 방식에는 한 가지 불편한 점이 있습니다. 바로 레이턴시 인데요. 한국 리전에 VM을 띄워도 수 ms의 딜레이가 발생합니다. 수 ms 딜레이는 무시할 수 있는 정도 아니야? 라고 생각할 수 있는데 이거 거슬립니다. 특히나 타이핑 경험이 좋지 않습니다. 이 때문에 저는 최종적으로 다른 방법을 선택했습니다.
code-server
code-server는 VS Code를 웹에서 실행할 수 있도록 만든 프로젝트입니다. 사실 code-server 말고도 웹에서 VS Code를 사용하는 방법은 여러가지가 있습니다.
- https://vscode.dev
- GitHub Codespaces vscode.dev 같은 경우에는 별도의 설치 없이 바로 사용 가능하다라는 장점이 있지만 아이패드에서는 내부 파일 접근이 불가능하고 또한 쉘에 접근할 수 없다보니 사실상 메모장 정도 밖에 기능을 못합니다.
Github Codespaces 같은 경우에는 클릭 한 번으로 Azure에 인스턴스를 자동 생성 해주고 VS Code 웹 버전이 실행되니다. SSH로 VM에 접속해 Vim에서 개발하는 것 보다 훨씬 좋은 타이핑 경험을 제공하고 VS Code의 편리함을 그대로 느낄 수 있어서 너무 좋았습니다.
하지만 접속할 때 마다 콜드 스타트로 인해 첫 실행이 느려서 많이 답답했습니다.
그래서 결국은 code-server에 정착하게 되었습니다. 내가 직접 운영하는 클라우드 VM에서 항상 실행되는 VS Code 환경 입니다. 그냥 VM Instance 계속 띄워두면 콜드 스타트 되는 Github Codespaces 처럼 처음에 기다릴 필요도 없고 사용하면서 불편한게 있으면 제가 직접 패치해서 사용할 수 있다는 큰 장점이 있습니다.
저는 앞단에 리버스 프록시로 nginx를 배치하여 HTTPS 인증서 설정도 해주었습니다.
물론 code-server를 사용하면서 불편한 점도 많았습니다. 예를 들면
- 아이패드에서 cmd + w 단축키가 동작하지 않아 창 닫기 불편
- ctrl + w + q로 단축키 재매핑하여 해결
- Safari의 커서 & VS Code 커서가 중복 렌더링되는 문제
- 이건 제가 GitHub에 Issue 등록 & PR 제출한 상황입니다. 일단 당장 급하게 고치고 싶은 것들은 code-server 와 VS Code를 fork하여 문제점들과 개선사항을 패치해서 사용하고 있습니다.
마무리
아이패드에서 개발하는 방법은 많지 않지만 클라우드 VM, code-server 등의 방법을 조합하면 개발이 가능하긴 합니다. 저는 code-server를 직접 호스팅하여 사용하는 방식으로 정착했습니다.
물론 완벽하진 않지만, 아이패드만으로도 웹 개발은 어느정도 가능하다는 점에서 의미가 있었던 것 같습니다.
