요약
Openhash는 기록된 데이터의 위변조를 막는 방법이며, 공간웹은 GPS를 이용하여, 사실이 아닌 데이터가 기록될 수 없게 하는 것입니다. GPS는 아래 강좌를 참고하십시오.
An Introduction to GNSS [Book] [Youtube] [GitLab]
목차
목적과 용도
ABC와 공간웹
IFS와 공간웹
관계(Relationship)와 사실(Fact)
거래(Transaction)
공간 정보
지오코딩(Geocoding)
Address => Geocoding => IPv6
공간 분할 => 논리 관계
GitLab Instance
공간웹 개념
IPv6 매핑
GCS to Spaceweb
가지, 나무, 수풀, 한수풀
가지(Gazi) = Git Instance
나무(Namu)
수풀(Supul)
한수풀(Hansupul)
공간웹의 목적은 (1) 무엇이 어디에 있는 지 혹은 있어야 하는 지를 정적으로 표현하고, (2) 무엇이 어디로 이동하는 지를 동적으로 표현하는 것입니다.
지상의 건물, 지하에 매설된 전선과 수도관, 사무실의 각종 집기와 장치, 공장의 각종 기계 등 한 자리에 고정된 사물들의 위치 정보를 표현합니다. 가령, 어느 학교, 어느 교실에 어떤 컴퓨터와 어떤 모니터가 어디에 있는 지는 해당 공간에서 스마트폰으로 공간웹에 접속하면 바로 알 수 있어야 합니다.
차량, 선박, 항공기, 사람 등 이동하는 사물의 현재와 과거, 및 미래 위치 정보를 표현합니다. 가령, 한국의 교통 물류 인프라를 자율주행 차량으로 재편할 경우, 수백 만대의 자율주행 차량이 지금 어디있고, 어디를 거쳐왔으며, 앞으로 어디를 거쳐 어디로 갈 지를 알 수 있어야 합니다. 그로써, 사회 전체의 효용이 최대가 되도록, 각 차량의 출발 지점, 운행 속도, 운행 경로, 정차 지점 등을 결정할 수 있습니다.
이상의 예는 공간웹의 효용 중 극히 일부입니다. 공간웹의 자세한 용도는 여기[링크]를 참고하십시오.
2. Git과 공간웹
과거의 한 시점에 시민 A가 시민 B부터, 어느 한 지역의 토지를 구매하고, 대금은 ABC 화폐로 지불했다고 가정합시다.
토지 대금을 지불한 사실은 A와 B 각각의 Git에 기록됩니다. A와 B의 디지털 서명이 합의된 거래를 증명합니다.
한 편, 해당 토지에 할당된 공간은 해당 토지의 소유자가 A이고, 소유권 이전 시점이 언제인지 기록합니다.
또 한 편, A와 B가 만나 토지 거래 계약을 체결했다면, 그들이 만난 장소에 할당된 공간이 그들의 만남을 증명합니다.
사실(Fact)은 6하 원칙으로 기술될 수 있는 사건(Event) 혹은 상호 작용(Action and Reaction)입니다. A가 B로부터 상품을 사고, 대금을 지불했다면, B가 A에 상품을 건네는 것이 Action이고, A가 B에게 대금을 지불하는 것이 Reaction입니다. 비단, 돈이 오가는 행위 뿐 아니라, C가 D에 청혼하는 것도 Action이고, D가 수락하거나 거절하는 것이 Reaction입니다. Action과 Reaction은 누가 언제 어디서 무엇을 어떻게 왜의 형식, 이를 테면, Transaction이라는 DB Struct로 표현됩니다.
관계(Relationship)는 어느 한 사건과 다른 한 사건 간의 관계입니다. 달리 표현하면, 하나의 Transaction이 다른 어느 한 Transaction과 맺는 관계이며, 마치 두 약혼자의 언약을 반지로 증명하듯, 두 Transaction의 관계는 Hash Chain으로 증명합니다. 이처럼 둘 이상의 Transaction들이 Hash Chain으로 서로의 관계를 증명하는 문서가 재무제표(Financial Statements)입니다. 달리 표현하면, 어느 한 사건은 반드시 대응되는 다른 사건이 있어야 합니다. 가령, 냉장고를 산 사람이 있다면, 반드시 판 사람도 있어야 합니다. 그것이 관계입니다.
사람을 포함한 각 경제 단위의 활동은 Transaction으로 표현합니다. Transaction은 비단 돈이 오가는 상거래 뿐 아니라, 모임과 이벤트 등 사회적 활동을 통칭합니다. Transaction은 DB Struct이며, 그 필드는 다음을 포함합니다.
거래 당사자
거래 품목
거래 일시
거래 장소
거래 장부
일반적인 거래 정보 데이터와 달리, 공간웹은 거래 장소와 거래 장부를 반드시 명기합니다.
거래가 발생한 공간에 관한 정보이며, 통상의 주소 체계 뿐 아니라, 위도, 경도, 고도로 표현합니다.
국가마다 주소 체계가 다르므로, 세계 전역의 공간 정보를 표시할 통일된 주소 체계가 없습니다.
유형의 상품을 사고 판다면, 반드시 해당 상품을 생산한 장소 혹은 소재한 장소와 인도한 장소가 있어야 합니다.
여러 종의 원료나 원자재를 조합하여 새로운 상품을 구성한다면, 해당 상품의 소재가 되는 각 원자재의 공간 정보가 사전에 존재해야 합니다.
가령, 수산 시장에 갈치를 한 마리 구매한 소비자는 해당 갈치가 잡힌 장소, 저장되었던 장소, 저장 기간 등에 관한 모든 정보를 획득할 수 있고, 국가는 갈치의 어획과 유통, 및 소비에 관한 모든 정보를 획득할 수 있습니다. 달리 표현하면, 공간웹이 구축된 국가에서는, 잡힌 적이 없는 갈치를 판매할 수는 없습니다.
지오코딩에 고도(altitude)와 시간을 추가한 개념입니다. 지리 좌표계(GCS - Geographic Coordinate System)를 참조하여, 지표면을 가로 세로 높이가 약 1m인 정육면체로 분할한 뒤,
그 각각을 단위 공간(L0 Space or Unit Space)이라 지칭하고, 단위 공간마다 고유한 IP Address를 할당하며,
가로 세로 높이가 단위 공간 10개인 공간을 L1 공간, 100개인 공간을 L2 공간 식으로, L15 공간까지 새로운 공간 단위를 조직하고, 각 공간 단위마다 고유한 IP Address를 할당합니다. 간단히, L1의 가로 세로 높이(m)는 1다음에 0이 하나, L2는 둘, L15은 열 다섯입니다.
지구 상에서 발행하는 사건 각각의 공간 좌표를 특정하고, 특정 사건의 정보를 해당 사건이 발생한 공간에 매핑(mapping)된 아주 작은 DB에 저장하는 것이 공간웹의 기본 개념입니다. 그 DB의 주소는 IPv6이며, 데이터 기록 방식은 Git입니다.
왼쪽 그림에서 연두색 정육면체의 가로 세로 높이를 각기 1m로 상정하고(이하, 단위 공간), 지표면 지하 500m, 지상 500m를 단위 공간로 채우고, 이렇게 채워진 공간을 지표면 체적이라 합시다.
지구 둘레 40,075km
지구 면적 510 million km²
지표면 체적 510 billion km3
따라서, 이 체적은 5100억(= 1.5조) 개의 단위 공간으로 채울 수 있습니다.
참고 - 도(Degree) 포멧
hddd.ddddd˚ : 도(˚) 단위 정수 이하를 소수로 표현합니다. h(Hemisphere)는 북위, 남위, 동경, 서경을, d는 도(Degree)를 뜻합니다. 경기도 지역에서 위도 0.00001˚ 차이는 약 1.1m 거리에 해당하며, 경도 0.00001˚ 차이는 약 0.9m 거리에 해당합니다.
DDD.DDDDD°
32.30642° N 122.61458° W
or +32.30642, -122.61458
가용한 IPv6 주소의 총 숫자는 지구 뿐 아니라, 우주의 먼지보다 많습니다. 1.5조 개는 고작 우주의 티끌 하나 수준입니다. 1.5조 개의 단위 공간 각각에 하나의 IPv6 주소를 할당합니다.
1.5조를 16진수로 전환하면, 15d3ef79800입니다. 이 수를 아래 그림의 Interface ID 영역 16자리 중에서 마지막 세 그룹(group)에 매핑합니다. 하나의 Group은 4개의 Octet이며, 하나의 Octect은 하나의 16진수이자, 4개의 이진수이고, 4bits입니다. 마지막 세 그룹에 매핑하고도, 하나의(1) Octet이 남습니다. 빨간 색 4는 이 주소가 공간웹 주소임을 표시하고, 오렌지색은 1.5조 개의 공간웹 주소입니다.
예를들어,
Global Prefix:5204:0020:77b2:007a:f012
+32.30642, -122.61458
5번 그룹에서, 두 Octet(녹색)은 지상 고도를 표시하고, 두 Octet은 위도의 소수점 앞 자리를 표시합니다. 이 예에서, +32의 16진수인 20입니다.
6번 그룹은 위도의 뒷자리 수 32.30642의 16진수인 77b2입니다.
7번 그룹에서, 첫 두 Octet은 지하 깊이입니다. 나머지 두 Octet은 경도의 소수점 앞자리 수인 122의 16진수입니다.
8번 그룹은 경도의 뒷자리 수 61458를 16진수로 표기한 것입니다.
고도는 지하 256m와 지상 256m를 표현할 수 있습니다.
이제 지표면에서, 가로 세로 1m 크기의 모든 공간은 고유한 IPv6 주소를 갖습니다.
<퀴즈> 위도 경도의 +, -는 어떻게 표시할까요?
GCS 좌표를 Git의 Data Structure로 표현합니다.
SpaceWeb이라는 명칭의 Data Struct를 생성하고, 그 Field로 IPv6, Latitude, Longitude, Altitude 등을 할당합니다.
Latitude, Longitude, Altitude의 좌표계는 도(Degree) 포멧입니다. 그러므로, 하나의 IPv6 주소는 하나의 도(Degree) 포멧 좌표계에 매칭됩니다.
모든 거래는 하나의 반드시 하나의 거래 시각(Time)을 포함하고, 하나 이상의 공간(Space)을 포함하며, Space은 사건(Event)이 발생한 공간 및/또는 Event에 참여한 경제 단위가 소속된 공간을 표시합니다. 가령, 제주도 한경면의 00번지를 주소로 하는 홍길동이 제주도 한림읍에 소재한 토미 김밥에서 식사를 한다면, 이 거래는 식사 대금의 결제 시각과 토미 김밥의 위치를 거래 정보로 포함하며, 후자를 표현하는 방법은 SpaceWeb의 ID입니다. 이 거래 정보는 토미 김밥의 소유주인 성춘향에 관한 정보도 포함하며, 성춘향의 정보는 성춘향의 주소를 포함하는 점도 기억하십시오.
전술한 홍길동의 예에서, 토미김밥의 주소, 홍길동의 주소, 및 성춘향의 주소가 공간웹 좌표로 거래 정보에 포함됩니다. 그런데, 주소는 위도 경도 좌표계가 아니므로, 전환이 필요합니다.
Geocoding으로 주소를 좌표계로 전환합니다.
위도 경도 고도 값으로 SpaceWeb의 단위 공간 ID를 검색합니다.
단위 공간 ID를 거래 정보에 포함합니다.
지표면을 일정한 크기의 공간으로 분할하여, 공간들 간에 발생할 수 있거나, 없는 사건들을 규정합니다.
Openhash는 시간을 분할하여, 여러 사건들 간의 인과성에 기초하여, 어느 한 사건의 논리적 정합성을 판단합니다. 가령, GCC에 등록한 어느 한 학습자가 "고교 3학년 수학 과목"의 연습문제를 하루 만에 모두 풀고, 그 Solutions들을 제시하는 것은 시간적으로 불가능합니다.
SpaceWeb은 공간을 분할하여, 어느 한 사건의 논리적 정합성, 또는 여러 사건들 간의 모순 여부를 판단합니다. 가령, 현재 위치가 제주도인 홍길동이 서울에서 특정 차량을 운전하는 것은 공간적으로 불가능합니다.
이처럼, Openhash와 SpaceWeb은 사실이 아닌 데이터가 Git Repository에 기록되는 것을 차단합니다.
ABC를 구성하는 수많은 GitLab Instance들은 공간웹을 기반으로 동작합니다.
시장 참여자 각각은 반드시 하나의, 꼭 하나의 GitLab Instance(이하, "가지")에 소속됩니다.
가지는 특정 지역을 관할하는 GitLab Instance입니다.
온라인과 오프라인을 막론하고, 하나의 거래(Transaction)는 반드시 거래 당사자들의 지리적 좌표를 포함하는 Report를 생성합니다. 가령, 제주도의 홍길동이 미국 Amazon에서 자전거를 구매했다면, 홍길동이 사용하는 컴퓨터의 IP 주소(및 그 지리적 위치)와 미국 Amazon의 물류 창고 위치가 거래 정보에 포함됩니다.
ABC를 이용한 자금 이체나 결제의 경우, 해당 단말기의 현재 GPS 정보가 해당 거래 정보에 수록됩니다. 가령, 현재 위치가 제주인 홍길동이 서울의 식당에서 식사 대금을 결제했다면, 비정상 거래로 탐지될 수 있습니다(Abnormalty Detection). 필용하다면, 추가적인 절차(이를테면, two-way authentication)를 거쳐 결제가 진행되도록 강제할 수 있습니다.
이처럼, 공간웹은 ABC를 구성하는 각양각색의 모듈들 하나 하나에 녹아있습니다.
1.5조 개의 단위 공간을 하나의 서버에 저장하는 것은 2022년 현재 기술로 쉽지 않으므로, 잘게 나눠(Sharding) 저장합니다.
가지(Gazi) - 읍면동 단위의 공간 정보
나무(Namu) - 시군구 단위의 공간 정보
수풀(Supul) - 국가 단위의 공간 정보
실제로 공간 정보를 저장하는 곳은 가지(Gazi)이며, 시장(MART) 및 공간웹 이용자 중에서 특정 공간에 대한 소유권이나 관리권을 갖는 이들은 해당 공간에 대한 정보를 등록하거나, 변경 및 갱신할 수 있습니다.
이용자는 전술한 지오코딩(Geocoding) 등의 방법으로 특정 장소 또는 공간에 할당할 IPv6 주소(L0~L15 단위)를 생성합니다.
생성된 IPv6 주소를 파일명으로, 새로운 YAML 파일을 생성합니다.
생성된 파일에 해당 공간에 위치한 물품과 장치, 시설을 NICE분류 방식에 따라 기록합니다.
해당 파일을 자신의 Local Repo에 Commit합니다.
읍면동 단위의 공간 정보를 관리합니다. 가령, 어느 한 아파트 단지를 상정합시다.
이 단지에는 10동의 아파트가 있습니다.
각 동에는 100채의 아파트가 있습니다.
각 아파트에는 하나의 거실, 하나의 부엌, 하나 이상의 방과 욕실이 있습니다.
하나의 거실에는 소파, TV가 있을 수 있습니다.
하나의 방에는 침대, 책상이 있을 수 있습니다.
하나의 욕조에는 하나의 변기와 하나의 욕조가 있습니다.
하나의 부엌에는 싱크대, 렌지, 식탁, 식기류가 있을 수 있습니다.
이 단지 내의 있는 각각의 방과 거실, 욕실, 부엌에 있는 물품들의 목록을 작성할 수 있습니다. 그 형식은 다음과 같을 수 있습니다.
1동 101호 1번 방 - 2010년 산 에이스 침대(퀸), 2018년 산 에이스 화장대
1동 101호 2번 방 - 2010년 산 보르네오 책상, 2017년 산 Apple 컴퓨터 21인치, 벽걸이형 스피커
1동 101호 부엌 - 리즈하임 싱크대(2022년 산)
...
1동 101호 거주자가 침대를 교체하면, SpaceWeb Repo는 새로운 Commit으로 101호에 관한 정보를 갱신합니다. 그러므로, 특정 지역을 관할하는 나무는 해당 지역 내의 공간에 관한 최신 정보를 유지합니다. 그 정보는 어디에 무엇이 있는 지와 같은 정적인(static) 데이터 뿐 아니라, 언제 어디서 어떤 사건이 발생했는지 등 동적인(event) 데이터를 포함합니다.
SpaceWeb은 동, 호, 방 번호를 지리좌표계(GCS)로 대체한 것입니다.
제주시는 제주시에 속하는 읍면동 GitLab Instance들의 목록을 유지하고, 필요시 Data Backup 기능을 제공합니다.
한국은 한국에 속하는 시군구의 목록을 유지하고, 필요시 Data Backup 기능을 제공합니다.
IMF 190개 회원국의 목록을 유지하고, 필요시 Data Backup 기능을 제공합니다.