프라이버시 툴을 구축할 때 ‘Offline-First’가 실제로 의미하는 바
Source: Dev.to
프라이버시 중심 PDF 도구에서 “offline‑first”가 실제 의미하는 바
“Offline‑first”는 흔히 “인터넷 없이 동작하고, 재연결 시 동기화한다”는 의미로 쓰입니다.
프라이버시 중심 PDF 애플리케이션에서는 요구사항이 더 엄격합니다. 앱은 구조적으로 데이터를 어디에도 전송할 수 없도록 설계되어야 하며, 단순히 설정에서 차단하는 수준이 아닙니다.
데이터를 전송하지 않겠다고 약속하는 도구는 정책적 약속을 하는 것입니다. 이 약속을 코드 수준에서 강제하는 것이 목표입니다.
Rust 백엔드에서 네트워크 의존성 제거
Rust 백엔드에는 네트워크 크레이트가 전혀 없어야 합니다. 예를 들어 Cargo.toml은 다음과 같이 작성될 수 있습니다:
# Cargo.toml — no network crates
[dependencies]
lopdf = "0.31"
aes-gcm = "0.10"
argon2 = "0.5"
image = "0.24"
notify = "6"
# reqwest is not here intentionally.
네트워크 크레이트가 의존성 트리에 존재하지 않으면 바이너리는 HTTP 요청을 할 수 없으며, 존재하지 않는 기능을 활성화할 설정 옵션도 없습니다.
전이적 네트워크 크레이트 확인
직접 네트워크 크레이트를 명시하지 않더라도, 다른 의존성이 전이적으로 포함시킬 수 있습니다. 다음 명령을 실행하세요:
cargo tree | grep -E "reqwest|hyper|h2|rustls|native-tls"
무언가 나타난다면 해당 출력이 가리키는 원본 크레이트를 추적하고, 문제를 일으키는 기능을 비활성화합니다. 위 예시에서는 초기 의존성이 선택적 기능 플래그를 통해 hyper를 끌어왔으며, 해당 플래그를 제거함으로써 문제를 해결했습니다.
Tauri의 내장 네트워크 호출 비활성화
Tauri는 업데이트 확인 및 텔레메트리를 위해 네트워크 요청을 수행합니다. 앱을 오프라인 전용으로 유지하려면 두 기능을 모두 비활성화하세요:
{
"plugins": {
"updater": {
"active": false
}
}
}
머신을 떠나는 트래픽이 없는지 검증
네트워크 모니터(예: macOS의 Little Snitch)를 사용해 아웃바운드 연결이 전혀 발생하지 않음을 정상 사용 중에 확인합니다.
최소한의 네트워크 표면을 가진 라이선스 검증
한 번만 수행되는 활성화 키 검증은 첫 실행 시에만 이루어집니다. 활성화 후 키는 로컬에 저장되고 재검증되지 않아, 오프라인 사용자도 앱을 무기한 사용할 수 있습니다. 이는 제품이 허용할 수 있는 최소한의 네트워크 표면을 의미합니다.
“offline‑first”가 중요한 이유
대부분의 사용자는 민감한 문서(의료 기록, 법률 계약, 세금 신고서 등)를 열어야 할 때까지 네트워크 동작을 크게 신경 쓰지 않습니다. 그 순간 “offline‑first”는 단순한 기능이 아니라, 사용자가 해당 도구를 선택한 핵심 이유가 됩니다.
Hiyoko PDF Vault – https://hiyokoko.gumroad.com/l/HiyokoPDFVault
@hiyoyok