TigerCow.Door



안녕하세요. 문범우입니다.

앞으로 몇회에 걸쳐서 블록체인에 대한 기초적인 내용을 정리해보려 합니다.

단순히 자료를 수집해서 정리해보기에는 아직 제 스스로도 개념적으로 부족한 부분들이 많아서, 다니엘 드레셔 지음, 이병욱 옮김의 '블록체인 무엇인가?' 라는 책을 기반으로 하려 합니다.


정리의 순서가 책의 순서와 비슷할 것이며, 책을 보면서 좀 더 궁금한 내용 같은 부분은 온라인을 통해 공부해가며 추가하여 정리하려 합니다.


궁금하거나 건의사항이 있으신 분은 언제든지 댓글 또는 이메일, 카톡을 통해서 연락주시면 감사하겠습니다.


블록체인을 위한 기초


이번 글에서는 블록체인을 이해하기 위한 기초로써, 소프트웨어 아키텍처에 대해 알아보면서 블록체인이 달성하고자 하는 것에 대해서 함께 알아보도록 하겠습니다.


1. 소프트웨어 아키텍처


소프트웨어 아키텍처를 알아보기 이전에 시스템 자체를 개념적으로 분리하기 위해 사용되는 구분 기준이 있습니다. 크게 두가지로 나뉘어지는데 다음과 같습니다.


1. 응용계층 - 구현계층

2. 기능적 측면 - 비기능적 측면


먼저 응용계층과 구현계층에 대해서 알아봅니다.

사용자의 요구사항과 시스템의 기술 구조를 구분하여 생각해보면 이 둘을 나누어 생각할 수 있습니다.

즉, 응용계층은 사용자의 요구사항, 사용자의 필요와 연관됩니다.

반면에 구현계층은 이러한 요구사항을 실현하는 것 입니다. 즉 구현계층의 구성요소는 본질적으로 기술적이며, 목적 달성을 위한 수단으로 생각될 수 있습니다.


두번째로 기능적 측면과, 비기능적 측면에 대해서 알아보겠습니다.

먼저 기능적 측면은 '시스템이 무엇을 하는가'로 구분되며 비기능적 측면은 '그 무엇을 어떤 식으로 하는가'로 구분됩니다. 

해당 부분이 헷갈릴 수 있기 때문에 핸드폰을 예로 들어 생각해본다면, 기능적 측면으로는 음악 청취, 사진 촬영, 사진의 개별 픽셀 조작 등이 있으며 비기능적 측면으로는 멋진 UI, 실행속도가 빠른 소프트웨어, 사용자 데이터 보호와 저장능력 등이 있습니다. 또한 비기능적 측면에서 중요시 되는 것은 보안과 무결성입니다. 여기서 무결성은 시스템이 의도한 대로 작동하는 것을 의미합니다. 무결성은 보안과 정확성을 포함한 개념이기도 합니다.


이렇게 두가지로 나누어 본 개념들을 함께 고려하여 핸드폰을 예시로 생각해본다면 다음 표와 같습니다.


 

 기능적 측면

 비기능적 측면

 응용 계층

 사진 촬영

 전화 걸기

 이메일 보내기

 인터넷 검색

 문자 메시지 보내기

 보기 좋은 UI

 사용 편의성

 빠른 메시지 전송

 구현 계층

 사용자 데이터 저장

 가장 가까운 모바일 커넥터에 연결

 디지털 카메라의 픽셀에 접근

 효율적인 데이터 저장

 에너지 절약

 무결성 관리

 개인정보 보호


이렇게 응용계층과 구현계층, 기능적 측면과 비기능적 측면으로 핸드폰이라는 시스템을 분리하여 생각해보았습니다.

이중에서 구현 계층의 비기능적 측면인 무결성 관리에 대해서 한번 더 알아보겠습니다.


무결성이란 모든 소프트웨어 시스템이 가지는 중요한 비기능적 측면으로 주로 다음과 같은 세가지 구성요소로 이루어집니다.


데이터 무결성: 시스템에서 사용하고 유지 관리하는 데이터는 완전하고 정확하며 모순이 없다.

작동 무결성: 시스템은 의도한 대로 작동하며 논리적 오류가 없다.

보안: 시스템은 허가받은 사용자에게만 데이터 및 기능에 대한 접근 권한을 부여할 수 있다.


실제로 많은 소프트웨어 이용자들은 무결성이라는 개념을 당연시하게 여깁니다. 그들이 사용하는 소프트웨어들이 다행히 무결성을 잘 지키고 있기 때문입니다. 하지만 실제로 이러한 무결성을 개념을 잘 지키기 위해서 개발자들에 대한 노력은 매우 크게 필요합니다. 만약 핸드폰에서 카카오톡을 실행시켰는데 인터넷 어플이 실행된다던지의 시스템 오류가 발생하면 안될테니까요.



2. 시스템 아키텍처


이렇게 해서 소프트웨어 아키텍처를 개념적으로 분리해서 나누어보았습니다.

이번에는 소프트웨어 아키텍처를 구현하는 다양한 방법 중에서 필수적으로 결정해야 하는 시스템 아키텍처에 대해서 알아보겠습니다.

여기서 시스템 아키텍처란, 구성요소를 구조화하고 구성요소 간 관계를 설정하는 방식을 의미합니다.

소프트웨어 시스템에 주로 사용되는 아키텍처는 크게 두가지로, 중앙 통제(Centralized) 방식과 분산(Distributed) 방식이 존재합니다.



위의 사진에서 좌측이 중앙 통제 시스템이며 우측이 분산 시스템입니다.

사진에서 확인할 수 있듯이 중앙 통제 시스템에서는 중앙의 하나의 노드(컴퓨터)가 모든 노드와 연결되어 있습니다. 반면에 분산형에서는 그렇지 않고 모든 노드가 서로 연결되어 있습니다.


이후에 보다 자세히 설명드리겠지만 실제로 현재 사회에서의 대부분의 시스템은 중앙 통제 시스템이지만, 블록체인은 분산 시스템을 가능하게 합니다.

그럼 블록체인에 앞서서, 분산 시스템 자체에 대한 장단점을 살펴보도록 하겠습니다.



3. 분산 시스템


먼저 분산 시스템의 장점에 대해서 알아보겠습니다.


1. 계산 능력이 더 뛰어나다.

분산 시스템에서의 계산 능력(Computing power)은 서로 연결된 모든 노드(컴퓨터)의 계산 능력이 합쳐져 발현됩니다. 즉, 분산 시스템에서는 대부분 단일 컴퓨터보다 강력한 계산 능력을 가질 수 있게 됩니다.


2. 비용이 절감된다.

분산 시스템에서는 여러 대의 컴퓨터로 구성되기 때문에 초기 비용은 개별 컴퓨터보다 더 많이 들 수 있습니다. 하지만 슈퍼 컴퓨터 하나에 대해 유지 보수하는 비용과 비교했을 때는 분산 시스템의 비용이 더 절감됩니다.

또한 분산 시스템에서는 개별 컴퓨터가 교체될 때 전체 시스템에 큰 영향을 끼치지 않는 점까지 고려하면 더욱 그렇습니다.


3. 더 안정적이다.

위에서 짧게 이야기 했듯이 분산 시스템에서는 개별 노드(컴퓨터)가 교체될때 전체적인 시스템의 안정성에 영향을 미치지 않습니다. 하나의 구성요소가 없거나 오류가 발생되면 다른 요소가 그 일을 대신하게 되기 때문입니다.


4. 자연스럽게 확장된다.

분산 시스템에서는 더 많은 노드(컴퓨터)를 자연스럽게 확장시킬 수 있습니다. 초기부터 그러한 것을 고려되어 설계 및 운영되기 때문에 추가적인 계산 능력을 필요로 하는 등의 상황에서 추가적인 노드를 자연스럽게 추가할 수 있습니다.



이번에는 분산 시스템의 단점에 대해서 알아보도록 하겠습니다.


1. 조정 오버헤드가 발생한다.

분산 시스템에서는 구성요소들을 조정하는 중앙요소가 없습니다. 따라서 각각의 모든 요소가 스스로 조정을 해야하는데 모두가 동등한 지위를 가지고 있기 때문에 이것이 쉽지 않고 모든 요소가 조정을 하는 작업을 필요로 하기 때문에 자원이 소모되며 그로 인해 조정 오버헤드(Coordination overhead)가 발생됩니다.


2. 통신 오버헤드가 발생한다.

조정을 위해서는 서로의 통신이 필요합니다. 따라서 분산 시스템 내 모든 요소들은 서로 통신을 주고 받습니다. 이로 인해 계산 능력의 일부가 통신 프로토콜 지원과 메시지의 송수신 및 처리에 소모됩니다. 결과적으로 통신 오버헤드(Communication overhead)가 발생합니다.


3. 네트워크 의존도가 높다.

위에서 이야기 했듯이 분산 시스템에서는 모든 요소들이 통신을 하게 되며, 그 통신은 네트워크를 통하게 됩니다. 그러나 거의 모든 네트워크에는 자체적인 결함과 장애 가능성이 내재될 수 밖에 없으며 이것은 결국 분산 시스템에서의 통신과 조정에 영향을 미치게 됩니다. 그렇다고 해서 네트워크를 사용하지 않으면 통신과 조정, 노드 간 협력도 불가하기 때문에 네트워크 의존도가 높습니다.


4. 프로그램이 복잡해집니다.

앞에서 이야기 하였듯이 분산 시스템에서는 노드간 조정과 통신이 이루어집니다. 또한 네트워크적인 문제도 발생될 수 있기 때문에 이 모든 것을 해결하기 위해서 소프트웨어가 복잡해 집니다.


5. 보안에 신경써야 한다.

네트워크를 통해 자원 및 정보를 주고받게 되면 악의를 가진 개체가 접근하는 보안 문제를 고려해야 합니다. 그러므로 모든 분산 시스템은 보안에 있어 철저히 대비해야 합니다.


물론 이렇게 알아본 분산 시스템의 장점과 단점을 모은 혼합시스템도 존재합니다.

실질적인 블록체인 응용을 배우기 위해서는 이 부분을 꼭 이해해야 합니다. 혼합시스템은 크게 두가지로 존재합니다.

분산 시스템 내의 중앙 통제와 중앙 통제 시스템 내의 분산 시스템입니다.



좌측과 같은 시스템은 얼핏 보기에 모든 구성요소들이 분산 시스템을 이루는 것처럼 보이지만 사실 모든 원이 중앙의 큰 원에 직접 연결되어 있습니다. 즉 겉보기에는 분산시스템이지만 사실 중앙 통제 시스템입니다.

우측 사진은 이와 상반된 시스템을 보여줍니다.


이러한 혼합시스템에 대해서 고려하는 것은 매우 중요합니다. 이 때, 실제로 하나의 시스템이 분산 시스템인지를 파악하려면 전체 시스템을 동시에 종료할 수 있는 단일 구성요소, 즉 스위치가 있는지 살펴보면 됩니다.



이제 우리가 블록체인을 공부하기에 앞서 이러한 시스템을 왜 살펴보았는지 다시 생각해보아야 합니다.


실제로 중앙 통제 시스템과 분산 시스템은 단순히 하나의 목적을 위한 도구, 수단일 뿐 입니다. 두가지 시스템 모두 장단점이 있기에 더욱 그러합니다.

하지만 그 차이점 중에서, 앞에서 우리가 중요하게 다룬 '무결성'이라는 것에 대해서 두가지 시스템은 매우 다르게 접근합니다. 그리고 이 부분 때문에 블록체인이 중요해집니다.


블록체인은 분산 시스템이 무결성을 확보하게 해주는 도구입니다. 따라서 구현계층의 비기능적 측면을 성취하게 해주는 도구로 볼 수 있습니다.



이렇게 블록체인에 앞서, 소프트웨어 시스템에 대해 기본적인 개념을 살펴보았습니다. 다음 포스팅에서는 분산 시스템에서도 특수한 형태로 등장한 P2P 시스템에 대해서 알아보며 공부해보도록 하겠습니다.

블로그 이미지

Tigercow.Door

Data-Analysis / AI / back-end / Algorithm / DeepLearning / etc