/assets/img/block_chain/ethereum.png)
-
원문은 Blog에서 확인하자 !
-
아래는 위 Blog에서 핵심적인 부분(주관적)을 발췌하였다.
데이터를 중앙서버가 가지는 것이 아니라, 각 노드들이 동일한 복제본을 각각 보관하는 것입니다.
각 노드들이 가진 데이터를 지속적인 싱크를 통해서 일치시켜 나감으로써 데이터의 정합성
을 유지합니다.
이 데이터는 다수의 어카운트
로 구성되는데, 어카운트에는 두가지 형태가 있습니다.
- 사용자 어카운트 (프라이빗 키에 의해 제어됨)
- 컨트랙트 (코드에 의해서 제어됨)
이들 어카운트들은 모두 상태(state)
정보를 가집니다.
이 상태정보를 바꾸는 것이 트랜잭션
입니다.
트랜잭션은 사용자 어카운트에서 일으킬 수도 있고, 컨트랙트가 발생시킬 수도 있습니다.
이 중 컨트랙트에 포함되는 코드가 바로 애플리케인션
의 핵심적인 비지니스 로직
을 구성하게 됩니다.
이더리움은 컨트랙트 코드를 프로그래밍하는 상위 언어를 제공하는데,
그 중 가장 보편적으로 쓰이는 것이 솔리디티(solidity)
입니다.
이더리움 컨트랙트 코드는
EVM
이라는 가상머신을 통해 수행되고
그 결과에 의해서 어카운트의 상태가 변화하게 됩니다.
트랜잭션들은 일정한 주기마다
블록이라는 그룹으로 묶여서
다른 노드들로 전파가 됩니다.
각 블록에는 이 안에 포함된 트랜잭션들의 해시값과
이전 블록의 해시값을 포함하게 됨으로써
상호간에 불일치가 있거나,
과거기록에 대한 변조가 있을시 쉽게 발견될 수 있도록 합니다.
네트워크에 참가하는 모든 노드들(정확히는 Full Node입니다)은
이들 블록을 각자 처리하고 그 결과가 동일함을
서로 합의해(Consensus) 갑니다.
이 합의과정
이 블록체인 기술
의 가장 중요한 메카니즘
입니다.
이 합의 방식에는 여러 가지 솔루션들이 있는데,
이더리움이 현재 사용하고 있는 방식은 Proof of Work
의 일종입니다.
하지만 보안성을 더 높이고, 처리속도와 용량을
대폭적으로 향상시키기 위해 Proof of Stake
의 한 형태인
캐스퍼 방식
으로 전환하고자 계획 중입니다.
이렇게 각 노드들의 합의에 의해 dApp 의 백엔드인
블록체인의 정합성
이 유지됩니다.
그렇다면 dApp 아키텍쳐가 중앙서버 모델에 비해
가지는 장점은 무엇일까요?
지금까지 많은 언급된 장점들은 주로 다음과 같은 점들이었습니다.
-
운영주체에 대한 신뢰가 필요 없거나 최소화
-
투명한 운영 원칙과 규칙 관철 용이
-
보안 향상
-
프라이버시 보호
-
이미 투자된 자원의 활용도 증가
-
국가별 규제를 넘어선 글로벌 서비스 용이
-
IoT 네트워크에 매우 유리
-
소수기업의 서비스/이윤 독점화 해소
이들 장점들이 dApp 만 사용한다고 해서
모두 발휘되고 기존 중앙서버 모델의 문제를
단번에 모두 해결한다고는 볼 수 없을 겁니다.
독자적인 인터넷 서비스로서
사용자들에게 경쟁력있는 사용가치를 만들어내지 못한다면,
탈중앙화된 모델을 사용한다는 것만으로는
큰 장점이 되지 못하는 경우가 많을 것입니다.
반면, 탈중앙화된 어플리케이션들이
넘어야 할 제약
또는 단점
들도 존재합니다.
어떤 트랜잭션을 실행하기 위해서는,
네트워크에 있는 모든 노드들이
전부 이를 다 실행해봐야 한다는
비효율성
이 항상 존재합니다.
스케일링
에 매우 제한이 되는 요소입니다.
이를 해결하기 위한 노력,
예를 들어 샤딩 기법
,
멀티체인 솔루션들이 활발히 연구되고 있지만,
안정적인 솔루션이 나오기까지는
아직 많은 시간이 필요합니다.
스케일링에 제한이 있다 보니,
트랜잭션에 대한 비용이
부담이 될 수도 있습니다.
너무 복잡한 트랜잭션이나 로직을 구현하려다 보면
이에 소모되는 비용이 너무 클 수 있습니다.
아직까지는 비교적 단순한 형태의 로직에
촛점을 맞추는 이유들 중의 하나입니다.
블록체인에서 직접 제공되는 데이터는
단순 키-밸류
에 불과합니다.
다른 현대적인 데이터베이스에 비하면
형편없이 초보적인 기능만이 제공됩니다.
따라서 이를 보완하기 위해
블록체인과 함께 별도의 여러 가지 형태의
인덱스와 필터링을 제공하는
로컬 데이터베이스를 운용하는 기법들도
더 많이 발전할 것으로 예상됩니다.
dApp 을 기획하고 설계함에 있어서
탈중앙화된 모델이 가진 장점들을
극대화시키면서도,
피하기 어려운 단점들을 잘 보완하는 것이
좋은 설계의 핵심일 것 같습니다.
그리고 이런 좋은 설계는 한 번에 완성되는 것이 아니라
많은 실패와 경험의 축적이 필요하리라 생각합니다.