싸피 종료와 동시에 번아웃과 슬럼프를 세게 겪었던 것을 핑계삼으면서 미루고 미루던 포스팅을 드디어 진행…!
특화 프로젝트에서 담당했던 부분이 프론트엔드와 블록체인이었는데, 특화 도메인이 블록체인이었던 만큼 심적으로도 꽤나 부담이 컸었던 기억이 난다.
벌써 꽤 오랜 시간이 지나버렸지만…
그 때 조금이라도 완성도를 올려보고자 종료 당일 밤샘 작업으로 서버에 무사히 ipfs를 올리고 앱의 파일 재생 로직도 조금 더 그럴사하게 바꾸던 열정으로 써 보고자 한다.
다만 다 줄글일듯 싶다.
블록체인과 IPFS를 같이 사용한 프로젝트는 유언장을 블록체인을 이용해 기록, 관리하는 프로젝트였다.
해당 프로젝트의 요구 사항은 다음과 같았다.
-
음성 파일과 해당 음성 파일을 변조 없이 저장 할 수 있어야 한다.
- 데이터가 안전하게 저장되어야 함
- 파일을 저장하고, 해당 유언이 필요한 시점에 재생할 수 있어야 한다.
- 위에서 재생되는 데이터가 위변조되면 안된다
0번의 경우 블록체인 네트워크에 직접 업로드 하는 방식은 가스비, 속도 면에서 매우 불리하다는 판단을 내렸다.
직접 업로드를 선택하지 않은 이유
1. 가스비 : 네트워크에 파일을 직접 저장하는 행위는 비효율적이다..! 가스비는 데이터의 양에 비례하는데 한 개의 트랜잭션의 100~200바이트 정도다. 커봐야 1메가? 2. 시간 : 파일의 크기가 큰 만큼 여러번의 트랜잭션이 필요한데, 트랜잭션의 속도가 오래 걸린다는 것은 사용자 경험에 부정적이다.</br>
따라서 파일을 서버가 가지고 있는 방식도 고려하려 했지만, 중앙화되는 것 보다는 탈중앙화 시켜보자는 판단을 통해 IPFS 를 도입하기로 결정했다.
IPFS란
InterPlanetary File System
- 분산 파일 시스템!
분산 파일 시스템의 개념을 기반으로 한 P2P 네트워크로 중앙 서버 없이 파일을 저장하고 공유할 수 있는 분산 시스템을 제공한다.
중앙화된 서버에 의존하지 않고 파일을 보관할 수 있으며 공유할 수 있다.
파일은 해시 기반으로 식별되며, 해당 해시 값으로 파일을 검색하고 다운로드 할 수 있다.
파일은 여러 노드에 분산 저장되며, 노드 간 파일을 공유하고 동기화 할 수 있다.
여기에 추가적으로 중복 파일을 효과적으로 관리한다.
- 파일 내용 해시를 통한 고유 주소로 파일을 관리
- 파일을 작은 청크로나눠 해시하여 저장하며 중, 중복되는 청크는 재사용한다.
- 버전관리까지!
IPFS의 특징
- 보안성 : 파일이 해시 값으로 식별되어 파일의 무결성을 보장한다.
- 파일 검색 : 파일을 해시 값으로 검색하여 다운로드 할 수 있다.
- 분산 저장 : 파일의 변경 내역을 추적하고 이전 버전으로 롤백 할 수있다.
주의 사항
- 해시 충돌 : 파일을 해시로 관리하므로, 서로 다른 파일이 같은 해시 값을 가지면 안됨
- 보안 : 암호화되지 않은 파일은 타인에게 노출될 수 있음
블록체인이랑 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를 믿지 말고 적절한 백업도 필수
- 중요한 데이터는 공개 네트워크에 올리는 것이므로, 암호화 필요
추가 자료
읽어보면 좋은 자료