How-To's

Space 개발 환경 자세히 알아보기

Read this post in other languages:
English, Français, 简体中文

Space 개발 환경 자세히 알아보기

JetBrains Space에서는 개발 환경을 실행하여 원격으로 코드 작업을 수행할 수 있습니다. 강력한 전용 가상머신이 프로젝트의 소스 코드에 액세스할 수 있는 Docker 컨테이너를 실행하고 로컬 코드 에디터에 백엔드 구성 요소를 제공합니다. 로컬 시스템을 사용하는 대신 이러한 원격 시스템을 사용하여 소프트웨어를 개발할 수 있습니다.

Space 개발 환경을 이용할 때의 많은 이점 중 하나는 팀의 개발 환경을 표준화하여 모든 팀원이 로컬 시스템을 설정하는 데 시간을 허비하지 않고 거의 즉시 프로젝트 작업을 시작할 수 있다는 것입니다. 또한, 워밍업 작업을 실행하고 필요한 모든 패키지 종속 요소가 이미 다운로드되고 사전 빌드된 프로젝트 색인을 즉시 이용할 수 있는 상태로 스냅샷을 준비할 수 있습니다.

이 게시물에서는 Space 개발 환경의 이러한 사용자 지정 옵션에 대해 자세히 알아보고 팀의 요구 사항에 맞게 개발 환경을 맞춤 설정하는 방법을 알아봅니다.

개발 환경 생성

사용자 지정 옵션에 대해 알아보기 전에 Space 개발 환경으로 개발을 시작하는 방법을 간단히 요약해 보겠습니다.

Space 조직에 있는 Git 저장소에서 Open in IDE(IDE에서 열기)를 클릭하여 개발 환경을 시작할 수 있습니다. 또한 모든 병합 요청에 대해 새 개발 환경을 만들 수 있으므로, 변경 사항을 검토하고 테스트하기 위해 코드를 수동으로 복제하고 로컬 시스템에 종속 요소를 다운로드할 필요가 없습니다.

JetBrains Space에서 원격 개발 환경 만들기

팁: GitHub 또는 BitBucket에서 기존 Git 저장소를 마이그레이션 또는 미러링하고 모든 브랜치, 태그 및 커밋을 포함하여 Space에서 이를 사용할 수 있도록 설정할 수 있습니다. 이런 식으로 기존 저장소와 함께 Space 개발 환경을 이용할 수 있습니다.

프로젝트 작업에 필요한 성능에 따라 일반(4 CPU 코어, 8GB RAM), 대형(8 CPU 코어, 16GB RAM) 또는 초대형(16 CPU 코어, 32GB RAM)의 세 가지 가상 머신 인스턴스 유형 중 하나를 선택할 수 있습니다.

다음으로, JetBrains Gateway(Toolbox App을 통해 다운로드 가능)를 포함한 IntelliJ IDEA 또는 JetBrains Fleet 중에서 작업할 IDE를 선택해야 합니다. 다른 IntelliJ 기반 IDE에 대한 지원이 진행 중입니다.

또한 이 대화상자에서 원격 IDE를 시작하는 데 사용되는 워밍업 스냅샷개발 컨테이너라는 두 가지 다른 요소도 볼 수 있습니다. 위의 예시에서는 아직 워밍업 스냅샷이 없으며(잠시 후에 설명) 디폴트 Docker 이미지가 IDE가 시작될 컨테이너로 사용됩니다.

Create(생성)를 클릭하면 Space가 클라우드에서 IDE를 실행합니다. 가상머신이 설정되고 IDE 백엔드를 사용할 준비가 되면 JetBrains Gateway(또는 Fleet)가 열리고 연결됩니다.

IntelliJ IDEA(및 JetBrains Gateway)에서 개발 환경 실행

IntelliJ IDEA 백엔드가 이제 Space 클라우드에서 실행되며 씬 클라이언트인 JetBrains Gateway를 사용하여 연결됩니다.

대부분의 프로젝트에서는 이것만으로도 즉시 코딩을 시작할 수 있습니다. 그러나 이 특정 예시에서는 다음과 같은 몇 가지 사항이 누락된 것 같습니다.

  • 에디터의 경고에 표시된 대로 올바른 JDK를 다운로드해야 합니다.
  • 종속 요소를 다운로드하기 위해 여전히 mvnw compile을 실행해야 하며 IDE에서 프로젝트를 동기화해야 합니다.

일회성 개발 환경에서는 이렇게 해도 문제될 것이 없겠지만 전체 팀이 이 저장소에서 작업할 예정이라면 개발 환경을 사용자 지정하고 처음부터 모든 종속 요소를 준비하는 것이 더 나을 것입니다. 그러면 어떻게 하는지 알아봅시다!

개발 환경 Dockerfile 사용자 지정

기본적으로 Space는 Ubuntu OS 기반의 디폴트 컨테이너 이미지를 사용하여 개발 환경을 실행하며 Git, cURL, Docker, Docker Compose 및 OpenJDK를 포함합니다.

프로젝트에 사용자 지정 Dockerfile을 추가하여 필요한 도구와 라이브러리를 설치할 수 있습니다. 사용할 IDE에 따라 ./.jb-gateway/Dockerfile(JetBrains Gateway를 포함한 IntelliJ IDEA) 또는 ./.fleet/Dockerfile(Fleet)을 생성해야 합니다.

이 특정 프로젝트에서는 Ubuntu 20.04에 기반을 두도록 환경을 사용자 지정하고 Git, curl, Docker 등을 포함한 많은 명령줄 도구도 설치할 것입니다. 또한 여러 버전의 OpenJDK를 추가하고 개발자 환경에서 선택할 수 있도록 디폴트 값을 버전 16으로 설정하겠습니다.

FROM ubuntu:20.04

ENV DEBIAN_FRONTEND=noninteractive
ENV LC_ALL=C.UTF-8

RUN apt-get update && apt-get install -y apt-utils apt-transport-https

RUN apt-get install -y \
  # Utilities \
  curl unzip wget software-properties-common socat man-db gnupg2 pass lsof \
  # VCS \
  git \
  # JVM \
  openjdk-8-jre-headless openjdk-11-jdk-headless openjdk-16-jdk-headless openjdk-17-jdk-headless maven \
  # Docker
  docker docker-compose \
  && rm -rf /var/lib/apt/lists/*


ENV JAVA_HOME=/usr/lib/jvm/java-16-openjdk-amd64

사용자 지정 Dockerfile에는 몇 가지 요구 사항이 있습니다.

  • OS는 glibc 기반 Linux 배포판(예: CentOS 7+, Debian 9+ 또는 Ubuntu 20.04+)이어야 합니다.
  • Git, OpenSSH(원격 Git 저장소를 사용하려는 경우) 및 lsof(IDE에서 포트 포워딩이 필요한 경우)를 설치해야 합니다.
  • 컨테이너는 루트로 실행되어야 합니다(Dockerfile에 루트가 아닌 사용자가 없어야 함).

Dockerfile은 브랜치별로 다릅니다. 이에 따라 팀의 다른 개발자에게 영향을 주지 않고 별도의 브랜치에서 사용자 지정을 테스트하고 기능 브랜치의 최신 도구 버전으로 업데이트하는 등의 작업을 쉽게 수행할 수 있습니다.

이 사용자 지정 Dockerfile을 커밋하고 프로젝트의 저장소에 푸시하면 Space는 이 브랜치에서 새 개발 환경을 생성할 때 이를 기본 이미지로 사용합니다.

Space 원격 개발 환경을 위한 사용자 지정 Dockerfile/Docker 컨테이너

이 사용자 지정 개발 환경을 시작하면 IDE에서 올바른 JDK 버전을 사용할 수 있음을 알 수 있습니다. 단, IntelliJ IDEA 및 Maven 프로젝트를 여전히 동기화해야 합니다. 이는 워밍업 스크립트를 위한 완벽한 작업입니다!

개발 환경 워밍업

워밍업 스냅샷을 빌드하면 IDE가 프로젝트 종속 요소를 확인하고, 색인을 빌드하고, 기타 백그라운드 활동을 수행하는 데 걸리는 시간을 단축할 수 있습니다. 이 예시에서 mvnw compile을 실행하고 프로젝트의 색인을 생성하면 개발 환경을 준비하는 데 도움이 됩니다.

워밍업 스냅샷은 Space Automation으로 생성됩니다. .space.kts 파일을 추가하면 프로젝트에 대한 지속적 통합(CI) 구성을 시작할 수 있을 뿐만 아니라 개발 환경을 워밍업하는 방식도 구성할 수 있습니다.

다음은 매일 밤 실행되는 하나의 작업을 정의하고 모든 Git 브랜치를 다운로드한 다음 IntelliJ IDEA로 워밍업 스냅샷을 준비하는 단계를 실행하는 .space.kts 파일의 예입니다.

job("Dev Environment Warmup - Gateway") {
    startOn {
        schedule { cron("0 5 * * *") }
    }

    git {
        depth = UNLIMITED_DEPTH
        refSpec = "refs/*:refs/*"
    }

    warmup(ide = Ide.IJGateway) {
        scriptLocation = "warmup.sh"
    }
}

scriptLocation은 선택 사항입니다. 이 옵션을 생략하면 Space Automation이 프로젝트의 Git 저장소를 복제하고 IDE에서 프로젝트 색인 생성을 처리합니다. 이 옵션을 추가하면 warmup.sh와 같은 워밍업 스크립트의 이름을 지정할 수 있으며 해당 스크립트에서 mvnw compile 실행과 같은 작업을 수행하여 모든 Maven 종속 요소를 워밍업 스냅샷으로 다운로드하거나 npm install을 실행할 수도 있습니다. 다음은 warmup.sh 스크립트의 예입니다.

#!/bin/bash
./mvnw compile

warmup.sh는 실행 권한이 있는 저장소에 커밋되어야 합니다. 이렇게 하려면 git update-index --chmod=+x warmup.sh를 실행하면 됩니다.

Space Automation이 워밍업 작업 실행을 완료하면 새로 생성된 개발 환경은 이전에 생성한 사용자 지정 Dockerfile을 사용하고 프로젝트 색인 및 종속 요소를 사용할 준비가 된 상태로 방금 생성한 워밍업 스냅샷을 마운트합니다.

워밍업 스냅샷을 포함한 개발 환경
워밍업 작업의 문제를 해결해야 하는 경우 Space Automation을 사용하여 콘솔 출력과 함께 실행된 모든 단계의 로그를 찾을 수 있습니다. 
Space의 개발 환경 로그

또한 프로젝트의 Dev Environments(개발 환경) 메뉴에서 더 이상 필요하지 않은 스냅샷을 관리하고 제거할 수 있습니다.

컨테이너 이미지, 워밍업 스냅샷, 아니면 둘 다 실행해야 할까요?

지금까지 개발 환경의 컨테이너 이미지를 사용자 지정하는 방법과 워밍업 스냅샷을 빌드하는 방법을 살펴보았습니다. 그렇다면 어떤 유형의 작업을 어디에서 실행해야 할까요?

경험으로 볼 때 사용자 지정 컨테이너 이미지는 환경 및 운영 체제를 구성하는 데 사용해야 하고, 워밍업 작업은 바이너리 종속 요소 다운로드 및 프로젝트에 맞는 IDE 준비와 같은 프로젝트별 작업에 사용해야 합니다.

결론

이 게시물에서는 JetBrains Space에서 개발 환경을 시작하고 사용자 지정하는 방법을 살펴보았습니다. 사용자 지정 컨테이너 이미지를 사용하면 팀의 개발 환경을 표준화할 수 있습니다. 워밍업 작업을 통해 다운로드한 패키지 종속 요소와 사전 빌드된 프로젝트 색인이 포함된 스냅샷을 준비할 수 있으며, 그러면 개발 환경에서 더 빠르게 개발을 시작할 수 있습니다.

JetBrains Space 및 개발 환경을 사용해 보세요! 여러분의 생각을 듣고 싶습니다!

게시물 원문 작성자

Jessie Cho

Maarten Balliauw