.NET Tools Remote Development

JetBrains Rider를 활용한 원격 개발

Read this post in other languages:

JetBrains Rider 2022.2가 출시되면서 .NET 개발자들이 Remote Development(원격 개발) 베타 버전에 액세스할 수 있게 되었습니다. 원격 개발은 IntelliJ 플랫폼 기반의 JetBrains IDE에 이미 도입된 기능으로 Rider 사용자도 이제 .NET 플랫폼에서 원격 개발을 경험할 수 있습니다.

이 글은 “원격 개발이란?”, “원격 개발을 사용하면 좋은 점은?”과 같은 질문에 답하고, 현재의 JetBrains 버전에서 원격 개발을 사용하는 방법을 다룹니다. 이제 시작해 보겠습니다.

원격 개발이란?

원격 개발이란 익숙한 개념으로, 전문적인 컴퓨팅의 초기 시대까지 거슬러 올라갑니다. 당시 사용자들은 대규모 컴퓨터에 터미널을 통해 원격 접속하여 업무를 보았습니다. 오늘날 우리가 목도하고 있는 개인 컴퓨팅의 시대는 컴퓨터 터미널의 흥미로운 역사가 있었기에 실현될 수 있었습니다. 

기술 분야가 보통 그렇듯이 동향은 주기적으로 바뀝니다. 오늘날 책상에서 사용되는 컴퓨터는 초기 컴퓨터 과학자들이 상상도 할 수 없는 수준의 처리 능력을 갖고 있지만, 현대 개발 워크플로에서는 여전히 기기의 한계가 있을 수 있습니다. 현재의 워크플로에는 막대한 CPU, 메모리, GPU가 필요하며, 현재 개발 중인 양자 컴퓨팅도 빼놓을 수 없는 부분입니다.

.NET 개발자의 경우에는 기술적인 한계뿐만 아니라 여러 운영 체제와 하드웨어를 대상으로 해야 한다는 문제도 있습니다. 물리적 기기의 라이브러리를 빌드하더라도 대부분의 개발자에게는 실용적이지 않습니다. 가상화와 에뮬레이션 또한 호스팅 오버헤드로 인해 결과가 부정확할 수 있어 한계가 있습니다.

현대의 개발자는 이러한 어려움을 어떻게 극복해야 할까요? 원격 개발이 그 해답입니다!

JetBrains Remote Development(원격 개발)는 사용자의 소스 코드, 툴체인 및 IDE 백엔드를 SSH가 지원되는 모든 원격 서버에 호스팅할 수 있습니다. IntelliJ 플랫폼 기반의 가벼운 클라이언트를 활용하면 로컬과 같은 Rider 개발 워크플로를 경험할 수 있습니다. 지금까지 해오던 방식 그대로 프로젝트를 작성, 탐색, 리팩터링, 실행, 디버그 및 테스트할 수 있습니다.

이전의 발표에서 다음과 같은 내용이 설명된 바 있습니다.

가장 간단한 방식으로, 원격 개발은 SSH를 통해 기존 서버에 연결됩니다. IDE는 사용자 인터페이스를 표시하지 않고 프로젝트를 로드하는 백엔드 서비스로서 설치됩니다. 씬 클라이언트는 로컬에서 실행되고 이 IDE 백엔드에 연결되며 모든 처리가 원격 서버에서 수행되더라도 IDE가 로컬에서 실행되는 것처럼 온전히 작동하는 사용자 인터페이스를 제공합니다.

JetBrains

컴퓨팅 분야에서 원격 개발이 새로운 아이디어는 아니지만, 20년에 이르는 JetBrains의 지식과 최신 호스팅 기술이 총망라되어 업계에 전례 없는 경험을 제공합니다. JetBrains Rider를 구독 중이고 SSH를 지원하는 원격 서버 인스턴스가 있으면 원격 개발을 이용할 수 있습니다. 

하지만 무엇보다 왜 원격으로 개발해야 할까요?

원격 개발의 이점

원격 개발에 관한 기술적인 부분을 일부 설명드렸습니다만 여전히 대부분의 개발자들에게는 원격 개발이 급진적인 변화로 보일 수 있습니다. 그렇다면 원격 개발을 고려해야 하는 이유는 무엇일까요? 

그 이유는 원격 개발의 혜택을 보게 될 사용자의 관점에 따라 달라집니다. 먼저 조직 내의 이해 당사자를 살펴보고 원격 개발 팀이 어떤 도움을 줄 수 있는지 알아보도록 하겠습니다.

개발자들은 몇 시간에 걸쳐 스크립트를 설치하고, 환경 설정을 구성하고, 종속성을 다운로드하는 대신 수 분 내로 어떤 개발 환경이든 빠르게 구성할 수 있습니다. 개발자의 컴퓨터는 이미지에 기반하며 팀 전반에 걸쳐 친숙한 개발 환경을 제공하도록 스크립트화되어 모두가 싫어하지만, 팀 내에서 흔히 보이는 “내 컴퓨터에서는 작동하는” 문제를 피할 수 있습니다. 팀에서 여러 프로젝트를 진행해야 하는 경우 개발자들이 최소한의 다운타임만으로도 빠르게 컨텍스트를 전환할 수 있다는 장점도 있습니다.

추가적으로 개발자들이 현재 하드웨어와 관계없이, 리소스 제한도 없이 액세스할 수 있습니다. 원격 개발에는 가벼운 클라이언트가 활용되며 원격 서버가 고비용 작업을 처리한다는 점에 유의하세요. CPU, 메모리, 혹은 GPU 액세스가 더 필요하신가요? 수 분 내로 원격 시스템을 확장하고 작업을 이어가세요. 값비싼 노트북이 배송될 때까지 기다릴 필요가 없습니다.

주기마다 기업 하드웨어를 교체하는 것보다 원격 개발이 IT 및 하드웨어 관리자에게 장기적으로 저렴합니다. 이 글이 작성된 시점을 기준으로 JetBrains 파트너 중 하나인 GitPod는 개발자 한 명에게 시간당 $1도 들이지 않고 작업 공간을 프로피저닝할 수 있습니다. GitHub Codespaces도 무료 시간과 경쟁력 있는 가격 모델을 제공하고 있습니다. 2년 주기로 $6,000의 워크스테이션을 교체하면 업무 시간당 약 $1.50의 비용이 발생합니다(주간 40시간 근무 및 연간 48주 가정 시). 개발자 생산성, 하드웨어 도입 및 관리 비용을 측정할 때 대부분의 팀에게 원격 개발이 더 매력적입니다.

지적 재산이 항상 원격 서버에 저장되고 개발자의 머신에 저장되지 않기 때문에 원격 개발은 안심할 수 있습니다. 민감한 정보를 저장해야 할 수 있는 데이터베이스와 같은 종속성은 안전한 환경에서만 액세스 가능합니다. 원격 개발은 금융, 정부 관련 작업 및 의료과 같이 규제가 강한 업계의 기업을 보호할 수 있습니다. 하드웨어가 도난되거나 분실되는 경우 조직 전체가 위험에 처할 수 있습니다.

지금까지는 관여된 모든 사람들에게 해당하는 부수적인 혜택을 논의했습니다. 원격 개발의 가장 큰 장점은 현재 개발 프로세스가 거의 영향을 받지 않는다는 점입니다. 가벼운 기기를 어디든 가져갈 수 있고, 어디서든 네트워크에만 연결할 수 있으면 강력한 서버를 그대로 활용할 수 있습니다. 그 결과 개발자들은 .NET 솔루션을 작성하고 배포할 때 애용하는 JetBrains 도구를 계속해서 사용할 수 있습니다.

이제 JetBrains Rider의 원격 개발을 시작하는 방법을 살펴보겠습니다.

JetBrains Rider에서 원격 개발 시작하기

원격 개발 배타를 테스트해 보려면 JetBrains Rider의 최신 릴리스인 버전 2022.3 이상이 필요합니다. 동일한 기능을 제공하지만 더 가벼운 클라이언트인 JetBrains Gateway도 설치해야 합니다. JetBrains Gateway는 앞으로 원격 개발만 하고 싶은 경우 좋은 옵션입니다.

또한, SSH 서버가 운영되고 있는 원격 서버도 필요합니다. 2개 이상의 코어, 4GB 이상의 램과 5GB 이상의 디스크 공간이 있는 서버로 시작하는 것을 권장합니다. 그러나 권장 사항은 솔루션과 개발 워크플로에 따라 다릅니다. 현재 원격 서버는 Linux만 지원하지만, Mac 및 Windows도 빠른 시일 내에 지원할 계획입니다.

JetBrains Rider를 시작할 때 시작 화면에서 Remote Development(원격 개발) 섹션을 확인할 수 있으며 SSH 및 JetBrains Space의 두 가지 옵션이 제공됩니다. 추후 GitHub, GitPod, Google, Amazon, Linux용 Windows 하위 시스템(WSL)과 같은 파트너로부터 더 명시적인 공급자도 추가될 예정입니다. New Connection(새 연결)을 눌러 새 SSH 연결을 추가합니다.

Remote Development 베타 및 SSH, JetBrains Space, WSL 등의 옵션이 표시되는 JetBrains Rider 시작 화면

Connect to SSH(SSH에 연결) 화면에서는 기존의 연결 중에서 선택하거나 처음으로 사용자 이름, 호스트, 포트 및 로컬 개인 키를 지정하여 원격 서버에 신규 SSH 연결을 생성하고 Git과 같은 SSH 기반 서비스의 인증에 사용할 수 있습니다.

주의: localhost와 127.0.0.1은 지원되지 않으나 로컬 IP 주소를 사용하여 테스트 목적으로 로컬 가상 머신에 연결할 수 있습니다.

입력 필드가 표시된 Connect to SSH 화면.

모든 값을 올바르게 입력한 후 Check Connection and Continue(연결을 확인하고 계속)를 클릭합니다. JetBrains Rider가 비밀번호 입력을 요청하며 재시작 때까지 혹은 영구적으로 자격 증명을 저장하는 옵션이 제공됩니다.

비밀번호를 요청하는 SSH 연결 인증 대화상자

원격 서버에 인증된 후 JetBrains 백엔드와 열고자 하는 솔루션 파일을 선택할 수 있습니다. 이 화면에서 Rider를 백엔드로 설정하고 SSH 터미널을 열어 소스 관리에서 기존의 솔루션을 복제할 수 있습니다. 모든 옵션을 선택한 다음 Start IDE and Connect(IDE를 시작하고 연결)를 클릭합니다.

Rider 및 솔루션 파일 설정이 포함된 IDE 및 프로젝트 선택 대화상자.

처음으로 원격 개발을 사용하는 경우 두 개의 진행률 표시줄이 표시될 수 있습니다. 첫 번째 진행률 표시줄은 백엔드 서비스 설치율을 보여줍니다. 두 번째 진행률 표시줄은 개발용 컴퓨터에서 로컬로 실행될 JetBrains 클라이언트의 다운로드 상태입니다. 클라이언트 및 백엔드 서버는 두 환경에서 모두 지속되므로 이러한 과정은 처음 한 번만 필요합니다. 모든 과정이 완료되면 JetBrains 클라이언트가 익숙한 JetBrains Rider 화면을 보여줍니다.

원격 서버의 JetBrains Rider 백엔드에 연결된 JetBrains 클라이언트.

개발할 때 빠르고 응답성도 좋은 에디터를 활용할 수 있습니다. 이는 로컬에서 편집이 수행되면 JetBrains 클라이언트가 변경 사항을 백엔드로 동기화하기 때문에 가능합니다. 여기서 기억해두어야 할 사항은 모든 처리가 백엔드 머신에서 진행된다는 것입니다. 여기에는 솔루션 파일의 색인 생성, 디스크 액세스, 빠른 수정 제안 등 모든 것이 포함됩니다. 원하는 경우 Rider의 터미널을 열어 확인할 수 있습니다. 또한 플러그인, 테마, 키맵 및 JetBrains Marketplace의 대부분을 활용하여 JetBrains 클라이언트를 사용자 지정할 수도 있습니다.

원격 서버 내 솔루션 폴더의 내용이 표시된 터미널.

Rider 인스턴스 상단의 Backend Status Details(백엔드 상태 세부 정보) 위젯을 사용하면 주요 원격 메트릭을 확인할 수 있습니다. 이 위젯은 서버의 CPU, 메모리 및 디스크 등의 리소스 활용률을 표시합니다. 또한 노출되는 포트를 관리할 수도 있고 백엔드 서비스가 생성한 출력을 볼 수도 있습니다.

CPU 로드, 메모리 및 디스크 사용률과 같은 백엔드 지표를 표시하는 JetBrains 클라이언트 백엔드 상태 세부 정보 대화상자.

수동으로 포트를 구성할 수도 있지만 원격 개발이 필요한 모든 포트를 탐지하고 포워딩하여 매끄러운 개발 경험을 제공합니다. 예를 들어 웹 애플리케이션을 개발할 때는 ASP.NET Core로 개발하기 위해 HTTP 포트 포워딩이 필요합니다.

원격 서버로부터 포트를 로컬 환경으로 포워딩하여 ASP.NET Core 실행.

localhost:port를 사용하여 서버에서 포워딩된 포트에 모두 액세스할 수 있습니다. 실행 창의 상단에서 포워딩된 포트를 모두 볼 수 있습니다. Rider 사용자는 포트 포워딩을 통해 익숙한 도구와 환경을 동일하게 사용하여 원격으로 실행되는 프로세스를 쉽게 테스트하고 디버그할 수 있습니다.

JetBrains 클라이언트 내에서 ASP.NET Core 유닛 테스트 디버그

원격 개발에서도 디버그를 처리할 수 있습니다. 애플리케이션이나 유닛 테스트에 필요한 중단점을 추가하고 새로운 디버그 세션을 시작하세요.

이처럼 JetBrains Rider Remote Development는 쉽고 빠르게 시작할 수 있습니다.

결론

원격 개발은 개발자들과 다른 이해당사자들에게 어떤 문제든 해결할 수 있는 힘과 유연성을 제공하는 미래형 소프트웨어 개발입니다. 이 글에서 설명된 것과 같이 JetBrains Remote Development(원격 개발)는 많은 장점이 있으며 개발자들이 잘 알고 선호하는 환경을 그대로 제공합니다.

현재 버전은 아직 베타입니다. 그러므로 JetBrains Space, GitPod, Google, AWS, GitHub나 로컬 SSH 서버에서 테스트해 주시면 감사하겠습니다. 또한 문제가 있으면 제출해 주시고 아래의 댓글란에 의견이나 우려 사항을 남겨주세요.

이 글을 읽어 주신 JetBrains 고객 여러분께 항상 감사드립니다.

게시물 원문 작성자

Jessie Cho

Khalid Abuhakmeh

image description

Discover more