TigerCow.Door


이전글

#1_블록체인 무엇인가::소프트웨어 시스템 아키텍처

#2_블록체인 무엇인가::분산 P2P 시스템

#3_블록체인 무엇인가::블록체인의 과제

#4_블록체인 무엇인가::소유권의 본질



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

이번 포스팅에서는 분산 P2P 시스템의 무결성 침해와 관련된 가장 중요한 사례 중 하나인 이중사용(Double Spending)문제에 대해서 알아보겠습니다.


1. 이중사용(Double Spending)


이중사용은 쉽게 말해서 동일한 재화, 물건에 대해 두번 사용한다는 것 입니다.

보다 쉽게 이해하기 위해 부동산을 판매하는 상황으로 가정해보겠습니다.


A가 B에게 집을 팔았습니다.

이로 인해서 집에 대한 소유권은 A에서 B로 이전 되었음이 P2P 시스템의 어느 원장에 기록되었습니다. 그럼 우리가 이전에 학습한 바와 같이 원장을 관리하는 피어가 즉시 다른 피어에게 이러한 사실을 알립니다. 그리고 그 피어는 또 다른 피어에게 사실을 알립니다.

하지만, 이때 A가 아직 사실을 받지 못한 원장에 접근해서 집에 대한 소유권 이전을 A에서 C로 이전되었음이라고 기록했습니다. 마침 해당 원장을 관리하는 피어는 다른 사실에 대해 들은바가 없으므로 해당 기록을 받아들이게 됩니다.


즉, A가 B에게 집을 판 사실이 모든 피어에게 전달되기 전, 다른 피어에게 접근해 동일한 집을 판매하는 행위가 이중사용입니다.



2. 이중사용의 3가지 의미


이전에 알아본 블록체인도 다양한 의미를 가지고 있듯이 이중사용도 크게 3가지의 의미를 지니고 있습니다.


1. 디지털 재화를 복사해 발생하는 문제

실제로 컴퓨터의 데이터를 복사하는데는 별다른 제약이 존재하지 않습니다. 바로 이런 특성을 이용해서 동일한 디지털 재화를 반복해서 복사함으로써 지불하는데 사용할 수 있습니다.

이는 실물 화폐를 복사하는 범죄와 동일한 것 입니다.


2. 원장의 분산 P2P 시스템에서 발생하는 이중사용 문제

이는 위에서 알아본 예시에 대한 관점입니다. 모든 피어들이 정보를 전달받기까지 시간이 걸리는 문제로 인해 일부 피어가 서로 상이한 정보를 갖게 되는 것 입니다.

모든 피어가 동시에 최신정보를 얻지 못한다면, 최신 정보를 획득한 누군가에 의해서 정보가 악용될 가능성이 있습니다.


3. 순수 분산 P2P 시스템의 무결성이 침해된 이중사용 문제

이중사용 문제를 좀 더 추상화해서 크게 본다면, 분산 P2P 시스템 내의 데이터의 일관성을 유지하는 문제로 생각해볼 수 있습니다. 즉, 데이터의 일관성은 시스템 무결성의 한 측면이므로 이중 사용 문제는 결국 시스템의 무결성이 침해된 사례로 볼 수 있습니다.



3. 이중사용 문제를 해결하는 방법


1. 디지털 재화를 복사해 발생하는 문제 해결

사실상 디지털 재화나 화폐를 복사해 한 번 이상 사용하는 문제는 소유권의 본질과 관련이 있습니다. 즉, 특정 재화나 화폐의 소유권이 누구에게 있는지에 대한 관리가 필요한 것 입니다. 이렇게 특정 데이터와 그 소유자를 매핑하는 수단이 필요하는데 이러한 것은 올바르게 작동되는 원장으로써 해결될 수 있습니다.


2. 원장의 분산 P2P 시스템에서 발생한 이중사용 해결

사실상 이러한 문제에 대한 해결은 블록체인 구조로 가능합니다.

우리가 지난 포스팅에서 블록체인과 원장의 P2P 시스템 간의 관계를 알아보았던 것과 같이, 현재 다양한 포스팅에서 사용되고 있는 블록체인이란 용어 자체가 원장의 분산 P2P 시스템의 이중사용 문제를 없애주는 해결책인 셈 입니다.


3. 분산 P2P 시스템의 무결성이 침해된 이중사용 해결

무결성의 내용과 의미는 분산 P2P 시스템의 용도가 무엇인지에 따라서 결정됩니다. 즉, 간단한 파일 공유 시스템의 경우에는 디지털 화폐의 소유권을 비교하는 것과는 다른 측면의 무결성이 고려될 수 있습니다.

결국 분산 P2P 시스템의 응용분야에 따라 블록체인이 아닌 다른 기술이나 데이터 구조 혹은 다른 알고리즘이 무결성을 확보하고 유지하기에 더 적합할 수 있습니다.



이렇게 이중 사용 문제에 대해서 알아보았습니다.

다음 포스팅에서는 블록체인이 어떻게 무결성을 확보하고 유지하는지에 대해서 알아보도록 하겠습니다.




블로그 이미지

Tigercow.Door

Web Programming / Back-end / Database / AI / Algorithm / DeepLearning / etc

댓글을 달아 주세요


이전글

#1_블록체인 무엇인가::소프트웨어 시스템 아키텍처

#2_블록체인 무엇인가::분산 P2P 시스템

#3_블록체인 무엇인가::블록체인의 과제



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

지난 포스팅에서는 블록체인의 과제에 대해서 알아보았습니다. 이번에는 소유권의 본질에 대해 알아보도록 하겠습니다. 즉, 내가 가진 것을 내 것이라고 어떻게 증명하는지 함께 생각해보도록 합니다.



1. 소유권?


하나의 상황을 함께 생각해보겠습니다. 회사를 가기 전에 오전에 간단히 먹기 위한 쿠키를 하나 가지고 집을 나와 출근을 하기 위해 가는 길에서 목이 말라 편의점에 들려 바나나우유를 하나 구입하려 합니다. 헌데 편의점 직원이 가방 안에 있는 쿠키를 빤히 쳐다보고 있습니다. 하필이면 편의점에 있는 쿠키와 같은 쿠키입니다. 이런 상황이라면 불행히도, 직원은 내가 쿠키를 고르고 계산하지 않거나, 훔친 것으로 생각할지도 모릅니다. 더군다나 현재 편의점에는 다른 인원도 없고, CCTV도 없습니다.

이런 상황에서 그 쿠키가 나의 것이라는 것을 어떻게 증명할 수 있을까요?


너무나 당연한 것일지 모르지만, 내가 가지고 있는 것을 내 것이라고 증명하는 일. 그것을 어떻게 해야할 지 생각해본 적이 있나요?


과연 편의점에서 내가 가지고 있는 쿠키가 나의 것이라는 것을, 내가 훔치지 않았다는 것을 어떻게 증명해야 할까요?


물론 이러한 상황에서 법정을 가게 된다 하더라도, 내가 쿠키를 훔쳤다는 것을 증명할 사람도 없으므로 절도 혐의는 풀리겠지만 그렇다고 해서 소유권이 증명된 것은 아닙니다.


만약에, 내가 이전에 쿠키를 구입한 가게의 직원이 증명해준다면 어떨까요? 분명히 소유권을 증명하는데 도움이 될 것 입니다.

그러나, 법정에서 목격자에게 까다로운 질문 즉, 당신이 판매한 쿠키가 맞는지, 그 쿠키가 구체적으로 어떤 것인지, 그 쿠키를 산 것이 내가 맞는지 확신할 수 있는지, 그리고 그 모든것을 어떻게 세부적으로 기억하는지, 혹시 내가 목격자를 매수한 것은 아닌지 등을 이야기한다면 한 명의 독립적인 목격자보다, 독립적인 다수의 목격자를 확보하는 것이야 말로 소유권을 증명하는 좋은 방법이 될 것입니다.


즉, 동일한 사실을 증언하는 독립적인 목격자가 많을수록 그 사실은 진실일 가능성이 더 높아집니다. 그리고 그것이 블록체인의 핵심 개념 중 하나입니다.



2. 소유권 입증의 3요소


위의 상황을 개념화해본다면, 소유권을 입증하는데 필요한 세가지는 다음과 같습니다.


- 소유자가 누구인가

- 소유 물건은 무엇인가

- 소유자와 물건의 매핑


결국 목격자의 증언은 이 모든 것을 포괄하고 있습니다. 과거에는 이러한 목격자의 증언이 유일한 방법이었지만 최근에는 다양한 문서와 매체로 증언이 대체되고 있습니다. 



위의 사진은 소유권을 관리하는 소프트웨어를 디자인할 때 고려하는 여러 가지 개념 간의 관계를 보여주고 있습니다.

특히, 소유권을 증명하는데 있어서는 단순히 자산과 소유자의 매핑 뿐만 아니라 식별도 해야하고, 소유권을 사용하는데 있어서는 식별 뿐 아니라, 인증과 승인의 과정도 필요합니다.


이러한 식별과 인증, 승인은 보안의 개념으로 사용되는데 이에 대해서 조금 더 자세히 이해해야 합니다.


1. 식별(Identification)

식별이란 이름 또는 다른 식별자를 사용해 '누구'라고 주장하는 것이다. 하지만 식별은 누구라고 주장된 사람과 주장한 사람이 일치하는지는 증명하지 못합니다. 즉, 식별은 단순히 '누구'라고 주장하는 것을 의미합니다.


2. 인증(Authentication)

인증의 목적은 어떤 사람이 다른 누군가를 사칭하는 것을 방지하기 위함입니다. 인증이란 당신과 당신이라고 주장한 누군가가 서로 일치하는지 증명하는 것입니다.

이때 중요한 건 주장하는 바를 증명해주는 것은 그 사람만의 고유한 무엇이어야 한다는 점입니다.


3. 승인(Authorization)

승인은 식별된 사람의 성질과 특성에 기반해 특정 자원이나 서비스에의 접근을 허가해 주는 것을 의미합니다. 승인은 성공적인 인증과 함께 인증된 특정인이 가진 특성과 권리에 대한 평가를 토대로 얻는 최종 결과입니다.



3. 원장은 소유권을 증명하기도, 이전하기도 한다.


원장은 단순히 하나의 기능을 하는 것이 아니라, 두 가지 상반된 역할을 수행합니다. 하나는 원장에서 읽은 과거 데이터를 이용하여 소유권을 증명해주는 역할이고, 다른 하나는 소유권의 이전이 발생한 경우 원장에 새로운 데이터를 생성하여 이 사실을 문서화해 두는 역할입니다.


만약 원장이 누구에게나 공개되어 있다면 소유권 증명은 훨씬 쉬워집니다. 그러나 소유권 이전은 법적등의 권리를 가진 특정인에게만 배타적으로 허가되어야 합니다. 따라서 소유권 이전의 기초에는 개인정보 보호가 필요합니다.

원장에 쓴다는 것은 소유권이 변경되었다는 의미이므로 상당히 신뢰할 수 있는 개체에게만 쓸 수 있는 권한이 주어져야 합니다.

그리고 이러한 원장은 블록체인에서도 찾아볼 수 있습니다. 블록체인은 누구나 읽을 수 있게 개방된 원장과 유사한 데이터 구조를 가지는 거대한 분산 P2P 시스템입니다.



4. 소유권 관리자, 블록체인


만약 위에서 이야기한 것과 같은 원장이 손상되거나 파괴되면 어떻게 될까요? 또는 원장을 갱신하는 담장자가 실수를 하거나 고의로 위조하면?

이러한 경우 원장은 더 이상 진실을 반영하지 않게 됩니다. 원장의 내용이 진실이라고 믿고있는 이들에게 이것은 재난과도 같은 일 입니다.


원장 하나에만 의존해 소유권을 판정하는 문제는 법정에서 여러 명의 목격자에게 증언을 듣는 것과 비슷한 방식으로 해결할 수 있습니다. 

즉, 조작될 위험이 있는 원장을 하나만 유지하는 대신 원장의 순수 분산 P2P 시스템을 이용하여 다수의 노드가 동의하는 진실을 통해서 소유권을 확인하면 되는 것이죠.


그래서 결국, 소유권 관리를 위해 사용된 개별 원장은 소유권 관련 데이터를 저장하기 위해 사용된 블록체인-데이터-구조 하나와 같습니다. 즉, 개별 원장들은 P2P 시스템의 개별 컴퓨터(노드)에 저장됩니다.

이에 따라서, 블록체인-알고리즘은 개별 노드들이 최종 판결의 기초가 되는 하나의 일관된 소유권 상태에 집단적으로 도달하게 해줍니다. 

그리고, 그 과정 중 식별, 인증, 승인, 데이터 보안을 믿을 수 있는 수단으로 만들기 위해서 암호화 기법이 필요합니다.



이렇게 이번에는 소유권에 대해 그 본질을 알아보는 시간을 가졌습니다.

다음 포스팅에서는 분산 P2P 시스템에서 무결성을 침해와 가장 관련된 문제 중 하나인 이중사용 문제에 대해서 알아보겠습니다.

블로그 이미지

Tigercow.Door

Web Programming / Back-end / Database / AI / Algorithm / DeepLearning / etc

댓글을 달아 주세요


이전글

#1_블록체인 무엇인가::소프트웨어 시스템 아키텍처

#2_블록체인 무엇인가::분산 P2P 시스템



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

지난번 포스팅을 통해 분산 P2P 시스템에 대해서 알아보고, 실제로 많은 사람들이 사용하는 토렌트 서비스를 통해서 이해해 보았습니다.

그럼 이번 포스팅에서는 이러한 분산 P2P 시스템을 왜 아직 많은 곳에서 사용하지 않는지, 그리고 그것을 블록체인이 어떻게 해결해 줄 수 있는지에 대해서 알아보며 블록체인에 대해 정의를 내려보도록 하겠습니다.


1. 순수 분산 P2P 시스템의 지속 가능성


사실 우리는 두번째 포스팅에서 순수 분산 P2P 시스템이 산업 전체를 뒤바꿀 수 있을 만큼 강력한 잠재력을 지니고 있다고 알아보았습니다. 그런데 왜 아직 많은 곳에서 사용되지 않는 것 일까요?

즉, 순수 분산 P2P 시스템이 산업 전반에 사용되기 위하여 해결해야 할 주요과제는 무엇일까요?


P2P 시스템에 대한 지속 가능성은 우리가 첫번째 포스팅에서 알아보았던 개념, 신뢰와 무결성에 달려 있습니다.

소프트웨어 시스템의 관점에서 무결성은 시스템의 안전성, 완결성, 일관성, 정확성 및 변형과 오류 없음을 의미하는 비기능적 측면이고, 신뢰란 별도의 증거나 증명 또는 조사 과정 없이도 누군가 또는 무엇인가의 신뢰성, 진실성, 능력을 믿어주는 확고한 신념을 의미합니다.


즉, 사용자들은 P2P 시스템에 대해 일단 시스템에 합류를 하고 시스템에 기여합니다. 이후 지속적인 상호작용에 대한 결과가 기대했던 바와 같으면 더 큰 신뢰가 쌓여가면서 지속적으로 시스템의 구성원으로 남게 됩니다. 이렇게 사용자들의 기대를 충족시키며 시스템에 대한 신뢰를 강화시키기 위해서는 무엇보다 시스템의 무결성이 필요합니다. 

다시 말해, 시스템에 대한 무결성이 확보되지 않는다면 시스템은 사람들에게 신뢰를 잃어갈 것이며, 결국 사용자가 떠나는 문제가 발생하게 됩니다.


그렇다면, 우리가 순수 분산 P2P 시스템의 존립과 직결된 신뢰, 무결성에 대한 중요성을 이해했다면 다음과 같은 질문을 생각해볼 수 있습니다.


"순수 분산 P2P 시스템의 무결성을 확보하고 유지할 수 있는 방법은 무엇일까?"


순수 분산 P2P 시스템의 무결성을 확보하고 유지하는 일은 여러가지 요인에 달려 있지만 가장 중요한 두가지는 다음과 같습니다.


- 전체 노드 또는 피어의 개수를 아는가?

- 각 피어의 신뢰성에 대해 어느 정도 알고 있는가?


분산 P2P 시스템 내의 전체 노드 개수와 각 노드의 신뢰성을 알고 있다면 무결성을 확보할 가능성은 더 커집니다. 최악의 환경은 시스템에 참여한 노드의 개수도 모르고 각 노드의 신뢰성도 전혀 모르는 경우입니다. 모두에게 개방된 순수 P2P 시스템을 인터넷 상에서 운영하는 경우가 바로 그 최악에 해당 하는 것이죠.



2. P2P 시스템의 무결성을 위협하는 요소


그렇다면, P2P 시스템에서 우리가 중요하다고 이야기하는 무결성을 위협하는 요소는 또 무엇이 있을까요?


1. 기술적 결함

P2P 시스템은 인터넷으로 통신하는 사용자들의 개별 컴퓨터로 구성됩니다. 그런데 컴퓨터를 비롯한 모든 전자기기는 언제든지 고장이나 오류가 발생될 수 있습니다. 즉, 모든 분산 시스템에서는 개별 컴퓨터를 비롯하여 네트워크 장비 등이 고장이나 오류가 발생했을 때에 대한 대처가 가능해야 합니다.


2. 악의적 피어

P2P 시스템에서 무결성을 위협하는 두번째 요소는 악의적인 의도를 가진 사용자입니다. 이 요소는 첫번째와 같은 기술적 원인이 아니라, 시스템을 이용해 자신 개인의 이득을 취하려는 악의가 원인입니다.

부정직하고 악의적인 피어는 P2P 시스템의 근간인 신뢰성을 공격하려 하기 때문에 가장 심각한 위협 요소 입니다. 이러한 위협으로 인해 P2P 시스템 내의 사용자들이 다른 피어를 믿지 못하게 된다면 시스템을 떠나게 되고 더 이상 계산자원에 기여하지 않게 됩니다. 결국 전체 시스템 구성원이 감소되고 이로 인해 시스템의 효용성이 저하되며 또 다른 이탈자가 반복되는 악순환이 형성될 수 있습니다.



3. 블록체인, 무결성을 확보하라.


사실 위에서 이야기 한 것과 달리 최고의 상황, 최적의 상황에서 신뢰와 무결성을 확보하여 시스템을 유지하는 것은 어렵지 않습니다. 하지만 실제로 우리가 해야되는 것은 위에서 나온 것들을 바탕으로 한 최악의 조건을 가진 분산 시스템에서 신뢰와 무결성을 확보하는 점 입니다.

그리고 바로 이것이 블록체인이 해결해야 하는 과제 입니다.

즉, 블록체인이 해결해야 되는 문제는 '개수도 알려져 있지 않고 신뢰성과 안정성도 알 수 없는' 피어들로 구성된 순수 분산 P2P 시스템의 무결성을 확보하고 유지하는 것 입니다.



4. 그래서 '블록체인' 이란?


그래서 도대체 '블록체인'이 무엇일까요?

사실 블록체인은 다양한 의미로 사용될 수 있습니다.

먼저 4가지 다른 의미에 대해서 간략하게 알아보도록 하겠습니다.


1. 데이터 구조의 명칭

컴퓨터 과학이나 소프트웨어 공학에서 말하는 데이터 구조(data structure)란, 구체적인 정보나 내용과 상관없이 데이터를 정리하는 방식을 이야기 합니다. 

데이터 구조는 간단하게, 건물 설계도의 평면도 쯤으로 생각해볼 수 있습니다. 평면도는 공간의 구체적인 용도와 상관없이 벽과 바닥 그리고 계단을 사용하여 공간을 분리되기 때문 입니다.

블록체인이 데이터 구저의 명칭으로 사용될 때에는 블록이라 불리는 단위에 모인 모든 데이터를 지칭합니다. 그리고 이 블록들은 책을 구성하는 페이지들과 유사하게 마치 체인처럼 서로 연결되어 있어서 블록체인이라는 이름이 붙었습니다.


2. 알고리즘의 명칭

소프트웨어 공학에서 알고리즘(algorithm)이란 컴퓨터가 실행해야 할 일련의 명령어들을 의미합니다. 그리고 이 명령어들은 대개 데이터 구조를 포함합니다.

블록체인이 알고리즘의 명칭으로 사용될 때에는 순수 분산 P2P 시스템에서 여러 블록체인 데이터 구조 내의 정보 내용을 민주주의 투표 방식과 비슷한 방법을 써서 서로 협상하는 일련의 명렁어를 의미하는 것 입니다.


3. 기술묶음의 명칭

블록체인이 기술 묶음의 명칭으로 사용될 때에는 블록체인 데이터 구조(blockchain-data-structure), 블록체인 알고리즘(blockchain-algorithm), 암호화 및 보안 기술의 조합을 의미하게 됩니다.

이들의 조합은 응용분야와 상관없이 순수 분산 P2P 시스템의 무결성을 확보하는데 이용될 수 있습니다.


4. 일반 응용분야를 가지는 순수 분산 P2P 시스템을 포괄하는 용어

블록체인은 블록체인 기술묶음을 활용하는 거래장부들의 순수 분산 P2P 시스템을 지칭하는 포괄적인 용어로도 사용됩니다. 

즉, 순수 분산 시스템을 구성하는 한 부분인 소프트웨어의 단위를 의미를 이야기하는 것이 아니라 순수 분산 시스템 전체를 의미합니다.


그리고 우리가 이어서 블록체인에 대한 이야기를 할 때, 위에서 알아본 4가지 의미 중 4번째인, 순수 분산 P2P 시스템 전체를 의미하는 용어로 블록체인이라는 단어를 사용합니다.


그럼, 아직 중요하게 알아볼 내용들이 많지만 임시적으로 블록체인에 대한 정의를 내려보면 다음과 같습니다.


블록체인이란 무결성을 확보하고 유지하기 위해 순서에 따라 연결된 블록들의 정보 내용을 암호화 기법과 보안기술을 이용해 협상하는 알고리즘으로 구성된 소프트웨어 요소를 활용하는 원장(거래장부)의 순수 분산 P2P 시스템을 의미한다.



5. 비트코인 기술이 블록체인의 전부는 아니다.


위에서 임시적으로 정의한 내용에서 비트코인(Bitcoin)이나 암호화폐(Cryptographic money)에 대한 어떠한 언급도 존재하지 않습니다.

사실 많은 기사나 읽을거리에서 블록체인의 목적이 디지털 화폐의 소유권을 관리하기 위한 것으로 기술하고 있는데, 이렇게 암호화폐의 소유권을 관리하는 것은 아주 중요하고 자연스러운 블록체인의 응용분야 중 하나일 뿐이며 그 자체가 블록체인의 전부는 절대 아닙니다.


블록체인은 다양한 분야에 폭넓게 응용될 수 있습니다. 그럼에도 블록체인에 따라 암호화폐, 디지털화폐 등에 대한 소유권 관리 측면이 부각되는 이유는 두가지가 있습니다.

첫번째, 이해하기도 설명하기도 가장 쉽기 때문입니다.

두번째는 경제에 가장 크게 영향을 끼치는 실 사례이기 때문입니다.


블록체인을 원장(거래장부)의 분산 P2P 시스템을 관리하는 기술묶음의 용도로 활용하게 된다면 디지털 재화의 소유권 관리나 암호화폐와 같은 특별한 분야에 사용할 수 있습니다. 그러나 우리가 알아볼 때에는 이렇게 특정 분야만 고려하지 않지만, 블록체인을 더 쉽게 이해하도록 특정 재화와 상관없이 소유권을 관리하고 명료화하는 일반적인 응용 예에 대해서만 다룰 것 입니다.



이렇게 순수 분산 P2P 시스템이 유지되기 위해 필요한 점, 그리고 그것을 위협하는 요소들에 대해서 알아보고 이어서 블록체인이라는 용어에 대해 알아보며 임시적인 정의를 내려보았습니다. 그리고 비트코인 기술이 블록체인에 대해 보다 쉽게 이해하기 쉬운 사례일 뿐임을 말씀드렸습니다.

이후 포스팅에서는 우리가 블록체인에 대해 본격적으로 이해하기 위해 먼저, 소유권이라는 본질에 대해서 알아보도록 하겠습니다.

블로그 이미지

Tigercow.Door

Web Programming / Back-end / Database / AI / Algorithm / DeepLearning / etc

댓글을 달아 주세요



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

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

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


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


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


블록체인을 위한 기초


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


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

Web Programming / Back-end / Database / AI / Algorithm / DeepLearning / etc

댓글을 달아 주세요