Skip to main content

이번 주 프로젝트: Voltra

· 11 min read

이번 주에는 Aprile ElcichPaolo Fragomeni를 만나 Electron 기반의 음악 플레이어인 Voltra에 대해 이야기를 나눴다.

Voltra란 무엇인가?

Voltra는 음악을 소유하고 싶은 사람들을 위한 음악 플레이어다. 또한, 이미 소유한 음악을 기반으로 새로운 음악을 발견하고 구매할 수 있는 스토어 기능도 제공한다. 광고가 없으며 데스크톱과 모바일에서 모두 사용할 수 있는 크로스 플랫폼이다. 사용자를 추적하거나 감시하지도 않는다.

voltra-artistview

Voltra는 누구를 위한 서비스인가?

음악을 듣는 모든 이를 위한 서비스다.

Voltra를 만든 이유는 무엇인가?

라디오는 항상 많은 청취자를 확보해 왔다. 이제 라디오는 공중파를 벗어나 인터넷으로 이동하고 있다. 주문형 음악 대여가 가능해지면서 라디오의 부활이 일어나고 있다! 이로 인해 다양한 새로운 제품과 서비스가 등장했지만, 스트리밍 라디오는 여전히 다른 사람이 음악과 그 경험을 통제한다.

우리는 사용자가 소유한 음악에 완전히 초점을 맞춘 제품을 원했다. 아티스트나 레이블로부터 직접 새 음악을 발견하고 구매할 수 있게 해주는 무언가가 필요했다.

무료 버전이 있나요?

데스크톱 플레이어는 완전히 무료입니다. 음악 판매도 무료로 제공합니다! 광고 지원 방식이 아닙니다.

앱이 무료이기 때문에, 추후 오픈소스로 공개할 가능성이 있습니다. 현재는 이를 관리할 여유가 없습니다. 또한 기능과 발전 방향에 대해 구체적인 아이디어를 가지고 있습니다. 활발한 베타 커뮤니티가 있으며, 사용자 피드백을 소중히 받아들입니다.

어떻게 수익을 창출하나요?

우리는 프리미엄 기능을 제공합니다!

Voltra Audio Archive는 음악을 위해 특별히 설계된 클라우드 백업 서비스입니다. 데이터 블록을 압축하거나 공유하지 않습니다. 여러분의 음악 컬렉션을 물리적으로 백업해 드립니다.

아티스트와 레이블을 위한 Pro Membership은 분석 도구와 전문 아티스트 웹페이지와 같은 도구를 제공하여 더 많은 관련 청중에게 도달할 수 있도록 돕습니다.

Voltra의 차별화된 특징은 무엇인가?

디자인과 사용성은 우리에게 매우 중요하다. 우리는 청취자들이 방해받지 않고 음악을 즐길 수 있는 환경을 제공하고자 한다. 현재 시장에는 다양한 음악 플레이어와 스토어가 존재한다. 하지만 많은 제품들이 제작자의 의도와 달리 복잡하고 사용하기 어렵다. 우리는 Voltra를 가능한 많은 사람들이 쉽게 사용할 수 있도록 만들고자 한다.

또한, 우리는 아티스트나 레이블로부터 수수료를 받지 않는다. 이는 우리의 핵심 차별점 중 하나다. 이는 아티스트들이 자신의 음악을 시장에 내놓는 데 있어 진입 장벽을 낮추는 중요한 요소다.

어떤 디자인 및 기술적 결정을 내렸는가?

Voltra를 설계하면서 네이티브 앱과 웹의 UI 관례를 고려했을 뿐만 아니라, 무엇을 제거할 수 있을지 깊이 고민했다. 지난 몇 달 동안 활발히 활동한 비공개 베타 테스트 그룹으로부터 중요한 피드백을 받았다.

앨범 아트와 사진이 사용자들에게 매우 중요하다는 사실을 발견했다. 많은 플레이어가 단순히 파일 목록으로 구성되어 있다. 물리적 앨범을 소유하는 멋진 점 중 하나는 앨범 아트이며, Voltra 데스크톱 앱에서 이를 강조하고 싶었다.

voltra-albumview

또한 사용자의 파일을 건드리지 않도록 주의했다. 파일 감시 기능을 사용해 파일을 원하는 곳에 배치할 수 있게 했고, 파일 이름을 변경하거나 이동시키지 않는다. 감시 중인 디렉터리의 상태를 추적하기 위해 내장 데이터베이스를 사용해 프로세스가 실행 중이 아닐 때도 새로운 내용을 파악할 수 있다.

Voltra를 개발하며 마주한 도전 과제는 무엇인가?

성능 최적화에 많은 시간을 투자했다. 처음에는 프레임워크를 사용했지만, 결국 바닐라 자바스크립트로 전환했다. 우리의 경험에 따르면, 프레임워크가 제공하는 일반화된 추상화는 성능 저하와 추가적인 복잡성을 감수할 만한 가치가 있다.

현재는 매우 큰 컬렉션을 효율적으로 처리할 수 있다. 여기서 '큰 컬렉션'은 수만 개의 이미지를 의미한다! Node.js의 파일 시스템 모듈을 렌더링 프로세스에서 직접 사용할 수 있어, DOM 이벤트에 따라 많은 이미지를 빠르게 지연 로딩하고 언로드하는 작업이 매우 쉬워졌다.

일반적으로 setImmediaterequestIdleCallback은 UI의 반응성을 유지하면서 많은 처리를 수행하는 데 매우 중요한 도구로 사용되었다. 특히, CPU 집약적인 작업을 별도의 프로세스로 분산시키는 것이 사용자 인터페이스의 반응성을 유지하는 데 큰 도움이 되었다. 예를 들어, 실제 오디오 컨텍스트를 별도의 프로세스로 옮기고, IPC를 통해 통신함으로써 바쁜 UI로 인한 잠재적인 중단을 피할 수 있었다.

Voltra를 Electron으로 개발한 이유

브라우저의 샌드박스는 우리 앱에 너무 제한적이다. 하지만 웹 플레이어도 함께 개발 중이다. 따라서 두 구현체 간 거의 100%의 코드를 공유할 수 있다는 점은 큰 장점이다.

처음에는 Swift로 네이티브 앱을 개발하려고 했다. 하지만 너무 많은 부분을 직접 구현해야 한다는 문제점을 발견했다. 웹은 세계에서 가장 큰 오픈소스 생태계를 가지고 있다. 그래서 빠르게 Electron으로 전환했다.

가장 중요한 점은, Electron을 사용하면 한 번 개발하면 모든 주요 플랫폼에서 작동해야 한다는 것이다. 완벽히 보장되지는 않지만, 각 플랫폼별로 네이티브 코드를 작성하는 비용은 Electron이 도입하는 다른 비용보다 확실히 더 크다.

Electron의 가장 좋은 점은 무엇인가?

효율성: Node.js의 네트워킹 스택과 Chromium의 프레젠테이션 레이어가 함께 제공되어 작업을 빠르게 처리할 수 있다.

전문성: 웹 기술 스택을 그대로 사용하기 때문에, 우리 팀 전체가 제품 개발에 직접 참여할 수 있다.

커뮤니티: 매우 체계적이고 소통이 원활한 커뮤니티가 있다. 이런 지원 속에서 개발할 수 있어 매우 만족스럽다.

Electron의 개선이 필요한 부분은 무엇인가?

Electron이 단일 패키저를 공식적으로 지원해 주길 바란다. 패키저는 Node에서의 패키지 관리자만큼 Electron에게도 중요하다. 현재 사용자 영역에는 여러 패키저가 존재하며, 각각 흥미로운 기능을 제공하지만 버그도 함께 존재한다. 커뮤니티의 합의는 기여자들이 쏟는 에너지를 올바른 방향으로 이끄는 데 도움을 줄 것이다.

다음에 어떤 일이 벌어질까?

현재 모바일 앱을 개발 중이며, 아티스트와 레이블과 협력해 Voltra 상점에 음악을 추가하고 있다. 아티스트나 레이블이라면 지금 바로 가입하세요! 목표인 1천만 트랙을 달성하면 상점을 열 예정이다.