Show HN: Recode – 무료, 오픈 소스, 커뮤니티 기반 Codespaces 대안
요약
Recode는 코드(code)로 정의되는 원격 개발 환경을 제공하며, AWS와 Visual Studio Code에서 사용할 수 있습니다. Gitpod이나 GitHub Codespaces의 대안으로 소개되며, 100% 무료, 오픈 소스, 커뮤니티 기반이라는 장점을 강조합니다. 사용자는 CLI 명령어를 통해 쉽게 워크스페이스를 시작하고 관리할 수 있습니다.
핵심 포인트
- Codespaces/Gitpod의 무료/오픈소스 대안입니다.
- 코드 정의 방식으로 원격 개발 환경을 구축합니다.
- AWS와 VS Code에서 이용 가능하며, 커뮤니티 기반으로 운영됩니다.
recode aws start recode-sh/workspace --instance-type t2.medium
목차
요구 사항
Recode 바이너리는 Linux와 Mac에서 테스트되었습니다. Windows 지원은 이론적입니다(테스터 필요 💙).
Recode를 사용하기 전에 다음 종속성(dependencies)을 설치해야 합니다:
-
Visual Studio Code (현재 지원되는 유일한 에디터입니다).
-
OpenSSH Client (개발 환경에 접속하는 데 사용됩니다).
설치(Installation)
Recode를 설치하는 가장 쉬운 방법은 터미널에서 다음 명령어를 실행하는 것입니다:
curl -sf https://raw.githubusercontent.com/recode-sh/cli/main/install.sh | sh -s -- -b /usr/local/bin latest
이 명령어는 그대로 실행하거나 다음을 변경하여 실행할 수 있습니다:
/usr/local/bin을 **선호하는 경로(preferred path)**로 대체하여 설치 디렉터리를 지정합니다.latest를 **특정 버전(specific version)**으로 대체하여 설치할 버전을 지정합니다.
설치가 완료되면, recode 명령어를 실행하여 Recode가 제대로 설치되었는지 확인할 수 있습니다:
recode --help
사용법(Usage)
시작하려면 "recode login" 명령을 실행하여 GitHub 계정을 연결해야 합니다.
그 후 가장 일반적인 워크플로우는 다음과 같습니다:
...
로그인(Login)
recode login
시작하려면 login 명령어를 실행하여 GitHub 계정을 연결해야 합니다.
Recode를 사용하려면 다음 권한이 필요합니다:
- 개발 환경에서 리포지토리에 접근할 수 있도록 "Public SSH keys"와 "Repositories"가 필요합니다.
- Git을 설정하고 커밋에 서명(verified badge)하기 위해 "GPG Keys"와 "Personal user data"가 필요합니다.
사용자의 모든 데이터(OAuth 액세스 토큰 포함)는 오직 ~/.config/recode/recode.yml (또는 설정된 경우 XDG_CONFIG_HOME)에 로컬로만 저장됩니다.
GitHub OAuth 플로우를 구현하는 소스 코드는 recode-sh/api 리포지토리에 있습니다.
시작(Start)
recode <cloud_provider> start <repository>
start 명령어는 특정 GitHub 리포지토리를 위한 개발 환경을 생성하고 시작합니다.
개발 환경이 중지된 경우, 다시 시작만 합니다. 이미 개발 환경이 실행 중인 경우에는 코드 에디터만 열립니다.
개발 환경에 사용할 인스턴스 유형을 지정하려면 --instance-type 플래그를 전달할 수 있습니다. (기본값/유효 값은 해당 클라우드 제공업체 리포지토리를 참조하십시오).
예시
recode aws start recode-sh/workspace
recode aws start recode-sh/workspace --instance-type t2.medium
중지 (Stop)
recode <클라우드 제공업체> stop <리포지토리>
stop 명령어는 시작된 개발 환경을 중지합니다.
중지한다는 것은 기본 인스턴스는 멈추지만 **<ins>사용자의 데이터는 보존된다</ins>**는 의미입니다. 개발 환경을 사용하지 않을 때 비용 절감을 위해 이 명령어를 사용할 수 있습니다.
예시
recode aws stop recode-sh/workspace
제거 (Remove)
recode <클라우드 제공업체> remove <리포지토리>
remove 명령어는 기존 개발 환경을 제거합니다.
제거한다는 것은 기본 인스턴스와 **<ins>모든 사용자 데이터</ins>**가 **<ins>영구적으로 삭제된다</ins>**는 의미입니다.
예시
recode aws remove recode-sh/workspace
제거 프로그램 설치 (Uninstall)
recode <클라우드 제공업체> uninstall
uninstall 명령어는 Recode가 클라우드 제공업체 계정에서 사용한 모든 인프라 구성 요소를 제거합니다. (자세한 내용은 해당 클라우드 제공업체 리포지토리를 참조하십시오).
이 명령을 실행하기 전에 모든 개발 환경은 제거되어야 합니다.
예시
recode aws uninstall
개발 환경 구성 (Development environments configuration)
지금까지 작업했던 모든 프로젝트를 생각해 보면, 다음과 같은 점을 발견할 수 있습니다:
- 모든 프로젝트에 사용되는 설정/도구 세트(예: 선호하는 시간대/지역 설정, 특정 셸 등);
- 각 프로젝트별로 특화된 설정/도구 세트(예: docker compose, go >= 1.18 또는 node.js >= 14).
Recode는 사용자 및 프로젝트 구성을 통해 이를 구현하려고 노력했습니다.
💡 팁: --rebuild 플래그
recode aws start recode-sh/workspace --rebuild
기존 개발 환경의 구성을 업데이트할 경우, start 명령어의 --rebuild 플래그를 사용하여 삭제하지 않고도 재구축할 수 있습니다.
💡 팁: Docker 및 Docker compose
Docker와 Docker compose는 모든 개발 환경에 이미 사전 설치되어 있으므로 별도로 설치할 필요가 없습니다.
사용자 구성 (User configuration)
사용자 구성은 모든 프로젝트에서 사용되는 설정/도구 세트를 의미합니다. 사용자 구성을 생성하려면 다음만 수행하면 됩니다:
- 개인 GitHub 계정에
.recode라는 이름의 <ins>저장소(repository)</ins>를 만듭니다. - 여기에
dev_env.Dockerfile이라는 파일을 추가합니다.
파일 dev_env.Dockerfile은 일반적인 Dockerfile과 같지만 다음 두 가지가 다릅니다:
- 반드시
recode-sh/base-dev-env에서 파생되어야 합니다 (자세한 내용은 아래 참조); - 사용자 구성이
recode사용자에 적용되어야 합니다.
그 외에는 이 파일과 저장소를 원하는 대로 사용할 수 있습니다. dotfiles를 사용한 예시는 recode-sh/.recode에서 확인할 수 있으며, 이를 GitHub 저장소 템플릿으로 활용할 수 있습니다:
# 사용자 dev env 이미지는 recodesh/base-dev-env에서 파생되어야 합니다.
# 소스 코드는 https://github.com/recode-sh/base-dev-env/blob/main/Dockerfile를 참조하세요.
FROM recodesh/base-dev-env:latest
...
프로젝트 구성 (Project configuration)
프로젝트 구성은 각 프로젝트에 특화된 설정/도구 세트를 의미합니다. 짐작하셨겠지만, 프로젝트 구성을 생성하려면 다음만 수행하면 됩니다:
- 프로젝트 저장소 내에
.recode라는 이름의 <ins>디렉터리(directory)</ins>를 만듭니다. - 여기에
dev_env.Dockerfile이라는 파일을 추가합니다.
파일 dev_env.Dockerfile은 일반적인 Dockerfile과 같지만 다음 두 가지가 다릅니다:
- 반드시
user_dev_env(사용자 구성)에서 파생되어야 합니다; - 사용자 구성이
recode사용자에 적용되어야 합니다.
그렇지 않다면, 이 파일과 디렉터리를 원하는 대로 사용할 수 있습니다. recode-sh/workspace에서 예시를 확인할 수 있습니다:
# 프로젝트의 개발 환경 이미지는 "user_dev_env"에서 파생되어야 합니다.
# (즉: github_user_name/.recode/dev_env.Dockerfile)
FROM user_dev_env
...
💡 사용자 설정이 없는 경우
사용자 설정(user configuration)이 없다면, recode-sh/.recode 리포지토리가 기본값으로 사용됩니다.
따라서 프로젝트에서 zsh가 기본 셸로 구성되어 있을 것입니다.
Recode 설정
이전 섹션에서 알 수 있듯이, dev_env.Dockerfile 파일의 일부 명령어(예: LABEL 명령어)는 Recode에 특화되어 있습니다. 이 섹션에서는 그 명령어들을 설명하겠습니다.
기본 이미지 (recode-sh/base-dev-env)
알고 계시겠지만, 모든 개발 환경은 recode-sh/base-dev-env에서 직접 또는 간접적으로 파생됩니다. 이 Docker 이미지의 소스는 recode-sh/base-dev-env 리포지토리에서 확인할 수 있습니다:
# 모든 개발 환경은 Ubuntu 기반입니다.
FROM ubuntu:22.04
...
보시다시피, 특별한 것은 없습니다.
Recode는 docker와 docker compose가 미리 설치된 ubuntu를 기반으로 구축되었습니다. 사용자 recode가 생성되어 기본 사용자로 사용되도록 구성됩니다. 루트 권한은 sudo를 통해 관리됩니다.
사용자 리포지토리는 /home/recode/workspace에 클론됩니다. 기본 시간대와 로케일이 설정됩니다.
(더 자세히 알아보려면 recode-sh/base-dev-env 리포지토리를 참조하세요).
Visual Studio Code 확장 프로그램
개발 환경에 Visual Studio Code 확장을 설치하도록 요구하려면, 사용자 또는 프로젝트의 dev_env.Dockerfile에 sh.recode.vscode.extensions라는 이름의 LABEL을 추가해야 합니다.
(아마도 짐작하셨겠지만, 이 레이블을 사용자 설정에 추가하면 모든 프로젝트에 나열된 확장 프로그램이 설치됩니다).
확장 프로그램은 퍼블리셔 이름과 확장 프로그램 식별자(publisher.extension)를 사용하여 식별됩니다. 이름은 확장 프로그램의 상세 페이지에서 확인할 수 있습니다.
예시
LABEL sh.recode.vscode.extensions="golang.go, zxh404.vscode-proto3, ms-azuretools.vscode-docker"
여러 리포지토리
개발 환경에서 여러 리포지토리를 사용하려면 프로젝트의 dev_env.Dockerfile에 sh.recode.repositories라는 이름의 LABEL을 추가해야 합니다.
이 경우, .recode 디렉터리만 포함하는 빈 리포지토리(예시로 recode-sh/workspace 리포지토리를 참조하세요)를 생성할 것을 권장합니다.
(아마도 짐작하셨겠지만, 이 레이블을 사용자 설정에 추가하면 무시됩니다).
리포지토리는 현재 리포지토리에 상대적일 수도 있고(예: cli), 완전히 한정된 이름으로 지정될 수도 있습니다(예: recode-sh/cli).
예시
LABEL sh.recode.repositories="cli, agent, recode, aws-cloud-provider, base-dev-env, api, .recode, workspace"
빌드 인수 (RECODE_INSTANCE_OS 및 RECODE_INSTANCE_ARCH)
이 프로젝트의 특성상, 개발 환경을 실행하는 데 사용되는 인스턴스의 특성이 최종 사용자별로 달라질 수 있다는 점을 고려해야 합니다.
예를 들어, 사용자가 프로젝트를 실행하기 위해 AWS graviton 기반 인스턴스를 사용하고 싶어 할 수 있으며, 그 결과 프로젝트의 dev_env.Dockerfile은 ARM용으로 빌드될 준비가 되어 있어야 합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 HN OpenAI Codex의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기