1. 트렌드
컨테이너화, 딥러닝 등의 기술이 실무에 적용됨에 따라 '원격' 개발 환경에 직면하는 시나리오가 점점 늘어나고 있습니다. 예를 들어:
-
서버
-
가상 머신
-
컨테이너
이러한 원격 환경을 로컬에 똑같이 재구축하는 것은 매우 어렵거나 불가능한 경우가 많습니다. 예를 들어:
-
특정 설정: 과거 프로젝트에서 마주친
.Net Framework 4.0 + MSSQL 2000환경처럼, 각기 다른 버전의 특정 패치가 설치된 경우 환경 복원이 거의 불가능합니다. -
특정 운영 체제: Windows 환경에서 Linux용 프로젝트를 개발해야 하는 경우입니다.
-
로컬 환경 파괴: 전역적인 설정들이 많아 완벽한 격리가 어려운 경우가 있습니다.
-
로컬에 없는 하드웨어 능력 의존: 딥러닝에 필요한 연산 및 저장 능력 등이 로컬 기기에 부족한 경우입니다.
어떤 이유에서든 로컬과 원격 환경의 차이로 인한 각종 불편함에 직면하게 됩니다.
2. 현황
원격 개발 시나리오에는 일반적으로 네 가지 해결책이 있습니다.
-
원격 데스크톱: 개발 경험이 로컬 환경과 차이가 크며, 일부 Linux 배포판은 원격 데스크톱 설치가 불가능합니다.
-
SSH + Vim: 현대적인 개발 도구에 비해 불편하며 생산성이 떨어집니다.
-
파일 동기화 도구: 느리고 오류가 발생하기 쉽습니다.
-
브라우저 기반 도구: 로컬 도구 체인과 결합하여 사용하기 어렵습니다.
이들은 문제의 일부를 해결해주지만, 대부분 로컬 개발 환경의 수많은 편의성을 희생해야 합니다.
그렇다면 로컬 환경에서 원격 환경으로 매끄럽게 접속할 방법은 없을까요? 익숙한 로컬 도구 체인의 편의성을 누리면서 동시에 원격 개발도 가능하게 말이죠.
당연히 있습니다.
3. 아이디어
개발 도구 관점에서 보면 세 가지 측면의 지원이 필요합니다.
-
Windows 환경에서 Linux 개발 지원
-
SSH 연결 지원
-
컨테이너 환경 지원
Windows에서의 Linux 개발 문제에 대해, Microsoft는 2016년에 Windows Subsystem for Linux (WSL)을 발표했습니다. 이를 통해 Windows에서 가상 머신이 아닌 직접 Linux 하위 시스템을 실행할 수 있게 되었습니다.
[caption id="attachment_1972" align="alignnone" width="625"]
WSL[/caption]
WSL은 기본적인 파일 공유를 지원하지만, VS Code 같은 개발 도구가 직면한 상황은 더 복잡했습니다.
If you have Python 2.7 and Flask installed on Windows (or none at all!) and Python 3.7 and Django installed in the Linux distro, you wouldn't get proper completions or linting because VS Code was looking at the Windows versions of everything.
개발 도구는 서로 다른 환경을 명확히 구분해야 했습니다. 여기서 흥미로운 아이디어가 나옵니다.
We convinced ourselves that what we needed was a way to run VS Code in two places at once, to run the developer tools locally and connect to a set of development services running remotely in the context of a physical or virtual machine (for example, a container or VM).
간단히 말해, _환경 무관한 일부 플러그인은 로컬에서 실행하고, 환경 의존적인 다른 플러그인들은 원격 환경(컨테이너, 가상 머신, WSL, 서버 등)에서 실행_하게 하는 것입니다.


이렇게 하면 모든 문제가 해결됩니다. 원격 개발을 지원함과 동시에 로컬 개발 경험을 그대로 유지할 수 있습니다.
This gives you a rich local development experience in the context of what is in the remote environment.
4. VS Code 원격 개발 도구 모음(Remote Development Extension Pack)
VS Code는 1.35 버전(2019/6/4)에서 Remote Development 지원을 공식 발표했습니다.
Remote Development (Preview) available in Stable - You can now use the Remote Development extensions in Stable.
그리고 최신 1.36 버전에서는 더 많은 기능을 추가했습니다.
Remote Development (Preview) improvements - Save to local file system, drag and drop files to remotes, and more.
Remote Development 플러그인 팩을 설치하면 됩니다. 현재(2019/7/6) 기준으로 이 팩에는 세 가지 플러그인이 포함되어 있습니다.
-
Remote - SSH: 원격 기기나 가상 머신을 개발 환경으로 사용합니다.
-
Remote - Containers: Docker 컨테이너를 개발 환경으로 사용합니다.
-
Remote - WSL: Windows 하위 시스템(WSL)을 개발 환경으로 사용합니다.
Remote - SSH
SSH 채널을 통해 원격 기기, 가상 머신 또는 컨테이너에 연결하여 파일 시스템 접근, 터미널 관리, 앱 실행 및 디버깅을 수행합니다. 아래 그림을 참조하세요.

구체적으로 SSH 기반 원격 개발 지원을 통해 다음과 같은 이점을 누릴 수 있습니다.
-
로컬 환경의 하드웨어 조건에 구애받지 않습니다.
-
여러 개의 서로 다른 원격 개발 환경을 관리할 수 있습니다.
-
원격 디버깅이 가능합니다.
_애플리케이션은 원격에서 실행되지만 개발과 디버깅은 모두 로컬에서 수행_되므로, 익숙하고 완벽한 로컬 도구 체인의 편의성을 그대로 누릴 수 있습니다.
P.S. SSH 원격 개발에 대한 더 자세한 내용은 다음을 참조하세요.
-
데모 비디오: Visual Studio Code Remote - SSH
-
사용 문서: Remote Development using SSH
Remote - Containers
한 걸음 더 나아가 컨테이너 지원을 통해 특정 Docker 컨테이너를 개발 환경으로 사용할 수 있습니다.
-
도구 체인의 일관성을 보장하며 컨테이너를 이용해 전체 도구 체인을 신속하게 재구축할 수 있습니다.
-
컨테이너 간의 자연스러운 환경 격리를 통해 로컬 환경에 영향을 주지 않고 서로 다른 개발 환경을 전환할 수 있습니다.
-
개발/빌드/테스트 환경의 일관성을 보장하여 협업이 용이합니다.
구현 측면에서 구조는 WSL 지원과 완전히 일치합니다.

P.S. Docker 컨테이너 원격 ��발에 대한 더 자세한 내용은 다음을 참조하세요.
Remote - WSL
Remote - WSL 플러그인을 통해 WSL을 전체 개발 환경으로 사용할 수 있습니다. 구체적으로 다음 기능을 지원합니다.
-
Windows 환경에서 Linux 환경용 개발이 가능하며 플랫폼 관련 도구 체인을 사용할 수 있습니다.
-
WSL에 위치한 파일(Windows 파일 시스템에서 마운트된
/mnt/c등 포함)을 편집할 수 있습니다. -
Windows에서 Linux 애플리케이션을 실행하고 디버깅할 수 있습니다.
P.S. WSL 원격 개발에 대한 더 자세한 내용은 다음을 참조하세요.
-
데모 비디오: Visual Studio Code Remote - WSL
-
사용 문서: Developing in WSL
5. 결론
현재로서는 원격 환경에 매끄럽게 접속할 수 있는 IDE가 클라우드 IDE보다 훨씬 실용적인 선택으로 보입니다.
Browser-based tools are useful in a variety of scenarios, but developers don't want to give up the richness and familiarity that desktop tools provide, or their existing locally installed tool chains.
아직 댓글이 없습니다