싸피 종료와 동시에 번아웃과 슬럼프를 세게 겪었던 것을 핑계삼으면서 미루고 미루던 포스팅을 드디어 진행…!

특화 프로젝트에서 담당했던 부분이 프론트엔드와 블록체인이었는데, 특화 도메인이 블록체인이었던 만큼 심적으로도 꽤나 부담이 컸었던 기억이 난다.

벌써 꽤 오랜 시간이 지나버렸지만…

그 때 조금이라도 완성도를 올려보고자 종료 당일 밤샘 작업으로 서버에 무사히 ipfs를 올리고 앱의 파일 재생 로직도 조금 더 그럴사하게 바꾸던 열정으로 써 보고자 한다.

다만 다 줄글일듯 싶다.

블록체인과 IPFS를 같이 사용한 프로젝트는 유언장을 블록체인을 이용해 기록, 관리하는 프로젝트였다.
해당 프로젝트의 요구 사항은 다음과 같았다.

  1. 음성 파일과 해당 음성 파일을 변조 없이 저장 할 수 있어야 한다.

  2. 데이터가 안전하게 저장되어야 함
  3. 파일을 저장하고, 해당 유언이 필요한 시점에 재생할 수 있어야 한다.
  4. 위에서 재생되는 데이터가 위변조되면 안된다

0번의 경우 블록체인 네트워크에 직접 업로드 하는 방식은 가스비, 속도 면에서 매우 불리하다는 판단을 내렸다.

직접 업로드를 선택하지 않은 이유 1. 가스비 : 네트워크에 파일을 직접 저장하는 행위는 비효율적이다..! 가스비는 데이터의 양에 비례하는데 한 개의 트랜잭션의 100~200바이트 정도다. 커봐야 1메가? 2. 시간 : 파일의 크기가 큰 만큼 여러번의 트랜잭션이 필요한데, 트랜잭션의 속도가 오래 걸린다는 것은 사용자 경험에 부정적이다.

</br>

따라서 파일을 서버가 가지고 있는 방식도 고려하려 했지만, 중앙화되는 것 보다는 탈중앙화 시켜보자는 판단을 통해 IPFS 를 도입하기로 결정했다.

IPFS란

InterPlanetary File System

  • 분산 파일 시스템!
    분산 파일 시스템의 개념을 기반으로 한 P2P 네트워크로 중앙 서버 없이 파일을 저장하고 공유할 수 있는 분산 시스템을 제공한다.

중앙화된 서버에 의존하지 않고 파일을 보관할 수 있으며 공유할 수 있다.
파일은 해시 기반으로 식별되며, 해당 해시 값으로 파일을 검색하고 다운로드 할 수 있다.
파일은 여러 노드에 분산 저장되며, 노드 간 파일을 공유하고 동기화 할 수 있다.
여기에 추가적으로 중복 파일을 효과적으로 관리한다.

  • 파일 내용 해시를 통한 고유 주소로 파일을 관리
  • 파일을 작은 청크로나눠 해시하여 저장하며 중, 중복되는 청크는 재사용한다.
  • 버전관리까지!

IPFS의 특징

  1. 보안성 : 파일이 해시 값으로 식별되어 파일의 무결성을 보장한다.
  2. 파일 검색 : 파일을 해시 값으로 검색하여 다운로드 할 수 있다.
  3. 분산 저장 : 파일의 변경 내역을 추적하고 이전 버전으로 롤백 할 수있다.

주의 사항

  • 해시 충돌 : 파일을 해시로 관리하므로, 서로 다른 파일이 같은 해시 값을 가지면 안됨
  • 보안 : 암호화되지 않은 파일은 타인에게 노출될 수 있음

블록체인이랑 IPFS를 같이 사용한 이유

  • 데이터 저장 : 블록체인 네트워크에 파일 업로드는 비효율적이기에, 대안으로 IPFS를 사용하고, 해시로 파일을 관리
  • 스마트 컨트랙트와 데이터 연동 : 스마트 컨트랙트에서 데이터를 효율적으로 처리 가능! <- 해싱, 업로드, 유저 피드백 등 이런 과정에 사용
  • 데이터 무결성 보장 : 블록체인은 변경 불가능한 트랜잭션 기록을 제공하며, IPFS는 파일의 해시를 사용하여 데이터의 무결성을 보장한다. 따라서 블록체인에 IPFS 해시를 저장하면 데이터의 변경 여부를 쉽게 확인할 수 있다. (유언장의 진위여부 파악)

오늘은 설치까지만 ~

우선 배포하는 곳에 설치합니다
윈도우에서 사용해보고 싶다면 설치해서 사용도 가능해요


# 리눅스 外
# Linux
wget https://dist.ipfs.io/go-ipfs/v0.8.0/go-ipfs_v0.8.0_linux-amd64.tar.gz
tar -xvzf go-ipfs_v0.8.0_linux-amd64.tar.gz
cd go-ipfs
sudo bash install.sh

파일 실행

ipfs init
ipfs daemon

파일 업로드와 다운로드

ipfs add <파일명> # 업로드!
ipfs get <해시값> # 다운로드

주의!

  • IPFS는 공개된 네트워크이므로, 자료를 올릴 때 주의
  • 중요한 데이터는 IPFS를 믿지 말고 적절한 백업도 필수
  • 중요한 데이터는 공개 네트워크에 올리는 것이므로, 암호화 필요

추가 자료

읽어보면 좋은 자료

https://ipfs.tech/

https://www.lgcns.com/blog/it-trend/31193/