이 시리즈를 통해서 우리는 탈중앙화 (decentralized)된 웹 또는 분산화 (distributed)된 웹의 가능성을 탐색하는 프로젝트들을 살펴보고 있습니다. 이 프로젝트들은 Mozilla 프로젝트들이 아닙니다. 그리고 어떤 프로젝트들은 웹 브라우저에 대한 생각을 Mozilla 와 달리 합니다. 하지만 공통점이 있습니다. 이 프로젝트들은 오픈소스이고, 누구나 참여할 수 있습니다. 그리고, 모두에게 공개되고 누구나 접근 가능한 웹을 추구한다는 점에서 Mozilla 와 같은 사명을 공유합니다.
어떤 프로젝트들은 작게 시작해서, 점진적인 개선을 추구합니다. 또 어떤 프로젝트들은 커다란 비전을 가지고, 시작할 때부터 현재의 한계를 훌쩍 뛰어넘는 이상적인 아키텍처를 제시합니다. 행성간 파일 시스템 (IPFS, InterPlanetary File System) 은 분명히 후자입니다. IPFS 는 확장 가능하고, 신뢰 가능하고, DDOS 공격에 방어 가능한 네트워크 프로토콜로 HTTP를 완전히 대치하려 합니다. Neocities 의 설립자인 Kyle Drake 와 IPFS Companion 개발자인 Marcin Rataj 가 소개하는 IPFS 기사를 보게 되어 기쁩니다. 두 사람 모두 Protocol Labs 의 IPFS 팀 소속입니다. -Dietrich Ayala
IPFS – The InterPlanetary File System
우리는 IPFS 에 관한 일을 하는 전세계 각지의 사람들로 구성된 팀입니다. IPFS 는 분산화된 웹 (distributed web) 구현체입니다. IPFS 는 HTTP 를 새로운 프로토콜로 대치하려 합니다. 이 새로운 프로토콜은 인터넷에 존재하는 개인들의 힘에 의해 지탱됩니다. IPFS 의 목표는 위치 기반 (location-oriented)의 HTTP 를 컨텐츠 기반 (content-oriented)의 프로토콜로 대치해서 웹을 “다시 탈중앙화시키는 것 (re-decentralize)” 입니다. 컨텐츠 기반의 프로토콜은 써드파티에 대한 신뢰를 요구하지 않습니다. 컨텐츠 기반의 프로토콜을 쓰면 웹사이트와 웹앱이 인터넷 상의 모든 IPFS 컴퓨터들에 의해 “운영”됩니다. 컨텐츠 저자가 직접 서버를 운영하지 않아도 됩니다. IPFS 와 그로 인해 분산화된 웹은 정보를 물리적인 위치와 단일한 배포점 (singular distribution)으로부터 해방시킵니다. 궁극적으로 웹을 더 쓸만하고, 더 평등하고, 더 안정적이고, 더 빠르고, 더 독립적이게 만듭니다.
IPFS 의 설계 목표는 “분산화된 (distributed)” 또는 “논리적으로 탈중앙화된 (logically decentralized)” 설계입니다. IPFS 는 노드 (node)들의 네트워크입니다. 각 노드들은 컨텐츠 해시 (content hash)를 이용해서 데이터를 찾도록 서로 돕습니다. 이때 Distributed Hash Table (DHT) 을 사용합니다. 결과적으로 모든 노드들은 웹사이트를 돕고 찾고 운영합니다. 그리고 웹사이트의 오리지널 노드가 죽더라도 네트워크의 다른 컴퓨터가 카피본을 갖고 있는 한 우리는 그 웹사이트를 계속 사용할 수 있습니다. 결과적으로 개인들의 힘에 의해 웹이 유지됩니다. 대규모 컨텐츠 전송 네트워크를 갖추고 대규모 트래픽을 감당하는 거대 조직의 힘이 아니라 말이죠.
IPFS 스택은 IPLD 와 libp2p 위에서 구현되었습니다.
Hello World
우리는 Go 랭귀지로 개발된 참조 구현체를 제공하고 있습니다 (go-ipfs). 그리고 꾸준히 개선중인 Javascript 구현체도 제공하고 있습니다 (js-ipfs). 다른 랭귀지들을 위한 API 클라이언트들도 풍부하게 제공합니다.
JS 구현체 덕분에, 웹에서 IPFS 를 무척 쉽게 사용할 수 있습니다. 다음 코드는…
- IPFS 노드를 시작합니다
- IPFS 에 어떤 데이터를 추가합니다
- 그 데이터에 대한 컨텐츠 식별자 (CID, Content IDentifier)를 얻습니다
- CID 를 이용해서 IPFS 로부터 해당 데이터를 다시 읽어 들입니다
<script src="https://unpkg.com/ipfs/dist/index.min.js"></script>
Open Console (Ctrl+Shift+K)
<script>
const ipfs = new Ipfs()
const data = 'Hello from IPFS, <YOUR NAME HERE>!'
// Once the ipfs node is ready
ipfs.once('ready', async () => {
console.log('IPFS node is ready! Current version: ' + (await ipfs.id()).agentVersion)
// convert your data to a Buffer and add it to IPFS
console.log('Data to be published: ' + data)
const files = await ipfs.files.add(ipfs.types.Buffer.from(data))
// 'hash', known as CID, is a string uniquely addressing the data
// and can be used to get it again. 'files' is an array because
// 'add' supports multiple additions, but we only added one entry
const cid = files[0].hash
console.log('Published under CID: ' + cid)
// read data back from IPFS: CID is the only identifier you need!
const dataFromIpfs = await ipfs.files.cat(cid)
console.log('Read back from IPFS: ' + String(dataFromIpfs))
// Compatibility layer: HTTP gateway
console.log('Bonus: open at one of public HTTP gateways: https://ipfs.io/ipfs/' + cid)
})
</script>
이게 전부입니다!
더 깊은 얘기를 하기 전에, 몇 가지 질문들부터 살펴봅시다.
누가 데이터에 접근할 수 있나요?
CID 를 통해 누구나 접근할 수 있습니다. 민감한 파일들은 IPFS 에 올리기 전에 암호화시키는 것이 좋습니다.
컨텐츠는 얼마나 오랫동안 유지되나요? 어떤 조건에서 제거되나요? 강제로 제거하려면 어떻게 해야 하나요?
본래, 컨텐츠 식별자에 의해 구별되는 IPFS 데이터는 활성화된 피어 (peer)들의 참여에 의해 유지됩니다. 다른 피어들이 제공하는 데이터를 제거하는 것은 불가능합니다. 하지만 어떤 피어도 해당 데이터를 제공하지 않는다면 (어떤 피어도 해당 데이터에 관심을 갖지 않는다면) 그 데이터는 네트워크에서 “잊혀지게” 됩니다.
공개된 HTTP 게이트웨이가 몇 시간 정도 데이터를 유지합니다. 만약 오랜 시간 동안 유지되기를 희망하는 데이터가 있다면 당신이 관리하는 노드에 해당 데이터를 핀(pin) 하세요. 스탠드얼론 IPFS 어플리케이션인 IPFS Cluster 와 CLI 클라이언트를 이용하면 IPFS 클러스터 위에서 핀(pin) 데이터를 할당하고, 복제하고, 추적할 수 있습니다.
개발자를 위한 퀵스타트 안내
간단한 브라우저 어플리케이션을 만들려면 js-ipfs 를 이용하세요. IPFS 서버를 운영하려면 위에서 언급한 go-ipfs 를 설치하거나 클러스터를 운영하세요.
관련 예제들이 점점 늘어나고 있습니다. 살펴보세요. 그리고 js-ipfs 를 이용해서 만든 양방향 파일 교환 데모도 꼭 살펴보세요.
Firefox 브라우저를 위한 IPFS Companion extension 부가기능 모듈이 있습니다. 설치해보세요.
더 배우려면
https://docs.ipfs.io 에 있는 우리 문서 웹사이트를 방문하면 IPFS 개념들을 배울 수 있습니다.
우리 문서를 개선하거나, https://ipfs.io 사이트를 방문하거나, IPFS 로 분산화 웹앱과 사이트를 개발하거나, 우리의 깃 레포와 커뮤니티가 만든 여러 프로젝트들에 기여하는 방식으로 IPFS 프로젝트에 참여할 수 있습니다.
질문이 있다면 우리의 친절한 커뮤니티 포럼인 https://discuss.ipfs.io 가 가장 좋은 장소입니다.
IRC 채널도 있습니다. Freenode 의 #ipfs (또는 Matrix 의 #freenode_#ipfs:matrix.org) 입니다. 참여해주세요!
이 글은 Kyle Drake 와 Marcin Rataj 가 쓴 Dweb: Building Cooperation and Trust into the Web with IPFS 의 한국어 번역본입니다.
작성자: ingeeKim
"누구에게나 평등하고 자유로운 웹"에 공감하는 직장인.
댓글이 없습니다.