가상화와 컨테이너 + 탈중앙화 네트워크

가상화와 컨테이너는 컴퓨팅 기술에 획기적인 영향을 미쳐왔습니다. 수년 전만하더라도 상상하기 힘들었던 혁신과 확장성의 속도를 가능케하였죠. 이러한 혁신은 클라우드 컴퓨팅이 서버를 시간 단위로 쪼개서 렌트를 도입하게 해주었습니다. 이를 이어 수초 또는 마이크로초 단위의 컴퓨팅 파워를 기반으로 한 마이크로 서비스와 서버리스 아키텍처가 따라왔죠. 높은 확장성과 동시성을 지닌 컴퓨팅 리소스는 값싼 온디맨드 가격과 함께 한층 더 혁신적인 비즈니스 모델을 가능케해주었습니다. 또한, 이는 기하급수적 성장을 대규모 리툴링이나 막대한 자본 지출 없이 가능하게 해주었죠.

탈중앙화가 현재 걷고 있는 길은 가상화와 컨테이너가 십년 전 밟던 단계와 유사합니다. 기초적인 원칙과 구성 요소 그리고 경제학적 모델은 갖춰져있고, 점점 더 많은 혁신가들과 선구자들에 의해 사용되고 있습니다. 사용 사례는 종이 논문을 벗어나 실제 생산으로 이어지고 있습니다. 그리고, 생태계는 기술 스택의 전 층위를 아우르며 성장하고 있죠.

가상화와 컨테이너를 합쳐서 사용하면 각기 사용하는 것보다 훨씬 더 낫습니다. 확장성 측면에서 증명된 기술과 확장된 서버 배치가 혁신적인 네트워크 디자인과 함께 사용되면 네트워크가 기술들의 혜택(엄청난 기민함, 확장성, 비용 효율성)을 받게해줄 것입니다.

한 마디로 가상화와 컨테이너는 클라우드 컴퓨팅에 기술적인 효과를 가져온 것처럼 탈중앙화 네트워크에도 가져올 것입니다. 유연성과 확장성 측면에서 가상화와 컨테이너의 효과는 수 배는 더 큰 효과를 가져올 것입니다.

가상화 및 컨테이너화된 서브노드

가상화되고 탈중앙화된 네트워크에서 서브노드는 풀 노드 안에서 가상화됩니다. 컨테이너화된 아키텍처를 통해 이 가상화는 가능해집니다. 그리고, 이 가상화는 높은 성능과 함께 탈중앙화 어플리케이션 개발자들에게 더 늘어난 옵션을 제공합니다. 성능과 유연성을 합쳐놓은 이 모습은 마치 기존의 중앙화된 클라우드와 마이크로 서비스 시스템과 유사합니다. 컨테이너는 도커화된 리눅스 OS를 통해 주요 구성요소로 압축화되어 분할될 수 있으며, 이는 각 노드가 OS와 상관 없이 호스팅할 수 있도록 합니다.

컨테이너, LXC, Docker 관련 정보

해당 탈중앙화 아키텍처에 대해서 더 알아보기에 앞서 컨테이너 그리고 LXC와 Docker와 같은 기술 구성요소에 대해 간략히 알아보겠습니다.

컨테이너

컨테이너는 소프트웨어의 표준 단위로 코드와 의존성을 패키징을 해주어 어플리케이션이 빠르게 실행될 수 있도록 해줍니다. 또한, 어플리케이션이 한 컴퓨팅 환경에서 다른 환경으로 실행될 수 있도록 합니다. 컨테이너 이미지는 경량화되고 스탠드얼론이며 실행 가능한 소프트웨어 패키지로서 어플리케이션을 실행하기 위해 필요한 코드, 런타임, 시스템 툴, 시스템 라이브러리, 제어판을 모두 포함합니다.

컨테이너 이미지는 런타임 시 컨테이너가 됩니다. 컨테이너화된 소프트웨어의 목적은 인프라와 무관하게 항시 똑같이 실행되는 것입니다. 컨테이너는 소프트웨어를 환경으로부터 고립시키는 역할을 하며, 소프웨어가 개발 단계와 스테이징 단계 사이에서 발생하는 차이에도 불구하고 일률적으로 실행되도록 담보합니다.

컨테이너는 오퍼레이션 측면의 효율성과 배포의 기민함을 개선하기도 합니다. 컨테이너의 사용과 효과적인 컨테이너 관리 시스템은 데브옵스 팀이 서버, 어플리케이션, 마이크로 서비스, 태스크를 만들고 배포하며 수정하는 능력을 갖출 수 있게 해줍니다.

리눅스 컨테이너 (LXC)

리눅스 컨테이너는 OS 단계에서의 가상화 방법으로서 단일 리눅스 체계를 구동하는 다른 프로세스로부터 하나 또는 복수의 프로세스를 고립시키는 안전한 방법입니다. 컨테이너를 사용하여 리소스는 고립될 수 있고, 서비스를 제한할 수 있습니다. 또한, 프로세스는 OS에 대해서 자체 프로세스 ID 공간, 파일 시스템 구조, 네트워크 인터페이스를 프라이빗 뷰를 갖게합니다. 복수의 컨테이너는 동일한 커널(kernel)을 공유할 수 있습니다. 하지만, 각 컨테이너는 CPU, 메모리, I/O와 같은 리소스를 딱 정해진만큼만 사용할 수 있게 되죠. 그 결과, 어플리케이션, 워커(worker) 및 기타 프로세스는 여러 개의 독립되고 경량화된 리눅스 인스턴스(instance)로서 단일 호스트에서 운영되도록 짜여집니다.

Docker 및 Docker Engine

Docker는 LXC 상에 구현되며, 이미지 관리와 배포 서비스를 가능케합니다. Docker가 LXC를 대체하는 존재가 아님을 아셔야 합니다. 왜냐하면 LXC는 리눅스 커널의 네임스페이스(namespace)와 컨트롤 그룹(cgroup)의 능력, 즉 여러 프로세스를 샌드박스화하는 능력과 리소스 분배를 통제하는 능력에 관한 것이기 때문입니다. Docker는 커널의 저단계 특징 뿐만 아니라, 고단계의 툴링도 제공합니다. 예를 들어, 머신 간 편리한 배포, 어플리케이션 중심 사용성, 자동화 빌드, 버전 작성(versioning), 구성요소 재사용, 공유, 툴 생태계 등을 말이죠.

Docker Engine은 런타임 서버 사이드 엔진으로서 롱러닝 데몬 프로세스(dockered라 불림)와 Docker 데몬과 소통하고 지침을 줄 수 있는 인터페이스의 API들로 구성됩니다. Docker Engine을 통해 서버는 완전 알맹이 수준까지 설정 가능해집니다. 또한, Docker 이미지를 세그먼트에 짧게 혹은 계속해서 세그먼트에 인스턴스화 시키고, 서버 리소스 관리가 가능해집니다. SKALE Network의 경우, 서버 리소스 대신 노드 리소스를 관리하죠.

SKALE Network 내 가상화와 컨테이너

SKALE Network는 노드 아키텍처에 가상화를 사용한 선구적인 네트워크입니다. 가상화와 컨테이너화를 합쳐서 독특한 풀링 검증 모델을 만들었죠. 이는 무작위 노드 선택과 잦은 노드 로테이션을 활용하여 네트워크의 보안을 향상시킵니다. SKALE Network는 보안, 확장성, 경제성이라는 요소들이 꼭 다른 하나를 희생시켜야만 확보할 수 있는 요소가 아님을 보여줍니다.

SKALE Network는 탄력적 사이드체인으로 이루어진 개별설정이 가능한 네트워크로서 높은 처리량과 낮은 레이턴시 거래를 지원합니다. 그러면서도 기타 퍼블릭 메인넷처럼 높은 거래 비용을 지불할 필요가 없습니다. 네트워크는 이더리움 메인넷에 연동되어 있고, 임베디드 연결성과 인터체인 메세징 그리고 확장된 스토리지 능력을 제공합니다. 이 모든 성능은 풀링된 거래 검증 및 보안 모델을 사용합니다. 그리고 이 모델은 매우 효율적이고 확장가능하며 담합 저항성을 가집니다.

가상화 서브노드

각 탄력적 사이드체인은 무작위로 선정된 노드의 집합체로 구성되어 SKALE 데몬을 구동하고 SKALE 컨센서스 과정을 이행합니다. SKALE Network의 노드는 단일 체인에 제한되지 않고, 가상화된 서브노드를 활용하여 복수의 사이드체인에서 작동될 수 있습니다.

달리 말하면, 각 노드는 가상화되어 검증인으로서 독립적인 사이드체인에 참여할 수 있다는 뜻입니다. 그리고 이는 서브노드 아키텍처를 활용하면 가능하죠. 이러한 다중 능력이 가능한 이유는 SKALE Network 내 각 노드에 컨테이너화된 아키텍처가 배포되어 있기 때문입니다.

검증인 노드는 노드 코어와 128개의 가상화된 서브노드로 구성됩니다.

SKALE Network가 컨테이너를 사용하는 방법

컨테이너 이미지는 SKALE 검증인 노드에 활용되고, 이 노드들을 128개의 서브노드로 세그먼트화 합니다. 검증인들은 우선 단일 또는 복수의 서버를 제공하며, 이 서버는 네트워크 상 노드에게 요구되는 구동 사양을 맞추죠. 그 후, 이 서버들을 SKALE Manager에 등록합니다. 서버 요구사항에 대한 구체적인 정보는 SKALE 검증인 FAQ를 보십시오.

SKALE Manager는 이더리움 메인넷 상의 스마트 컨트랙트로 이루어져 있고, 네트워크 내 노드들의 구동을 통제합니다. 이 점이 바로 중앙화된 컴퓨팅과 탈중앙화된 컴퓨팅의 차이를 아주 잘 보여줍니다. 중앙화된 클라우드 컴퓨팅 네트워크 상에서는 중앙화 허브가 컴퓨팅 리소스를 관리합니다. SKALE Network에서는 노드 리소스가 이더리움 메인넷 상에 라이브화된 스마트 컨트랙트에 의해 관리됩니다. 이러한 투명하고 결정론적 접근법은 네트워크에 엄청난 독립성과 자립성을 안겨줍니다.

신규 검증인 노드의 경우, SKALE Manager가 검증인이 제공한 서버를 Docker Engine과 SKALE Admin 플러그인 설치를 하게끔 설정합니다. 이 플러그인은 SKALE Manager로부터 입력값을 받도록 디자인 되었고, 특정 스마트 컨트랙트에 의해 규정된대로 오퍼레이션을 수행하게끔 합니다.

SKALE Manager는 이더리움 메인넷 상의 스마트 컨트랙트로 이루어져 있고, SKALE Network의 노드 풀 오퍼레이션과 권한 설정을 통제합니다. ‘SKALE Manager’라는 용어가 이 문서에서 쓰일 때, 이 용어는 특정 기능 또는 오퍼레이션을 수행하도록 하는 이더리움 메인넷 상의 단일 혹은 복수의 스마트 컨트랙트를 뜻합니다.

컨테이너화의 장점

클라우드 컴퓨팅, 서버리스 및 마이크로 서비스 기반 아키텍처 차원의 컨테이너가 가진 장점은 이미 많이 다뤄져왔습니다. 대부분의 그 장점들은 탈중앙화 환경에서도 동일하게 적용됩니다. 물론, 탈중앙화 체계의 환경이 가진 성격으로 인해 약간 다를 때도 있지만요.

운영 민첩성

Docker 컨테이너를 사용하는 것의 큰 장점은 노드 셋업과 운영이 쉬워지고 상대적으로 foolproof 설계를 가능케 한다는 것입니다. SKALE Network의 노드 운영자는 단순히 적절한 하드웨어를 설정하고 Docker Engine 및 SKALE Admin 플러그인을 설치할 필요가 있습니다. 그 후, 노드를 SKALE Network에 등록합니다. SKALE Network는 SKALE Manager를 통해서 노드를 설정하고, 노드가 제공한 수치를 수집합니다. 컨테이너가 제공하는 운영 민첩성은 노드 운영자들이 필요로 하는 데브옵스 리소스 양을 감소시킵니다.

네트워크 탄력성

운영 민첩성과 관련하여 네트워크 탄력성이 있습니다. 컨테이너 사용은 서버 중단에 상대적으로 쉽게 대응할 수 있게 해줍니다. 이는 실패한 서버를 제거하고 신규 서버 내에 새로운 가상화 서브노드를 활성화 시키는 빠른 전환 메커니즘을 제공하기에 가능한 것입니다. 표준 이미지 사용이 뜻하는 바는 컨테이너가 런칭될 수 있고 빠르게 운영되어 트래픽이 작업 중인 노드로 리디렉팅할 수 있도록 해주는 것입니다.

다이나믹 체인 사이징

Docker 사용은 SKALE Network가 노드 내 리소스를 분배함에 있어 자유도를 높게 가질 수 있게 해줍니다. 사이드체인의 사이즈에 따라 리소스 사용을 매핑하는 것이죠. 유저 수준의 리소스는 탄력적 블록체인 사이즈, 파일 스토리지 능력, 거래 처리량이 있습니다. 컨테이너의 경우, 메모리, CPU 사용, I/O 사용, 기타 시스템/커널 수준 리소스를 관리하구요. 효과적인 리소스 관리는 각 사이드체인이 서비스 단계에 발맞추어 운영되게끔 하며, 안전하면서도 결함 감내가 가능한 운영 환경을 유지할 수 있게 해줍니다.

투명성

Docker 컨테이너 사용은 노드와 서브노드 맥락에서 상당한 수준의 투명성을 제공합니다. 오픈소스 소프트웨어는 탈중앙화 컴퓨팅에 있어서 기본적인 원칙입니다. 솔루션을 구성하는 요소들을 아는 것이 매우 중요하고, 각 요소가 상호 검증할 수 있어야 합니다. 이는 SKALE Network 상의 노드나 서브노드들의 Docker 이미지 구성 측면에서도 동일하게 적용됩니다. 구성요소들을 Docker 이미지들로 만드는 것은 사용자, 개발자, 검증인, 관심을 가진 제3자 모두 각 이미지를 쉽게 검사하고 컨텐츠를 검증할 수 있음을 의미합니다. 또, 이를 통해 자동화된 소프트웨어 패키지가 이미지들에 대한 테스트를 돌릴 수 있으므로 구성적 또는 보안적 우려를 잠식시킬 수 있습니다.

결합성

결합성은 복잡한 체계를 디자인 함에 있어서 필요한 원칙으로 구성 요소 간의 관계와 관련됩니다. 즉, 얼마나 구성 요소끼리 느슨하게 구성할지 혹은 단단히 구성할지에 대한 것입니다. 예를 들어, 높은 결합성 디자인의 EVM은 SKALE Network가 작업 증명 컨센서스 알고리즘을 지분 증명 알고리즘으로 대체할 수 있게 해주죠. 이런 결합성은 특정 사이드체인의 요구에 따라 지분 증명 알고리즘도 기타 알고리즘으로 대체할 수 있음을 의미합니다.

적응성

결합성은 적응성과도 연결됩니다. 적응성은 SKALE Network가 새로운 특성, 구성요소 그리고 능력을 추가할 수 있음을 뜻합니다. 예를 들어, 체인 사용자는 EVM에 자신의 익스텐션(extention)을 운영하길 희망하거나 새로운 컨센서스 프로토콜을 스왑하길 희망할 수 있습니다. 또한, 네트워크 자체가 탈중앙화 파일 스토리지, 영지식 증명 프로토콜, 크로스체인 메시징 등을 지원하길 희망할 수도 있다. 이는 수많은 가능한 시나리오 중 몇 개의 예시에 불과하죠. SKALE Network는 상기 개선사항들을 쉽게 포함할 수 있고, Docker와 컨테이너화된 아키텍처를 사용하여 네트워크의 표준화된 일부로 만들 수 있습니다.

이 글은 두 개의 파트로 이루어진 시리즈의 첫 번째 포스트입니다. 마지막 글에서 저희는 컨테이너, SKALE EVM, 무작위 노드 선택 및 잦은 노드 로테이션을 통해 확보하는 네트워크 보안 등에 대해 다룰 것입니다.