Hyperledger Fabric์€ ์™œ Kafka์™€ SBFT๋ฅผ ์„ ํƒํ–ˆ๋‚˜

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ ์‚ดํŽด๋ณผ ๊ฒƒ์€, ๊ฐœ์ธ์ ์œผ๋กœ ์ œ๊ฐ€ ๊ฐ€์žฅ ์–ด๋ ต๊ณ  ํ—ท๊ฐˆ๋ ธ๋˜ ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ์ด์ƒํ•˜๊ฒŒ Hyperledger Fabric์˜ ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ฐธ ์ดํ•ดํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค. ์ด๋”๋ฆฌ์›€์˜ POS(Casper)๋‚˜ EOS์˜ dPOS ๊ฐ™์ด ์ƒ๋Œ€์ ์œผ๋กœ ๋ช…ํ™•ํžˆ ์žกํžˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋…์€ ์•„๋‹ˆ์—ˆ์ฃ . ์กฐ๊ธˆ ๋” ์„ธ์„ธํžˆ ๋œฏ์–ด๋ณด๋‹ˆ ๊ทธ๋Ÿด ๋งŒํ•œ ์ด์œ ๊ฐ€ ์žˆ์—ˆ๋‹ค๋Š” ๊ฐœ์ธ์ ์ธ ๊นจ๋‹ฌ์Œ(?)์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์กฐ๊ธˆ์ด๋ผ๋„ ์ฐพ์•„๋ณด์‹  ๋ถ„์ด๋ผ๋ฉด Byzantine General Problem ๋ผ๋Š” ๋ง์„ ์ž˜ ์•„์‹ค ๊ฒ๋‹ˆ๋‹ค. ๋น„์ž”ํ‹ด ์žฅ๊ตฐ์ด ๋ฉ”์‹ ์ €๋ฅผ ํ†ตํ•ด ์˜ค๋Š” ์ „๊ฐˆ๋“ค์˜ ๋‚ด์šฉ์„ ์–ด๋–ป๊ฒŒ ๊ฒ€์ฆํ•  ๊ฒƒ์ธ๊ฐ€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐ์—์„œ ์‹œ์ž‘ํ–ˆ์ฃ . ๊ทธ๋ฆฌ๊ณ  ์ด๊ฑธ ํ•ด๊ฒฐํ•˜๊ณ ์ž ๋“ฑ์žฅํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค์ด POW, POS, dPOS ๋“ฑ๋“ฑ, ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ๋งํ•˜๋Š” ๋ธ”๋ก์ฒด์ธ์˜ ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž…๋‹ˆ๋‹ค. ๊ทธ ๋งŽ์€ ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ Kafka๋Š” ์‚ฌ์‹ค ๋งŽ์ด ๋“ค๋ฆฌ๋Š” ๋‹จ์–ด๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ์™œ ๊ทธ๋Ÿฐ์ง€, HLF์˜ ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋„๋Œ€์ฒด ๋ฌด์—‡์ธ์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Hyperledger Fabric์˜ ํŠธ๋žœ์žญ์…˜ ์‚ฌ์ดํด: Execute-Order-Validate

์ถœ์ฒ˜: https://www.ibm.com/blogs/research/2018/02/architecture-hyperledger-fabric/

์ง์ „ Architecture 4 ํฌ์ŠคํŒ…์—์„œ ํŠธ๋žœ์žญ์…˜์˜ ์ฒ˜๋ฆฌ ๊ณผ์ •์„ ๋‹ค๋ฃจ์—ˆ๊ณ , ์ตœ์ดˆ Architecture 1 ํฌ์ŠคํŒ…์—์„œ Execute-Order-Vaildate ์„ ์ฒ˜์Œ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ ๋‹จ์—ฐ HLF๋ฅผ ๋‹ค๋ฅธ ๋ธ”๋ก์ฒด์ธ ํ”Œ๋žซํผ๊ณผ ๊ตฌ๋ถ„์ง“๋Š” ์ฐจ๋ณ„ ํฌ์ธํŠธ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ๋Š” Order-Execute ์ฒ˜๋ฆฌ๋งŒ ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” Non-determinism์˜ ๋ฌธ์ œโ€Šโ€”โ€Šํ•˜๋‚˜ ์ด์ƒ์˜ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜์—ฌ ๊ฐ’์˜ ์‹ ๋ขฐ์„ฑ์„ ์ €ํ•˜์‹œํ‚ค๋Š” ๋ฌธ์ œโ€Šโ€”โ€Š๋Š” Solidity์™€ ๊ฐ™์€ ๋„๋ฉ”์ธ ํŠน์ˆ˜ ์–ธ์–ด๋ฅผ ๋ณ„๋„๋กœ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ํ•ด๊ฒฐํ•˜๊ณ , ์†Œ์œ„ ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ด ํŠธ๋žœ์žญ์…˜์— ์ ์šฉ์ด ๋˜๋Š” ๊ฒ๋‹ˆ๋‹ค.

์ด์— ๋ฐ˜ํ•ด HLF์—์„œ๋Š” ๋ช‡๋ช‡ ๋…ธ๋“œ๋“ค์ด ๋จผ์ € ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๊ฐ’์„ ๊ฒ€์ฆํ•˜๋Š” ๋‹จ๊ณ„, ๋ชจ๋“  ๋…ธ๋“œ์—๊ฒŒ ์ ์šฉํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Execute ๋‹จ๊ณ„์—์„œ๋Š” ์ผ๋‹จ ํ”ผ์–ด๋“ค์ด ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๊ฐ’์„ ์„œ๋กœ ๋น„๊ตํ•˜๋Š” ์ž‘์—…์„ ํ•˜๋Š” ๊ฒ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Order ๋‹จ๊ณ„์—์„œ ๊ทธ ์ˆœ์„œ๋ฅผ ์ •๋ ฌํ•˜์—ฌ ๋ชจ๋“  ํ”ผ์–ด์—๊ฒŒ ์ „์†กํ•˜์ฃ . ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฐ ํ”ผ์–ด์—์„œ ์ˆœ์„œ๋Œ€๋กœ ์š”์ฒญ ์˜จ ๋‚ด์šฉ์„ ์ ์šฉํ•˜๊ณ  Validate ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„์—์„œ ๋งˆ์นจ๋‚ด ์›์žฅ์— ์—…๋ฐ์ดํŠธ๊ฐ€ ์ด๋ฃจ์–ด์ง€๋Š” ๊ฑฐ์ฃ . ์ด Execute-Order-Validate ์ด๋ผ๋Š” ๋‹จ๊ณ„ ์ž์ฒด๊ฐ€ ์ผ์ข…์˜ ํ•ฉ์˜์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ ์ •ํ™•ํžˆ ๋งํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๋ธ”๋ก์ฒด์ธ ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ๋Š” ์•ฝ๊ฐ„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด Kafka๋ฅผ ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์„๊นŒ? ๊ทธ๋ ‡์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค.HLF์˜ ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ ์ข…์ข… ๋ถˆ๋ฆฌ์šฐ๋Š” Kafka๋Š” ์‚ฌ์‹ค Order ๋‹จ๊ณ„์—๋งŒ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ •ํ™•ํ•œ ํ‘œํ˜„์ด๋ผ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ณด๋‹ค ์ •ํ™•ํžˆ ํ‘œํ˜„ํ•ด๋ณด์ž๋ฉด HLF๋Š” ํ•ฉ์˜๊ฐ€ 2์ค‘์œผ๋กœ ์ผ์–ด๋‚˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. Execute, Validate ๋‹จ๊ณ„์—์„œ๋Š” ๋„คํŠธ์›Œํฌ์—์„œ ์ •์˜ํ•˜๊ณ  ์žˆ๋Š” Endorsement Policy์— ๋”ฐ๋ผ์„œ ์ž์ฒด์ ์ธ Endorse ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ˆ˜ํ–‰๋˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๋„คํŠธ์›Œํฌ์— ์ •์˜ํ•œ โ€˜์ •์ฑ…โ€™์— ๋”ฐ๋ผ์„œ ํ•ฉ์˜ ์—ฌ๋ถ€๊ฐ€ ๊ฒฐ์ •๋˜๋Š” ๊ฒ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ค‘๊ฐ„์˜ Order ๋‹จ๊ณ„์—์„œ, ํ•ด๋‹น ๋„คํŠธ์›Œํฌ์—์„œ ์ง€์ •๋œ Orderer๋“ค์ด Kafka ๋ฐฉ์‹์œผ๋กœ, ์ œ์ถœ๋œ ํŠธ๋žœ์žญ์…˜์„ ์ •๋ ฌํ•˜๊ณ  Orderer ๊ฐ„์˜ ํ•ฉ์˜๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ฒŒ ๋˜๋Š”๊ฑฐ์ฃ .

๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์ธ Kafka๋ฅผ ์™œ?

์ถœ์ฒ˜: https://blog.cloudera.com/blog/2014/09/apache-kafka-for-beginners/

Kafka๋Š” ์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด ๋ธ”๋ก์ฒด์ธ ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ ‘ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. Kafka๋Š” Linkedin์—์„œ ๊ฐœ๋ฐœํ•œ ๋ถ„์‚ฐ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์œผ๋กœ, ์‹ค์‹œ๊ฐ„ ๋Œ€์šฉ๋Ÿ‰ ๋กœ๊ทธ ์ฒ˜๋ฆฌ์— ํŠนํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค๋ฅธ ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค์ด BFTโ€Šโ€”โ€Š์ „๋‹ฌ๋˜๋Š” ๋‚ด์šฉ์— ๋Œ€ํ•œ ๊ฒ€์ฆ์„ ํ•˜๋Š”โ€Šโ€”โ€Š์ธ ๋ฐ˜๋ฉด, Kafka๋Š” CFT (Crash Fault Tolerance) ์ž…๋‹ˆ๋‹ค. ์ˆœ์„œ๋งŒ ์ •ํ™•ํžˆ ์Œ“์ด๋„๋ก ํ•ด์ฃผ๋Š” ๊ฒ๋‹ˆ๋‹ค. Kafka์— ๋Œ€ํ•ด ๋” ์•Œ๊ณ  ์‹ถ์œผ์‹  ๋ถ„๋“ค์€ ์—ฌ๊ธฐ๋ฅผ ํ™•์ธํ•ด๋ณด์„ธ์š”.

๊ทธ๋ ‡๋‹ค๋ฉด HLF๋ฅผ ๊ณผ์—ฐ ์ง„์ •ํ•œ โ€˜ํ•ฉ์˜โ€™๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๋ธ”๋ก์ฒด์ธ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑธ๊นŒ์š”? ๊ฐœ์ธ์ ์œผ๋กœ Kafka๋ฅผ ์ฐจ์šฉํ•œ ๊ฒƒ์€, HLF์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•œ ์•„ํ‚คํ…์ฒ˜์  ๊ณ ๋ฏผ์—์„œ ๋น„๋กฏ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ตœ์ดˆ 0.x HLF์—์„œ๋Š” PBFT ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์žฅ์ฐฉํ•˜๊ณ  ์žˆ์—ˆ์ฃ . ๊ทธ๋ ‡์ง€๋งŒ ์ง€์†์ ์œผ๋กœ ์„ฑ๋Šฅ(TPS)์— ๋Œ€ํ•œ ๋น„ํŒ์ด ์ œ๊ธฐ๋˜์—ˆ๊ณ , HLF ๊ฐœ๋ฐœ์ง„๋“ค์€ ์ด์— ๋Œ€ํ•œ ๋Œ€์ฑ…์„ ๋งˆ๋ จํ•ด์•ผ ํ–ˆ์„ ๊ฒ๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ๊ฐ•๋ ฅํ•˜์ง€๋งŒ ํšจ์œจ์ ์ธ ํ•ฉ์˜ ๋ฐฉ์‹์„ ์ฐพ๊ฒŒ ๋œ ๊ฑฐ์ฃ . Kafka๋Š” pub-sub ๊ตฌ์กฐ ๋‚ด์—์„œ ๋น ๋ฅด๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ pull ๋ฐฉ์‹์œผ๋กœ ์ „๋‹ฌํ•˜์—ฌ ์ˆ˜์‹  ํ”ผ์–ด ์ธก์˜ ๋ถ€๋‹ด์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ๋งค๋ ฅ์ ์ธ ์†”๋ฃจ์…˜์ด์—ˆ์Šต๋‹ˆ๋‹ค. BFT ์  ๊ฒ€์ฆ์€ ํ•  ์ˆ˜ ์—†์ง€๋งŒ Permissioned Blockchain์˜ ์„ฑ๊ฒฉ์„ ์ ๊ทน ํ™œ์šฉํ•ด CA ๋‹จ์— ์œ„ํ—˜์„ 1์ฐจ ์ฐจ๋‹จํ•˜๊ณ , ์ถ”๊ฐ€๋กœ endorsement policy๋กœ ๊ตฌ๋ฉ์ด ์—†์ด ๋ณด์™„ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Simple BFT

HLF์˜ ์กฐ์ง ๊ฐ„ BFT์  ๊ฒ€์ฆ์„ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ์‰ฝ์Šต๋‹ˆ๋‹ค. HLF์˜ ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ modular ๋ฐฉ์‹์œผ๋กœ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์–ด๋–ค ํ•ฉ์˜ ๋ฐฉ์‹์„ ํƒํ• ์ง€ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด์ฃ โ€” ์ด ๋ฐฉ์‹์˜ ์ ์šฉ์€ Order ๋‹จ๊ณ„์—๋งŒ ๋œ๋‹ค๋Š” ์ ์„ ์œ ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. HLF๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๊ณ ์ž ํ•˜๋Š” BFT ๊ฒ€์ฆ ๋ฐฉ์‹์€ SBFT ์ž…๋‹ˆ๋‹ค. 1.3 release ๊ธฐ์ค€ ์•„์ง ํฌํ•จ๋˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ, ์˜ฌ ์ดˆ ๋ฐœํ‘œํ•œ 2018 roadmap์—์„œ๋Š” ํฌํ•จ๋˜์–ด ์žˆ์—ˆ์œผ๋‹ˆ 1.4 release์—์„œ๋ถ€ํ„ฐ ์ œ๊ณตํ•˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•ด๋ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ† ๋ก  ์ฐธ๊ฐ€

์ด๋ฉ”์ผ์€ ๊ณต๊ฐœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•„์ˆ˜ ์ž…๋ ฅ์ฐฝ์€ * ๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.