기술지원 문의는 로그인 후에 가능합니다.

확인

Tech Blog

단군소프트에서 제공하는 소프트웨어 활용에 도움을 줄 수 있는 정보와 소프트웨어 새소식, 교육/세미나 정보를 제공해드립니다.

태그 모음

소프트웨어 소식

Projector로 IDE에 원격으로 액세스 하세요

21-03-31


안녕하세요 JetBrains 한국 총판 단군소프트입니다.
지난 3월 11일, 네트워크를 통해 원격으로 JetBrains IDE 및 Swing 앱을 실행할 수 있는 도구이자 프레임워크인 Projector의 조기 릴리스를 발표했습니다.

Swing은 Java용 그래픽 위젯 툴킷이죠. 현재 JetBrains IDE는 Swing을 사용하여 UI를 만듭니다. 이는 Android Studio 등의 다른 IntelliJ 기반 IDE도 마찬가지입니다.

일반적으로 JetBrains IDE나 Swing 앱이 데스크톱 애플리케이션이라서 얻을 수 있는 이점도 많지만 씬 클라이언트와 같이 특별한 접근방식이 필요한 코너 케이스도 꽤 있습니다. Projector가 개발된 이유는 바로 이 때문입니다.

Projector는 서버에서 IntelliJ 기반 IDE 및 Swing 기반 앱을 실행하는 자체 호스팅 기술로, 이를 통해 브라우저와 네이티브 앱을 사용하여 어디서나 액세스할 수 있습니다.


사용 사례
서버에서 IDE를 실행해야 하는 특수한 상황은 매우 다양합니다. 이 중 일부 문제는 특히 대규모 인프라를 갖춘 대기업에서 흔히 나타납니다. Projector가 해결하기에 적합한 문제를 간략하게 정리하면 다음과 같습니다.

- 반복적인 이동을 줄이기 위해 런타임 또는 데이터베이스 근처에서 코드를 실행해야 하는 경우
- 보안 수준이 높은 기업 환경의 경우
- 매우 규모가 큰 프로젝트의 경우
- 소스 코드를 로컬에서 복사하지 못하게 금지되어 있는 경우
- 사용자의 하드웨어상 제약이 있는 경우
- 씬 클라이언트의 경우
- Windows 시스템 기반의 GNU/Linux 환경 또는 ChromeOS와 같은 비전통적인 운영 체제에서 IDE를 실행해야 하는 경우
- 앱은 서버에서 계속 작동시켜두고 컴퓨터는 꺼야 하는 경우
- 서버 측(devtest, devprod)에서 원격으로 디버그해야 하는 경우
- 디버그 소스나 사전 구성된 IDE가 있는 VM 또는 Docker 이미지의 경우
- 원격 액세스가 필요한 구성의 경우

단, Projector는 공동 개발을 지원하지 않습니다. 협업 도구가 필요한 경우 Code With Me를 사용해 보세요. 현재 JetBrains에서는 Code With Me와 Projector의 기능을 결합한 새로운 원격 개발 솔루션을 개발하고 있습니다. 이 솔루션은 네트워크 지연 문제를 해결하는 데 도움이 될 것입니다.


오픈 소스
Projector는 오픈 소스 라이선스에 따라 완벽하게 퍼블리시됩니다. 이는 이 기술을 기반으로 맞춤형 솔루션을 구축하려는 기업에게 매우 중요합니다. 사용된 라이선스는 다음과 같은 가장 유명한 세 가지입니다.

- 클라이언트: MIT 라이선스(Expat)
- 서버: GNU GPL v2.0 + Classpath Exception
- Dockerfiles: Apache License 2.0

또한 GitHub 풀 리퀘스트를 통해 새로운 기능과 버그 수정에 기여해주십사 여러분을 초대합니다. 특정 프로젝트와 연결된 GitHub 링크는 아래에서 확인할 수 있습니다.


아키텍쳐
Projector는 클라이언트-서버 소프트웨어입니다. 서버에서 IDE를 실행한 다음 네트워크를 통해 연결할 수 있습니다. 클라이언트와 서버 간의 연결은 매우 빠르고 가볍습니다.

VNC와 같은 원격 데스크톱 솔루션으로 생각할 수 있지만 Projector는 IDE 창만 표시하며 Java 기반 애플리케이션의 처리량을 극대화하기 위해 정밀하게 조정되었습니다.

Projector는 서버 또는 클라이언트를 설정할 수 있는 여러 옵션을 제공합니다.


클라이언트 앱

브라우저 또는 네이티브 앱을 사용하여 IDE에 연결할 수 있습니다. 네이티브 앱은 더 우수한 기능을 제공하지만(예: 키보드 단축키 제공) 데스크톱 운영 체제에서만 사용할 수 있습니다. 현재 모바일 기기에서 사용할 수 있는 유일한 옵션은 브라우저이지만 향후 모바일 플랫폼용 기본 클라이언트도 제작할 계획입니다.

* 웹 클라이언트
브라우저 환경은 사용 방식이 대화형 웹사이트와 매우 유사합니다. 그러나 전체 화면 모드로 들어가는 옵션이 있어서 데스크톱과 같은 환경을 제공합니다.

URL 매개변수를 변경하면 웹 클라이언트의 프로퍼티를 제어할 수 있습니다. 예를 들어 모바일 기기에서 "mobile" 매개변수를 URL에 추가하면 가상 키보드를 여는 기능을 포함하여 오버레이 버튼을 활성화할 수 있습니다.

웹 클라이언트는 HTML5 Canvas API를 사용하여 구현되므로 이 API와 호환되는 모든 브라우저에서 작동합니다. 또한 웹 클라이언트는 Chrome/Chromium, Firefox, Safari에서 테스트되었습니다. 웹 클라이언트는 이미 Projector의 웹 서버 부분에 포함되어 있으므로 어디에도 설치할 필요 없이, URL을 입력하기만 하면 됩니다. 모든 코드는 GitHub에 제공됩니다.

* 네이티브 앱
macOS, Windows, Linux용 네이티브 애플리케이션을 사용할 수 있습니다. 바이너리는 여기에서 제공되며 소스는 GitHub에 게시되어 있습니다.

이 앱은 Dock/Taskbar 통합과 같은 예상되는 이점 외에도 일반적으로 브라우저 클라이언트에서 사용할 수 없는 Ctrl+W/Cmd+W와 같은 키보드 단축키를 지원합니다.


서버 측
Python 설치 스크립트, Docker 이미지, IDE 플러그인

* Python 설치 스크립트
JetBrains의 설치 스크립트를 사용하면 서버 측 구성 요소를 설치할 수 있습니다. 이는 독립실행형 배포판으로, 현재 GNU/Linux 호스트에서만 사용할 수 있습니다. 버전, 보안 옵션 등과 함께 설치할 IDE를 선택할 수 있습니다.

* Docker 이미지

샘플 스크립트를 사용하면 JetBrains IDE 및 Projector가 포함된 Docker 이미지를 생성할 수 있습니다. 이렇게 하면 Docker를 사용할 수 있는 모든 곳에서 IDE를 실행할 수 있습니다. IDE는 GUI 없이 단독으로 실행되므로 서버에 X11을 설치할 필요가 없습니다. 이미지는 독립적으로 되어 있습니다.

JetBrains는 DockerHub를 사용하지 않고 맞춤형 Docker 레지스트리를 사용하여 사전 빌드된 이미지를 퍼블리시합니다. 예를 들어 다음 스니펫을 사용하면 레지스트리에서 IntelliJ IDEA Community Edition을 받을 수 있습니다.
docker pull registry.jetbrains.team/p/prj/containers/projector-idea-c

* IDE 플러그인
마지막으로, 서버 측 요소를 별도의 서버에 배포할 필요 없이 IDE에 바로 플러그인을 설치할 수 있습니다. 이 플러그인을 사용하면 사용자의 기기가 서버가 됩니다. 언제나 그렇듯이 소스 코드는 GitHub에서 찾을 수 있습니다.

그러나 플러그인은 독립성이 훨씬 낮아 사용자의 운영 체제와 해당하는 설정이 중요합니다. 예를 들어 macOS에서는 전역 메뉴가 렌더링되지 않습니다.


직접 빌드하세요!!


Projector는 기술입니다. Project를 이용하면 비즈니스 요구사항에 맞게 자체 인프라를 맞춤설정할 수 있습니다. Ansible? 물론 가능합니다. Kubernetes? 문제 없습니다.

충분한 전문 기술 지식이 있다면 원하는 모든 것을 빌드할 수 있습니다. 코드는 오픈 소스이므로 아무 제한 없이 원하는 대로 변경할 수 있으며, 역으로 변경한 코드를 기여할 수도 있습니다. 가장 중요한 서버 측 코드를 비롯해 자세한 정보는 여기 GitHub에서 확인할 수 있습니다.

Projector는 아직 매우 초기 단계의 기술이지만 원격 IDE 액세스를 위한 최고의 솔루션 중 하나가 될 잠재력이 있다고 생각합니다. Projector 팀은 여러분의 의견을 기다리고 있습니다. YouTrackTwitter를 통해 언제든지 연락해 주세요.
— Projector 팀


이 게시물은 Oleg Chirukhin이 작성한 Access Your IDE Remotely With Projector를 번역한 글입니다.

태그