Git은 버전 컨트롤 시스템(version control system)으로, 파일의 버전을 자동으로 관리해 주는 소프트웨어이다. Git이 있고 Github가 있는데, Git은 내 로컬 컴퓨터에서 작동하고 Github는 인터넷에서 작동한다. Git에 있는 버전을 Github로 올리기도 하고 Github에 있는 누군가의 버전을 Git으로 복사해 내 로컬 컴퓨터로 가져 오기도 한다. Git의 홈페이지는 https://git-scm.com이다. Git을 배우는 가장 좋은 방법은 Git 홈페이지에 들어가서 이 책(https://git-scm.com/book/en/v2)을 보는 것이다. 고맙게도 한글도 있다. 그것도 분량이 많다고 생각한다면 이 포스팅을 읽으면 된다. 다른 내용은 다 제끼고 Git을 쓰는 법에 초점을 맞추어 포스팅을 만들려고 한다.

 

1_ 다운로드, 설치

여기(https://git-scm.com/downloads)를 들어가면 운영체제 별로 깔끔하게 설치 파일을 올려 놨다. 설치하는 방법은 별로 설명할 것이 없다. 다운받은 설치 파일을 그냥 실행하면 된다.

 

2_ Git 실행, 종료

1) Windows

명령 창(윈도우 7이라면 Windows-R, Windows 10이라면 작업표시줄 돋보기 클릭)에서 'git bash'라고 쓰고 엔터를 누르면 터미널이 뜰 것이다. Git은 콘솔 명령으로 움직인다.

 

2) Mac

터미널 창을 하나 띄운 다음 그냥 'bash'라고 쓴다. 윈도우, 맥 둘 다 종료할 땐 프롬프트에서 'exit'라고 쓴다.

 

3_ 처음 할 일 - 내 정보 등록

위에서 배운대로 Git을 처음 실행하고 나면 내 정보를 등록한다. 이 때 등록된 정보는 내 파일을 Git으로 올릴 때마다 붙는다고 한다. 올릴 정보는 두 가지다. 내 이름하고 이메일 주소.

 

$ git config --global user.name "my name"
$ git config --global user.email "my email address"

 

썼으면 잘 들어갔는지 확인해보자.

 

$ git config --list

 

4_ 현재 디렉토리를 Git 저장소로 만들기

 

맥의 터미널이야 원래 리눅스랑 같은 명령어를 쓰니까 상관 없지만 윈도우의 Git 터미널에서도 리눅스 명령어가 사용된다. cd로 디렉토리 이동이 가능하며, mkdir로 디렉토리를 만들고 rmdir로 삭제한다. 디렉토리 내용을 보고 싶으면 ls을 쓴다. 아무튼 디렉토리를 하나 만든 다음에 그 안으로 들어가서

 

$ git init

 

이렇게 하면 현재 디렉토리가 git 저장소가 된다. 이 명령이 실행되면 현재 디렉토리 안에 '.git'란 이름의 서브 디렉토리가 생긴다. 파일의 각 버전이 이 안에 차곡차곡 DB로 쌓일 것이다. 그렇다고 .git 디렉토리 안에 내가 파일을 직접 넣는 것이 아니고 git 명령어를 쓴다.

 

5_ 파일 올리기 - add, commit

 

Git 저장소에 파일을 올리는 것은 두 단계로 이루어진다. 먼저 파일을 staging area로 올리는 것이 'add' 명령이고, staging area에 있는 파일을 .git 저장소에 DB로 올리는 것이 'commit' 명령이다.

 

$ git add *.c
$ git add LICENSE

 

위와 같이 * 표를 쓸 수도 있고, commit하기 전까지 add를 여러 번 사용할 수도 있다.

 

$ git commit -m 'initial project version'

 

이렇게 하면 여태까지 add 명령어를 써서 올린 모든 파일이 최신 버전으로 쌓인다.

 

6_ 남이 만든 최신 버전 복사해 가져 오기

 

Github에는 내가 보고 수정해도 되는 남이 만든 코드들이 많다. 누군가가 만든 코드의 최신 버전을 내 로컬 컴퓨터로 통째 가져 오려면 다음과 같이 한다.

 

$ git clone https://github.com/cronaldo/libgit1

 

여기서 'cronaldo'는 사람 ID이고 'libgit1'은 가져올 소스가 들어 있는 디렉토리 이름으로 Git에서는 특별히 repository(줄여서 repo)라 한다. 이 명령을 쓰면 현재 내 디렉토리 내에 'libgit1'란 이름의 디렉토리가 만들어지고 그 안에 최신 버전의 소스들이 저장되며 .git 디렉토리도 안에 생성된다.

 

'libgit1' 외에 다른 이름의 디렉토리를 만들어 가져오려면 위와 같은 명령에 끝에 내가 원하는 디렉토리 이름만 하나 더 써 주면 된다.

 

$ git clone https://github.com/cronaldo/libgit1 mylib

 

이렇게 하면 아까는 libgit1이란 이름으로 저장되던 것이 mylib이란 이름으로 저장된다.

'Git & Github' 카테고리의 다른 글

Git 의 작업 단계, 상태 확인 등  (0) 2018.08.17
Posted by jujaeuk
,

* 포스팅 수정(2020. 8. 21): 상인(Merchant), 탈영병(Deserter) 카드의 5th 에디션 룰 개정 사항이 있어서 반영했습니다.

 

이 포스팅은 카탄 도시와 기사에 나오는 진보 카드들에 대한 글입니다. 진보 카드는 세 종류가 있습니다. 노란색 '무역(trade)', 파란색 '정치(policics)', 녹색 '과학(science)'입니다. 진보 카드는 카탄의 개발 카드와 비슷하게 사용하지만 사용법에 차이가 조금 있습니다. 1) 네 장까지 킵할 수 있습니다. 다섯 장 째가 들어오면 갖고 있는 카드 중 한 장을 쓰지 않고 버려야 합니다. 2) 내 턴 아무 때나 몇 장이라도 사용할 수 있습니다. 3) 내가 가져온 카드가 승점(victory point) 카드인 경우 바로 공개하고 승점을 받아야 합니다.

 

1_ 무역(trade)

 

무역 진보 카드는 전부 여섯 종류로 제일 단순합니다. Merchant가 여섯 장, Resource Monopoly가 네 장, 나머지 Master Merchant, Merchant Fleet, Trade Monopoly, Commercial Harbor가 각각 두 장씩 총 열 여덟장입니다.

 

 

무역 진보 카드

 

1) Merchant

 

이 카드를 사용하면 보라색 원뿔 모양의 Merchant 말을 자기 정착지, 도시 또는 메트로폴리스를 건설한 땅에 놓습니다. Merchant 말이 있는 땅의 자원으로 (자원이든, 상품이든) 2:1 트레이드가 언제든 가능합니다. (즉 내 정착지가 지어진 밭에 놓았으면 밀 두 장으로 원하는 자원 한 장을 가져올 수 있음) Merchant 카드는 사용했더라도 은행에 반납하지 않고 자기 앞에 보이게 놓아두고, 승점 1점이 주어집니다. Merchant 카드는 다른 플레이어가 Merchant를 사용할 때까지 유효합니다.

 

다른 플레이어가 Merchant를 사용하게 되면 Merchant 말이 옮겨지겠지요. 그리고 내 앞에 놓여 있던 Merchant 카드를 은행에 반납하고 Merchant를 이용한 트레이드 권한과 승점 1점이 모두 무효화됩니다.

 

초반에는 자원 수급을 위해 쓰지만 후반에는 승점 목적으로 더 많이 쓰게 됩니다. 경쟁자의 승점을 깎아 먹기 위해 쓰기도 하고, 내가 내는 순간 +1점이기 때문에 마지막에 한 번에 경기를 끝내기 위해 아껴 두기도 합니다.

 

2) Master Merchant

 

한 명의 플레이어를 정해 그가 가진 자원 및 상품 카드(진보 카드는 제외)를 보고 원하는 두 장을 가져올 수 있습니다.

 

3) Merchant Fleet

 

현재 턴에서 무제한 2:1 트레이드가 가능합니다. 같은 자원 두 장만 있으면 원하는 자원 한 장으로 교환할 수 있습니다. 자원에서 자원으로, 상품에서 상품으로 교환이 가능한데 자원에서 상품으로, 또는 상품에서 자원으로 교환은 안됩니다.

 

4) Resource Monopoly

 

자원 하나를 지목하면 다른 플레이어는 지목된 자원을 최대 두 장까지 줘야 합니다. (없으면 안 줘도 됩니다.) 카탄에서는 두 장 제한이 없었는데 도시와 기사에서는 제한이 생겼습니다.

 

5) Trade Monopoly

 

상품 하나를 지목하면 다른 플레이어는 지목된 상품을 최대 한 장까지 줘야 합니다.

 

6) Commercial Harbor

 

모든 다른 플레이어를 상대로, 내 자원 한 장을 주면 상대는 상품 한 장을 줘야 합니다. 만약 상품이 없다면 그 플레이어와는 교환을 안 합니다.

 

2_ 정치(Politics)

 

정치 진보 카드는 모두 아홉 종류가 있습니다. 그 중 Spy는 세 장, Constitution은 한 장, 나머지는 전부 두 장씩 있습니다.

 

 

정치 진보 카드

 

7) Spy

 

플레이어 한 명을 지목해 그가 가진 진보 카드를 보고 원하는 것 두 장을 뺏어 올 수가 있습니다.

 

8) Deserter

 

다른 플레이어를 지목하면 지목당한 플레이어는 자신의 기사 하나를 나에게 빼앗깁니다. (빼앗길 기사는 빼앗기는 플레이어가 선택합니다.) 빼앗은 기사는 같은 레벨의 내 기사로 교체해서 쓸 수 있습니다. 교체할 내 기사가 남아 있지 않을 경우 맵에서 치워버릴 수 있습니다.

 

9) Warload

 

내가 가진 모든 기사를 활성화시킬 수 있습니다.

 

10) Diplomat

 

다른 플레이어의 오픈된(=길의 끝에 기사나 건물이 없는) 도로 하나를 맵에서 치워버릴 수 있습니다.

 

11) Intrigue

 

내 길이 다른 플레이어의 기사와 이어진 경우, 그 기사를 가져와 내 기사로 교체해서 쓸 수 있습니다. 교체할 기사가 남아 있지 않을 경우 맵에서 치워버릴 수 있습니다.

 

12) Consitution

 

승점 1점

 

13) Wedding

 

현재 나보다 승점이 높은 모든 플레이어가 가진 자원 또는 상품 카드 중 두장을 골라 줘야 합니다.

 

14) Saboteur

 

나와 승점이 같거나 나보다 승점이 높은 모든 플레이어는 가진 자원+상품 카드의 절반을 버려야 합니다.

 

15) Bishop

 

도둑을 옮길 수 있습니다. 7이나 기사로 옮기는 경우와는 달리, Bishop은 옮겨진 도둑이 있는 땅에 건물을 지은 모든 플레이어로부터 자원+상품 카드를 한 장씩 안 보고 뽑아서 뺏어 올 수 있습니다.

 

3_ 과학(Science)

 

과학은 모두 열 종류입니다. Engineer와 Printer만 한 장씩이고 나머지는 두 장씩 있습니다.

 

 

과학 진보 카드

 

16) Engineer

 

도시 벽(city wall)을 하나 지을 수 있습니다.

 

17) Smith

 

내가 가진 기사 모두를 한 레벨 씩 업그레이드할 수 있습니다. strong knight를 mighty knight로 업그레이드하려면 정치 캘린더가 세 장까지 넘겨져 있어야 합니다.

 

18) Irrigation

 

내 건물 중 하나가 밭 하나와 인접해 지어진 경우 곡식 두 장을, 밭 두 개와 인접해 지어진 경우 곡식 네 장을, 밭 세 개와 인접해 지어진 경우 곡식 여섯 장을 받습니다.

 

19) Mining

 

내 건물 중 하나가 산 하나와 인접해 지어진 경우 광물 두 장을, 산 두 개와 인접해 지어진 경우 광물 네 장을, 산 세 개와 인접해 지어진 경우 광물 여섯 장을 받습니다.

 

20) Alchemist

 

유일하게 주사위를 굴리기 전에 쓰는 카드입니다. 주사위를 굴리지 않고 주사위 숫자 두 개를 내가 원하는 숫자로 정할 수 있습니다. 이벤트 주사위는 따로 굴려야 합니다.

 

21) Medicine

 

정착지 하나를 도시로 업그레이드할 때 광물 두 장과 곡식 한 장만으로 가능합니다.

 

22) Inventor

 

맵에 있는 숫자 칩 중에 2, 6, 8, 12를 제외한 숫자 둘의 위치를 맞교환할 수 있습니다.

 

23) Road Building

 

길 두 개를 지을 수 있습니다.

 

24) Printer

 

승점 1점

 

25) Crane

 

현재 내 턴에서 몇 번이라도 사용 가능하며, 진보 카드 캘린더를 넘길 때 상품을 원래 조건보다 한 장씩 적게 내고 넘길 수 있습니다.

Posted by jujaeuk
,

 

플랫폼을 다룬 책은 요즘 엄청 많다. 그 중에 내가 이 책을 고른 건 전에 양면시장에 관한 문헌들을 보다가 이 사람 이름을 본 적 있어서다. 이 책의 저자 중 마셜 밴 앨스타인과 제프리 파커는 오래 전에 토마스 아이젠만이랑 하버드 비즈니스 리뷰에 양면시장 전략에 관한 기고를 한 적이 있다.

 

"플랫롬 레볼루션"은 이미 매우 유명한 현상이 되어 버린 플랫폼 비즈니스에 대해서 쓴 책이다. 구글, 애플, 페북이 앱스토어와 광고로 디지털 공간에서 양면시장 플랫폼의 공식을 정립한 애들이라면 에어비앤비와 우버는 IT를 기반으로 한 양면시장 플랫폼을 현실세계로 확장한 대표적 사례라 할 만하다. 성공한 플랫폼 기업들의 풍부한 사례와 함께, 이 책은 플랫폼이 성공하는 경제학적 원리인 양면시장 이론을 일단 쉽게 풀어서 설명해준 다음에, 플랫폼을 잘 만들려면 어떻게 해야 하는지를 단계별로 설명해 놨다. 마치 플랫폼 비즈니스를 실제로 하려는 사람에게 가르침을 주기 위한 교과서 같은 분위기를 풍긴다.

 

옛날엔 IT 분야에서 플랫폼이라 하면 '운영체제'를 일컫는 경우가 훨씬 많았다. 요즘은 플랫폼 하면 양자의 거래를 매개하는 사업을 가리키는 의미로 훨씬 더 많이 쓰인다. 잘 만든 플랫폼 하나가 IT 기술을 만나면 적은 돈으로 순식간에 전지구적인 스케일이 가능해지기 때문에 옛날 기업이 몇십년 걸려 이룩한 성장을 불과 몇년 만에 이뤄내는 일이 일어난다. 그게 가능한 이유는 바로 네트워크 효과 (=망 외부효과) 때문이며, 요즘은 조금 더 정교하게 양면시장으로 설명하며, 이 책에서 아주 쉽게 설명해 놨다. (사실 양면시장 이론에 관한 부분은 이 책에서 설명한 것 이상으로는 학술적으로도 별 의의는 없다고 생각한다. 내가 잘 이해를 못해서 그런 것일 수도 있지만.)

 

네트워크 효과는 양면시장 효과와 마찬가지로 쓰는 사람이 많아지면 효용도 증가하는 현상을 말한다. 휴대전화를 예로 들면, 우리 학교에서 휴대전화를 가진 사람이 단 두명 밖에 없다면 갖고 있는 사람한테는 큰 자랑은 되겠지만 그다지 쓸모는 없을 것이다. 대신 학교에 있는 대부분의 학생들이 휴대전화를 갖고 있다면 내가 가진 휴대전화가 엄청 유용해질 것이다. 딱히 품질을 개선하지 않아도 쓰는 사람이 많아졌다는 이유로 상품의 가치가 높아진다. 이런 게 네트워크 효과다.

 

네트워크 효과는 규제 측면에서 중요한 의미를 갖는데, 같은 품질의 네트워크 상품이 경쟁할 경우, 한 사람이라도 고객이 더 많은 상품이 더 높은 효용을 가져와 그로 인해 더 많은 고객을 끌어당기고, 이 과정이 반복되면 결국 한 기업이 시장 전체를 차지하게 된다는, 이른바 '자연독점(누가 잘하고 잘못해서가 아니라 저절로 되는 독점)'이 발생한다. 독점이 되면? 독점 기업이 가격을 자기 맘대로 올릴 것이고 그 피해는 고스란히 소비자가 볼 것이다. 더군다나 교통, 통신, 전력 등 네트워크 산업은 필수재인 경우가 많아서 소비자는 가격이 올라도 수요를 줄이기가 매우 힘들다. 그래서 이론상 네트워크를 민간이 독점하면 헬게이트가 열린다. 그래서 모든 정부는 네트워크 산업을 민간에 맡기지 않고 정부가 관리하거나, 아니면 매우 높은 수준의 규제를 받는 상태로 민영화한다.

 

양면시장 효과는 둘로 나뉜 소비자 그룹을 서로 연결해주는 비즈니스에서 발생하는 네트워크 효과의 일종이다. 에어비앤비 같은 경우, 묵을 곳을 찾는 투숙객 입장에서 나 말고 다른 에어비엔비 투숙객이 늘어나는 게 딱히 나한테 좋을 이유는 없다. 대신에 에어비앤비에서 빈방을 제공하겠다는 사람이 많아진다면 투숙객인 나한테는 좋을 것이다. 그런데, 빈방 제공자 입장에서는 투숙객이 많아질수록 좋을 것이다. 즉, 매개되는 소비자 그룹을 둘로 나눴을 때 내가 속하지 않은 쪽 소비자가 늘어남으로써 나의 효용이 증가하는 것을 더 어려운 말로 "긍정적 교차 외부효과(positive cross-group externality)"라 하고 이것이 대표적인 양면시장 효과이다.

 

그럼 플랫폼이 아닌 기존의 기업을 뭐라고 부를까? 책에서는 "파이프라인"이라고 부른다. 소비자에게 제공되는 최종재 또는 최종서비스가 만들어지기까지 한줄로 (파이프라인처럼) 연결된 모든 과정을 기업이 직접 관여해 만들기 때문이다. 플랫폼은 직접 제품을 만드는 것이라기보다는 남이 만든 제품을 소비자에게 이어주는 일을 하는 것이기 때문에 고객평가와 피드백 같은 것들을 이용해 품질이 자율적으로 유지되도록 할 수가 있다. 품질을 일일이 체크해야 하는 "게이트키퍼"가 필요 없고, 소비자 커뮤니티를 통해 그것이 훨씬 더 잘 이루어지기 때문에 파이프라인은 플랫폼한테 밀릴수 밖에 없다고 한다. 플랫폼의 비즈니스 철학이란, 대체할 수 없는 핵심 기능에 대한 주도권은 절대 포기하지 않으면서 나머지 부분을 최대한 개방함으로써 고객을 효율적으로 만족시키는 데 있다. '개방'이란 단기적으로는 자기 살을 내어주는 것 같은 기분이겠지만 결국 업스케일을 통해 장기적으로는 더 큰 이익을 가져오게 된다는 것!

 

그렇다고 플랫폼이 만들기면 하면 장땡이냐 하면 그건 아니다. 플랫폼이 성공해 개나 소나 이용하게 되면 커뮤니티가 혼탁해지는 문제가 생기기 마련이다. 이용자가 빠져나가지 않고도 쓰레기 이용자를 효과적으로 걸러내도록 하는 문제가 플랫폼이 다음 단계에서 직면하게 되는 문제인데 이걸 "큐레이션 매커니즘"이라 부른다. 초창기에 성공적인 플랫폼 중에 이걸 잘 못해서 결국 망한 기업에 관한 내용도 소개된다. 에어비앤비나 우버는 소비자 평가에 의해 평점이 낮은 이용자 또는 제공자를 필터를 통해 매칭에서 걸러내거나 아니면 그들끼리 매칭시킴으로써 다수의 건전한 소비자들이 질 나쁜 소비자들로부터 피해를 보는 일을 효과적으로 차단하였다.

 

그 밖에, 플랫폼과 관련된 다양한 이슈들을 다룬다. 파이프라인은 어떻게 대응할까, 성공적인 플랫폼들의 전략은 어땠나, 규제는? 미래는? (여기서 구체적인 내용을 다 건너 뛰는 이유는 기억에 남는게 별로 없어서인지도 모른다.) 이러니 저러니 해도 결국 비즈니스의 성공을 결정하는 건 "엄청 잘 만든 서비스와 상품"일 거다. 그래도 요즘 잘 나가고 있는 플랫폼 기업에 대해 관심이 있다면, 그것이 시장에서 작동하는 원리를 알고 싶다면 읽어 보면 매우 유용한 책이다.

'' 카테고리의 다른 글

이번 휴가때 읽은 책, 맥스 태그마크의 "라이프 3.0"  (0) 2018.06.20
Posted by jujaeuk
,

처형이 선생님으로 일하시는 학교에 학생이 등교길에 냥줍한 녀석이랍니다.

갓난 아기를 일단 학교에 데리고 와 버려서 어디로 다시 보내야 할지도 모르겠고

이 아가는 뜬금없이 엄마와 생이별을 하게 됐습니다.

처형은 집에 데리고 와 있다가 키울 사람을 찾던 중에 안지랑 얘길 하게 되었고

우리가 데려가기로 결심하게 되었습니다.

 

 

어린 아이라 이동장 없이 박스에 수건을 깔고 넣어서 집까지 데리고 왔습니다.

집에 처음 도착했을 때의 모습입니다.

 

 

잠시도 쉬지 않고 꼼지락거렸습니다.

 

 

책상위에 올려놔 봤습니다.

키보드를 보면 이 아가의 사이즈를 짐작할 수 있습니다.

 

 

카메라를 올려다보는 모습

아기 고양이는 보통 눈빛이 에메랄드 색입니다. 크면 색이 변합니다.

 

 

박스에서 꺼내 방을 좀 돌아다니게 했습니다. 와이프와 점점 친해지기 시작합니다.

 

 

책꽂이 앞 삼순이 놀이기구 옆을 탐색합니다.

(내 소장목록 만화책은 덤...-_-)

 

 

새 박스로 전용 집과 미니 화장실을 만들어 줬습니다.

처음엔 좀 서툴렀지만 금새 배웠습니다. 고양이의 위대한 점이기도 하죠.

 

 

행동반경을 조심스럽게 조금씩 넓혔습니다.

병원에서 검사를 끝낼 때까지 당분간 삼순이와는 격리를 하느라

계속 이 방안에만 있었습니다.

 

 

놀다 지치면 저렇게 박스에 들어가 잠을 잤습니다.

이름은 보미라고 지었습니다. 별 뜻은 없고 그냥 봄에 왔다고...-_-

 

벌써 5년 전이네요.

Posted by jujaeuk
,

카탄 도시와 기사

 

* 포스팅 수정(2020년 8월 21일): 5th 에디션에서 룰 변경 내용이 있어 수정합니다.

 

변경 내용:

 

1) 상인(Merchant): 2:1 트레이드가 예전엔 자원 대 자원으로만 가능했는데 이젠 자원 대 상품으로도 가능합니다. 즉 항구(harbor)와 완전히 같아졌습니다.

 

2) 탈영병(Deserter): 상대의 기사를 하나 빼앗는 카드입니다. 과거에는 카드를 플레이하는 사람이 빼앗을 기사를 선택할 수 있었는데, 개정 룰에서는 탈영병 카드 플레이어는 기사를 빼앗을 다른 플레이어만 지목하고, 지목당한 플레이어는 빼앗길 기사를 선택할 수 있습니다.

 

3) 캘린더(Calendar): 메트로폴리스가 가능한 네 장째 캘린더를 넘길 때, 메트로폴리스 승격이 가능한 도시 하나가 이미 지어져 있지 않으면 상품 네 장이 있어도 네 장 째를 넘길 수 없습니다. 과거에는 '캘린더는 넘길 수 있되 메트로폴리스는 못 가져간다'였는데, 이젠 '캘린더도 못 넘긴다'가 되었습니다.

 

 

카탄 도시와 기사(Catan Cities and Knights)는 카탄의 확장판(Expansion)입니다. 플레이하려면 카탄(베이스 게임)이 필요합니다. 내가 먼저 짓는 것이 위주인 카탄과 달리, 카탄 도시와 기사는 상대방이 짓지 못하게 방해하는 것이 매우 중요한 게임으로, 공격받았을 때 생기는 분노는 직접 해 보지 않으면 모른다는 우정파괴 게임 되겠습니다.

 

카탄은 다른 글에서 이미 설명을 했기 때문에 도시와 기사에서 새로 추가된 룰을 중심으로 설명하겠습니다. 기본적으로 카탄의 룰을 따르되 새로 추가된 룰이 있습니다. 카탄에서 사용되던 개발 카드(Development Cards)와 가장 큰 군대(Largest Army)는 사용하지 않습니다. 대신 도시와 기사의 진보 카드(Progress Cards)를 개발 카드 대신 사용합니다. 진보 카드는 승점 카드를 포함하고 있으며 기사 카드는 없는데, 도시와 기사에서는 기사를 건물처럼 자원을 써서 맵에 배치합니다.

 

1_ 주사위

 

도시와 기사는 흰색과 빨간색 주사위에 더해 이벤트 주사위까지 총 세 개의 주사위를 굴립니다. 이벤트 주사위는 여섯 면에 노란색, 파란색, 초록색 이벤트와 까만색 바바리안 이벤트 세 개가 그려져 있습니다.

 

이벤트 주사위

 

2_ 스타팅 포인트

 

선을 정하면 선부터 시계 방향으로 정착지+도로를 하나씩 짓고, 그 다음엔 꼴등부터 반시계 방향으로 도시+도로를 하나씩 짓습니다. 도시에 인접한 땅의 자원을 한 장씩 받고 선부터 게임을 시작합니다.

 

3_ 자원 또는 상품 채취

 

도시와 기사에서는 자원(곡식, 벽돌, 양, 광물, 나무) 외에 상품(옷, 동전, 종이)이란 게 있습니다.

 

자원과 상품 카드

 

주사위를 굴려 나온 숫자가 있는 땅에 정착지가 있으면 해당 자원을 한 장 가져옵니다.

 

만약 도시가 있으면 자원이 곡식이나 벽돌인 경우 해당 자원 두 장을, 자원이 양, 광물, 나무인 경우 자원(resource) 한 장 + 상품(commodity) 한 장을 가져 오는데, 자원이 양이면 옷(cloth)을, 광물이면 돈(coin)을, 나무면 종이(paper)를 가져 오면 됩니다.

 

4_ 상품과 캘린더

 

자원은 건설에 사용하고, 상품은 캘린더를 넘길 때 사용합니다. 캘린더에서 옷은 노란색을, 돈은 파란색을, 종이는 초록색을 넘기는데 씁니다. 예를 들어, 옷 한 장을 내면 노란색 캘린더 첫번째 한 장을 넘길 수 있습니다. 이벤트 주사외의 노란 이벤트 그림과 함께 빨간 주사위가 1, 2가 쓰여져 있는 것을 볼 수 있습니다. 이 말은 주사위를 굴렸을 때 노란색 이벤트와 함께 빨간 주사위 색깔이 1, 2이면 노란색 진보 카드 한 장을 받아올 수 있다는 뜻입니다. 노란색 캘린더의 두번째 장을 넘기려면 옷 두 장을 내야 합니다. 넘기면 빨간 주사위의 숫자가 3까지 늘어나 있습니다. 그만큼 진보 카드를 받을 가능성이 높아집니다.

 

캘린더

 

5_ 도시 벽(city wall)

 

 

벽돌 두 장을 쓰면 내가 지은 도시에 벽을 건설할 수 있습니다. 7이 나왔을 때 갖고 있는 자원+상품이 일곱 장보다 많은 사람은 가진 카드의 절반을 버려야 하는데 도시 벽이 하나 있는 플레이어는 카드 절반을 버리는 조건 '7장'이 '9장'으로 올라갑니다. 벽이 두 개면 '11장', 세 개면 '13장'이 됩니다. 도시 벽은 도시 하나에 하나를 짓든 세개를 짓든 상관없습니다.

 

도시 벽(city wall) - 도시 밑에 방석처럼 깔려 있다

 

6_ 기사

 

플레이어는 세 종류의 기사를 각각 두 개씩 갖고 있으며 한쪽 면은 흑백, 다른 쪽 면은 컬러로 인쇄되어 있습니다. 양과 광물을 쓰면 스몰 나이트 하나를 내 도로로 연결된 노드에 흑백 면이 위로 가게 배치할 수 있습니다. 정착지나 도시 같은 건물은 바로 옆에 인접해서 지으면 안된다는 제한이 있는데 기사는 그런 제한이 없습니다. 흑백면이 위로 가 있으면 비활성화(inactive) 기사인 것이고, 곡식을 한 장 사용하면 기사 하나를 뒤집어 컬러 면이 위로 가게 하고 활성화(activate)시킬 수 있습니다. 양과 광물을 한 장 씩 더 쓰면 스몰 나이트를 스트롱 나이트로 업그레이드할 수 있습니다. 양+광물을 또 한 번 쓰면 스트롱 나이트를 마이티 나이트로 업그레이드할 수도 있는데 마이티 나이트 업그레이드는 파란색 캘린더를 세 장 이상 넘긴 사람만 할 수 있습니다. 스몰 나이트의 힘(strength)은 1, 스트롱 나이트 힘은 2, 마이티 나이트 힘은 3입니다. 나이트의 힘은 나중에 바바리안 어택을 막을 때 필요합니다.

 

왼쪽부터 스몰 나이트, 스트롱 나이트, 마이티 나이트

 

7_ 바바리안

 

 

바바리안 타일 위 스타팅 포인트에 바바리안 쉽을 올려 놓고 시작하는데, 만약 주사위를 굴려 이벤트가 검은색 바바리안이면 바바리안 쉽을 한칸씩 움직입니다. 바바리안이 마지막 위치까지 오게 되면 바바리안은 카탄 섬을 공격합니다.

 

바바리안 타일과 바바리안 쉽

 

플레이어들은 게임 내내 경쟁 관계이지만 바바리안 공격은 모든 플레이어들이 가진 기사의 힘을 합쳐서 물리치는 개념입니다.

 

바바리안의 힘은 카탄 맵에 지어진 도시의 개수로 결정됩니다. 플레이어의 힘은 카탄 맵에 있는 활성화된 모든 나이트의 힘의 합으로 결정됩니다. 동점이거나 플레이어의 힘이 바바리안보다 크면 바바리안을 막은 것이고, 플레이어의 힘이 바바리안보다 작으면 바바리안을 못 막은 것이 됩니다.

 

바바리안을 막는데 성공했으면, 활성화된 기사의 힘이 가장 큰 한 명의 플레이어가 '카탄의 수호자(defender of catan)' 카드를 한 장 받습니다. 디펜더는 승점 1점입니다. 기사 힘이 가장 큰 플레이어 두 명 이상이 나왔다면 디펜더 카드는 아무도 못 먹습니다.

 

카탄의 수호자(defender of catan)

 

바바리안을 막는데 실패했으면, 활성화된 기사의 힘이 가장 작은 한 명의 플레이어가 자기가 가진 도시 하나를 정착지로 다운그레이드시킵니다. 기사 힘이 가장 작은 플레이어가 두 명 이상이면 그들 모두 도시 하나를 정착지로 다운그레이드시켜야 합니다. 다운그레이드 될 도시가 시티 월을 갖고 있으면 월도 사라집니다.

 

바바리안 공격이 끝났으면 바바리안은 처음 위치로 돌아가고 맵의 모든 기사들은 비활성화 상태로 돌아갑니다.

 

8_ 기사의 또 다른 기능

 

기사는 바바리안을 막는 것 외에 내 땅에 들어온 도둑을 쫓을 수 있습니다. 단 도둑이 있는 땅에 내 기사가 있어야 하며, 그 기사는 이전 턴에서 이미 활성화가 되어 있어야 합니다. 도둑을 쫓으면 기사는 비활성화가 되고 쫓아낸 도둑은 원하는 땅 아무 곳으로 보내 그 곳에 정착지나 도시가 있는 다른 플레이어 한 명을 선택해 자원 한 장을 안 보고 뺏어 올 수 있습니다.

 

기사의 또 다른 기능은 내 도로를 따라 움직이는 겁니다. 좋은 자리를 차지하기 위해 다른 플레이어의 기사를 쫓을 수도 있습니다. 조건은 쫓을 기사의 위치에 내 도로가 연결되어 있고, 그 도로를 따라 내가 사용할 기사가 이전 턴에서 활성화된 상태로 있어야 하며, 내 기사의 힘은 상대 기사보다 쎄야 합니다. 기사를 쫓고 나면 쫓겨난 기사는 자신의 도로를 따라 다른 곳으로 이동해야 하는데 만약 이동할 다른 위치가 없으면 맵에서 사라집니다. 내가 움직인 기사는 비활성화됩니다.

 

9_ 메트로폴리스

 

세 종류의 캘린더 중 어느 한 종류로 네 장을 가장 먼저 넘기게 되면 내 도시 중 하나가 메트로폴리스가 됩니다. 도시에 노란색 말을 덮어 씌워서 표시합니다. 메트로폴리스는 바바리안 어택을 막는데 실패해도 정착지로 다운그레이드되지 않습니다. 하지만 무너지지 않는 것은 메트로폴리스 뿐이므로, 만약 내가 건설한 것이 메트로폴리스 하나이고 도시는 하나도 없다면 활성화된 기사가 하나도 없더라도 바바리안 어택 시 나는 피해를 안 보지만 메트로가 아닌 도시가 하나라도 더 있다면 그 도시는 바바리안 공격에 무너질 수 있으니 기사를 써서 수비를 해야 합니다. 메트로폴리스 하나는 승점 4점으로 계산됩니다.

 

메트로폴리스

 

나중에 같은 색깔로 캘린더 네 장을 넘긴 사람은 메트로폴리스가 될 수 없습니다. 캘린더를 보면 전부 다섯장까지 넘기게 되어 있습니다. 상대의 메트로폴리스를 빼앗는 방법이 하나 있는데 상대가 캘린더 네 장을 넘겨서 메트로가 된 상태에서 내가 상대보다 먼저 해당 색깔 캘린더의 다섯장째를 넘기면 됩니다. 상대는 메트로를 반납하고 도시로 다운그레이드됩니다.

메트로폴리스가 가능한 네 장째 캘린더를 넘길 때, 메트로폴리스 승격이 가능한 도시 하나가 이미 지어져 있지 않으면 상품 네 장이 있어도 네 장 째를 넘길 수 없습니다.

 

10_ 도둑 규칙 변경

 

도시와 기사에서는 도둑 규칙이 약간 변경되었습니다. 첫번째 바바리안 어택이 있기 전에는 7이 나와도 도둑이 이동하지 않습니다. 다만 자원+상품 카드가 7장 초과인 플레이어는 가진 카드의 절반을 버려야 하는 것은 여전합니다.

 

11_ 진보 카드

 

진보 카드는 사용하지 않고 네 장까지 보관할 수 있습니다. 다섯장 째가 들어오면 그 중 한 장은 골라서 쓰지 않고 버려야 합니다.

 

진보 카드 중 승점카드가 나왔으면 즉시 공개해야 합니다. 이건 게임 끝날 때까지 승점을 숨길 수 있는 카탄과는 다른 규칙입니다.

 

진보카드는 건설이나 공격과 관련된 매우 다양한 기능들이 있습니다. 써 있는대로 사용하면 되는데 너무 많아서 여기서 설명은 생략하겠습니다.

 

데저터와 스파이

최악의 공격용 진보카드인 데저터(deserter)와 스파이(spy) - 데저터는 상대 나이트 하나를 맵에서 없애버리고 스파이는 상대가 갖고 있는 진보카드를 보고 한 장을 선택해 뺏을 수 있다.

 

12_ 종료

 

승점 13점을 먼저 얻는 플레이어가 승자가 됩니다.

 

도시와 기사는 온갖 공격이 난무하는 게임으로, 카탄과는 달리 플레이어를 매우 흥분시킵니다. 선두가 되면 집중 견제를 받아 다시 끌어내려지고, 다른 플레이어가 선두를 차지하는 일이 게임 내내 반복되기 때문에 후반이 되면 거의 모든 플레이어가 종료까지 겨우 한두 점을 남겨 놓고 일촉즉발의 상황이 되곤 합니다.

 

* 혹시 맘이 내키면 나중에 도시와 기사의 진보 카드들을 설명해 보도록 하지요. 감사합니다!

Posted by jujaeuk
,

지금까지의 텍스트 마이닝은 주로 웹으로부터 데이터를 긁어 모아 분석을 하는 거였는데 텍스트 마이닝을 좀 더 유용한 도구로 만들기 위해 웹 텍스트 뿐만 아니라 바이너리 형태로 보관되어 있는 pdf 문서 파일의 텍스트까지 긁을 수 있으면 좋겠다고 생각해서 방법을 찾아 보았다.

오픈소스 도구인 Xpdf는 pdf 파일에서 텍스트 정보를 추출해 txt 파일로 변환해준다. Xpdf를 설치하고 나서 명령 프롬프트에서 pdftotext 명령을 실행시키면 된다. 인터넷에서 알려주는 방법은 Xpdf를 설치한 다음에 R에서 tm 패키지를 설치하고 readPDF() 함수를 쓰라고 나와 있는데 해보면 잘 안된다. 내가 알아낸 방법은 tm 패키지 필요없이 system() 함수를 통해 명령 프롬프트에서 할 일을 R에서 해주는 방식으로 txt 파일을 생성한 다음에 그 txt 파일을 readLines() 함수로 불러들이는 것이다.

1. Xpdf 설치

압축 풀고 영어로 된 INSTALL 문서를 잘 읽어 보면 된다. INSTALL 읽기 싫어하는 사람을 위해서 한글판 설명서를 만들었다.

 

먼저, xpdfreader.com에 들어가서,

 

xpdf > Download > Download the Xpdf command line tools 들어가서 내 OS에 해당하는 파일을 찾고, Download language support packages for Xpdf에서 Korean을 클릭해 xpdf-korean.tar.gz를 다운 받는다.

 

- Windows (update 2020. 2. 13)

1) Windows 32/64-bit:download를 클릭해 zip 파일을 다운 받아서 압축을 푼다.

2) 압축을 풀면  xpdf-tools-win-x.xx라는 이름의 디렉토리가 생기는데 이 디렉토리 이름을 Xpdf로 바꿔서 C:\Program Files 디렉토리에 복사
3) C:\Program Files\Xpdf\DOC\sample-xpdfrc를 xpdfrc로 바꿈

4) xpdf-korean.tar.gz 파일 압축을 풀면 xpdf-korean 디렉토리가 생기는데 이 디렉토리를 korean으로 이름을 바꿔서 C:\Program Files\Xpdf에 복사
5) add-to-xpdfrc 파일 안에 있는 모든 내용을 복사한 후, xpdfrc 파일을 열어 맨 뒤에 붙이고, 방금 붙인 내용에서 UNIX 식으로 되어 있는 경로를 Windows에 맞게 C:\Program Files\Xpdf\korean으로 변경
6) 윈도우에서 내 PC 아이콘을 우클릭 > 속성 > 고급 시스템 설정 > 환경변수 들어가서 시스템 변수 아래 목록에서 Path 선택하고 편집
7) 새로 만들기 누르고 C:\Program Files\Xpdf 쓴 다음에 확인 누르고 리부팅

 

- macOS

1) xpdfbin-mac-3.04.tar.gz를 다운 받아서 압축을 푼다.
2) bin64 안에 있는 파일 전부를 /usr/local/bin에 복사
3) doc 안에 있는 파일 중 *.1은 /usr/local/man/man1로 복사하고, *.5는 /usr/local/man/man5로 복사
(원본에는 "Copy the man pages (*.1 and *.5) to /usr/local/man/man1 and /usr/local/man/man5."라고 되어 있음)
4) doc 안에 있는 sample-xpdfrc를 xpdfrc로 이름을 바꾸어 /usr/local/etc에 복사
5) foolabs.com/xpdf > Download > Language Support Packages 들어가서 xpdf-korean.tar.gz 파일을 다운 받아서 압축을 푼다.
6) xpdf-korean 디렉토리를 korean으로 이름을 바꿔서 /usr/local/share/xpdf에 복사
7) 그 안에 add-to-xpdfrc 파일 안에 있는 내용을 복사한 후, xpdfrc파일을 열어 맨 뒤에 붙임

2. R에서 Xpdf를 이용해 pdf를 txt로 변환

Xpdf를 설치하고, korean language support도 같이 설치했으면

1) R에 R.utils 패키지를 설치하고 라이브러리를 부른다.
2) system() 함수를 이용하여 pdftotext를 실행시킨다.

system() 함수는 프롬프트 명령을 R에서 실행시키게 해 주는 함수다. 맥에서 프롬프트 명령은

 

C:\Users\jaeuk> pdftotext -enc UTF-8 report.pdf

 

이걸 실행시키면 UTF-8 인코딩의  report.txt가 생겨나는데, 그리고 나서 R에서는 이렇게 써 주면 된다.

 

> system('pdftotext -enc UTF-8 report.pdf')


3) 위에 작업이 성공했으면 TXT 파일이 생겼을 테니 readLines() 함수로 TXT파일을 불러들인다.

 

> words<-readLines("report.txt",encoding="UTF-8")
Posted by jujaeuk
,

 

이 책은 인공지능을 포함하여 생명의 미래에 관해 가장 멀리까지 전망하고 거기에 대응해 지금 인류가 해야 할 일을 적은 책이다. 물리학자가 썼기 때문에 과학적 신빙성을 갖고 있으면서도 저자는 어느 다른 책보다 큰 상상력을 발휘했다.

 

"인공지능 시대에서 사람으로 있기(begin human in the age of artificial intelligence)"라는 부제가 붙어 있다. 저자는 스웨덴 출신의 물리학자로 학부때 경제학을 했다가 전공을 물리로 옮긴 약간은 특이한 이력을 갖고 있다. (이과에서 경제로 옮긴 사람만 많이 봐서...) 최근에 발달한 인공지능(딥러닝이라던가)을 다뤘다기 보다는 훨씬 넓은 범위에서 이야기했다. 저자는 지능을 가진 개체는 자연이든 인공이든 모두 생명으로 보고, 기술을 통해 자신의 하드웨어(사람으로 치면 뼈하고 근육?)를 얼마든지 재설계할 수 있는, 지능을 갖춘 인공 생명이 생명의 다음 단계(3.0)라고 주장한다. (넘버링은 책 마케팅에서 매우 중요하다.) 초반부 래리 페이지와의 대화에서 지구 인류가 언젠가는 우주로 나갈테고 그땐 지금의 사람 몸으로는 너무 비효율적이지 않겠느냐고 하면서 인공지능의 우월성을 이야기한 장면은 상당히 설득력이 있어 보였다.

 

이정도 논리를 메스꺼움 없이 전개할 수 있는 사람이라면 인공지능이 판치는 미래에 자연 인간이 생존할 수 있느냐의 여부가 굳이 관심사일 필요가 있을까 싶기도 한데 언젠가 사람을 능가할수도 있는 범용인공지능의 목적이 사람의 목적과 충돌하는 일이 없도록 하려면 지금 어떤 일을 해야 할까를 후반부에 심도 있게 다뤘다. 그래서 엘론 머스크를 설득해 거액의 연구비를 타내고, 생명의 미래 연구소를 만들어 범세계적인 AI 안전성 연구를 진행하고 있다는 얘기가 소개되었다. 그래서 아시모프의 "로봇 3원칙"보다 훨씬 자세한 "아실로마 원칙"이라는 것도 만들었다. 아마도 최근에 KAIST의 국방 AI 연구에 대응해 글로벌한 보이코트가 있었던 배후에 얘네들이 있었지 싶다.

 

맥스는 우리 인류의 미래를 굳이 낙관적으로 보는 거 같진 않지만 기술의 발전 가능성이나 전망에 대해서는 극도로 긍정적이다. 즉 "과학적으로 불가능하다"고 증명되지 않으면 거의 뭐든지 일어날 가능성이 있다고 믿는다. 반면 과학자들의 오랜 논쟁거리 중 하나인 지적 외계생명체를 만날 가능성은 매우 낮게 봤는데 그건 나름의 근거를 달아 놨다. 이를테면 과거 공룡은 인류보다 훨씬 오랫동안 지구를 지배하며 번성해 왔지만 지적 생명체로 진화하지는 못했다는 점을 들어 그것이 확률적으로 매우 희박하다고 주장한다던가...

 

생명의 한계에 대한 과학적 디테일이 들어간 설명은 독자의 취향에 따라서 호불호가 갈릴 듯하다. "인공지능과 관련된 최근 연구와 가까운 미래에 대한 전망"까지만 관심사인 나에게는 읽다가 "그만해, 이 미친..." 소리가 나올 정도로 쓸데 없이 자세하게 다루는 부분들이 있다.

'' 카테고리의 다른 글

마셜 밴 앨스타인 외, "플랫폼 레볼루션"  (0) 2018.07.01
Posted by jujaeuk
,

가상화폐(virtual currency), 암호화폐(cryptocurrency)는 엄밀히 말하면 뜻이 좀 다르지만 일일이 따지기 귀찮아서 정의는 생략하고 대충 섞어 썼습니다. - 주

 

블록체인은 사토시 나카모토라는 이름을 가진 신원미상 인물이 만든 (것으로 나오는) 암호화폐 비트코인(bitcoin)의 위변조 및 이중지불 방지 기술이다. 정작 사토시가 2008년에 쓴 논문에는 비트코인이란 이름은 나와도, 블록체인이란 이름은 없다. 다만 논문에서 사토시는 '전자 코인을 디지털 서명의 체인으로 정의'했고, 블록을 생성하는 원리를 설명했기 때문에 나중에 누군가가 뜻을 잘 살려 붙인 이름인 듯하다. 비트코인은 2008년 세계금융위기와 대규모 양적완화로 인한 달러화 가치 하락을 겪으면서, 중앙은행과 같은 통화기구에 대한 불신이 팽배하던 무렵에 탄생한, 제3자의 간섭 없이 돌아갈 수 있는 가상화폐 시스템을 만들고자 하는 소망의 결실이라 할 수 있다. 네트워크 기반의 가상화폐가 신뢰를 얻기 위해서는 다음의 두 가지 문제가 해결되어야 했다.

 

첫째, 비잔티움 장애 허용(Byzantine Fault Tolerance)

 

이건 '비잔틴 장군의 문제'라고 이름 붙여진 네트워크 안정성에 관한 문제로, 1982년 (LaTeX 개발자로 유명한) 레슬리 람포트(Leslie Ramport)가 처음 제기한 문제다. 이게 뭐냐 하면 네트워크의 일부가 공격을 받아 위변조가 발생해도 올바른 원본을 계속 유지하기 위해서는 네트워크가 어떤 조건을 충족시켜야 하는가에 관한 문제이다. 가상화폐는 손으로 만질 수 있는 동전이나 지폐가 없이 오직 전자 정보로만 가치가 유효하기 때문에 해킹 공격에 더욱 민감할 수밖에 없으니 가상화폐가 이용자들로부터 신뢰를 얻기 위해서는 반드시 해결되어야 하는 문제였다.

 

둘째, 이중지불(double spending)

 

고의든 아니든 가상화폐는 같은 돈을 두 명의 다른 사람에게 지불하거나 같은 사람에게 두 번 지불하는 문제가 발생할 수 있는데, 이러한 문제를 근본적으로 차단할 수 있는 방법이 강구되어야 한다.

 

사토시 나카모토는 본인의 논문 'bitcoin'에서 이 두 가지 문제를 디지털 서명과 작업증명(proof-of-work)으로 해결할 수 있다고 주장했다.

 

1_ 거래는 어떻게 이루어지나

 

내가 가진 가상화폐에 대한 소유권이 유효하려면 내 이름으로 된 지갑에 돈이 들어왔다는 사실이 기록으로 남아 그 기록이 다른 모든 사용자들로부터 사실로 인정받을 수 있어야 한다. 여기서 이중지불의 문제를 해결하는 가장 확실한 방법은 거래내역을 네트워크의 모든 참가자에게 공개하는 것이다.

 

"내가 누군가에게 돈을 받은 사실이 전부 공개된다고? 싫다."

 

오해하지 마시라. 거래 내역이 해시(hash) 함수를 통해 암호로 변환된 값이 네트워크의 모든 노드와 공유한다는 뜻이니까. 내가 거래한 기록은 남아 있지만 그 내용을 볼 수는 없다.

 

비트코인 시스템에서 거래가 어떻게 기록으로 남는지 살펴보자. A가 B에게 코인을 준다면 그 코인에는 다음과 같은 기록이 만들어져 붙는다.

 

1) 이전의 거래 + 돈 받을 사람의 public key(계좌번호)를 해시로 변환한 값

2) 돈 보내는 사람의 서명

 

이 두가지를 합쳐서 새로운 거래가 된다. 이 새로운 거래는 다음 거래가 발생할 때 돈 받을 사람의 public key와 함께 해시로 변환된다. 즉, 새로운 거래 기록을 남기기 위해서는 이전 거래 기록이 반드시 필요하다. 그렇게 기록은 계속 연결되고 그래서 체인이라고 부른다.

 

2_ hash는 암호화기술이다

 

비트코인에서는 해시 함수를 많이 쓴다. 해시란 임의의 길이의 데이터를 고정된 길이의 데이터로 바꿔주는 함수이다. 예를 들어, 가장 많이 쓰는 SHA256 해시 함수는 다음과 같이 문자열을 64자리 16진수로 변환한다.

 

문자열 '1'을 해시 함수로 변환하면,

 

6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b

 

문자열 '2'를 해시 함수로 변환하면,

 

d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35

 

이번엔 에미넴의 노래 'Lose Yourself'의 가사 앞부분을 변환해 보자. 'His palms are sweaty, knees weak, arms are heavy There's vomit on his sweater already, mom's spaghetti He's nervous, but on the surface he looks calm and ready To drop bombs, but he keeps on forgettin''를 해시 함수로 변환하면,

 

617e7ff97107bf08baf2d9cafe78ec31eb58e86e515d479bd51544e45e0f7c02

 

이런 결과를 얻는다. 여기서 알 수 있는 해시 함수의 특징이 있다.

 

1) 입력값이 같으면 출력값도 항상 같다.

2) 입력값이 조금만 달라도 완전히 다른 출력값이 나온다.

3) 입력값이 아무리 짧거나 아무리 길어도 항상 같은 길이의 출력값이 나온다.

4) 출력값을 보고 입력값을 유추하는 것은 불가능하다.

5) 내가 원하는 출력값이 나오게 하는 것도 불가능하다.

 

비트코인에서는 작업증명 수단으로 hash 함수를 사용한다.

 

3_ 이중지불의 문제는 timestamp로 해결한다

 

거래(transaction)가 발생하면 거래기록에 시간도장(timestamp)을 찍는다. 새로운 거래기록은 이전 거래기록으로부터 시작하는 거니까, 만약 이중지불이 일어나면 같은 이전 거래기록을 가진 두 개의 서로 다른 새로운 거래기록이 생긴다는 뜻이다. 그 두 개의 기록에 시간도장이 찍혀 있다면 시간상 먼저 발생한 거래만 인정하고 나머지는 폐기하면 된다. 이것으로 이중지불을 해결할 수 있다.

 

4_ 비잔틴 장군 문제는 작업증명(proof-of-work)으로 해결한다

 

여기서 채굴이란 개념이 나온다. 비트코인은 10분 동안 네트워크에서 일어난 모든 거래기록을 모아 hash로 변환하고 블록을 만든다. 블록을 만드는 주체는 네트워크 노드라고 불리는 참가자들인데, 비트코인은 이 블록을 그냥 만들게 놔두지 않고 노가다를 시킨다. 그 노가다의 내용이란

 

1) 10분 동안의 거래기록에 값 하나를 붙여라. 그 값을 nonce라고 부른다.

2) nonce 값은 내가 맘대로 정할 수 있다. 대신

3) nonce와 함께 hash로 변환한 결과는 앞에 0이 열개 붙어야 한다.

 

저 '0 열개'가 바로 노가다의 양을 결정짓는 난이도 되시겠다. (난이도는 얼마나 빨리 블록이 생성됐냐에 따라 자동으로 조정된다. 빨리 생성됐으면 난이도가 올라가고 느리게 생성됐으면 난이도가 내려간다. 0의 개수가 달라지겠지.)

 

해시 함수의 특징으로 소개한 것들 중에 다섯번 째가 바로 원하는 출력값이 나오게 할 수 없다는 것이었는데, 앞에 0이 열개 붙는 출력값이 나오게 하라니? 다른 방법이 없다. 결국 우연히 그런 값이 나올 때까지 다른 nonce 값을 넣어서 hash 함수를 써보는 방법을 무한 반복하는 것이다.

 

0이 열개 붙는 hash 결과가 나올 확률이 얼마냐면 16의 10승 분의 1, 즉 2의 40승 분의 1이다. 대략 1조 분의 1 정도 된다. 같은 짓을 1조 번 반복해 시도하면 그 중에 한번 정도 저 값이 나온다는 얘기다. 조건을 만족하는 hash 값이 나오게 하는 nonce 값을 가장 먼저 찾은 노드는 블록을 완성하고 보상으로 12.5btc를 받는다. 이걸 채굴이라고 한다. 흔히 채굴을 "어려운 수학 문제를 풀어서 비트코인을 받는 것"이라고 하는데 엄밀히 말하면 문제를 푸는 게 아니라 답이 맞을 때까지 수없이 아무 답이나 써보고 찍는 거에 가깝다.

 

도대체 왜 이런 일을 시키는 것일까? 바로 비잔틴 장군 문제를 해결하기 위해서이다. 노드들이 작업증명을 하게 하면 다음과 같은 이점이 생긴다.

 

1) 만약 해커가 비트코인 거래기록을 위변조하려면 노드가 되어 위변조된 거래 기록이 담긴 블록을 만들어 붙여야 하고, 그러려면 저 노가다를 해야 한다.

2) 그런데 그렇게 만든 블록도 다른 노드가 만든 블록이랑 비교해 다수결에서 밀리면 폐기된다.

3) 그래서 확실히 위변조에 성공하려면 작업증명 노가다를 하는 과반수의 노드를 확보해야 한다.

4) 일단 그런 컴퓨팅 파워를 해커가 갖는 게 불가능하지만 만약 가졌다고 하면 그것은 이 시스템의 주인이 되는 것과 다름없어지는 것이고, 위변조를 통해 얻는 이익보다 채굴로 보상을 받고, (자기 꺼인) 네트워크를 살리면서 얻는 이익이 더 클수밖에 없다.

 

이래서 비잔틴 문제가 해결된다. 즉, 작업증명이라 불리는 채굴 노가다는 블록체인 네트워크를 공격하려는 해커들의 이점을 없애기 위해 괜히 시키는 삽질이라고 할 수 있다.

 

5_ 블록이 계속 쌓이면 언젠가 디스크 공간이 터지는 것 아님?

 

신뢰할 수 있는 새로운 블록이 생성되고 나면 그 이전의 거래 기록은 꼭 보관하지 않아도 된다. 이전 거래는 지워버리는 것이 아니라 전체를 합쳐서 hash로 변환해 블록에 넣는다. 이전 거래정보가 아무리 많아 봤자 hash로 변환하면 32byte밖에 안된다. 이것을 Merkle Root라고 한다.

 

암튼 비트코인의 블록체인은 이런 원리로 작동한다.

 

6_ 비트코인은 2100만개까지만 생산된다는데

 

최초의 비트코인은 2008년 (아마도 7월)에 거래가 발생했다. 그 때 이후로 10분마다 한번씩 블록이 생겼다. 사토시 나카모토는 블록이 생길 때마다 최초의 nonce 값을 찾은 사람이 50btc를 가져갈 수 있으며, 보상금은 액수는 4년이 지나면 절반으로 감소하도록 규칙을 짰다. 그러니까 2012년 7월 이후로는 블록 생성 보상이 25btc가 되었으며, 2016년 7월 이후로는 12.5btc가 되었다. 아마도 2020년 7월이 지나면 6.25btc가 될 것이다. 무한등비급수를 써서 계산해 보면 앞으로 생산될 비트코인의 총액이 나온다.

 

하루 24시간을 10분으로 나누면 하루에 144개의 블록이 생성된다는 계산이 나온다. 초기값을 계산해보면 블록 하나당 50btc, 하루에 144블록, 1년이 365일, 그리고 4년(윤년 포함) 해서

 

50 x 144 x (365 x 4 + 1) = 10,519,200

 

즉, 처음 4년 만에 10,519,200 btc가 생기고, 그 다음 4년이 지나면 그것의 절반인 5,259,600btc가 생긴다. 전부 합하면

 

10,519,200 / (1 / 0.5) = 21,038,400btc

 

이렇게 된다. 이 숫자가 앞으로 생산된 비트코인의 최대치이다. 계산 결과에 의하면 알려진 것보다 38,400이 더 나오는데 저 숫자는 어떻게 되는 건가. 나도 잘 모르겠다. 만약에 비트코인의 채굴이 다 끝나면 노가다를 하는 네트워크 노드들은 어떤 보상을 받는가? 그땐 거래 수수료를 올려 받아서 보상받는다.

 

사토시가 고안한 블록체인 기반의 암호화폐는 적어도 지금의 상상력으로는 "절대로 뚫리지 않을 것 같은 보안성"이 가장 큰 장점이다. 총통화량이 정해져 있어 인플레이션이 발생하지 않을 것이라는 것도 장점이다. 또한 중앙기관을 배제한 통화 시스템을 만들었다는 점에서 혁명적 발명이라 할 수 있다. 중앙기관이 없어서 좋은 점은 무엇일까? 일단 하나 있기는 하다. 기관이 일을 너무 못해서 기존의 통화체계가 완전히 망가졌을 때도 비트코인은 망가지지 않을 거라는 거다.

 

비트코인이 꼭 장점만 있다고는 할 수 없다. 화폐의 가치는 통화량에 따라서 달라질 수 있지만 암호화폐는 시스템의 신뢰도에 따라서 가치가 달라질 것이다. 현재의 암호화폐 가치가 큰 변동성을 갖는 이유는 아마도 정확한 가치에 대한 합의가 이루어지지 않았기 때문으로 보이며, 장래에 비트코인의 사용처가 지금보다 명확해지면 변동성에 대한 문제도 어느 정도는 해결되지 않을까 예상한다. 다만 지금으로서는 상상하기 어려운 블록체인 시스템의 보안 문제가 단 한번이라도 발생할 경우엔 하루아침에 거품이 될 위험도 상존한다.

 

국가경제에 암호화폐가 차지하는 비중이 커질수록 자국 통화만을 통제할 수 있는 중앙은행의 통화정책은 그 영향력이 점점 약화될 것이다. 통화정책은 특정 국가 내에서 단기적으로 발생하는 경기 침체나 유동성 문제를 해결해 줄 수 있는 기능이 있는데 암호화폐의 비중이 커질수록 그 기능을 쓰기가 점점 어려워질 것이다.

 

암호화폐가 앞으로 어떻게 쓰이게 될런지는 나도 모르겠다. 다만 작년 한해 우리나라에서 불어닥쳤던 비트코인 투기 광풍은 알파고나, 사물인터넷 따위는 저리가라 할 정도로 "혁명"에 가까운 모습을 보여 줬다. 정부가 거래소 폐쇄까지 거론하면서 강하게 압박하고, 논객들이 암호화폐를 "금융사기"로 몰아가는 모습은 통제가 불가능하고 예측이 불가능한 미래에 대한 두려움이 그대로 투영된 결과이다. 모르면 두렵고 두려우면 피하게 된다. 하지만 피하고 싶어도 피할 수 없을 것 같으면 두려움은 일파만파가 된다. 방법은 하나. 더 많이 알기 위해 노력하는 것이다. 그것이 혁명에 대처하는 우리의 자세가 아닐까 한다.

 

참고문헌

Nakamoto, Satoshi. "Bitcoin: A peer-to-peer electronic cash system." (2008).

https://blog.iwanhae.ga/introduction_of_bitcoin/

'시사' 카테고리의 다른 글

스마트시티?  (0) 2020.08.17
2018년 7월 고용 동향  (0) 2018.08.27
고용 통계 기본 용어에 대해 알아보자  (0) 2018.08.27
인터넷 망중립성 논쟁과 Economides and Tåg(2012)  (0) 2018.04.29
시장획정과 SSNIP 테스트  (0) 2018.04.09
Posted by jujaeuk
,