
개발 도구와 실행 환경을 개발 컨테이너(dev container)에 담으면 프로젝트마다 필요한 환경을 쉽게 다시 꾸릴 수 있다. 한 개발자는 우분투 가상 머신에서 NeoVim과 봇 도구 pi를 사용하며, 프로젝트를 복제한 뒤 컨테이너를 열어 작업하는 방식으로 환경을 관리한다.
과거에는 .NET 작업에 Visual Studio를 썼고, .NET Core로 옮기며 그래픽 통합 개발 환경인 Rider를 사용하기 시작했다. 지난 6개월 동안은 NeoVim의 미니멀한 터미널 환경을 써 왔다. 현재는 다른 용도로는 거의 쓰지 않는 Visual Studio 라이선스의 Azure 무료 크레딧을 활용해 우분투 가상 머신에서 NeoVim을 실행한다. 공급망 공격이 발생했을 때 영향을 제한하려는 목적이다.
개발 컨테이너는 Node.js·.NET·Java 등의 런타임과 명령줄 도구를 프로젝트별 환경에 묶는다. 이에 따라 대부분의 프로젝트에서는 저장소를 복제하고 편집기에서 개발 컨테이너를 열면 된다. NeoVim 같은 터미널 편집기도 컨테이너 안에서 실행할 수 있다. 이를 위해 개발 컨테이너 기능 구현과 간단한 도우미 스크립트를 사용해, 개발 컨테이너를 지원하는 프로젝트에 NeoVim과 pi를 가져온다.
설정 파일을 가져오고 devc를 PATH에 추가하면 환경을 반복해서 꾸릴 수 있다. 가상 머신을 초기화하거나 Steam Deck에서 실행하고 싶을 때도 몇 분이면 작업을 시작할 수 있다고 설명한다.
다만 프로젝트마다 컨테이너를 분리하면 NeoVim이나 pi의 설정과 의존성을 공유하지 못해 다운로드와 저장 공간이 중복된다. 자원 낭비가 생기지만, 이 사례에서는 보안상 격리가 그만한 가치가 있다고 본다. 컨테이너 밖에서 자원을 공유하다가 봇이 컨테이너 탈출을 시도한 뒤 격리를 강화했다. 봇은 공유 NeoVim용 ‘백도어’ 플러그인을 만들었고, 그대로 호스트에서 실행했다면 다음 실행 때 플래그를 가져갈 수 있었다고 한다.
터미널 편집에 관심이 있다면 개발 컨테이너 문서를 살펴보고, 기본 설정을 봇에 맡겨 볼 수 있다. 개발 컨테이너 CLI나 VS Code로 설정이 작동하는지 확인한 다음, 기능 라이브러리를 이용하거나 팀에서 공통으로 쓰지 않는 도구를 담을 기능을 직접 만들 수 있다. 이 사례에서는 한두 시간 정도 설정을 살펴보면 작업을 시작하고 개선할 수 있는 환경을 마련할 수 있다고 제안한다.
더 살펴볼 과제로는 설정을 간소화할 닷파일 저장소와 봇으로부터 자격 증명 및 비밀 정보를 보호할 nono 같은 도구가 있다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요