1. IT NEWS

[가상화ㆍ컨테이너 / 개발자] "일관된 개발 환경 구축과 간소화" 데브 컨테이너의 활용과 장점

Dorothy. 2024. 8. 27. 17:28

 

Simon Bisson | InfoWorld1일 전
 
컨테이너는 현대 애플리케이션 플랫폼의 핵심 구성요소로, 애플리케이션 간의 격리를 제공하는 동시에 유저랜드를 이동 가능한 런타임 환경으로 바꿔준다. 컨테이너는 리소스를 관리하고 애플리케이션과 서비스를 확장 및 축소하면서 코드에 필요한 모든 종속 항목을 패키징하고 실행하기 위한 공간을 제공한다.
 
깃허브의 코드스페이스와 같은 툴을 제외하면 그동안 컨테이너를 개발 툴로 사용하는 데는 거의 관심이 없었다. 컨테이너가 코드를 빌드하고 테스트하는 데 필요한 모든 서비스와 함께 전체 개발 환경을 패키징하는 이상적인 방법이라는 점을 감안하면 납득하기 어려운 일이다. 코드스페이스의 컨테이너를 관리하는 데 사용되는 툴은 누구에게나 제공되므로 온프레미스와 퍼블릭 클라우드를 불문하고 자체 환경 내에 자기만의 데브 컨테이너를 구축하고 관리할 수 있다는 면에서 유용하다.
 
ⓒ Getty Images Bank 

개발 환경을 컨테이너로 공유

데브 컨테이너의 기반 개념은 단순하다. 애플리케이션 개발을 지원하는 데 필요한 모든 서비스를 하나의 도커 컨테이너에 패키징하는 것이다. 그런 다음 가상머신에서 실행하고 원격 개발 및 디버깅 툴을 사용해 코드를 관리할 수 있다. 컨테이너는 프로젝트에 필요한 런타임 및 라이브러리뿐만 아니라 데이터베이스부터 모의 API 엔드포인트에 이르기까지 모든 것을 호스팅할 수 있다. 컨테이너 격리는 다른 애플리케이션과의 간섭 위험을 줄여준다.
 
데브 컨테이너를 사용하면 개발자가 자신의 시스템을 구성하는 데 시간을 소비할 필요가 없다. 프로젝트 데브 컨테이너를 다운로드해서 마운트하고 바로 코딩을 시작하면 된다. 많은 시간을 절약할 수 있으며 리드 개발자 및 설계자는 프로젝트에 참여하는 모든 사람들이 같은 기반 위에서 시작하도록 보장할 수 있다. 문제가 발생하면 현재 환경을 버리고 새 데브 컨테이너를 다운로드해서 깃 리포지토리를 클론한 다음 멈췄던 부분부터 이어서 하면 된다.
 
데브 컨테이너는 마이크로소프트 전반에서 점차 사용이 확대되고 있다. 애저 SQL 팀은 최근 데브 컨테이너의 일부로 즉시 사용 가능한 사전 정의, 사전 구성된 템플릿 모음을 발표했다. 이러한 템플릿은 즉시 실행할 수 있는 데이터베이스를 갖추고 일반적인 개발 툴을 지원한다. 컨테이너에 데이터를 포함하는 것은 일반적으로는 좋지 않은 관행이지만 이 경우 무상태(stateless) 사용자 공간 런타임이 아니라 개발 환경으로 사용 중이다.
 
애플리케이션 개발에 윈도우를 사용한다면 데브 컨테이너는 무료 비주얼 스튜디오 코드 프로그래머 편집기와 내장된 리눅스용 윈도우 하위 시스템(WSL) 가상머신을 활용하므로 무료로 데브 컨테이너를 구축하고 실행할 수 있다.
 

데브 컨테이너 구축

데브 컨테이너 사양은 마이크로소프트가 후원하는 오픈소스 프로젝트로, 설명부터 실행 중인 컨테이너에 이르기까지 다양한 용도의 툴을 포함한 여러 깃허브 리포지토리가 있다. 목적은 컨테이너에 넣을 애플리케이션뿐만 아니라 필요한 모든 설정과 구성을 정의하기 위한 모든 것을 제공하는 것이다. 이렇게 데브 컨테이너를 사용해서 코딩 표준과 함께 가이드라인과 가드레일을 모두 제공할 수 있다.
 
시작은 설명이다. 첫 사양은 데브 컨테이너의 기본 구성이 저장된 구조적 JSON 형식인 devcontainer.json을 설명한다. 그 외의 부가적인 정보는 이미지 레이블과 데브 컨테이너 피처(Dev Container Features)라는 특정 스크립트에 저장된다. 결과적으로 애플리케이션 개발 수명 주기 대부분을 지원하는 모든 툴을 설명해서 코드를 CI/CD 환경까지 가져갈 수 있다.
 
데브 컨테이너 설정은 설명을 사용해 컨테이너를 구축할 때마다 동일한 결과를 얻을 수 있도록 반복 가능해야 한다. 컨테이너에 코드를 빌드하는 누구나 같은 브랜치를 테스트할 때 동일한 출력을 얻을 수 있으므로 병합과 풀 요청이 간소화된다.
 
컨테이너 정의를 처음부터 새로 구축하는 것도 가능하지만 비주얼 스튜디오 코드 데브 컨테이너 확장(원격 개발 확장 팩에 포함됨)을 사용해서 컨테이너를 구축하고 관리하는 편이 더 쉽다. 여기서 더 쉽게 하려면 마이크로소프트 데브 컨테이너 리포지토리에 있는 기존 개발 환경 이미지부터 시작해 맞춤 설정을 추가하면 된다.
 
비주얼 스튜디오 코드 확장을 추가할 수 있으므로 파이썬 애플리케이션에 여러가지 VS 코드 파이썬 확장을 포함할 수 있다. 그 외에 포트 포워딩을 통해 호스트 PC에서 애플리케이션 출력을 테스트하고 엣지(Edge)의 F12 개발자 툴과 같은 디버깅 툴을 사용하는 옵션도 있다.
 
데브 컨테이너 피처는 사전 정의된 애플리케이션과 툴을 컨테이너에 추가하는 편리한 방법이다. 재사용 가능한 이러한 코드 조각을 기존 데브 컨테이너 정의에 추가해서 코드에 설명된 툴을 컨테이너에 추가할 수 있다. 이는 devcontainer-feature.json 정의와 설치 스크립트 및 필요한 파일이 포함된 폴더로 배포된다.
 

데브 컨테이너 사용하기

표준 툴체인의 일부로 데브 컨테이너를 사용하게 되면 컨테이너 정의에 신속하게 추가할 수 있는 기능 라이브러리를 만들 수 있다. 기성 컨테이너를 맞춤 설정하거나, 특정 스택용으로 정의된 표준 기본 컨테이너 위에 위치하는 빌딩 블록으로 기능을 다루면서 새 프로젝트를 위한 새 정의를 신속하게 구축할 수 있다.
 
데브 컨테이너 구축을 위한 이 기본 프로세스는 매우 합리적이다. 하향식 접근으로, 설계자와 개발 책임자가 프로젝트 스택에 동의하는 것부터 시작해야 한다. 이후 VS 코드 컨테이너 갤러리에서 기본 플랫폼 이미지(예를 들어 닷넷)를 찾을 수 있다. 그 다음에는 VS 코드에서 devcontainer.json을 편집하고 사전 정의된 기능을 추가해 새로운 툴을 추가하는 등 프로젝트에 맞게 구성할 수 있다. 사용할 준비가 되면 이 컨테이너와 필요한 VS 코드 툴을 개발 팀에 배포한다.
 
로컬 컨테이너 호스트는 도커를 실행하거나, 최소한 엔진 위에 도커 호환 CLI가 있어야 한다. 여기서 CLI가 핵심이다. 데브 컨테이너는 컨테이너 호스트에 직접 액세스할 필요 없이 CLI를 통해 작동하기 때문이다. 이는 장점인 동시에 단점이기도 하다. API, 심지어 도커 자체에 대해서도 종속성이 없다. 컨테이너 환경이 도커 CLI를 지원하기만 한다면 데브 컨테이너와 함께 사용할 수 있다. 그러나 지원하지 않는다면 사용할 수 없다. 이 말은 도커 CLI의 하위 집합만 지원하는 포드맨(Podman)과 같은 대안 컨테이너 엔진에서 문제가 있음을 의미한다. 물론 데브 컨테이너는 오픈소스 프로젝트이므로 다른 컨테이너 엔진을 지원하기 위한 작업이 계속 진행되고 있으며 깃허브를 통해 요청하거나 코드를 제출할 수 있다.
 
로컬 도커 인스턴스(하이퍼-V 또는 WSL)에서 컨테이너가 실행되면 VS 코드의 원격 툴을 사용해서 먼저 컨테이너에 연결한 다음 VS 코드 환경을 설치할 수 있다. 이 경우 UI에 로컬 VS 코드가 사용되고, devcontainer.json에 설명한 확장이 원격 인스턴스에 설치된다. 이렇게 하면 로컬 개발 환경에서 개인적으로 선택한 확장과 데브 컨테이너의 확장이 분리된다. 물론 원한다면 제공되는 것 외의 다른 확장을 추가할 수도 있다.
 
윈도우에서 WSL 또는 원격 시스템으로 작업할 때 사용하는 것과 동일한 원격 개발 툴이다. 잘 작동하는 입증된 기술이며, 인텔과 ARM에서 모두 가장 일반적인 리눅스 배포판을 지원한다.
 
런타임 스택이 포함된 컨테이너에 툴을 추가하는 기능을 사용하면 CI/CD 프로세스의 일부로 코드를 테스트할 수 있는 새로운 방법을 얻게 된다. 데브 컨테이너를 깃허브 액션 또는 애저 데브옵스 파이프라인의 일부로 만들어 알려진 환경에서 코드를 주입하고 테스트를 실행할 수 있다. 마찬가지로, 런타임 컨테이너를 코드 전송을 위한 호스트로 사용해서 프로덕션 쿠버네티스 환경에서 호스팅할 수 있다.
 
컨테이너에서 개발을 시작하면 수명 주기 내내 코드를 동일한 환경에 유지해서 클라우드 네이티브 애플리케이션에 따르는 제약과 이점에 대한 개발자의 이해를 도울 수 있다. 데브 컨테이너는 팀이 프로젝트를 위한 일관된 기반에 집중할 수 있도록 하고, 모두가 신속하게 재설정하고 다시 로드할 수 있는 일관적인 환경에서 툴체인을 구축할 수 있게 해준다.
editor@itworld.co.kr 



원문보기:
https://www.itworld.co.kr/topnews/348429#csidx9696ee5ecfeed859bb2748a1c52d357