์•ˆ๋…•ํ•˜์„ธ์š”?
์˜ค๋Š˜์€ ์ง€๋‚œ ํฌ์ŠคํŒ…์— ์ด์–ด ์šด์˜๋ชจ๋“œ๋กœ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™(์ดํ•˜, ์ฒด์ธ์ฝ”๋“œ) ๊ฐœ๋ฐœ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ๋ชจ๋“œ์—์„œ์˜ ์ฒด์ธ์ฝ”๋“œ ๊ฐœ๋ฐœ ์‚ฌ์ดํด์„ ๋˜์ง‘์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
๊ฐœ๋ฐœ๋ชจ๋“œ์—์„œ๋Š” ๋ธ”๋ก์ฒด์ธ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ๊ณผ ๋ณ„๋„๋กœ ๊ฐœ๋ฐœ PC์—์„œ ์ฒด์ธ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œ ํ›„ Validating Peer์˜ ์ฃผ์†Œ์™€ ์ฒด์ธ์ฝ”๋“œ ์ด๋ฆ„์„ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์…‹ํŒ…ํ•˜๊ณ  ๋นŒ๋“œ๋œ ์ฒด์ธ์ฝ”๋“œ ์‹คํ–‰ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜์—ฌ REST API๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งž๋‚˜์š”?^^
๊ทธ์™€ ๋Œ€๋น„๋˜๊ฒŒ ์šด์˜๋ชจ๋“œ์—์„œ๋Š” ๊ฐœ๋ฐœ ์™„๋ฃŒ๋œ ์ฒด์ธ์ฝ”๋“œ๋ฅผ Validating Peer ์ปจํ…Œ์ด๋„ˆ์— ๋ณต์‚ฌํ•ด ๋„ฃ๊ณ , REST API๋กœ deploy๋งŒ ํ˜ธ์ถœํ•˜๋ฉด ๋ธ”๋ก์ฒด์ธ ๋„คํฌ์›Œํฌ ์ „์ฒด์— ์ฒด์ธ์ฝ”๋“œ๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿผ, ์ง€๊ธˆ๋ถ€ํ„ฐ ์šด์˜๋ชจ๋“œ์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ์ฒด์ธ์ฝ”๋“œ๋ฅผ ๋ฐ˜์˜ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

1. ์šด์˜์„œ๋ฒ„์—์„œ์˜ ์ฒด์ธ์ฝ”๋“œ ๋””ํ”Œ๋กœ์ด ๊ณผ์ •

์šด์˜๋ชจ๋“œ์—์„œ์˜ ์ฒด์ธ์ฝ”๋“œ๋Š” ์–ด๋–ค ๊ณผ์ •์„ ๊ฑฐ์ณ ๋ฐ˜์˜์ด ๋˜๋Š”์ง€ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
์šด์˜๋ชจ๋“œ์—์„œ ์ฒด์ธ์ฝ”๋“œ ๋””ํ”Œ๋กœ์ด๊ฐ€ ์š”์ฒญ๋˜๋ฉด ์š”์ฒญ์„ ๋ฐ›์€ Peer๋Š” ๋ธ”๋ก์ฒด์ธ ๋„คํฌ์›Œํฌ์ƒ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  ํ”ผ์–ด์—๊ฒŒ ๋™์ผํ•œ ์ฒด์ธ์ฝ”๋“œ๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ , ์ฒด์ธ์ฝ”๋“œ๋ฅผ ์ „์†ก๋ฐ›์€ ํ”ผ์–ด๋“ค์€ ๊ฐ์ž ์ฒด์ธ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•˜์—ฌ ์ฒด์ธ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
์ตœ์ข…์ ์œผ๋กœ ์•„๋ž˜์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋ธ”๋ก์ฒด์ธ์˜ ํ”ผ์–ด๋“ค์€ ์ฒด์ธ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜์—ฌ ๊ตฌ๋™๋˜๋Š” ํ˜•ํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ๋ชจ๋“œ์—์„œ๋Š” ์ฒด์ธ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ๋นŒ๋“œํ•˜์—ฌ ์‹คํ–‰ํ–ˆ์ง€๋งŒ ์šด์˜๋ชจ๋“œ์—์„œ๋Š” Peer๊ฐ€ ๊ทธ ์—ญํ• ์„ ๋Œ€์‹ ํ•ฉ๋‹ˆ๋‹ค.
์ฒด์ธ์ฝ”๋“œ์˜ ๋นŒ๋“œ๋Š” ์ฒด์ธ์ฝ”๋“œ๋ฅผ ์ „์†ก๋ฐ›์€ ๊ฐ Validating Peer๊ฐ€ hyperledger/fabric-baseimage Docker ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฒด์ธ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•˜์—ฌ ์ฒด์ธ์ฝ”๋“œ ๊ตฌ๋™์„ ์œ„ํ•œ Docker ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ณ , ์‹คํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
Validating Peer๋Š” Docker Remote API ์„œ๋น„์Šค์— ์ฒด์ธ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ Docker ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๋ฐ ์‹คํ–‰์„ ์š”์ฒญํ•˜๊ณ ,
Docker ์—”์ง„์€ hyperledger/fabric-baseimage๋ฅผ ์ด์šฉํ•˜์—ฌ ์ฒด์ธ์ฝ”๋“œ Docker ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
์•„๋ž˜ ๊ทธ๋ฆผ์€ ์šด์˜๋ชจ๋“œ์—์„œ ๋””ํ”Œ๋กœ์ด์‹œ Validating Peer์—์„œ ์ผ์–ด๋‚˜๋Š” ๊ณผ์ •์„ ๊ฐ„๋žตํ•˜๊ฒŒ ํ‘œํ˜„ํ•œ ๊ทธ๋ฆผ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ตœ์ข…์ ์œผ๋กœ ๋””ํ”Œ๋กœ์ด๊ฐ€ ๋˜๊ณ  ๋‚œ ์ดํ›„์— docker ์ด๋ฏธ์ง€ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฒ€์ƒ‰ํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

Validating Peer์—์„œ Docker engine์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ์–ด์•ผ๊ฒ ์ฃ ? ๊ทธ ํ†ต๋กœ๊ฐ€ Docker Engine API (Docker Remote API) ์ž…๋‹ˆ๋‹ค.

2. Validating Peer ์ด๋ฏธ์ง€ ์ˆ˜์ •

Docker machine์€ VM ํ™˜๊ฒฝ์„ ๋งŒ๋“ค ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ https ํ†ต์‹ ์„ ํ•˜๋„๋ก Docker ์—”์ง„์„ ๊ตฌ๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์œ„์—์„œ ์„ค๋ช…ํ•œ๊ฒƒ๊ณผ ๊ฐ™์ด Validating Peer๊ฐ€ Docker engine API์— ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” SSL Certificate๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ์ง€๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์ด์™€ ๊ด€๋ จํ•œ ์„ค์ • ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์‹คํ–‰์ค‘์ธ Validating Peer ์ปจํ…Œ์ด๋„ˆ์— certificate๋“ค์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  2. ์‹คํ–‰์ค‘์ธ Validating Peer ์ปจํ…Œ์ด๋„ˆ์— ํ„ฐ๋ฏธ๋„๋กœ ์ ‘์†ํ•ด์„œ ์„ค์ •ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Validating Peer์—์„œ ๋น ์ ธ๋‚˜์™€์„œ ์‹คํ–‰์ค‘์ธ Validating Peer ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€ ๋ช…์œผ๋กœ commit ํ•ฉ๋‹ˆ๋‹ค.
  4. ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€๋กœ Validating Peer๋ฅผ ๋‹ค์‹œ ๊ตฌ๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์ฐจ๊ทผ์ฐจ๊ทผ ์„ค์ • ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

2.1 Validating Peer ์ปจํ…Œ์ด๋„ˆ์— SSL ์ธ์ฆ์„œ ๋ณต์‚ฌ

์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์— ํŒŒ์ผ ๋ณต์‚ฌํ•˜๋Š” ๋ช…๋ น์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ์—์„œ ๋กœ์ปฌ๋กœ ๋ณต์‚ฌ
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH

๋กœ์ปฌ์—์„œ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ณต์‚ฌ
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH

๊ทธ๋ฆฌ๊ณ  docker-machine์„ ํ†ตํ•ด์„œ ์ƒ์„ฑ๋œ VM์˜ SSL ์ธ์ฆ์„œ๋Š” ๊ฐ OS ๋ณ„๋กœ ๋‹ค์Œ์˜ ์œ„์น˜์— ์žˆ์Šต๋‹ˆ๋‹ค.

  • MacOS

  • Windows

์œ„์˜ ์ด๋ฏธ์ง€์—์„œ์™€ ๊ฐ™์€ ์œ„์น˜์—์„œ key ๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  cert.pem, ca.pem, key.pem ํŒŒ์ผ์„ key ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  • MacOS
$ cd $HOME/.docker/machine/machines/blockchain
$ mkdir key
$ cp {cert,ca,key}.pem key
  • Windows

๋‹ค์Œ ์ˆœ์„œ๋กœ key ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์— ๋ณต์‚ฌํ•ด ๋„ฃ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ID ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ Names๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

docker ps

hyperledger/fabric-peer์— ํ•ด๋‹นํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ID๋ฅผ ํ™•์ธ ํ•˜์˜€์œผ๋ฉด ๋‹ค์Œ์˜ ๋ช…๋ น์„ ํ†ตํ•ด์„œ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

docker cp key ์ปจํ…Œ์ด๋„ˆID:/root/key

์œ„์˜ ๊ทธ๋ฆผ์„ ๊ธฐ์ค€์œผ๋กœ ๋ช…๋ น ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
docker cp key 4409df7072c4:/root/key
2.2 Validating Peer์˜ ์„ค์ •ํŒŒ์ผ ์ˆ˜์ •

์ธ์ฆ์„œ ๋ณต์‚ฌ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•˜์˜€์œผ๋ฉด ์ปจํ…Œ์ด๋„ˆ์—์„œ Peer์˜ ์„ค์ •ํŒŒ์ผ์— ์ธ์ฆ์„œ ์œ„์น˜๋ฅผ ๋ช…์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„  ๋จผ์ € Validating Peer๋กœ ์ ‘์†์„ ํ•ด์•ผ๊ฒ ์ฃ ? ๋‹ค์Œ์˜ ๋ช…๋ น์„ ํ†ตํ•ด์„œ ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.

docker exec -it ์ปจํ…Œ์ด๋„ˆID bash

์œ„ ๊ทธ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ๋ช…๋ น ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
docker exec -it 4409df7072c4 bash

์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ ‘์†์ด ๋˜๋ฉฐ ์„ค์ •ํŒŒ์ผ์˜ ์œ„์น˜๋Š” peer ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์— ์žˆ๋Š” core.yaml ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.
vi ๋“ฑ ์—๋””ํ„ฐ๋ฅผ ํ†ตํ•ด ์„ค์ •ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

์ตœ์ดˆ ์ ‘์†์‹œ vi ์—๋””ํ„ฐ ์„ค์น˜๊ฐ€ ๋˜์–ด์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์˜ ๋ช…๋ น์„ ํ†ตํ•ด์„œ ์„ค์น˜ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

$ apt-get update
$ apt-get install -y vim

๋‹ค์Œ๊ณผ ๊ฐ™์ด ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

$ cd peer
$ vi core.yaml

์„ค์ •ํŒŒ์ผ ์ €์žฅํ•˜์˜€์œผ๋ฉด ์ตœ์ข…์ ์œผ๋กœ exit ๋ช…๋ น์„ ํ†ตํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋น ์ ธ๋‚˜์˜ต๋‹ˆ๋‹ค.

2.3 Validating Peer commit

์ธ์ฆ์„œ ํŒŒ์ผ ๋ณต์‚ฌ์™€ ์„ค์ •ํŒŒ์ผ ์ˆ˜์ •์ด ์™„๋ฃŒ๋˜์—ˆ์œผ๋ฉด ์ˆ˜์ •๋œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ commit ๋ช…๋ น์„ ํ†ตํ•ด์„œ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 ์—ฌ๊ธฐ์„œ ์‚ฌ์šฉํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ID๋Š” 2.1 ํ•ญ๋ชฉ์—์„œ ํ™•์ธ๋œ ์ปจํ…Œ์ด๋„ˆ ID๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
docker commit 4409df7072c4 hyperledger/peer:1.0

์ •์ƒ์ ์œผ๋กœ commit์ด ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

docker images

2.4 ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹คํ–‰

์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋Š” docker-compose.yml ํŒŒ์ผ์ด ์žˆ๋Š” ์œ„์น˜์—์„œ ๋‹ค์Œ์˜ ๋ช…๋ น์„ ํ†ตํ•ด์„œ ์ค‘์ง€์‹œํ‚ต๋‹ˆ๋‹ค.

docker-compose down

์•ž์„œ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ๊ธฐ์ค€์œผ๋กœ docker-compose.yml ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
์ˆ˜์ •๋‚ด์šฉ์€ vp0์˜ ์ด๋ฏธ์ง€ ๋ช…๊ณผ CORE_VM_ENDPOINT์˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€, ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์ค„์—์„œ์˜ command ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค.
๋‹ค์Œ์˜ ํŒŒ์ผ์„ ๋ฐ›์œผ์…”์„œ ์‚ฌ์šฉํ•˜์…”๋„ ๋ฉ๋‹ˆ๋‹ค. https://github.com/mjkong/blockchain_hyperledger/blob/master/docs/Setup/prodmode/docker-compose.yml

membersrvc:
  image: hyperledger/fabric-membersrvc:x86_64-0.6.1-preview
  ports:
    - "7054:7054"
  command: membersrvc
vp0:
  image: hyperledger/peer:1.0
  ports:
    - "7050:7050"
    - "7051:7051"
    - "7053:7053"
  environment:
    - CORE_PEER_ADDRESSAUTODETECT=true
    - CORE_VM_ENDPOINT=https://192.168.99.100:2376
    - CORE_LOGGING_LEVEL=DEBUG
    - CORE_PEER_ID=vp0
    - CORE_PEER_PKI_ECA_PADDR=membersrvc:7054
    - CORE_PEER_PKI_TCA_PADDR=membersrvc:7054
    - CORE_PEER_PKI_TLSCA_PADDR=membersrvc:7054
    - CORE_SECURITY_ENABLED=true
    - CORE_SECURITY_ENROLLID=test_vp0
    - CORE_SECURITY_ENROLLSECRET=MwYpmSRjupbT
  links:
    - membersrvc
  command: sh -c "sleep 5; peer node start"

์ˆ˜์ •๋œ docker-compose.yml ํŒŒ์ผ์˜ ์œ„์น˜์—์„œ ๋‹ค์Œ์˜ ๋ช…๋ น์„ ํ†ตํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค

docker-compose up

3. ํ…Œ์ŠคํŠธ

์ง€๊ธˆ๊นŒ์ง€ ์šด์˜๋ชจ๋“œ๋ฅผ ์œ„ํ•œ ์„ค์ •์ž‘์—…์„ ์™„๋ฃŒํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ณผ์ •์„ ์™„๋ฃŒํ•˜์˜€๊ณ  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜์—ˆ์œผ๋ฉด REST API๋ฅผ ํ†ตํ•ด์„œ ํ…Œ์ŠคํŠธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
REST API๋กœ ํ…Œ์ŠคํŠธ ๊ณผ์ •์€ ๊ฐœ๋ฐœ๋ชจ๋“œ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์ด๋ฒˆ ๋ฌธ์„œ์—์„œ๋Š” ์ฐจ์ด์ ์— ๋Œ€ํ•ด์„œ๋งŒ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ๋ชจ๋“œ์˜ 4.ํ…Œ์ŠคํŠธ ํ•ญ๋ชฉ์„ ํ•จ๊ป˜ ๋ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
๋จผ์ € ์‹œ์ž‘ํ•ด ๋ณด๋Š” ๋ธ”๋ก์ฒด์ธ 04 โ€“ ๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™(์ฒด์ธ์ฝ”๋“œ) ๊ฐœ๋ฐœ

๋ฉค๋ฒ„์‰ฝ ์„œ๋น„์Šค๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ์˜ ์ˆœ์„œ๋กœ API ํ˜ธ์ถœ์„ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
registrar –> deploy –> invoke or query
๊ทธ ์ค‘ ๊ฐœ๋ฐœ๋ชจ๋“œ์™€ ์šด์˜๋ชจ๋“œ๋Š” deploy, invoke, query์—์„œ chaincodeID ํ•ญ๋ชฉ๋งŒ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

registrar ์€ ์„ค๋ช…์—์„œ๋Š” ์ƒ๋žตํ•˜์ง€๋งŒ ํ…Œ์ŠคํŠธ ์‹œ๋Š” ๋ฐ˜๋“œ์‹œ ์‹คํ–‰ํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

deploy

์šด์˜๋ชจ๋“œ์—์„œ ์ฒด์ธ์ฝ”๋“œ ๋””ํ”Œ๋กœ์ด๋Š” ์ฒด์ธ์ฝ”๋“œ ์†Œ์Šค๋ฅผ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์œผ๋กœ ๋ณต์‚ฌํ•œ ์ดํ›„ deploy API๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์—์„œ๋Š” ์ด๋ฏธ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์— ์กด์žฌํ•˜๋Š” ์ƒ˜ํ”Œ ์ฒด์ธ์ฝ”๋“œ๋ฅผ ๋””ํ”Œ๋กœ์ดํ•ฉ๋‹ˆ๋‹ค.

APIํ˜ธ์ถœ์„ ์œ„ํ•œ ์ „๋ฌธ์˜ ๊ฐœ๋ฐœ๋ชจ๋“œ์™€ ์ฐจ์ด์ ์€ chaincodeID์—์„œ path๋ฅผ ์ง€์ •ํ•ด์ค˜์•ผ ํ•˜๋Š” ์ ์ž…๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ๋œ ์ฒด์ธ์ฝ”๋“œ๋Š” ์‹คํ–‰์ค‘์ธ Validating Peer ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ณต์‚ฌ๋ฅผ ํ•ด์„œ deploy๋ฅผ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
๋ณต์‚ฌ๋ฅผ ํ•ด์•ผํ•˜๋Š” ์œ„์น˜๋Š” GOPATH ํ•˜์œ„์— ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋ณต์‚ฌ๋˜์–ด์•ผ ํ•˜๋ฉฐ, Validating Peer ์ปจํ…Œ์ด๋„ˆ์˜ GOPATH๋Š” /opt/gopath ์ž…๋‹ˆ๋‹ค.
๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด chaincodeID์˜ path์— ์ง€์ •๋œ ์ƒ˜ํ”Œ ์ฒด์ธ์ฝ”๋“œ์˜ ์ ˆ๋Œ€๊ฒฝ๋กœ๋Š” /opt/gopath/src/github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 ์ž…๋‹ˆ๋‹ค.

์ •์ƒ์ ์œผ๋กœ ๋””ํ”Œ๋กœ์ด๊ฐ€ ๋˜์—ˆ์œผ๋ฉด ๋‹ค์Œ ๊ทธ๋ฆผ์—์„œ์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›๊ฒŒ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  docker images ๋˜๋Š” docker ps ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•˜๋ฉด ๊ด€๋ จ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์‹คํ–‰ ์ค‘์ธ ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋””ํ”Œ๋กœ์ด ํ˜ธ์ถœ ๊ฒฐ๊ณผ์˜ message ์˜ ๊ฐ’์„ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. (invoke, query ์˜ ์ „๋ฌธ์—์„œ chaincodeID.name ์˜ ๊ฐ’์œผ๋กœ ์ž…๋ ฅํ•ด์„œ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.)


invoke, query

๋””ํ”Œ๋กœ์ด์˜ ๊ฒฐ๊ณผ๋กœ ๋ฆฌํ„ด๋œ ํ•ด์‹œ์ฝ”๋“œ๋ฅผ invoke, query ์—์„œ chaincodeID.name์œผ๋กœ ์ž…๋ ฅํ•˜์—ฌ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์˜ API ํ˜ธ์ถœ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด์„œ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.

  • invoke

  • query

4. ์ •๋ฆฌํ•˜๋ฉฐ

์ง€๊ธˆ๊นŒ์ง€ Docker ๊ธฐ๋ฐ˜์œผ๋กœ ๋ธ”๋ก์ฒด์ธ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ณ , ๊ฐœ๋ฐœ๋ชจ๋“œ์™€ ์šด์˜๋ชจ๋“œ์—์„œ์˜ ์ฒด์ธ์ฝ”๋“œ ๊ฐœ๋ฐœ ๋ฐ ์ ์šฉ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค.
์ด๋กœ์„œ Hyperledger Fabric ๊ธฐ๋ฐ˜์˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด๋‚˜ ์šด์˜ํ•˜๊ธฐ ์œ„ํ•œ ์•„์ฃผ ๊ธฐ๋ณธ์ ์ธ ํ™˜๊ฒฝ ์„ค์ •์€ ๊ฐ€๋Šฅํ•  ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค.
Hyperledger Fabric์€ ์šฐ์„  docker ์ด๋ฏธ์ง€๋กœ ๋ฐฐํฌ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— Docker๋ฅผ ์ž˜ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ๋ธ”๋ก์ฒด์ธ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์šด์˜ํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.