๐Ÿ“ IPFS ๊ฐ„๋‹จ ์ •๋ฆฌ

4
post-thumbnail

๐Ÿ” IPFS๋ž€

InterPlanetary File System ์˜ ์•ฝ์ž๋กœ ๋ถ„์‚ฐํ˜• ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ.
ํƒˆ์ค‘์•™ํ™” ์›น์„ ์ง€ํ–ฅํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์‹œ๊ฐ’(CID)์œผ๋กœ ์•”ํ˜ธํ™”ํ•˜์—ฌ ์ €์žฅ, ์ด๋ฅผ P2P ๋„คํŠธ์›Œํฌ์— ์ฐธ์—ฌํ•œ ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋“ค์— ๋‚˜๋ˆ  ์ €์žฅํ•œ๋‹ค.

๐Ÿš€ ๊ธฐ์ˆ ์˜ ํŠน์ง•๊ณผ ๋ชฉํ‘œ

IPFS๋Š” World Wide Web HTTP ํ”„๋กœํ† ์ฝœ ์„ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•œ ๋ถ„์‚ฐํ˜• ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ธํ„ฐ๋„ท ๊ณต์œ  ํ”„๋กœํ† ์ฝœ์ด๋‹ค.
๊ธฐ์กด ์›น์˜ ์ค‘์•™ํ™”๋œ ์„œ๋ฒ„์™€ ์ฃผ์†Œ ๊ธฐ๋ฐ˜ ํƒ์ƒ‰์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•˜๋‹ค.

ํƒˆ์ค‘์•™ํ™”

  • HTTP ํ”„๋กœํ† ์ฝœ ๊ธฐ๋ฐ˜์˜ Web์€ ์†Œ์ˆ˜์˜ ์„œ๋ฒ„์— ๋งŽ์€ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ฐฐํฌํ•˜๊ธฐ์— ์ •๋ณด์˜ ์ค‘์•™ํ™”๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
    ๋•Œ๋ฌธ์— ๋งŽ์€ ์ •๋ณด๋ฅผ ๋ฐฐํฌํ•˜๋Š” ์„œ๋ฒ„๊ฐ€ ๊ณต๊ฒฉ ๋ฐ›์œผ๋ฉด ์ด์™€ ์—ฐ๊ฒฐ๋œ ์ˆ˜๋งŽ์€ ๋…ธ๋“œ๋“ค์ด ์ •๋ณด๋ฅผ ์†ก์ˆ˜์‹ ๋ฐ›์ง€ ๋ชปํ•˜๊ธฐ์— ๊ตฌ์กฐ์ ์œผ๋กœ ์ทจ์•ฝํ•˜๋‹ค.
  • IPFS๋Š” P2P ๋„คํŠธ์›Œํฌ๋กœ ํ•œ ์ปจํ…์ธ ์˜ ํ•ด์‹œ๋ฅผ ๋ถ„์‚ฐ์‹œ์ผœ ์—ฌ๋Ÿฌ ๋…ธ๋“œ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ์— ์†Œ์ˆ˜์˜ ๋…ธ๋“œ์— ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ปจํ…์ธ  ๊ธฐ๋ฐ˜ ํƒ์ƒ‰

  • HTTP๋Š” ์ฃผ์†Œ ๊ธฐ๋ฐ˜ ํƒ์ƒ‰์œผ๋กœ ๋กœ์ปฌ ์ €์žฅ์†Œ(์„œ๋ฒ„)์— ์ปจํ…์ธ ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ €์žฅ์†Œ์˜ URL(IP)์„ ํƒ์ƒ‰ํ•ด ์ปจํ…์ธ ๋ฅผ ์š”์ฒญํ•˜๊ธฐ์— ํ•ด๋‹น ์ €์žฅ์†Œ๊ฐ€ ์œ ์‹ค๋œ ๊ฒฝ์šฐ ๊ฒ€์ƒ‰์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. (404 Not Found)
  • ๋ฐ˜๋ฉด IPFS๋Š” ์ปจํ…์ธ  ๊ธฐ๋ฐ˜ ํƒ์ƒ‰์œผ๋กœ ์ปจํ…์ธ  ์ž์ฒด๋ฅผ ํ•ด์‹ฑํ•œ CID๋ฅผ P2P ๋„คํŠธ์›Œํฌ์— ์ฐธ์—ฌํ•œ ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋“ค์—๊ฒŒ ๋ถ„์‚ฐ์‹œํ‚จ ํ›„ ์ด๋ฅผ ํƒ์ƒ‰ํ•˜๊ธฐ์— ์„œ๋ฒ„์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ์ปจํ…์ธ  ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๐Ÿงฉ ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ 

Distributed Hash Tables (DHT)

  • DHT๋ž€ ์‹œ์Šคํ…œ ๋‚ด์˜ ๊ฐ ๋…ธ๋“œ๋“ค์ด ํ‚ค ์…‹์„ ๋‚˜๋ˆ„์–ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ถ„์‚ฐ์‹œ์Šคํ…œ์„ ๋งํ•œ๋‹ค.
  • DHT๋Š” ํฌ๊ฒŒ keyspace partitioning, overlay network๋กœ ๊ตฌ์„ฑ๋ผ์žˆ๋‹ค.
  • ํ•ด์‹œ ํ‚ค์˜ ์ง‘ํ•ฉ๋“ค์„ DHT ๋‚ด๋ถ€์˜ ๊ฐ ๋…ธ๋“œ๋“ค์—๊ฒŒ ๋ถ„์‚ฐ์‹œํ‚ค๊ณ (key space partitioning) ์—”ํŠธ๋ฆฌ ํฌ์ธํŠธ์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ๋‚ด๋ถ€ ๋ผ์šฐํŒ… ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋”ฐ๋ผ DHT ์‹œ์Šคํ…œ์˜ ๋„คํŠธ์›Œํฌ(overlay network)๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ํ‚ค์˜ ์œ„์น˜์— ์ ‘๊ทผํ•œ๋‹ค.

Block Exchanges - BitTorrent

  • BitTorrent๋Š” ๋ณดํŽธ์ ์œผ๋กœ ์“ฐ์ด๋Š” P2P ํŒŒ์ผ ์ „์†ก ํ”„๋กœํ† ์ฝœ์ด๋‹ค.
  • ํŒŒ์ผ์„ ์กฐ๊ฐ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ  P2P ๋„คํŠธ์›Œํฌ์— ๋ฟŒ๋ฆฐ ๋’ค ์ด๋ฅผ peer๋ผ๋ฆฌ ์„œ๋กœ ๊ตํ™˜, ํด๋ผ์ด์–ธํŠธ์—์„œ ์žฌ์กฐํ•ฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ณต์œ ํ•œ๋‹ค.
  • tit-for-tat ์ „๋žต์œผ๋กœ P2P ๋„คํŠธ์›Œํฌ์— ๊ธฐ์—ฌํ•˜๋Š” peer์™€ ์ด์œค๋งŒ ์ทจํ•˜๋Š” selfish-peer๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค.
  • peer๋“ค์€ random OR rarest-first ๋ฐฉ์‹์œผ๋กœ piece๋“ค์„ ๋‹ค์šด๋กœ๋“œํ•œ๋‹ค.
  • ์•„๋ž˜์™€ ๊ฐ™์€ ์š”์†Œ๋“ค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
Piece: ๊ณต์œ ํ•˜๋Š” ํŒŒ์ผ์˜ ์กฐ๊ฐ ๋‹จ์œ„, ์กฐ๊ฐ์˜ ํฌ๊ธฐ๋Š” ํ† ๋ ŒํŠธ ์ƒ์„ฑ ์‹œ ์„ค์ • ๊ฐ€๋Šฅ
Seeder: ๊ณต์œ  ํŒŒ์ผ์˜ ๋ชจ๋“  ์กฐ๊ฐ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ
Leecher: ๊ณต์œ  ํŒŒ์ผ์˜ ์ผ๋ถ€ ์กฐ๊ฐ๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ
Peer: P2P ๋„คํŠธ์›Œํฌ์— ์ฐธ์—ฌํ•œ ํด๋ผ์ด์–ธํŠธ, Seeder์™€ Leecher์˜ ์ด์นญ
Tracker: ํŒŒ์ผ ๊ณต์œ ๋ฅผ ์œ„ํ•œ peer๋“ค์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์„œ๋ฒ„
Swarm: ๊ณต์œ  ํŒŒ์ผ๋ณ„ Hash ์ •๋ณด์™€ peer ๋ฆฌ์ŠคํŠธ์˜ ์ •๋ณด ๋ชจ์Œ, Tracker์— ์ €์žฅ๋จ
Torrent File: ํ† ๋ ŒํŠธ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฉ”ํƒ€ ํŒŒ์ผ

Version Control System - Git

  • ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์œผ๋กœ ์œ ๋ช…ํ•œ git์€ ๋ถ„์‚ฐ ์นœํ™”์  ๋ฐฉ์‹์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ ํŠธ๋ฆฌ์ธ Merkle DAG์„ ์ œ๊ณตํ•œ๋‹ค.
  • Merkle DAG์ด๋ž€ Merkle Directed Acyclic Graph์˜ ์•ฝ์ž๋กœ ๋จธํด ํŠธ๋ฆฌ์™€ ์œ ์‚ฌํ•˜๋‚˜ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ณ , tree balance๋ฅผ ๋งž์ถœ ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ, non-leaf ๋…ธ๋“œ๋“ค๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ํ•ด๋‹น ์ž๋ฃŒ๊ตฌ์กฐ๋Š” IPFS์—์„œ ์ปจํ…์ธ ๋ฅผ CID๋กœ ํ•ด์‹ฑํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

Self-Certified Filesystems - SFS

  • SFS๋Š” ๋ถ„์‚ฐ ํŒŒ์ผ ์‹œ์Šคํ…œ์ด๋ฉฐ ํ†ต์‹  ๋ฐ ์ธ์ฆ์— ๋Œ€ํ•œ ์•”ํ˜ธํ™”๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
  • ์ด๋Š” distributed trust chain๊ณผ egalitarian shared global namespaces์˜ ๊ตฌํ˜„์„ ์ œ์•ˆํ•œ๋‹ค.
  • SFS๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์›๊ฒฉ ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•œ๋‹ค.
/sfs/<Location>:<HostID>
# Location = ์„œ๋ฒ„์˜ ๋„คํŠธ์›Œํฌ ์ฃผ์†Œ
# HostID = hash(public_key || Location)

โš™๏ธ ์„ค๊ณ„

  • IPFS๋Š” DHTs, BitTorrent, Git, SFS์™€ ๊ฐ™์€ ๊ณผ๊ฑฐ์˜ ์„ฑ๊ณต์ ์ธ P2P ์‹œ์Šคํ…œ ์•„์ด๋””์–ด๋ฅผ ์—ฎ์–ด ๋งŒ๋“  ๋ถ„์‚ฐํ˜• ํŒŒ์ผ ์‹œ์Šคํ…œ์ด๋‹ค.
  • IPFS๋Š” ํŠน์ • ๋…ธ๋“œ๊ฐ€ ํŠน๊ถŒ์„ ๊ฐ€์ง€์ง€ ์•Š๋Š” P2P์ด๋ฉฐ IPFS์˜ ๋…ธ๋“œ๋“ค์€ IPFS ๊ฐœ์ฒด๋“ค์„ ๋กœ์ปฌ ์ €์žฅ์†Œ์— ์ €์žฅ, ๋…ธ๋“œ ๊ฐ„ ์„œ๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ๊ฐœ์ฒด๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
  • IPFS ํ”„๋กœํ† ์ฝœ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•˜์œ„ ํ”„๋กœํ† ์ฝœ ์Šคํƒ์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

1. Identities

  • ๋…ธ๋“œ์˜ ID ์ƒ์„ฑ ๋ฐ ํ™•์ธ์„ ๊ด€๋ฆฌ

2. Network

  • peer๋“ค๊ฐ„ ์—ฐ๊ฒฐ๊ณผ ๋‹ค์–‘ํ•œ ๊ธฐ๋ณธ ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ๋“ค์„ ์ง€์›

3. Routing

  • ํŠน์ • peer ๋ฐ ๊ฐœ์ฒด๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ ์ •๋ณด๋ฅผ ์œ ์ง€, ๊ด€๋ฆฌ
  • ๋กœ์ปฌ/์›๊ฒฉ ์ฟผ๋ฆฌ์— ๋ชจ๋‘ ์‘๋‹ต

4. Exchange

  • ํšจ์œจ์ ์ธ ๋ธ”๋ก ๋ฐฐํฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ธ”๋ก ๊ตํ™˜ ํ”„๋กœํ† ์ฝœ(BitSwap)์„ ์‚ฌ์šฉ
  • ์‹œ์žฅ ๊ฒฝ์ œ๋กœ ๋ชจ๋ธ๋ง๋˜์–ด ๋ฐ์ดํ„ฐ ๋ณต์ œ์— ๋Œ€ํ•œ ๋ณด์ƒ์ด ์•ฝํ•จ
  • Trade Strategy๋Š” ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

5. Objects

  • ๋งํฌ๋ฅผ ์ง€์›ํ•˜๋Š” ๋ถˆ๋ณ€ํ•˜๋Š” ์ปจํ…์ธ  ๊ธฐ๋ฐ˜ ๊ฐœ์ฒด์˜ Merkle DAG
  • Arbitary datastructure(e.g. ํŒŒ์ผ ๊ณ„์ธต ๋ฐ ํ†ต์‹  ์‹œ์Šคํ…œ)๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ์‚ฌ์šฉ

6. Files

  • Git์˜ ์˜ํ–ฅ์„ ๋ฐ›์€ ๋ฒ„์ „ ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ณ„์ธต ๊ตฌ์กฐ

7. Naming

  • ์ˆ˜์ • ๊ฐ€๋Šฅํ•œ ์ž์ฒด ์ธ์ฆ name ์‹œ์Šคํ…œ

โ›” ํ•œ๊ณ„

๋ถ€์กฑํ•œ ๋ฐ์ดํ„ฐ ์ˆ˜๊ธ‰๊ณผ ์•ˆ์ •์„ฑ

  • ๋ฐ์ดํ„ฐ ๋“ฑ๋ก ๋ฐ ๋ณต์‚ฌ์™€ ๋…ธ๋“œ ์œ ์ง€์— ๋Œ€ํ•œ ์ธ์„ผํ‹ฐ๋ธŒ๊ฐ€ ์ ๊ณ  ์ดํƒˆ์— ๋Œ€ํ•œ ํŒจ๋„ํ‹ฐ๊ฐ€ ์—†์–ด ์ •๋ณด๊ฐ€ ํ•œ์ •์ ์ด๋ฉฐ ๋„คํŠธ์›Œํฌ๊ฐ€ ๋ถˆ์•ˆ์ •ํ•˜๋‹ค.

๊ฒ€์ƒ‰ ๋ถˆ๊ฐ€๋Šฅ

  • ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ๊ฒ€์ƒ‰ ์—”์ง„์ด ์—†์–ด ๊ฒ€์ƒ‰ ๋ฐฉ๋ฒ•์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š๋‹ค.

๋ฌด๊ทœ์ œ

  • ํƒˆ์ค‘์•™ํ™” ๋„คํŠธ์›Œํฌ์ด๊ธฐ์— ์ค‘์•™ํ™”๋œ ์›น์— ๋น„ํ•ด ํšจ์œจ์ ์ธ ๊ด€๋ฆฌ, ๊ฐ๋…์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ

0๊ฐœ์˜ ๋Œ“๊ธ€