‘장엄한 광경 보기’, ‘모르는 사람 도와주기’, ‘눈물 날 때까지 웃기’, ‘무스탕 셀리로 카레이싱’, ‘정신병자 되지 말기’, 추가해서 ‘스카이다이빙’ ……
무슨 항목인지 짐작이 가나요?
모건 프리먼, 잭 니콜슨이 주연한 영화 ‘버킷 리스트 : 죽기 전에 꼭 하고 싶은 것들’에 나오는 주인공들이 정말 죽기 전에 하고 싶어하는 일들의 목록이다. 남아 있는 삶의 시간이 얼마 되지 않은 시한부 인생을 진단 받은 두 사람이 생의 마지막을 하고 싶었던 일들을 버킷 리스트에 기록하고 하나씩 실천해 나가는 내용의 잔잔한 감동을 주는 영화였다.
영화에서도 등장하는 리스트는 대표적인 자료구조이다. 자료구조(Data Structure)는 컴퓨터학(Computer Science) 분야에서 가장 기초가 되는 학문분야이다. 자료구조에는 우선 리스트(list)가 존재한다. 리스트는 동일한 형태(type)의 항목(item)들의 묶음이다. 리스트는 배열(array)이나 연결리스트(linked list)를 이용하여 표현한다.
우리가 일상 생활에서 리스트를 알게 모르게 많이 사용하고 있다. ‘1월, 2월, 3월, …, 12월’과 같은 표현, ‘월요일, 화요일, … , 일요일’과 같은 표현은 모두 리스트이다. 달과 요일을 나열한 것이다. 이외에도 당장 독자들의 손에 쥐고 있는 스마트폰을 보면 연락처가 있을 텐데 이것도 리스트이다. 항목 간의 순서 개념이 없이 묶음으로 표현하는 집합과 달리 리스트는 목적에 따라 순서를 표현하고 있다. 영화에서도 버킷 리스트에 하고 싶은 일을 번호를 매겨서 순서를 표현하고 있다.
이러한 자료구조는 블록체인과 밀접하게 연결된다. 블록체인의 구조를 살펴보자. 블록체인은 데이터를 담은 블록을 연결 시켜 놓은 것이다. 블록을 생성시키고 연결 시키는 과정에 자료구조가 적용되어 있다. 블록의 구조는 트랜잭션이라는 거래내용이 나열되어 있고 블록의 요약정보(블록헤더)로 구성돼있다.
트랜잭션의 내용들은 데이터의 간편하고 확실한 인증을 위해 머클 트리(Merkle Tree)를 구성한다. 머클 트리의 내용은 머클 루트(Merkle Root)를 통해 블록에 포함된 트랜잭션의 유효함을 빠르게 검사를 한다. 리스트와 더불어 대표적인 자료구조인 트리는 계층화된 구조로 자료를 저장, 빠르게 검색하기 위해 사용한다. 이런 특징을 가진 트리라는 자료구조를 랄프 머클(Ralph Merkle)은 데이터의 간편하고 확실한 인증에 사용했다.
사토시 나카모토는 1979년 등장한 머클 트리를 블록체인에서 활용했다. 트랜잭션의 모든 내용을 한 번에 해시함수를 통해 블록 헤더에 적재해도, 블록의 내용이 위변조된 것을 체크할 수 있다. 그러나 개별 트랜잭션의 포함 여부를 효율적으로 점검하기 위해 머클 트리를 사용해서 블록에 포함된 트랜잭션의 해시값을 헤더에 포함 시키는 구조를 채택했다.
필자가 컴퓨터소프트웨어를 공부하는 학생들에게 자료구조를 가르치면서 새삼 느끼는 점이 있다. 과거에는 간절한 필요성에 의해 탄생한 것들이 시간을 지나 절박함이 사라지면서 애로사항이 무엇이었는지 잊히는 니즈(Needs)의 공백과 원래의 목적과 다르게 새로운 분야에 응용하여 활용도를 확장하는 현상이 종종 나타난다.
소프트웨어 공학에서 프로그램은 자료구조와 함수의 결합이라고 정의한다. 자료구조는 저장과 빠른 검색을 위해 필연적인 요소이며, 하고자 하는 기능을 접목 시키는 것이 무형의 유기체인 소프트웨어의 역할이다. 블록체인을 소프트웨어 공학으로 접근을 해보면, ‘무엇을 담아야 할까?’와 ‘어떻게 담아야 할까?’의 관점으로 살펴보면 될 것이다.
블록체인을 위해 세상에 없던 새로운 비즈니스를 찾아 만들어내는 것도 중요하다. 그렇지만 각각 중앙화 처리방식을 사용하던 기존의 비즈니스를 묶어, 탈중앙화와 분산화된 형태로 접목 시키는 것도 새로운 적용 분야가 될 것이다. 영화의 주인공이 버킷 리스트를 추가해서 실행하듯이, 독자 여러분의 버킷 리스트에는 무엇이 담겨 있는지 보고 앞으로는 무엇을 새로 담을 건지 생각해 보자. /조민양 동서울대학교 교수
- 김연지 기자
- yjk@decenter.kr