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 ์์คํ
๋ถ์กฑํ ๋ฐ์ดํฐ ์๊ธ๊ณผ ์์ ์ฑ
- ๋ฐ์ดํฐ ๋ฑ๋ก ๋ฐ ๋ณต์ฌ์ ๋ ธ๋ ์ ์ง์ ๋ํ ์ธ์ผํฐ๋ธ๊ฐ ์ ๊ณ ์ดํ์ ๋ํ ํจ๋ํฐ๊ฐ ์์ด ์ ๋ณด๊ฐ ํ์ ์ ์ด๋ฉฐ ๋คํธ์ํฌ๊ฐ ๋ถ์์ ํ๋ค.
๊ฒ์ ๋ถ๊ฐ๋ฅ
- ๋ง์ ์ฌ์ฉ์๊ฐ ์ฝ๊ฒ ์ ๊ทผํ ๊ฒ์ ์์ง์ด ์์ด ๊ฒ์ ๋ฐฉ๋ฒ์ด ๋ช ํํ์ง ์๋ค.
๋ฌด๊ท์
- ํ์ค์ํ ๋คํธ์ํฌ์ด๊ธฐ์ ์ค์ํ๋ ์น์ ๋นํด ํจ์จ์ ์ธ ๊ด๋ฆฌ, ๊ฐ๋ ์ด ๋ถ๊ฐ๋ฅํ๋ค.