Overview

불현듯 IntelliJ IDE 를 실행할 때, Remote Development 라는 메뉴가 보이기 시작했습니다.
Run the IDE Remotely? SSH Connection? Docker Dev Containers?
왠지 SSH 연결을 통해 원격 개발을 할 수 있을 것 같습니다.
JetBrains blog 를 확인해보니 2021.3 버전부터 IntelliJ IDEA에 해당 기능이 릴리즈 되었다고 합니다.

요약하면, 실제 소스 코드는 원격 서버에 존재하지만, 로컬에 설치된 IDE로 작업하는 것과 같은 경험을 할 수 있다고 합니다.
아키텍처를 살펴보면, JetBrains Client 와 JetBrains Gateway 를 Public internet 으로부터 다운로드 받아야 하며,
원격 개발 환경이 될 Server 에도 IDE Backend 가 설치되어야하며, 로컬(Client) 과 원격(Server) 개발 환경 간에는 TCP socket 통신으로 원격 개발을 지원할 것 같습니다.

점점 복잡해지니 일단 원격 서버로 사용할 Linux 서버를 준비해서 로컬 MacBook 에서 IntelliJ의 Remote Development 기능을 시도해보았습니다.
Hands-On
원격 개발 서버 준비
일단, 당장 리눅스 서버가 없어서 AWS EC2 인스턴스를 생성하였습니다.
JetBrains 에서 안내하는 원격 개발 서버의 최소 요구사항을 살펴보니, 4 vCPUs, x86_64 or arm64 아키텍처, 8GB RAM, 500MB disk 여유 공간, Ubuntu 18.04 LTS, 20.04 LTS, 22.04 LTS, 22.10 LTS, CentOs, Debian, RHEL 이므로 적당한 스펙의 EC2 인스턴스를 선택하였습니다.
적당한 프로젝트 준비
원격 개발 서버에 소스 코드가 존재해야하기 때문에, 적당한 오픈소스 프로젝트를 받았습니다.
의존 라이브러리까지 포함해서 4GB로 큰 프로젝트입니다.
원격 개발 환경에서 코드를 작성할 때, 버벅이지 않고, 매끄럽게 진행되는지 테스트 해보기에 좋은 규모인 것 같습니다.
git clone https://github.com/spring-projects/spring-boot.git
GitHub - spring-projects/spring-boot: Spring Boot
Spring Boot. Contribute to spring-projects/spring-boot development by creating an account on GitHub.
github.com

준비한 Ubuntu 에 아래와 같이 spring-boot 프로젝트를 받아두었습니다.

로컬 맥북에서 IntelliJ IDEA 의 Remote Development 로 원격 서버 접속
로컬 맥북의 IntelliJ IDEA 를 실행하여 Remote Development > SSH Connection > New Connection 선택합니다.
참고로, IntelliJ IDEA 2024.2.3 version 에서 실험하였습니다.

앞서 준비해둔 Linux 원격 서버의 접속 정보를 입력합니다.
- Username, Host IP, Port : 22, SSH key pair private key

원격 서버인 Linux에 설치할 IntelliJ IDEA version 과, 원격 개발 대상인 프로젝트의 directory path 를 입력합니다.
- Project directory : /home/ubuntu/spring-boot
참고로, 원격 서버의 IntelliJ IDEA는 선택한 버전으로 최초 접속 시에만 인터넷망을 통해 자동으로 설치되었습니다.

Start IDE and Connect 선택하면 원격 서버인 Linux 서버에 연결됩니다.
좌측 상단에 원격 서버의 IP 정보가 나타나며, 클릭하면 원격 서버의 CPU, Memory, Disk 사용량을 실시간으로 모니터링 할 수 있었습니다.

코드 작성도 해보고 코드 내비게이션 기능과 디버깅 기능도 테스트 해보았는데, 로컬 IntelliJ IDEA 를 사용하는 것과 동일한 사용자 경험을 받았고, 버벅이거나 멈춤 현상도 느끼지 못했습니다.
정상 동작하는 것까지는 확인하였고, 원격 개발 시 빌드 속도도 궁금해서 아래와 같이 테스트를 해보았습니다.
빌드 속도 측정
실험은 로컬 개발 환경인 MacBook Air 와 원격 개발 환경인 Ubuntu 22.04 에서 진행하였습니다.
Ubuntu 22.04 는 2개의 spec 에 대해 테스트 진행하여 총 3개의 비교군을 설정하였습니다.
테스트 시나리오는 아래와 같습니다.
1. spring-boot 프로젝트 내려 받기 : git clone https://github.com/spring-projects/spring-boot.git
2. IntelliJ IDEA 에서 프로젝트 오픈하여 기본적인 gradle import 및 소스 코드 인덱싱 진행
3. 클린 빌드 : ./gradlew clean build
4. 클린 빌드 시간 측정
5. 테스트 코드 일부 수정 후 테스트 실행
6. 리빌드 시간 포함한 테스트 수행 시간 측정
빌드 속도 측정 결과 요약
| 구분 | MacBook Air | Ubuntu 22.04 t2.xlarge | Ubuntu 22.04 t2.2xlarge |
| CPU 아키텍처 | ARM (Apple M2) | x86_64 | x86_64 |
| CPU 코어 | 8코어 | 4코어 | 8코어 |
| 메모리 | 8GB | 16GB | 32GB |
| 스토리지 | 500GB | 30GB | 30GB |
| 클린 빌드 시간 | 4m 13s | 5m 16s | 3m 20s |
| 리빌드 시간 | 19s | 21s | 18s |
클린 빌드 시 원격 개발 서버의 리소스 사용량 모니터링을 해보니, 메모리와 스토리지는 여유가 있었으나 CPU 부하가 100%에 근접하였습니다.
8코어, 8GB인 MacBook Air 보다 4코어 16GB인 Ubuntu 에서의 빌드 속도가 느린것으로 보아 빌드 속도에 CPU 코어수가 중요한 것 같습니다.
종합적으로 판단했을 때, CPU 8코어 이상, 메모리 32GB 이상인 Linux 서버라면 행복한 개발을 할 수 있을 것 같습니다.
빌드 속도 측정 결과 상세
1. MacBook Air 빌드 (Local)
클린 빌드 : 4m 13s

SpringBootConfigurationTests.java 의 코드 일부 수정 후 테스트 코드 실행 : 19s

2. Ubuntu 22.04 t2.xlarge 빌드 (Remote Server)
클린 빌드 : 5m 16s

SpringBootConfigurationTests.java 의 코드 일부 수정 후 테스트 코드 실행 : 21s

3. Ubuntu 22.04 t2.2xlarge 빌드 (Remote Server)
클린 빌드 : 3m 20s

SpringBootConfigurationTests.java 의 코드 일부 수정 후 테스트 코드 실행 : 18s

쿠키

'Back-end' 카테고리의 다른 글
| Oracle DB와 MySQL DB 비교 (CAP 이론 관점) (0) | 2025.01.06 |
|---|---|
| ProxySQL 테스트 (0) | 2024.12.15 |
| Oracle SQL을 MySQL로 전환하기 (0) | 2024.05.21 |
| Snowflake ID Generator (0) | 2023.04.16 |
| Javascript 에서 9천조 이상의 숫자를 다룰때 고민할 부분 (0) | 2023.04.13 |
댓글