이번 주 프로젝트: Dat
이번 주에 소개할 프로젝트는 Dat이다. Dat은 그랜트 지원을 받아 개발된 오픈 소스 분산형 데이터셋 배포 도구다. Dat은 지리적으로 분산된 팀에 의해 구축되고 유지되며, 이 글을 작성하는 데에도 팀원들이 기여했다.
Dat이란 무엇인가?
Dat은 피어 투 피어와 분산 시스템의 장점을 데이터 공유에 적용하기 위해 개발했다. 처음에는 과학 데이터 공유를 목적으로 시작했지만, 점차 연구 기관, 정부, 공공 서비스, 오픈소스 팀 등 다양한 분야로 확장했다.
Dat은 Dropbox나 BitTorrent Sync와 같은 동기화 및 업로드 앱과 유사하지만, 오픈소스라는 점이 다르다. Dat의 목표는 대규모, 중규모, 소규모 데이터를 모두 지원하는 강력하고 오픈소스이며 비영리적인 데이터 공유 소프트웨어를 만드는 것이다.
dat
CLI 도구를 사용하려면 아래 명령어를 입력하면 된다:
dat share path/to/my/folder
이 명령어를 실행하면 특정 폴더를 공유할 수 있는 링크가 생성된다. 중앙 서버나 제3자가 데이터에 접근할 필요가 없다. BitTorrent와 달리, 누가 무엇을 공유하는지 추적할 수 없다. (자세한 내용은 Dat Paper 초안을 참고하면 된다.)
Dat이 무엇인지 이해했다면, Dat Desktop은 어떤 역할을 할까?
Dat Desktop은 커맨드라인을 사용하지 않거나 사용하기 어려운 사람들도 Dat을 쉽게 활용할 수 있게 해주는 도구다. 여러분의 컴퓨터에서 여러 Dat을 호스팅하고, 네트워크를 통해 데이터를 제공할 수 있다.
어떤 멋진 사용 사례가 있을까?
DataRefuge + Project Svalbard
Project Svalbard라는 코드명으로 작업 중인 프로젝트가 있다. 이 프로젝트는 DataRefuge와 관련이 있는데, DataRefuge는 사라질 위기에 처한 정부 기후 데이터를 백업하기 위해 노력하는 단체다. Svalbard는 북극에 위치한 Svalbard Global Seed Vault에서 이름을 따왔는데, 이 저장소는 식물 DNA를 대규모로 지하에 보관하는 곳이다. 우리의 버전은 공공 과학 데이터셋을 버전 관리하며 대규모로 수집하는 프로젝트다. 메타데이터를 신뢰할 수 있게 되면, 분산된 자원봉사 데이터 저장 네트워크와 같은 다른 멋진 프로젝트를 구축할 수 있다.
캘리포니아 시빅 데이터 연합
CACivicData는 캘리포니아의 정치 자금 추적 데이터베이스인 CAL-ACCESS에서 매일 다운로드할 수 있는 오픈소스 아카이브를 제공한다. 이들은 매일 릴리스를 진행하며, 이는 ZIP 파일에 걸쳐 많은 중복 데이터를 호스팅한다는 것을 의미한다. 우리는 이 데이터를 Dat 저장소로 호스팅하는 작업을 진행 중이며, 이를 통해 특정 버전을 참조하거나 최신 버전으로 업데이트하는 데 필요한 번거로움과 대역폭을 줄일 수 있을 것으로 기대한다.
Electron 업데이트
아직 구체적인 구현은 아니지만, 흥미로운 사용 사례를 제안한다. 컴파일된 Electron 앱을 Dat 저장소에 넣은 다음, Electron 내부의 Dat 클라이언트를 사용해 빌드된 앱 바이너리의 최신 변경 사항만 가져오는 방식이다. 이렇게 하면 다운로드 시간을 줄일 수 있을 뿐만 아니라 서버의 대역폭 비용도 절약할 수 있다.
Dat Desktop은 누가 사용해야 할까?
피어투피어(p2p) 네트워크를 통해 데이터를 공유하고 업데이트하려는 모든 사람이 적합하다. 데이터 과학자, 오픈 데이터 해커, 연구자, 개발자 등 다양한 분야의 사용자에게 유용하다. 또한, 우리는 아직 생각하지 못한 멋진 사용 사례에 대한 피드백을 적극적으로 수렴한다. 궁금한 점이 있다면 Gitter Chat에 방문해 언제든지 질문할 수 있다.
Dat과 Dat Desktop의 향후 계획은 무엇인가?
사용자 계정과 메타데이터 게시 기능이 곧 추가될 예정이다. 현재 datproject.org에 배포할 Dat 레지스트리 웹 앱을 개발 중이다. 이는 기본적으로 '데이터셋을 위한 NPM'과 유사하지만, 모든 데이터를 중앙에서 호스팅하는 NPM이나 GitHub와 달리 메타데이터 디렉토리 역할만 수행하며, 데이터는 온라인 어디에나 존재할 수 있다. 많은 데이터셋이 크기 때문에, BitTorrent 트래커와 유사한 분산형 레지스트리가 필요하다. Dat Desktop에서 레지스트리를 통해 데이터셋을 쉽게 찾거나 게시할 수 있도록 하여 데이터 공유 과정을 원활하게 만들 계획이다.
또 다른 기능으로는 다중 작성자/협업 폴더가 있다. 데이터셋 협업을 중심으로 설계된, git의 브랜치와 유사한 협업 워크플로를 구축할 큰 계획이 있다. 하지만 현재는 전반적인 안정성과 프로토콜 표준화 작업에 집중하고 있다!
왜 Dat Desktop을 Electron 기반으로 개발했는가?
Dat은 Node.js를 사용해 개발했기 때문에, Electron과의 통합은 자연스러운 선택이었다. 더불어 우리의 사용자들은 다양한 기기를 사용한다. 과학자, 연구자, 정부 관계자들이 각 기관의 규정에 따라 특정 환경을 사용해야 하는 경우가 많기 때문이다. 이는 우리가 Mac뿐만 아니라 Windows와 Linux도 지원해야 한다는 것을 의미한다. Dat Desktop은 이러한 요구를 쉽게 충족시켜 준다.
Dat과 Dat Desktop을 개발하며 마주한 주요 문제점은 무엇인가?
사용자들이 원하는 것을 파악하는 것이 가장 큰 과제였다. 초기에는 표 형식의 데이터셋을 중심으로 개발을 시작했지만, 이는 해결하기 복잡한 문제였고 대부분의 사용자가 데이터베이스를 사용하지 않는다는 사실을 깨달았다. 따라서 프로젝트 중반에 모든 것을 처음부터 다시 설계하여 파일 시스템을 기반으로 전환했고, 그 이후로는 큰 문제 없이 진행되고 있다.
또한 Electron 인프라와 관련된 몇 가지 일반적인 문제에 직면했다:
- 원격 측정(Telemetry): 익명 사용 통계를 어떻게 수집할 것인가
- 업데이트: 자동 업데이트 설정은 복잡하고 신비로운 과정이다
- 릴리스: XCode 서명, Travis에서의 릴리스 빌드, 베타 빌드 생성 등 모두 도전적인 과제였다
Dat Desktop의 '프론트엔드' 코드에서는 Browserify와 몇 가지 멋진 Browserify Transform을 사용한다. 이는 네이티브 require
가 있음에도 여전히 번들링을 하는 것이 이상하게 보일 수 있지만, Transform을 사용하기 위해서는 필요하다. CSS 관리를 더욱 효율적으로 하기 위해 Sass에서 sheetify로 전환했다. 이를 통해 CSS를 모듈화하고, UI를 공통 의존성을 가진 컴포넌트 기반 아키텍처로 쉽게 이동할 수 있게 되었다. 예를 들어 dat-colors는 모든 프로젝트에서 공유하는 색상을 포함하고 있다.
우리는 항상 표준과 최소한의 추상화를 중요하게 여겨왔다. 전체 인터페이스는 몇 가지 헬퍼 라이브러리와 함께 일반 DOM 노드를 사용해 구축했다. 이러한 컴포넌트 중 일부를 base-elements라는 저수준 재사용 가능한 컴포넌트 라이브러리로 옮기기 시작했다. 대부분의 기술과 마찬가지로, 우리는 올바른 방향으로 나아가고 있다는 느낌을 받으며 계속 반복하고 개선해 나가고 있다.
Electron이 개선해야 할 부분은 무엇인가?
가장 큰 문제점은 네이티브 모듈이다. npm을 사용해 Electron용 모듈을 다시 빌드해야 하는 것은 워크플로우를 복잡하게 만든다. 우리 팀은 사전 빌드된 바이너리를 처리하는 prebuild
라는 모듈을 개발했는데, 이는 Node에서는 잘 작동했지만 Electron 워크플로우에서는 설치 후 보통 npm run rebuild
와 같은 커스텀 단계가 필요했다. 이는 번거로웠다. 이 문제를 해결하기 위해 최근 npm tarball 내부에 모든 플랫폼의 컴파일된 바이너리 버전을 번들링하는 전략으로 전환했다. 이 방법은 tarball의 크기를 증가시키지만 (.so
파일 - 공유 라이브러리를 사용해 최적화할 수 있음), 설치 후 스크립트를 실행할 필요가 없고 npm run rebuild
패턴을 완전히 피할 수 있다. 이는 npm install
이 Electron에서 처음부터 올바르게 작동한다는 것을 의미한다.
Electron에서 가장 마음에 드는 점은 무엇인가요?
Electron의 API는 상당히 잘 설계되어 있고, 비교적 안정적이며, 최신 Node 릴리즈를 잘 따라간다는 점이 가장 마음에 듭니다. 이 정도면 더 이상 바랄 것이 없죠!
다른 개발자에게 도움이 될 만한 Electron 팁
네이티브 모듈을 사용한다면 prebuild를 시도해 보세요!
Dat 프로젝트를 팔로우하는 가장 좋은 방법은 무엇인가?
Twitter에서 @dat_project를 팔로우하거나, 이메일 뉴스레터를 구독한다.