메인 콘텐츠로 건너뛰기
2026-10-30Pure Music Player개발 주간 보고서Subsonic폴더블

Pure Music Player 10월 개발 주간 보고서: Subsonic 증분 동기화, 폴더블 재생 화면 및 더 안전해진 PureStream 연결

이번 달 Pure Music Player는 Subsonic 증분 동기화, 폴더블 iPhone 5가지 형태 적응형 재생 화면, PureStream 설정 페이지 개편 및 핵심 안정성 개선 2건을 완료했습니다. 새로 추가된 곡이 앨범 및 아티스트 페이지에 즉시 반영되며, 이전 버전의 라이브러리도 앱 실행 시 자동으로 안전하게 마이그레이션됩니다.

Pure Music Player 10월 개발 주간 보고서: Subsonic 증분 동기화, 폴더블 재생 화면 및 더 안전해진 PureStream 연결

10월 한 달 동안 Pure Music Player 팀은 라이브러리 동기화, 새로운 폼팩터 기기 최적화, 서비스 연결 편의성 및 기저 저장소의 안정성 향상에서 다양한 결실을 맺었습니다. 이번 주간 보고서의 주요 내용은 다음과 같습니다.

🔄 Subsonic 증분 동기화: 데이터 절약과 초 단위 새로고침

원격 라이브러리 동기화를 더욱 효율적이고 매끄럽게 만들기 위해 Subsonic 음원의 동기화 메커니즘을 전면 업그레이드했습니다:

  • 증분 가져오기 메커니즘: 기존의 전체 재스캔 방식에서 증분 동기화 방식으로 전환하여 원격에서 변경된 곡만 가져오므로, 데이터 트래픽을 크게 절약하고 소요 시간을 대폭 줄였습니다.
  • 언제든 취소 가능 및 단일화된 진행률: 동기화를 언제든 수동으로 취소할 수 있으며, 소스 센터와 음원 목록 행에서 동일한 진행률을 실시간으로 확인하실 수 있습니다.
  • 앨범 커버 및 가사 자동 보완: 동기화가 완료되면 시스템이 백그라운드에서 누락된 앨범 커버와 가사를 자동으로 보완합니다. 가사는 기기에 로컬로 저장되어 오프라인 상태에서도 자유롭게 확인하실 수 있습니다.
  • 동명 엔티티 분리 저장: 서로 다른 음악 소스에 존재하는 동일한 이름의 앨범이나 아티스트를 독립적으로 분류 및 보관하여 서로 덮어쓰지 않습니다.
  • 명확한 상태 안내 및 다국어 지원: 곡 정보 페이지에서 메타데이터 출처가 Subsonic임을 명시하며, 동기화가 끝나면 라이브러리가 즉시 새로고침됩니다. 미동기화, 동기화 중, 보완 중, 실패 상태에 대해 9개 언어로 명확한 문구를 제공합니다.

📱 폴더블 iPhone 재생 화면: 5가지 형태 적응형 캔버스

새로운 형태의 기기를 맞이하기 위해 폴더블 iPhone 및 듀얼 스크린 폴더블 기기에 최적화된 새로운 재생 인터페이스를 선보입니다:

  • 5가지 형태 스마트 레이아웃: 기기의 화면 형태에 맞춰 텐트, 세로, 가로, 펼침, 북(Book) 형태 등 5가지 레이아웃을 지능적으로 자동 선택합니다.
  • 주름 및 가림 영역 회피: 레이아웃 알고리즘이 화면의 물리적 주름과 시스템 영역 가림을 정밀하게 감지합니다. 완전히 펼친 상태에서는 왼쪽에 앨범 커버와 재생 제어를, 오른쪽에 가사나 재생 대기열을 배치하며, 북 형태에서는 가사를 하단 영역에 편안하게 배치합니다.
  • 세심한 폴백 보호 기능: 2단계 전환 스위치를 제공하여 탭 한 번으로 클래식 재생 화면으로 되돌릴 수 있으며, 펼침 2열 레이아웃만 비활성화하여 iPad를 가로로 놓았을 때 기존의 클래식 누적 레이아웃으로 복귀시킬 수도 있습니다.
  • 시스템 안전 영역 반영: 기존의 화면 크기 및 기기 유형 판단 로직을 정리하고 시스템에서 제공하는 안전 영역에 동적으로 맞춰지도록 개선했습니다. 현재 폴더블 실기기 검증을 지속하고 있으며, 일부 모션과 접근성 세부 요소를 마무리하고 있습니다.

🔗 PureStream 설정 페이지 간소화: 비밀번호 없는 직접 연결과 직관적인 구성

PureStream 서버와의 연결 설정 프로세스를 새롭게 개편했습니다:

  • 직관적인 2가지 모드 선택: 설정되지 않은 상태에서는 간결한 한 줄 요약을 먼저 보여준 후 2장의 모드 카드를 제시합니다. PureStream 구독이 필요함을 명시한 '연동 카드’와 자체 구축 PureStream 또는 서드파티 Subsonic 서버를 지원하는 '직접 연결 카드’로 구성됩니다.
  • 비밀번호 없는 직접 인증: 연동을 완료하면 플레이어가 기기 인증을 통해 홈 서버로부터 임시 계정을 직접 발급받으므로 사용자 이름과 비밀번호를 입력할 필요가 없습니다.
  • 깔끔해진 시각적 위계: 읽기 전용 서버 주소 표시와 진단 화면의 호스트명 및 물리적 파일 경로를 정리했습니다. 설정된 상태에서는 ‘요약 → 연결/동기화 → 진행률 → 기본 작업 버튼 → 음질 → 진단’ 순서로 정렬되며, 음질 설정은 기본적으로 접혀 있습니다.

⏱ 혼잡한 네트워크 환경 대응: 스마트 재시도와 완만한 백오프

네트워크 변동이나 서버 혼잡 상황에서도 클라이언트가 더욱 안정적으로 동작합니다:

  • 권장 대기 시간 기반 재시도: 서버에서 '잠시 후 다시 시도해 주세요’를 반환하면 클라이언트는 고정 5초씩 6회 시도 후 실패하는 방식 대신 서버가 권장하는 대기 시간에 맞춰 재시도합니다.
  • 속도 제한 즉시 안내: 요청 빈도 초과가 발생하면 무작정 대기하지 않고 사용자에게 잠시 후 다시 시도하도록 즉각 안내합니다.
  • 에러 유형별 맞춤 처리: 일반 네트워크 오류에는 상한선이 적용된 부드러운 백오프 재시도를 적용하며, 이용 권한 미활성화, 홈 불일치, 구버전 인증 만료 등 명확한 오류는 즉시 재시도를 중단합니다. 모든 요청에는 고유 식별자가 부여되어 서버 측에서 원활하게 추적할 수 있습니다.

📚 대형 라이브러리 모드(Large Library Mode) 설정 페이지 개편: 명확하고 직관적인 구성

수만 곡 이상의 대규모 컬렉션 관리를 지원하기 위해 대형 라이브러리 모드 설정 화면을 개편했습니다:

  • 명칭 체계 통일: '대형 라이브러리 모드 / Large Library Mode’로 명칭을 일원화하여 ‘빠른 목록 인덱스’, ‘고성능 모드’ 등 혼재되던 표현을 정리했습니다.
  • 중복 정보 제거: 동일한 기술적 사실을 중복 표기하지 않으며, 라이브러리 크기, 인덱스 생성 진행률, 멤버십 권한이 각각 독립된 영역을 차지하도록 하여 복잡한 다중 카드 구조를 없앴습니다.
  • 반응형 적응 레이아웃: 진행 바가 행 전체 너비로 확장되어 소형 화면에서 잘리지 않으며, 대형 화면에서도 불필요한 여백을 줄였습니다.
  • 정확한 상태 안내 문구: 일시 중지, 실패, 복구, 준비 완료 등 각 상태별로 독립된 문구를 제공합니다. 인덱스 삭제 시 확인 알림도 스위치 상태에 따라 다르게 표시되어 설명과 실제 동작 간의 불일치를 방지합니다.

🛠 저장소 핵심 안정성 개선

이번 달에는 데이터 저장 및 관리와 관련된 2건의 안정성 문제를 해결했습니다:

  • 구버전 라이브러리 안전 인식: 구버전 라이브러리가 신버전에서 인식되지 않을 경우, 앱 실행 시 안전하고 가벼운 마이그레이션을 자동으로 시도합니다. 성공 시 로컬 폴더를 정상적으로 추가할 수 있으며, 실패하더라도 기존 라이브러리를 그대로 보존하여 데이터를 안전하게 보호합니다.
  • 대형 라이브러리 증분 인덱스 누락 방지: 기존에는 인덱스 생성 후 새로 추가된 곡이 인덱스에서 누락되는 경우가 있었습니다. 이제 인덱스가 저장될 때 실시간으로 동기화 업데이트되며 앱 실행 시 무결성을 검증합니다. 불일치가 발견되면 자동으로 일반 목록으로 복귀한 뒤 인덱스를 재구축하여 새로 불러온 곡이 앨범 및 아티스트 페이지에 정상적으로 나타나도록 보장합니다.

📌 알려진 문제 및 향후 계획

현재 버전에서는 다음 문제들을 지속적으로 보완해 나가고 있습니다:

  1. 폴더블 iPhone의 일부 모션 효과, 팝업 회피 처리 및 화면 낭독기 읽기 순서를 지속적으로 개선 중이며, ‘동작 줄이기’ 설정 지원은 다음 업데이트에서 반영될 예정입니다.
  2. 네트워크 재시도 UI 안내를 지속적으로 다듬을 예정입니다. 현재 '연결 확인’을 연속해서 누를 경우 중복 요청이 발생할 수 있는 현상과 재시도 카운트다운 표시를 준비하고 있습니다.
  3. 아주 초기 버전의 라이브러리는 수동 복구가 필요할 수 있으나, 대부분의 기존 라이브러리는 앱 실행 시 자동으로 안전하게 마이그레이션됩니다.

앞으로도 폴더블 기기 최적화와 접근성 마무리를 진행하고, 재시도 안내 및 카운트다운 기능을 구현하며, 구버전 라이브러리의 자동 마이그레이션 적용 범위를 확대해 나가겠습니다.