컨테이너 기술: 개발자를 위한 필수 가이드
컨테이너 기술: 개발자가 알아야 할 필수 정보와 최신 트렌드를 확인해보세요.
컨테이너 기술의 모든 것을 소개합니다.
개발자와 컨테이너 기술에 대해 살펴봅니다.
개발자와 서비스를 제공하는 책임자는보다 나은 서비스를 제공하기 위해 반복적으로 기능을 추가하고 서비스를 개선하고 있습니다.
서비스의 개발과 운영에 관련한 조직은 신속하게 서비스를 릴리즈하고 새로운 피드백을 통해 서비스를 개선할 수 있도록 릴리즈 주기를 단축시키기를 원할 것입니다.
운영자 입장은 서비스의 다운타임 없이 지속적으로 서비스를 제공하는 것을 중요하게 생각합니다. 서비스의 버그나 장애로 인하여 서비스가 중지 되지 않도록 자주 점검하고 모니터링 하는 것이 필요합니다.
따라서, 개발자가 개발 기간을 단축시키고 무정지로 안정된 서비스를 운영하는 최적의 솔루션이 컨테이너 기술입니다.
컨테이너 기술과 쿠버네티스를 통해 개발자와 관리자 부담을 줄이고 개발환경 구축, 애플리케이션 배포 주기가 비약적으로 향상되었습니다.
개발자 측면의 컨테이너 기술의 장점
직무 | 구분 | 내용 |
개발자 |
효율적인 개발환경 구축 | 개발환경 구축 기간 단축 / OS 가상화로 격리된 테스트 환경 구축 |
기존 가상화 대비 작은 시스템 리소스로 개발 환경 구축 | ||
배포 편이성 |
이미지를 통한 빌드, 배포 자동화 | |
개발자 환경/테스트 환경/스테이징 환경/운영 환경에 대한 일관성 보장으로 장애 요인 제거와 장애 원인 파악 시간 단축 | ||
민첩한 개발 | 컨테이너를 통한 짧은 주기로 요구사항 정의와 릴리즈를 반복하는 Agile Development 지원 | |
서비스 무정지 환경 제공 | 서비스 정지 없이 시스템 운영이 가능하여 배포시간과 횟수에 대한 제약이 없음 | |
마이크로서비스 아키텍처 | 마이크로서비스 컨테이너로 구성하고 배포, 운영하는 것이 매우 유리 | |
DevOps 기반 | 컨테이너는 DevOps 빌드/테스트/배포 파이프라인을 간소화 |
개발자와 컨테이너 기술 – 개발팀에게 주는 혜택
개발팀 측면에서 컨테이너 기술이 주는 주요한 장점은 아래와 같습니다.
- 신속한 개발환경 구축
- 적은 시스템 자원으로 개발 환경 구축
- 모든 개발팀에게 동일한 환경 제공
- 개발/테스트/스테이징/운영 환경을 동일하게 구성
- DevOps에 최적화된 CI/CD 구현
- 마이크로서비스에 최적화된 컨테이너 기술 적용
신속한 개발환경 구축
컨테이너는 가상 머신에 비해 시작이 빠르기 때문에 컨테이너를 사용하면 애플리케이션 개발 환경을 신속하게 제공 할 수있습니다. 새로운 개발자가 팀에 합류 했을때 쉽게 적응 할 수있으며, 개발팀 내 인력 변동이 심한 경우에도 컨테이너 기술이 유용할 수 있습니다.
또한 컨테이너 이미지에 애플리케이션이 실행하기 위해 필요한 라이브러리 등을 사전에 설치하여두면 같은 개발 환경을 얼마든지 제공 할 수 있기 때문에 개발 속도를 빠르게하는 것이 가능합니다.
작은 시스템에서도 개발 환경 구축 지원
컨테이너는 실행하기 위해 추가로 OS(커널)가 필요 없기 때문에 CPU/메모리/스토리지 리소스 사용량이 적은 특징이 있습니다. 그래서 하나의 물리장비에서도 가상 머신보다 더 많은 컨테이너를 운영할 수 있습니다.
컨테이너를 적용하면 운영 환경과 동일한 구성이면서도 적은 비용으로 개발환경을 구축할 수 있습니다.
모든 개발팀에게 동일한 개발 환경 제공
가상 머신을 개발 환경에 사용하는 경우 각 개발자가 각각의 방식으로 개발 환경을 구성하는 것이기 때문에 개발 환경의 차이가 문제가 되는 경우가 많습니다.
또한 가상 머신의 이미지는 몇 백 GB 이상의 대용량 데이터가되기 때문에 환경 구축이나 복제 자체가 쉬운 작업이 아니였습니다.
컨테이너를 활용하면 컨테이너 이미지는 커도 수백 MB 정도의 용량이기 때문에 공유가 용이하며 모든 개발자에게 동일한 개발 환경을 제공 할 수 있습니다.
개발자와 컨테이너 – 컨테이너 적용 전/후 개발 프로세스 비교
기본적으로 소프트웨어 개발은 사용자가 신규 개발 및 기존 기능의 확장 등의 요청에 따라 개발의 세부 사항을 정의하는 것으로부터 시작됩니다. 그리고 새로운 소스 코드를 추가하거나 기존의 다양한 소스 코드를 개조하거나 연계 시키기도 합니다.
이러한 소프트웨어 개발 현장에서는 다음의 4 가지 환경에서 개발을 진행합니다.
- 개발 환경
- 테스터 환경 (테스트 환경/검증 환경)
- 스테이징 환경
- 운영 환경
개발 환경은 실제로 소스 코드를 추가, 수정하는 개발자 자신이 소스 코드의 동작을 확인하는 환경입니다. 테스터는 테스트 환경을 사용하여 개발자의 소스 코드를 다른 관점에서 테스트합니다. “스테이징 환경”은 운영 직전 현업 담당자나 고객이 테스트하는 환경입니다.
컨테이너를 사용하지 않을 때 개발 프로세스
개발자가 작성한 애플리케이션이 배포되기 위해서는 동영상과 같이 개발, 테스트 , 스테이징 그리고 운영 환경 순으로 테스트 합니다. 스테이징 환경은 개발한 애플리케이션을 운영환경에 배포하기 직전의 최종 테스트 환경으로 운영환경과 동일하게 구성합니다. 개발자 입장에서 가장 어려운 문제 중에 하나는 테스트 환경에서는 정상이지만 스페이징이나 운영환경에서 비정상적으로 동작하는 경우입니다.
운영 환경에서 소프트웨어가 동작하지 않는 문제는?
시스템이 작동하지 않는 이유는 OS, 미들웨어, 네트워크, 데이터 및 라이브러리 등의 작업 환경을 구성하는 다양한 요소에 있을 수 있습니다. 이러한 문제를 해결할 수 있는 확실한 방법은 없습니다. 개발자는 운영 환경에서 소프트웨어가 잘 작동하는지, 다른 소프트웨어와 상호 작용하는 부분에서 문제가 없지 등에 대해 다양한 고려사항들을 직접확인하여 애플리케이션을 릴리즈 해야합니다. 게다가 개발환경은 기업내에 있고 운영 환경은 퍼브릭 클라우드 환경이라면 많은 구성 요소들이 상이하여 더욱 해결하기 어려운 상황일 수 있습니다.
컨테이너를 활용한 개발 프로세스
개발자 개발한 애플리케이션이 테스트 환경까지는 정상적으로 동작하였으나 스테이징이나 운영환경에서 비정상적으로 동작할 수 있습니다. 컨테이너를 사용하면 애플리케이션이 동작하는데 필요한 모든 소프트웨어, 라이브러니, 파일들을 DVD 와 같은 컨테이너 이미지로 통째로 묶어 배포합니다. 따라서 개발환경에서 만들어지는 컨테이너 이미지는 테스트, 스테이징, 운영 환경까지 동일하게 실행되기 때문에 환경의 차이로 인한 문제점은 근본적으로 해결할 수 있습니다.
컨테이너와 쿠버네티스
그러한 개발 · 개선 사이클의 속도에 크게 기여할로서 최근 주목 받고있는 것이 컨테이너 기술이다.
컨테이너는 더 낮은 비용으로 애플리케이션을보다 효율적으로 개발함으로써 DevOps에 더 집중할 수 있습니다. 테스트와 환경 구성 그리고 트러블슈팅 같은 고질적인 수작업 중심의 IT 문제에 집중하지 않고 비즈니스 성장에 도움이되는 애플리케이션 개발에 더 많은 시간을 할애 할 수 있습니다.
DevOps를 실현하는 중요한 기술 요소가 “컨테이너” 입니다. 애플리케이션의 운영 환경을 패키징하고 컨테이너는 고립된 리소스에서 환경을 제공하는 기술입니다.
DX를 실현하기 위해서 민첩한 개발 방법은 큰 서비스 하나로 개발하는 것이 아니라 개별 기능별로 분할된 마이크로 서비스라는 단위로 개발하는 것이기 때문에 컨테이너가 가장 적합한 기술이라고 할 수 있고, 따라서 컨테이너 수가 증가 추세에 있습니다.
컨테이너 수가 증가하면 어떤 노드에 어떻게 자원을 배분하는 것이 효율적인가 와 같은 관리문제가 복잡 해집니다. 그러한 관리를 효율적으로 수행 해주는 소프트웨어가 “Kubernetes (K8s) ‘입니다. 컨테이너 오케스트레이션의 사실상의 표준이 되는 오픈소스 소프트웨어 입니다.
References & Related Links
- 디지털 트랜스포메이션이란? (레드햇) – https://www.redhat.com/ko/topics/digital-transformation/what-is-digital-transformation
- 디지털 트랜스포메이션(Digital Transformation) 정의와 전략 (레드햇) – https://www.redhat.com/ko/topics/digital-transformation
- 디지털이니셔티브 그룹 – http://digitaltransformation.co.kr/
- 디지털 트랜스포메이션에 관한 7가지 오해 – http://www.itworld.co.kr/news/143202
컨테이너 장점
가상머신은 하드웨어 스택을 가상화합니다. 컨테이너는 이와 달리 OS를 가상화하여 여러개의 컨테이너를 OS 커널에서 직접 실행합니다. 컨테이너는 기존의 가상화 기술보다 훨씬 가볍게 동작하며, OS 커널을 공유하고, 시작 시간이나 종료 시간이 빠르고, 메모리를 훨씬 적게 차지합니다.
컨테이너 기술 소개
IT 분야에서 “컨테이너”도 일종의 박스의 의미이며, 물류분야에서 처럼 Portability(이동성)을 실현하기 위해 만들어진 기술입니다.
이동성은 IT 시스템(플랫폼 또는 인프라) 상에서 다른 IT 시스템으로 이동을 쉽게 허용하는 성질을 의미하는 것입니다.
컨테이너를 들으면 무엇이 떠오르나요?
항구나 공항 등에서 보는 직 물류 업계에서 사용되는 컨테이너가 떠오르실 것입니다.
컨테이너는 내용물을 하나씩 이동하는 것이 아니라 박스에 수하물을 담아 통째로 이동하기 때문에 편리한 물류 수단입니다.
가상화와 컨테이너의 비교
가상화는 개발측면이나 운영측면에서 자원 효율적으로 사용하고 관리하는 기술로서 널리 확산되었습니다. 다양한 OS 환경과 어플리케이션을 하나의 파일로 관리할 수 있는 “가상 머신 (VM)”은 손쉽게 이동할 수 있는 이식성을 제공해 주었습니다.
컨테이너는 하이퍼바이저와 Guest OS 없이 애플리케이션 운영환경을 제공하는 기술로서 앞서의 가상화 기술의 고질적인 문제점들을 해결하고 있습니다.
Docker 그리고 컨테이너 기술의 역사
컨테이너 기술의 시작과 현재까지 발전해온 역사를 살펴봅니다.
1972년 IBM VM / 370 (OS) 최초 가상화 기능 구현 , 1979 년 UNIX V7 에 chroot 시스템 콜 도입, 1999년 Virtuozzo 출시 컨테이너 가상화의 새로운 방향을 제시하였습니다.
디지털 트랜스포메이션과 컨테이너
DX를 실현하기 위해서 민첩한 개발 방법은 큰서비스 하나로 개발하는 것이 아니라 개별 기능별로 분할된 마이크로 서비스라는 단위로 개발하는 것이기 때문에 컨테이너가 가장 적합한 기술이라고 할 수 있습니다.
클라우드 네이티브 가상화 – 가상화도 클라우드 네이티브 시대
/in Cloud, Tech Talk/by 오픈마루 마케팅3OpenShift Virtualization 소개: 가상화도 클라우드 네이티브로
/in OPENMARU, Red Hat, Tech Talk/by 오픈마루 마케팅1이제는 클라우드 네이티브 (Cloud Native) 기반 온프레미스 2.0 시대
/in Cloud, Tech Talk/by 오픈마루 마케팅3