<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>뉴스레터 on Nostr Compass</title><link>https://nostrcompass.org/ko/newsletters/</link><description>Recent content in 뉴스레터 on Nostr Compass</description><generator>Hugo</generator><language>ko</language><atom:link href="https://nostrcompass.org/ko/newsletters/feed.xml" rel="self" type="application/rss+xml"/><item><title>Nostr Compass #26</title><link>https://nostrcompass.org/ko/newsletters/2026-06-10-newsletter/</link><pubDate>Wed, 10 Jun 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2026-06-10-newsletter/</guid><description>&lt;p>Marmot Protocol 조직이 v2 프로토콜 초안과 네이티브 클라이언트 계보를 위해 세 개의 새 저장소를 공개했습니다: &lt;code>darkmatter&lt;/code>라는 Rust 워크스페이스, SwiftUI iOS 앱 &lt;code>darkmatter-ios&lt;/code>, Kotlin/Compose Android 앱 &lt;code>darkmatter-android&lt;/code>. 원래의 Flutter Whitenoise는 아카이브되었습니다. Chama는 17개의 릴리스를 일주일에 압축하여 v3.0.0에서 독립 앱 라인을 넘어선 뒤 v3.1.0에서 전체 거래방 UI 재작성과 판매자별 상점을 실현했으며, 이는 홀더 전용 Shamir 공유, 중재자 대체, 전 세계 커뮤니티 라우팅, 종단 간 거래 알림 위에 구축되었습니다. Coracle은 오픈 소스 Caravel과 zooid 스택에 의해 지원되는 유료 호스팅 릴레이 서비스를 출시했으며, 심층 Flotilla 통합이 계획되어 있습니다. Angor는 v0.2.30에서 기본값을 mainnet으로 전환하고 v0.2.29에서 3명 사용자 UAT 자금 조달 테스트를 실현했습니다. Amethyst는 지난주의 NIP-32 / NIP-F4 / Tor 작업을 계속하는 41개의 미출시 PR을 실현했습니다. NIP-67 (EOSE 완전성 힌트)과 NIP-50 자동완성이 병합되어 코어 릴레이 프로토콜의 두 가지 오랜 정확성 격차를 닫았습니다. NIP-GART는 긴급 경보를 위한 프라이버시 보존 와이어 형식을 제안하고, NIP-46은 logout 메서드를 얻었습니다.&lt;/p></description><content:encoded>&lt;p>Marmot Protocol 조직이 v2 프로토콜 초안과 네이티브 클라이언트 계보를 위해 세 개의 새 저장소를 공개했습니다: &lt;code>darkmatter&lt;/code>라는 Rust 워크스페이스, SwiftUI iOS 앱 &lt;code>darkmatter-ios&lt;/code>, Kotlin/Compose Android 앱 &lt;code>darkmatter-android&lt;/code>. 원래의 Flutter Whitenoise는 아카이브되었습니다. Chama는 17개의 릴리스를 일주일에 압축하여 v3.0.0에서 독립 앱 라인을 넘어선 뒤 v3.1.0에서 전체 거래방 UI 재작성과 판매자별 상점을 실현했으며, 이는 홀더 전용 Shamir 공유, 중재자 대체, 전 세계 커뮤니티 라우팅, 종단 간 거래 알림 위에 구축되었습니다. Coracle은 오픈 소스 Caravel과 zooid 스택에 의해 지원되는 유료 호스팅 릴레이 서비스를 출시했으며, 심층 Flotilla 통합이 계획되어 있습니다. Angor는 v0.2.30에서 기본값을 mainnet으로 전환하고 v0.2.29에서 3명 사용자 UAT 자금 조달 테스트를 실현했습니다. Amethyst는 지난주의 NIP-32 / NIP-F4 / Tor 작업을 계속하는 41개의 미출시 PR을 실현했습니다. NIP-67 (EOSE 완전성 힌트)과 NIP-50 자동완성이 병합되어 코어 릴레이 프로토콜의 두 가지 오랜 정확성 격차를 닫았습니다. NIP-GART는 긴급 경보를 위한 프라이버시 보존 와이어 형식을 제안하고, NIP-46은 logout 메서드를 얻었습니다.&lt;/p>
&lt;h2 id="주요-소식">주요 소식&lt;/h2>
&lt;h3 id="marmot-v2-dark-matter-프로토콜-재초안-네이티브-클라이언트-아카이브된-flutter-앱">Marmot v2 (Dark Matter): 프로토콜 재초안, 네이티브 클라이언트, 아카이브된 Flutter 앱&lt;/h3>
&lt;p>이번 주 &lt;a href="https://github.com/marmot-protocol">marmot-protocol&lt;/a> GitHub 조직 아래에 세 개의 새 저장소가 나타났으며, 함께 Marmot v2 프로토콜 초안과 Flutter 앱 라인을 대체하는 네이티브 클라이언트 계보의 초기 진행 형태를 형성합니다. &lt;a href="https://github.com/marmot-protocol/darkmatter">&lt;code>darkmatter&lt;/code>&lt;/a> (Rust, 5월 13일 생성, 지난 7일간 34개 커밋)는 &lt;code>spec/&lt;/code>에 v2 프로토콜 초안, &lt;code>crates/cgka-engine&lt;/code>에 OpenMLS 기반 CGKA 엔진, 속성 테스트가 있는 적합성 시뮬레이터, 수렴 증명을 위한 Tamarin 형식 모델을 보유합니다. &lt;a href="https://github.com/marmot-protocol/darkmatter-ios">&lt;code>darkmatter-ios&lt;/code>&lt;/a> (Swift, 5월 25일 생성)는 Rust 워크스페이스에서 생성된 벤더된 &lt;code>MarmotKit&lt;/code> UniFFI xcframework에 의해 지원되는 SwiftUI 클라이언트입니다. &lt;a href="https://github.com/marmot-protocol/darkmatter-android">&lt;code>darkmatter-android&lt;/code>&lt;/a> (Kotlin/Jetpack Compose, 5월 25일 생성)는 동일한 Rust 바인딩 위에 있습니다. 원래의 Flutter Whitenoise는 &lt;a href="https://github.com/marmot-protocol/whitenoise-archive">&lt;code>whitenoise-archive&lt;/code>&lt;/a>로 표시되었으며 (&amp;ldquo;ARCHIVED: 이것은 원래의 White Noise Flutter 앱이었습니다&amp;rdquo;), 새 &lt;a href="https://github.com/marmot-protocol/whitenoise">&lt;code>whitenoise&lt;/code>&lt;/a> Dart 저장소가 활성 Flutter 라인을 병렬로 운반합니다.&lt;/p>
&lt;p>이것을 완성된 피벗이 아니라 더 신뢰할 수 있는 Marmot을 향한 초기 진행으로 읽으십시오. darkmatter README는 자신을 &amp;ldquo;Marmot v2 프로토콜 초안, CGKA 엔진, 적합성 워크스페이스 후보&amp;quot;로 라벨링하고 직접 말합니다: &amp;ldquo;이 초안과 엔진이 채택될 때까지 MDK는 배포된 Rust 프로토콜 구현으로 남습니다&amp;rdquo;. 워크스페이스 내에서 cgka-engine 크레이트는 &lt;code>0.1.0&lt;/code>으로 태그되어 있으며, &amp;ldquo;단일 내부 소비자, semver 안정성 없음&amp;quot;입니다. 모든 사양 페이지는 &amp;ldquo;상태: 내부 검토용 초안&amp;quot;을 담고 있습니다. 워크스페이스 저장소의 별 세 개와 iOS 및 Android 앱의 별 0개는 작업이 사전 공지 상태임을 확인합니다. 방향, 범위, 규율이 여기서의 신호입니다; 프로덕션 준비 상태는 주장되지 않았습니다.&lt;/p>
&lt;p>프로토콜 초안은 v1에서 v2로의 델타를 구체화합니다. Marmot 시작 이래 그룹 이름, 설명, 관리자 pubkey, Nostr 그룹 라우팅 id, 릴레이 목록, 그룹 이미지 데이터, 사라지는 메시지 설정을 하나의 우산 아래 운반해 온 MIP-01의 모놀리식 &lt;code>marmot_group_data&lt;/code> MLS 확장은 &lt;a href="https://github.com/marmot-protocol/darkmatter/blob/master/spec/mip-coverage.md">버전화된 앱 컴포넌트로 분할&lt;/a>됩니다: 이름과 설명을 위한 &lt;code>marmot.group.profile.v1&lt;/code>, 관리자 pubkey를 위한 &lt;code>marmot.group.admin-policy.v1&lt;/code>, 무작위 &lt;code>nostr_group_id&lt;/code>와 정규 릴레이 목록을 위한 &lt;code>marmot.transport.nostr.routing.v1&lt;/code>, 이미지 해시, 암호화 키, nonce, 업로드 키를 위한 &lt;code>marmot.group.blossom.image.v1&lt;/code>, 사라지는 메시지 초 수를 위한 &lt;code>marmot.group.message-retention.v1&lt;/code>. 각 컴포넌트는 정확한 바이트와 자체 버전 관리 경로를 소유하므로, 미래의 기능은 나머지 그룹 상태가 MLS 확장 합의를 다시 밟도록 강제하지 않고 하나의 컴포넌트를 개정할 수 있습니다. MIP-00 자격 증명도 새 기초 문서 &lt;code>account-identity-proof-v1.md&lt;/code>를 얻었으며, &amp;ldquo;v2에서 새로운 것이며 파괴적&amp;quot;으로 호출됩니다. 신원 증명은 이제 KeyPackage 구성과 별개로 자체 표면에 존재합니다.&lt;/p>
&lt;p>라이브러리 델타는 사양 재작업을 뒷받침합니다. &lt;code>cgka-engine&lt;/code>은 새 로컬 그룹 상태 머신입니다: OpenMLS를 래핑하고, &lt;code>Stable&lt;/code>, &lt;code>PendingPublish&lt;/code>, &lt;code>Merging&lt;/code>, &lt;code>Recovering&lt;/code> 에폭 상태를 소유하며, 의도를 MLS 커밋으로 변환하고, 모든 인바운드 전송 봉투에 대해 타입 지정된 &lt;code>IngestOutcome&lt;/code>과 &lt;code>GroupEvent&lt;/code> 값을 반환하며, 명시적으로 전송도 지속성도 출시하지 않습니다. &lt;code>TransportPeeler&lt;/code> trait는 Nostr을 엔진에서 분리하고, &lt;code>StorageProvider&lt;/code> trait는 SQLite (SQLCipher 지원 &lt;code>storage-sqlite&lt;/code>를 통해)를 엔진에서 분리합니다. 오늘의 MDK는 이 모든 것을 함께 포장합니다; 계층을 분할하면 하나의 엔진이 지금 Nostr 릴레이 전송 아래에 위치하고, 수렴 모델을 다시 작성하지 않고도 나중에 함께 출시된 &lt;a href="https://github.com/marmot-protocol/darkmatter/blob/master/docs/quic-broker-deployment.md">QUIC 스트림과 브로커 전송&lt;/a> 아래에도 위치할 수 있습니다. 수렴 자체는 &lt;code>distributed-convergence.md&lt;/code>로 문서화되어 있으며, 결정론적 브랜치 선택, 정책 게이트 자격, 유지된 앵커 재생, 오래된 브랜치 거부, 배송 재정렬, 중복, 앱 출력 무효화, welcome/commit 핸드오프, 제안 소비, 동기화 중 아웃바운드 게이팅을 다루는 Tamarin 모델에서 증명되었습니다. 그런 다음 Rust 속성 테스트는 엔진이 실제 OpenMLS 객체와 시뮬레이터 하네스로 동일한 규칙을 따르는지 확인합니다. 이 범위의 형식적 방법 신뢰성 작업은 현재 Marmot 스택에는 없습니다.&lt;/p>
&lt;p>두 네이티브 클라이언트 모두 플랫폼 네이티브 UI 툴킷을 위해 Flutter를 삭제합니다. &lt;a href="https://github.com/marmot-protocol/darkmatter-ios">&lt;code>darkmatter-ios&lt;/code>&lt;/a>는 MIP-05 푸시 웨이크를 디바이스에서 해독하는 Notification Service Extension을 갖춘 순수 SwiftUI이며, Rust 워크스페이스에서 빌드된 생성된 &lt;code>MarmotKit&lt;/code> Swift 패키지를 벤더링하고, &lt;code>dev.ipf.darkmatter&lt;/code> 번들 ID 및 앱 그룹 아래에 등록됩니다. &lt;a href="https://github.com/marmot-protocol/darkmatter-android">&lt;code>darkmatter-android&lt;/code>&lt;/a>는 Kotlin과 Jetpack Compose이며, &lt;code>just&lt;/code> 기반 빌드가 서명된 &lt;code>arm64-v8a&lt;/code> APK를 생성하고 &lt;code>local.properties&lt;/code>에서 텔레메트리 엔드포인트를 읽습니다. Android README는 아키텍처 원칙을 직접 명시합니다: &amp;ldquo;Dark Matter는 프로토콜 데이터를 소유하고 SQLite에 저장합니다. Android 앱은 그 데이터를 렌더링하고, Android 플랫폼 동작을 관리하며, UI 라이프사이클 상태를 유지해야 합니다. Android 앱은 Dark Matter 데이터를 위한 두 번째 데이터베이스가 되어서는 안 됩니다&amp;rdquo;. 이는 UI 계층에 적용된, cgka-engine README가 Rust 계층에서 강제하는 경계 규율을 반영합니다.&lt;/p>
&lt;p>Marmot에게 네이티브 클라이언트가 중요한 이유는 프로토콜의 가장 많이 인용되는 약점이 불균일한 배송 조건에서 모바일 신뢰성이었기 때문입니다: 마감을 놓친 알림 웨이크, 네트워크 플랩 중 MLS 커밋 경쟁, 에폭 진행을 좌초시키는 백그라운드 페치 한도. SwiftUI와 Compose는 Flutter가 플러그인 브리지를 통해 도달하는 플랫폼 백그라운드 처리 프리미티브에 대한 직접 액세스를 클라이언트에 제공하고, UniFFI 바인딩 경로는 두 플랫폼에서 정적 라이브러리로 출시되는 하나의 Rust 워크스페이스에 프로토콜 로직을 유지합니다. Flutter Whitenoise 라인은 아카이브되지 않은 &lt;a href="https://github.com/marmot-protocol/whitenoise">&lt;code>whitenoise&lt;/code>&lt;/a> 저장소에서 계속되므로 공지는 추가적입니다: v2 사양이 수렴하는 동안 새 네이티브 클라이언트 계보가 Flutter 앱과 병렬로 실행됩니다. MDK 또는 현재 Whitenoise 앱에서의 프로덕션 전환은 초안, 엔진, 클라이언트가 프로덕션 준비 릴리스에 도달하는 것을 기다립니다.&lt;/p>
&lt;h3 id="chama-v200에서-v310까지-일주일-만의-독립-p2p-에스크로">Chama v2.0.0에서 v3.1.0까지: 일주일 만의 독립 P2P 에스크로&lt;/h3>
&lt;p>뉴스레터 #25에서 v1.3.0으로 소개된 Nostr 네이티브 P2P 에스크로 클라이언트는 지난 7일 동안 17개의 태그된 릴리스를 출시했으며, 6월 9일 &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v3.1.0">v3.1.0&lt;/a>에서 거래방 UI 재작성 및 판매자별 상점으로 끝났습니다. 버전 자취가 이야기를 말합니다: &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.0.0">v2.0.0&lt;/a>은 파괴적 베이스이며, 그런 다음 &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.0.1">v2.0.1&lt;/a>, &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.0.2">v2.0.2&lt;/a>, &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.0.3">v2.0.3&lt;/a>은 Fedi WebView 자금 조달 레일 격차를 닫습니다; &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.1.0">v2.1.0&lt;/a>, &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.2.0">v2.2.0&lt;/a>, &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.3.0">v2.3.0&lt;/a>, &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.3.1">v2.3.1&lt;/a>은 중재자 계층을 강화합니다; &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.4.0">v2.4.0&lt;/a>, &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.5.0">v2.5.0&lt;/a>, &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.6.0">v2.6.0&lt;/a>은 자기 수탁 표면과 전 세계 커뮤니티 라우팅을 추가합니다; &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.7.0">v2.7.0&lt;/a>, &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.8.0">v2.8.0&lt;/a>, &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.9.0">v2.9.0&lt;/a>, &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.10.0">v2.10.0&lt;/a>은 평이한 영어 키 복사, 그룹 신청, 분쟁 마감 중재, 평판을 계층화합니다. &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v3.0.0">v3.0.0&lt;/a>은 종단 간 거래 알림으로 패키지를 묶고, 6월 9일 &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v3.1.0">v3.1.0&lt;/a>은 Reserved → Locked → Settled 진행 척추, 역할 색상 액션 카드, 판매자별 상점 리스팅 클래스 (큐레이션된 스왑, 대출장, 청구서) 주위에 거래 화면을 재작성합니다.&lt;/p>
&lt;p>아키텍처 피벗은 v2.0.0에 있습니다. 에스크로 LOCK 형식이 변경되어 2-of-3 Shamir 분할의 각 공유가 그 소지자에게만 암호화됩니다 (sharePolicy &lt;code>holder-only-v1&lt;/code>). 페더레이션의 무기명 ecash는 더 이상 단일 참가자로부터만 재구성되지 않으므로, 자신의 공유와 페더레이션 보유 공유 모두를 가진 악의적인 당사자가 동의 없이 거래를 완료할 수 있는 경로가 닫힙니다. 2.0 이전 클라이언트는 &amp;ldquo;공유를 찾을 수 없음&amp;quot;으로 큰 소리로 실패합니다; 거래는 오래된 클라이언트에서 완료될 수 없으며, 그 과정에서 자금은 손실되지 않습니다. v2.0 잠금은 결제하기 위해 v2.x의 모든 당사자가 필요합니다. v2.0.0은 또한 다중 유닛 상점과 sats 전용 마켓 뷰를 추가했습니다.&lt;/p>
&lt;p>v2.1.0은 중재자 대체를 도입했습니다: Shamir 인덱스 2의 중재자 공유는 커뮤니티 중재자 풀 위의 결정론적 우선순위에 암호화되므로, 부재중인 중재자는 거래를 좌초시키지 않고 대체될 수 있습니다. v2.2.0은 ₿121 거래에서 야생에서 대체가 작동함을 증명하고 힐링 대체 백업을 추가했습니다. v2.3.0은 잠금 시 리스팅 중재자 커뮤니티 멤버십을 확인함으로써 마지막 중재자 프론트러닝 격차를 닫았고, v2.3.1은 자동 할당된 중재자 슬롯이 잠금이 그들을 앉힐 때까지 미리보기였던 형제 경쟁을 닫았습니다.&lt;/p>
&lt;p>자기 수탁 표면은 v2.4.0 (Nostr에 암호화되어 저장된 Fedimint ecash 지갑용 BIP-39 복구 문구)과 v2.5.0 (Nostr 신원과 지갑 시드를 소유하는 마스터 nsec 백업)에서 도착했습니다. v2.6.0은 로컬 Chama가 없는 국가의 사용자를 가장 가까운 페더레이션으로 라우팅하는 글로벌 커뮤니티 선택기 주위로 온보딩을 재작업했습니다; 이전 빌드는 폴백 없이 사용자를 되돌렸습니다. v2.7.0은 복구 키 화면을 평이한 영어로 다시 작성했습니다 (&amp;ldquo;계정과 그 안의 돈에 대한 유일한 키; Chama는 그것을 결코 보지 않으며 재설정할 수 없습니다; 잃어버리면 누구도 계정을 되찾을 수 없습니다&amp;rdquo;). v2.8.0은 그룹 신청, 다크/라이트 테마, 두 개의 새 이벤트 kind (38120 명부, 38121 신청)를 추가했습니다. v2.9.0은 마감 시 분쟁 해결을 변경했습니다: 만료에 도달한 경합 거래는 이제 중재자 판결로 해결됩니다; 이전 동작은 자동 환불이었습니다. 릴리스는 COORDINATED로 표시되어 있으므로 분쟁의 모든 당사자가 업데이트해야 합니다. v2.10.0은 새 이벤트 kind 38123으로 거래별 엄지 위/엄지 아래 평가를 추가했습니다.&lt;/p>
&lt;p>v3.0.0은 앱이 작동하기 위해 조정 커뮤니티를 필요로 하지 않는 이정표입니다. 종단 간 거래 알림은 실행 가능한 상태 전환에서만 사용자에게 ping합니다: 상대방이 sats를 잠갔음, 지급 준비 완료, 분쟁이 중재자로서 사용자의 판결을 요구함, 또는 거래가 결제되거나 만료됨. Me 화면의 하나의 토글이 알림을 켜거나 끄고, 권한 프롬프트는 토글이 활성화될 때만 실행됩니다. fire-once dedup은 상태 재로드가 경보 폭풍을 트리거하지 않도록 유지합니다. 잘못된 chama 가드레일 버그도 &lt;a href="https://github.com/jesuspirate/chama/pull/103">PR #103&lt;/a>에서 닫혔습니다. 이전 버전은 하나의 chama의 라벨로 다른 chama의 페더레이션을 가진 리스팅을 스탬프할 수 있었습니다. Windows와 Linux 데스크톱 번들이 릴리스와 함께 출시됩니다; macOS dmg는 서명과 공증이 도착할 때까지 보류됩니다.&lt;/p>
&lt;p>Chama는 이제 Mostro와 Shopstr에 Nostr 네이티브 마켓플레이스로 합류하며, 서버리스 아키텍처, Fedimint 지원 2-of-3 Shamir 에스크로, 소지자 전용 공유 암호화, 그리고 세 개 중 조정 커뮤니티 없이 자립형 데스크톱 및 모바일 클라이언트를 출시하는 유일한 것으로 구별됩니다.&lt;/p>
&lt;h3 id="coracle-hosting-유료-릴레이-서비스와-오픈-소스-caravel-스택">Coracle Hosting: 유료 릴레이 서비스와 오픈 소스 Caravel 스택&lt;/h3>
&lt;p>6월 3일 Hodlbod가 &lt;a href="https://hosting.coracle.social">hosting.coracle.social&lt;/a>에서 &lt;a href="https://nos.lol/e/f8586160cd12df479c261397353c99e6f3e4d870b616382e1b4338bad3ab498a">Coracle Hosting을 발표&lt;/a>했습니다. 이는 NWC 또는 카드를 통해 반복적인 lightning 결제를 받는 호스팅 커뮤니티 릴레이 서비스입니다. 서비스는 Coracle의 청구 및 프로비저닝 프론트엔드인 &lt;a href="https://gitea.coracle.social/coracle/caravel">Caravel&lt;/a>과 단일 머신에서 많은 가상 릴레이를 호스팅하는 릴레이 런타임 &lt;a href="https://gitea.coracle.social/coracle/zooid">zooid&lt;/a>에 의해 지원됩니다. 둘 다 Coracle의 자체 호스팅 gitea에서 오픈 소스입니다. Caravel은 운영자가 릴레이별로 전환할 수 있는 선택적 &lt;a href="https://livekit.io">livekit&lt;/a> 및 &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a> 통합과 함께 출시됩니다. 회원 수 제한이 있는 무료 티어를 통해 운영자는 결제 세부 정보를 제출하기 전에 서비스를 평가할 수 있습니다.&lt;/p>
&lt;p>Hodlbod는 비즈니스 모델에 대해 솔직합니다: 다른 사람도 실행할 수 있는 스택의 호스팅 버전을 판매함으로써 오픈 소스로 수익화합니다. 경쟁적 해자는 다음 계획 단계인 &lt;a href="https://flotilla.social">Flotilla&lt;/a> 통합입니다. Flotilla는 사용자 표면을 소유하므로 Flotilla 내부에서 제공되는 호스팅 옵션은 관리형 인프라를 선호하는 사용자를 위한 기본 경로가 됩니다. Hodlbod는 다른 Caravel 운영자가 연락하면 Flotilla의 대체 호스팅 선택기에 추가할 것을 제안했으며, 연합 호스팅 시장으로의 문을 열어 두었습니다.&lt;/p>
&lt;p>Caravel은 유료 회원 티어를 가진 공개 Nostr 릴레이 프로비저닝 플랫폼으로 &lt;a href="https://relay.tools">relay.tools&lt;/a>에 합류합니다. relay.tools는 Caravel보다 앞서 있으며 오늘날 지배적인 릴레이 생성 서비스로 출시되어 커뮤니티 릴레이의 자체 디렉토리와 유료 회원 또는 조정자 참여 흐름을 갖추고 있습니다. Caravel의 구별되는 특징은 조정된 스택입니다: 릴레이 런타임 (zooid), 청구 및 프로비저닝 프론트엔드 (Caravel 자체), 클라이언트 측 선택기 (Flotilla 통합, 아직 진행 중)가 하나의 설계로 출시됩니다. 다른 구별되는 특징은 zooid의 프로세스당 다중 릴레이 밀도이며, 여기서 고객 릴레이는 단일 호스트 프로세스를 공유하므로 운영자는 많은 작은 커뮤니티에 걸쳐 호스팅 비용을 상각합니다. 이것은 2000년대 초 공유 웹 호스팅을 실행 가능하게 만든 것과 동일한 밀도 논쟁이며, Nostr의 릴레이 계층에 적용됩니다.&lt;/p>
&lt;h2 id="릴리스">릴리스&lt;/h2>
&lt;h3 id="angor-v0229-및-v0230-mainnet-기본값-및-3명-사용자-uat-자금-조달-테스트">Angor v0.2.29 및 v0.2.30: mainnet 기본값 및 3명 사용자 UAT 자금 조달 테스트&lt;/h3>
&lt;p>6월 4일 &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.29">Angor v0.2.29&lt;/a>와 6월 8일 &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.30">v0.2.30&lt;/a>은 분산 Bitcoin-and-Nostr 자금 조달 프로토콜의 이번 주 두 릴리스입니다. v0.2.30의 헤드라인 변경은 기본 네트워크를 mainnet으로 전환하는 &lt;a href="https://github.com/block-core/angor/pull/893">PR #893&lt;/a>입니다. Angor는 여전히 불안정한 알파 릴리스로 출시되지만, default-mainnet 스위치는 프로토콜이 데스크톱 및 모바일 클라이언트의 testnet 전용 단계를 지났음을 신호합니다. v0.2.30은 또한 이미지 업로드와 스크롤 재설정이 있는 원 탭 모바일 프로젝트 생성 흐름 (&lt;a href="https://github.com/block-core/angor/pull/889">PR #889&lt;/a>)을 실현하고 lightning 인보이스 스피너가 매달릴 수 있었던 경쟁 조건을 해결합니다 (&lt;a href="https://github.com/block-core/angor/pull/890">PR #890&lt;/a>).&lt;/p>
&lt;p>v0.2.29는 미확인 지출이 있는 10라운드에 걸친 3명 사용자 자금 전송을 다루는 종단 간 UAT 테스트를 &lt;a href="https://github.com/block-core/angor/pull/881">PR #881&lt;/a>에서 추가했으며, 이는 Angor 테스트 스위트에서 첫 번째 다중 사용자 자금 조달 흐름 테스트입니다. 릴리스는 또한 Angor CLI와 MCP 서버의 구현 계획 (&lt;a href="https://github.com/block-core/angor/pull/792">PR #792&lt;/a>)을 추가했으며, &lt;a href="https://github.com/block-core/angor/pull/880">PR #880&lt;/a>에서 MCP 테스트 워크플로를 위한 CLI 개선을 수행했습니다. DavidGershony의 &lt;a href="https://github.com/block-core/angor/pull/885">PR #885&lt;/a>는 런타임 네트워크 전환 후 잘못된 네트워크를 사용한 Boltz lightning 인보이스를 수정했으며, 이는 v0.2.30의 mainnet 기본값 이후 프로덕션에서 나타났을 버그입니다. 설정은 이제 데이터 삭제 중 선택적 복구 지갑 파일 정리를 제공합니다 (&lt;a href="https://github.com/block-core/angor/pull/883">PR #883&lt;/a>).&lt;/p>
&lt;h3 id="sprout-v0315-일시적-채널-ttl-갱신-및-acp-슬래시-명령">Sprout v0.3.15: 일시적 채널 TTL 갱신 및 ACP 슬래시 명령&lt;/h3>
&lt;p>6월 10일에 출시된 &lt;a href="https://github.com/block/sprout/releases/tag/v0.3.15">Sprout v0.3.15&lt;/a>는 6월 2일 v0.3.7로 시작된 실행의 여덟 번째 릴리스입니다. 뉴스레터 #25는 mesh-llm 통합 및 채널 섹션 작업과 함께 v0.3.1에서 v0.3.6 실행을 다루었습니다; v0.3.7에서 v0.3.15는 그 하류이며, 광택과 몇 가지 사용자 대면 추가에 초점을 맞춥니다. 가장 사용자에게 보이는 변경은 &lt;a href="https://github.com/block/sprout/pull/902">PR #902&lt;/a>에서 일시적 채널의 TTL 갱신입니다: 사용자가 일시적 채널을 아카이브 해제하면 Sprout는 채널의 time-to-live를 연장하므로 아카이브 해제는 원래 만료 타이머 아래에서 즉시 재아카이브하지 않습니다. 모바일 커스텀 이모지는 설정 재설계와 함께 &lt;a href="https://github.com/block/sprout/pull/906">PR #906&lt;/a>에 도착하고, 반응 카운트는 이제 변경 시 애니메이션됩니다 (&lt;a href="https://github.com/block/sprout/pull/904">PR #904&lt;/a>).&lt;/p>
&lt;p>&lt;a href="https://github.com/block/sprout/pull/905">PR #905&lt;/a>는 여러 단어 표시 이름이 깨지고 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/27.md">NIP-27&lt;/a> &lt;code>nostr:npub&lt;/code> 언급 추출이 조용히 삭제되는 오랜 격차를 수정합니다. 데스크톱용 디렉토리 기반 팀 UI는 설치, 동기화, 표시 명령과 함께 &lt;a href="https://github.com/block/sprout/pull/912">PR #912&lt;/a>에서 출시됩니다. 슬래시 명령은 이제 &lt;a href="https://agentclientprotocol.com">ACP&lt;/a> 커넥터를 통해 통과합니다 (&lt;a href="https://github.com/block/sprout/pull/919">PR #919&lt;/a>). Sprout UI는 경로에서 벗어나 있으면서 Sprout가 &lt;code>/help&lt;/code> 스타일 명령을 에이전트 런타임으로 직접 전달할 수 있게 합니다.&lt;/p>
&lt;h3 id="wisp-v111-spark-지갑-통합-및-nsec-붙여넣기-가드">Wisp v1.1.1: Spark 지갑 통합 및 nsec 붙여넣기 가드&lt;/h3>
&lt;p>6월 5일에 출시된 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v1.1.1">Wisp v1.1.1&lt;/a>은 &lt;a href="https://github.com/barrydeen/wisp/pull/548">PR #548&lt;/a>에서 &lt;a href="https://www.spark.money">Spark&lt;/a> 하위 화면이 있는 2계층 지갑 연결 화면과 &lt;a href="https://github.com/barrydeen/wisp/pull/549">PR #549&lt;/a>에서 iOS 지갑 UI와의 대시보드 패리티를 실현합니다. 릴리스에는 앱 어느 곳에서든 &lt;code>nsec1&lt;/code> 접두사 붙여넣기를 감지하고 필드가 그것을 수락하는 것을 차단하여 Nostr UX에서 가장 많이 인용된 풋건 중 하나를 닫는 시스템 전체 &lt;a href="https://github.com/barrydeen/wisp/pull/553">nsec 붙여넣기 가드&lt;/a>가 포함됩니다. QR 스캔 로그인과 &lt;code>npub&lt;/code> 및 &lt;code>nprofile&lt;/code>용 감시 전용 모드가 &lt;a href="https://github.com/barrydeen/wisp/pull/552">PR #552&lt;/a>에서 출시되며, 사용자가 프로필을 읽기 전용으로 탐색할 수 있게 합니다. Zap 메시지는 이제 참여 서랍에서 미니 게시물로 렌더링되므로 (&lt;a href="https://github.com/barrydeen/wisp/pull/559">PR #559&lt;/a>), zap 노트는 sat 금액과 함께 텍스트를 운반합니다. 스레드 답글의 신뢰 웹 필터가 &lt;a href="https://github.com/barrydeen/wisp/pull/583">PR #583&lt;/a>에 도착하여, 사용자가 팔로우 그래프 밖의 계정에서 오는 답글 스팸을 숨길 수 있습니다.&lt;/p>
&lt;h3 id="nostria-v3146-및-nospeak-113-알림-재작업-및-ice-재시작">Nostria v3.1.46 및 nospeak 1.1.3: 알림 재작업 및 ICE 재시작&lt;/h3>
&lt;p>6월 7일 &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.46">Nostria v3.1.46&lt;/a>은 마지막 보기 이후 새 알림만 계산하도록 알림 카운터를 재작업하는 3릴리스 실행을 종료하며, 스크롤을 통해 오래된 알림을 로드하면 배지 카운트가 부풀려지는 오랜 인플레이션을 제거합니다. &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.45">Nostria v3.1.45&lt;/a>는 lightning 및 QR 코드 결제에 영향을 미치는 분할 결제 버그를 수정하고 Android의 컴포지터에서 실행 불가능한 것으로 이전에 계획된 반투명 UI를 삭제했습니다.&lt;/p>
&lt;p>6월 4일 &lt;a href="https://github.com/psic4t/nospeak/releases/tag/v1.1.3">nospeak v1.1.3&lt;/a>은 1대1 음성 통화에서 FAILED 상태의 ICE 재시작을 추가합니다. 표준 WebRTC 동작은 ICE 후보가 대체 경로 없이 타임아웃될 때 통화를 삭제합니다; ICE 재시작 경로는 후보를 재협상하므로 통화가 일시적인 NAT 또는 네트워크 변경에서 복구됩니다. Android 통화는 이제 비디오 통화 중 화면을 켜둡니다.&lt;/p>
&lt;h2 id="미출시-변경">미출시 변경&lt;/h2>
&lt;h3 id="amethyst-nip-32--nip-f4--tor-트랙을-계속하는-41개-pr">Amethyst: NIP-32 / NIP-F4 / Tor 트랙을 계속하는 41개 PR&lt;/h3>
&lt;p>Amethyst는 이번 주 릴리스 태그를 자르지 않고 41개의 PR을 병합했으며, 이는 지난주의 52개 PR과 뉴스레터 #25에서 다룬 &lt;a href="https://nostrcompass.org/ko/topics/nip-32/">NIP-32&lt;/a> 해시태그 라벨링 및 &lt;a href="https://nostrcompass.org/ko/topics/nip-f4/">NIP-F4&lt;/a> 팟캐스트 작업 위에 있습니다. 활성 브랜치는 다음 태그된 릴리스를 위해 기능을 계속 축적하며, 지난주의 헤드라인 추가 위에 광택을 계층화합니다: 해시태그 라벨러 발견, 팟캐스트 화면, 음악 트랙 및 플레이리스트, Tor 자체 치유 워치독, 익명 업로드용 일시적 서명자, NIP-05 필터링이 있는 온체인 zap. Amethyst의 PR 처리량은 모든 Nostr 클라이언트 중 가장 높게 유지되며, 미출시 대기열은 다른 Android Nostr 클라이언트가 매칭해야 할 사실상의 로드맵입니다.&lt;/p>
&lt;h3 id="damus-ok-메시지의-릴레이-추적-및-v117-변경-로그">Damus: OK 메시지의 릴레이 추적 및 v1.17 변경 로그&lt;/h3>
&lt;p>6월 3일 병합된 &lt;a href="https://github.com/damus-io/damus/pull/3786">Damus PR #3786&lt;/a>는 릴레이의 성공적인 &lt;code>OK&lt;/code> 메시지를 게시 후 릴레이 목록에 추가합니다. 이전 Damus 빌드는 릴레이에서 일반 메시지를 받을 때만 seen-relays 목록을 채웠으며, 이는 게시물을 확인했지만 이벤트를 되돌려주지 않은 릴레이가 사용자에게 보이지 않았음을 의미했습니다. 이 변경은 게시물이 선호하는 아웃박스 릴레이에 도착했음을 확인하려는 사용자에게 중요합니다. &lt;a href="https://github.com/damus-io/damus/pull/3796">PR #3796&lt;/a>은 프로필 뷰에서 &lt;code>AttributeGraph&lt;/code> 사이클을 수정하고, &lt;a href="https://github.com/damus-io/damus/pull/3725">PR #3725&lt;/a>는 다음 태그된 릴리스 이전에 v1.17 변경 로그를 실현합니다.&lt;/p>
&lt;h3 id="shopstr-nip-34-이중-게시">Shopstr: NIP-34 이중 게시&lt;/h3>
&lt;p>Shopstr의 &lt;a href="https://relay.ngit.dev/npub1u350hpq840naxzkkle4gmdtvzanfxmjd9m9tytn5355aua7jh2cqgfuw39/shopstr.git">ngit의 shopstr 저장소&lt;/a>가 이번 주 Nostr에서 &lt;a href="https://nostrcompass.org/ko/topics/nip-34/">NIP-34&lt;/a> git 저장소로 공지되어 ngit의 추적된 저장소에 합류했습니다. 상점 클라이언트의 GitHub 저장소는 여전히 주요 개발 표면입니다; NIP-34 공지는 병렬 git-over-Nostr 협업 경로를 사용할 수 있게 합니다. 이것은 &lt;a href="https://relay.ngit.dev/">Mostro&lt;/a> 이후 NIP-34에 이중 게시하는 두 번째 주요 Nostr 마켓플레이스 프로젝트이며, Nostr의 git 전송으로의 프로젝트 메타데이터 점진적 마이그레이션을 계속합니다.&lt;/p>
&lt;h3 id="hermes-marmot-mls를-통한-ai-에이전트-게이트웨이">Hermes-Marmot: MLS를 통한 AI 에이전트 게이트웨이&lt;/h3>
&lt;p>&lt;a href="https://github.com/notmandatory/hermes-marmot">hermes-marmot&lt;/a>은 &lt;a href="https://github.com/NousResearch/hermes-agent">Hermes Agent&lt;/a>의 플러그인으로, Rust Marmot Development Kit의 Python 바인딩인 &lt;a href="https://github.com/marmot-protocol/mdk-python">mdk-python&lt;/a>을 사용하여 AI 에이전트의 메시징 표면을 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> (MLS-over-Nostr) 그룹에 연결합니다. 플러그인을 통해 사용자는 &lt;a href="https://whitenoise.chat">Whitenoise&lt;/a>를 포함하여 kind 445 MLS 메시지를 사용하는 모든 Nostr 클라이언트에서 AI 에이전트에게 DM을 보낼 수 있습니다. 인바운드 DM은 &lt;a href="https://github.com/rust-nostr/nostr">nostr-sdk&lt;/a> Python 바인딩을 통해 &lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59&lt;/a> 기프트 랩 언랩핑을 사용하고, 인바운드 welcome은 &lt;code>UnwrappedGift.from_gift_wrap&lt;/code>을 통해 &lt;code>mdk.process_welcome&lt;/code> 및 &lt;code>mdk.accept_welcome&lt;/code>으로 흐릅니다. 접근 제어는 &lt;code>MARMOT_ALLOWED_USERS&lt;/code> (쉼표로 구분된 npub 허용 목록) 또는 오픈 개발 접근을 위한 &lt;code>MARMOT_ALLOW_ALL_USERS=true&lt;/code>를 통해 실행됩니다.&lt;/p>
&lt;p>저장소는 새롭고 (마지막 업데이트 5월 27일) 작습니다. 그 중요성은 아키텍처적입니다: LLM 에이전트 런타임과 MLS 암호화된 Nostr 메시징 채널 사이의 첫 번째 공개 브리지이며, Whitenoise 자체를 넘어 mdk-python의 첫 번째 프로덕션 사용입니다. 이 패턴은 두 엔드포인트가 모두 MLS 키를 보유하고 릴레이가 암호문만 보는 에이전트 대 에이전트 통신을 가리킵니다.&lt;/p>
&lt;h2 id="nip-업데이트-및-프로토콜-사양-작업">NIP 업데이트 및 프로토콜 사양 작업&lt;/h2>
&lt;h3 id="nip-67-eose-완전성-힌트-pr-2317-병합">NIP-67 EOSE 완전성 힌트 (PR #2317) 병합&lt;/h3>
&lt;p>mattn의 &lt;a href="https://github.com/nostr-protocol/nips/pull/2317">PR #2317&lt;/a>이 6월 6일에 병합되어 &lt;a href="https://nostrcompass.org/ko/topics/nip-67/">NIP-67&lt;/a>을 프로토콜에 추가했습니다. NIP는 &lt;code>EOSE&lt;/code> 릴레이 메시지를 선택적 세 번째 요소로 확장합니다: &lt;code>[&amp;quot;EOSE&amp;quot;, &amp;lt;subscription_id&amp;gt;, &amp;quot;finish&amp;quot;]&lt;/code>는 필터와 일치하는 모든 저장된 이벤트가 전달되었음을 신호하고, 벌거벗은 &lt;code>[&amp;quot;EOSE&amp;quot;, &amp;lt;subscription_id&amp;gt;]&lt;/code>는 완전성 주장을 담지 않습니다. 힌트를 생략하는 릴레이는 클라이언트에게 더 있을 수 있다고 말하고 있습니다; NIP-11에서 NIP-67 광고를 생략하는 릴레이는 기존 레거시 휴리스틱 아래 오늘의 동작을 유지합니다. 변경은 양방향으로 하위 호환됩니다: 레거시 클라이언트는 후행 배열 요소를 무시하고, 레거시 릴레이는 그것을 생략합니다.&lt;/p>
&lt;p>병합된 사양의 동기는 두 가지입니다. 첫째, 조용한 데이터 손실: 클라이언트가 300 이벤트 내부 캡을 가진 릴레이에 대해 마지막 500개 노트를 요청하고, 릴레이가 300 이벤트를 반환하며, 클라이언트 (표준 &lt;code>received &amp;lt; limit&lt;/code> 휴리스틱을 사용)는 결과가 완전하다고 결론짓습니다. 201번째부터 N번째로 오래된 일치하는 노트는 클라이언트가 그 사실을 모른 채 릴레이에 읽지 않은 상태로 남습니다. 둘째, 필수 낭비된 왕복: 릴레이가 응답을 300 이벤트에서 캡할 때, 캡을 소진하는 모든 구독은 필터가 정확히 300 이벤트와 일치하는 경우에도 완료를 확인하기 위해 순전히 &lt;code>until=&amp;lt;oldest_created_at&amp;gt;&lt;/code>으로 두 번째 &lt;code>REQ&lt;/code>를 필요로 합니다. 두 실패 모드 모두 모든 캡 소진 구독에서 모든 클라이언트가 지불합니다. &lt;code>&amp;quot;finish&amp;quot;&lt;/code> 힌트는 하나의 기존 메시지에 있는 하나의 선택적 문자열이며 두 비용을 모두 제거합니다.&lt;/p>
&lt;h3 id="nip-50-자동완성-확장-pr-2357-병합">NIP-50 자동완성 확장 (PR #2357) 병합&lt;/h3>
&lt;p>Alex Gleason의 &lt;a href="https://github.com/nostr-protocol/nips/pull/2357">PR #2357&lt;/a>이 6월 6일에 병합되어 &lt;a href="https://nostrcompass.org/ko/topics/nip-50/">NIP-50&lt;/a> 검색에 &lt;code>autocomplete:true/false&lt;/code> 토큰을 추가했습니다. 확장을 통해 클라이언트가 쿼리를 typeahead 조회로 표시할 수 있으므로 릴레이는 토큰이 없는 쿼리의 기본값으로 전체 텍스트 검색을 사용하면서 접두사 매칭을 사용합니다. Ditto의 릴레이는 이를 팔로우 팩, 목록, &lt;code>title&lt;/code> 태그가 있는 모든 이벤트에 대해 구현하여 제목 접두사에 대한 일치를 반환합니다; 기본 검색 경로는 전체 텍스트 스코어링을 실행합니다. 이 토큰 없이는 자동완성 스타일 UI가 접두사 검색 의도를 전달할 방법이 없었고 릴레이는 쿼리 모양에서 추측해야 했습니다. 토큰은 검색당 힌트이며 릴레이 전체 기능이 아니므로 릴레이는 일반 자동완성 지원을 주장하지 않고 하나의 이벤트 클래스 (제목)에 대해 구현할 수 있습니다.&lt;/p>
&lt;h3 id="nip-gart-긴급-경보-및-위치-브로드캐스트-pr-2374">NIP-GART 긴급 경보 및 위치 브로드캐스트 (PR #2374)&lt;/h3>
&lt;p>disinqa가 6월 9일에 공개한 &lt;a href="https://github.com/nostr-protocol/nips/pull/2374">PR #2374&lt;/a>는 신뢰할 수 있는 수신자 그룹에 주소가 지정된 긴급 경보 및 위치 브로드캐스트를 위한 Nostr의 프라이버시 보존 와이어 형식을 정의합니다. 명시된 설계 목표는 이벤트를 재생 안전하고 서명 확인 가능한 종단 간으로 유지하면서 릴레이 운영자로부터 발신자 신원, 그룹 멤버십, 페이로드를 숨기는 것입니다. NIP 번호는 아직 TBD이며 제안은 초기 초안입니다. 사용 사례는 표준 긴급 경보 패턴입니다: 위협받는 사용자가 사전 공유된 신뢰할 수 있는 연락처 그룹만 해독할 수 있는 위치 ping을 브로드캐스트하며, 릴레이는 발신자, 수신자 집합, 페이로드에 대해 눈이 멀었습니다. 와이어 형식 세부 사항은 PR에 있으며 메인테이너가 검토하면서 진화할 가능성이 높습니다.&lt;/p>
&lt;h3 id="nip-46-logout-메서드-pr-2373">NIP-46 logout 메서드 (PR #2373)&lt;/h3>
&lt;p>hzrd149가 6월 8일에 공개한 &lt;a href="https://github.com/nostr-protocol/nips/pull/2373">PR #2373&lt;/a>은 클라이언트가 세션이 종료되었음을 bunker에 명시적으로 알릴 수 있도록 &lt;code>logout&lt;/code> 메서드를 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a>에 추가합니다. 지금까지 bunker 세션을 종료하는 유일한 방법은 세션 타임아웃을 기다리거나 연결 사용을 중지하는 것이었고, 둘 다 bunker가 사라진 클라이언트의 세션 상태를 유지하게 합니다. 제안은 짧고 (하나의 새 메서드) 오래 지속되는 bunker 통합을 더 깨끗하게 만드는 종류의 정리 변경입니다.&lt;/p>
&lt;h3 id="nip-95-하이브리드-릴레이-p2p-제안이-롱폼으로-유통">NIP-95 하이브리드 릴레이-P2P 제안이 롱폼으로 유통&lt;/h3>
&lt;p>npub &lt;code>91bea5cd9361504c409aaf459516988f68a2fcd482762fd969a7cdc71df4451c&lt;/code>에서 6월 4일 &lt;em>Protocolo Híbrido Relay-P2P via WebRTC&lt;/em>라는 제목으로 &lt;code>kind:30023&lt;/code> 게시물로 롱폼 &lt;a href="https://github.com/nostr-protocol/nips">NIP-95 사양&lt;/a>이 유통되었습니다. 포르투갈어 문서는 Nostr 클라이언트가 저장된 이벤트 검색 및 오프라인 배달을 위해 릴레이를 계속 사용하면서 실시간 메시징을 위해 WebRTC를 통해 서로 직접 연결하는 하이브리드 피어 투 피어 릴레이 프로토콜을 정의합니다. 저자는 사양을 &amp;ldquo;LLM 준비&amp;quot;로 명시적으로 프레임하여 AI 모델이 작동하는 클라이언트 또는 서버 코드를 생성할 수 있는 수준의 세부 정보로 메시지 정의, 논리적 흐름, 데이터 스키마, 상태 규칙을 제공했습니다. 제안은 아직 NIP PR로 도착하지 않았습니다; &lt;code>kind:30023&lt;/code>을 통한 유통은 공식 nostr-protocol/nips 풀 리퀘스트의 관례적 전조입니다.&lt;/p>
&lt;h3 id="nip-44-v3가-두-번째-서명자를-얻다-clave가-사양을-이식">NIP-44 v3가 두 번째 서명자를 얻다: Clave가 사양을 이식&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/newsletters/2026-06-03-newsletter/#nip-44-v3-amber-implementation-ahead-of-spec">지난주 Amber의 v6.2.0 NIP-44 v3 롤아웃&lt;/a>은 병합된 NIPs PR 이전에 출시되어 v3를 상호 운용하기 위해 다른 클라이언트가 미러링해야 하는 Amber 전용 확장으로 남겨두었습니다. 그 단일 구현 프레이밍이 이번 주 변경되었습니다. 푸시 기반 iOS NIP-46 원격 서명자 &lt;a href="https://github.com/DocNR/clave">Clave&lt;/a>가 6월 3일과 4일에 여덟 개의 커밋에 걸쳐 독립적인 NIP-44 v3 포트를 실현했습니다. 암호 프리미티브는 세 개의 커밋에서 출시됩니다: &lt;a href="https://github.com/DocNR/clave/commit/99ca5a5aacb501d1666c489fcdea30187c7853fa">HKDF + ECDH 키 계층&lt;/a>, &lt;a href="https://github.com/DocNR/clave/commit/8808cdca54d32b4ae57856bd4b07ed73a45e8e5c">v3 패딩 알고리즘&lt;/a>, &lt;a href="https://github.com/DocNR/clave/commit/ae1f506a53cb2c8aa16523540dbe790876c1839e">최상위 공개 API 및 암호화 컨텍스트&lt;/a>. 그 위에 NIP-46 표면이 &lt;a href="https://github.com/DocNR/clave/commit/f37aa1afc8368862fc3ebac533408442349bfc38">LightSigner 내부의 RPC 디스패치 배선&lt;/a>과 &lt;a href="https://github.com/DocNR/clave/commit/e51bcb49fc61cfa89b6030d61b203e046aeddb0a">v3 컨텍스트 (kind 및 scope)를 담는 PendingRequest 스키마&lt;/a>에서 이어지므로 서명자는 v3 페이로드가 어떤 이벤트 kind와 사용 사례에 대해 승인되었는지 기록할 수 있습니다.&lt;/p>
&lt;p>Clave는 사용자 대면 표면에서 Amber와 갈라집니다. &lt;a href="https://github.com/DocNR/clave/commit/0a8b7de63c1f2994a80a66bf139ec519fab12877">민감도 계층을 갖춘 권한 부여 스키마&lt;/a>를 통해 사용자는 선택한 민감도 수준에서 특정 이벤트 kind 및 scope에 대해 v3 암호화를 부여할 수 있습니다. 첫 만남에서 &lt;a href="https://github.com/DocNR/clave/commit/2cf563cb15b0406f5e8aaa0b4e34b887ff1896a1">일회성 설명 카드가 있는 v3 컨텍스트 인식 승인 프롬프트&lt;/a>가 v3를 사용자에게 소개합니다. 작업은 main에 있으며 &lt;a href="https://github.com/DocNR/clave/commit/4bd0c26d7cf308386ef15e5d96ee5673d6db2d4a">Xcode 프로젝트에 배선&lt;/a>되었지만 미출시입니다; 가장 최근 태그된 빌드는 5월 12일의 &lt;a href="https://github.com/DocNR/clave/releases/tag/v0.2.0-build79">v0.2.0-build79&lt;/a>입니다.&lt;/p>
&lt;p>NIPs PR이 병합되기 전에 두 개의 독립적인 구현이 프로덕션 경로에서 NIP-44 v3를 실현하며, 이는 프로토콜 PR이 공식화할 기본 와이어 형식에 대한 사례를 강화합니다. 이제 크로스 구현 상호 운용성 테스트가 사양 수렴으로의 경로가 되며, Amber의 Android 승인 표면과 Clave의 iOS 민감도 계층 모델이 두 참조 포인트가 됩니다. v3를 배선하는 다른 원격 서명자 (nsec.app의 noauth는 2025년 5월 이후 휴면 상태이며 다른 bunker는 v3 작업을 발표하지 않음)는 합의를 더 강화할 것입니다.&lt;/p>
&lt;h3 id="nip-34-활동-iris가-새로운-hashtree-전송으로-스택을-채택">NIP-34 활동: Iris가 새로운 hashtree 전송으로 스택을 채택&lt;/h3>
&lt;p>Iris는 6월 8일에 &lt;a href="https://njump.me/nevent1qqs8kmy7a9dn5awurlp9q26lsaetl7dc4wauzdl8ww68dzmn09e074gpzfmhxue69uhhgetdwqhxjunfwvh8gmc850du0">&lt;code>hashtree&lt;/code>&lt;/a>의 NIP-34 저장소 공지를, 6월 9일에 &lt;a href="https://njump.me/nevent1qqsq4grx000f6p0r8hdv4lqhcgn7707vmktv2j528kn0ldps4y9g49qpzfmhxue69uhhgetdwqhxjunfwvh8gmcmq47as">&lt;code>iris-apps&lt;/code>&lt;/a>, &lt;a href="https://njump.me/nevent1qqsyj5r0tyqvpp9v7qnras90u6kzqtpqx6ktntwym66m8qyngvf59vqpzfmhxue69uhhgetdwqhxjunfwvh8gmcpts6pf">&lt;code>iris-drive&lt;/code>&lt;/a>, &lt;a href="https://njump.me/nevent1qqs0x98hpsv8vmrxvwm2rs9exxttrue5qv5p2n2sqjeylz2kgdmd7tgpzfmhxue69uhhgetdwqhxjunfwvh8gmca8783s">&lt;code>iris-chat-rs&lt;/code>&lt;/a>를 게시하여 &lt;code>wss://temp.iris.to&lt;/code>에서 제공되는 새 &lt;code>htree://&lt;/code> 스킴 아래 클론 URL을 광고했습니다. hashtree 전송은 GRASP 라우팅 클론에 대한 콘텐츠 주소 지정 대안이며, 이 네 개의 공지는 그 첫 번째 공개 사용입니다. 저장소에는 빈 설명이 있고 아키텍처 세부 사항은 아직 나타나고 있지만, (사용자 정의 Iris 내부 매니페스트 대신) NIP-34 공지를 통해 게시하기로 한 선택은 Iris가 더 넓은 NIP-34 git-over-Nostr 스택에 헌신하고 있음을 신호합니다.&lt;/p>
&lt;h2 id="nip-심층-분석-nip-67-eose-완전성-힌트">NIP 심층 분석: NIP-67 (EOSE 완전성 힌트)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-67/">NIP-67&lt;/a>은 &lt;a href="https://nostrcompass.org/ko/topics/nip-01/">NIP-01&lt;/a>의 가장 오래된 정확성 격차 중 하나를 닫습니다. 원본 사양은 &lt;code>EOSE&lt;/code>를 &lt;code>REQ&lt;/code>에 대한 저장된 이벤트와 실시간 구독 이벤트 사이의 경계로 정의하지만, 릴레이가 저장된 모든 일치 항목 배달을 완료했는지 아니면 내부 캡 때문에 도중에 멈췄는지는 결코 지정하지 않았습니다. 모든 릴레이는 클라이언트의 &lt;code>limit&lt;/code>과 독립적으로 구독당 캡 (일반적으로 300에서 1000 이벤트)을 강제하며, 클라이언트는 그 캡을 관찰할 방법이 없었습니다.&lt;/p>
&lt;p>표준 해결 방법은 수신된 카운트를 요청된 &lt;code>limit&lt;/code>과 비교하는 것이었습니다. &lt;code>received &amp;lt; limit&lt;/code>이면 결과를 완전한 것으로 처리하고, 그렇지 않으면 &lt;code>until=&amp;lt;oldest_created_at&amp;gt;&lt;/code>로 페이지네이션합니다. 두 브랜치 모두 깨져 있습니다. &lt;code>received &amp;lt; limit&lt;/code> 브랜치는 조용히 잘라냅니다: 300에서 캡된 릴레이에 대해 500개 노트를 요청하는 클라이언트는 300개 이벤트를 보고 &lt;code>300 &amp;lt; 500&lt;/code>이므로 결과가 완전하다고 결론짓고 나머지를 결코 가져오지 않습니다. 릴레이에 보유된 이벤트는 기존 메시지를 통해 &amp;ldquo;더 사용 가능&amp;quot;을 신호할 수 없습니다. 두 번째 브랜치로서의 페이지네이션은 낭비입니다: 캡과 정확히 일치하는 필터는 완전성을 확인하기 위해 두 번째 &lt;code>REQ&lt;/code>를 필요로 하며, 릴레이에서 전체 필터 스캔을 소비하면서 0 이벤트를 반환합니다.&lt;/p>
&lt;p>NIP-67의 수정은 &lt;code>EOSE&lt;/code> 메시지의 하나의 선택적 문자열입니다:&lt;/p>
&lt;pre tabindex="0">&lt;code>[&amp;#34;EOSE&amp;#34;, &amp;#34;&amp;lt;sub_id&amp;gt;&amp;#34;, &amp;#34;finish&amp;#34;] // 명시적: 모든 저장된 이벤트가 배달됨
[&amp;#34;EOSE&amp;#34;, &amp;#34;&amp;lt;sub_id&amp;gt;&amp;#34;] // 완전성 주장 없음
&lt;/code>&lt;/pre>&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-11/">NIP-11&lt;/a> &lt;code>supported_nips&lt;/code>에서 NIP-67을 광고하고 벌거벗은 &lt;code>EOSE&lt;/code>를 발산하는 릴레이는 클라이언트에게 더 있다고 말하고 있습니다. 광고를 생략하는 릴레이는 오늘의 동작을 유지하고 클라이언트는 기존 휴리스틱으로 폴백합니다. 레거시 클라이언트는 후행 배열 요소를 무시합니다. 하위 호환성은 양방향으로 유지되며, 새 동사나 이벤트 kind가 없습니다.&lt;/p>
&lt;p>NIP-67을 검토할 가치가 있는 것은 의도적으로 제한한 범위입니다. 사양은 커서 또는 페이지네이션 토큰을 정의하지 않으므로 &lt;code>until&lt;/code> 기반 페이지네이션은 메커니즘으로 남습니다. 릴레이 캡은 현재 위치에 머물며 NIP는 그 노출을 요구하지 않습니다. NIP-67은 &lt;code>EOSE&lt;/code>를 저장된-대-실시간 경계로 유지하고 경계에서 예/아니오 신호만 추가합니다: &amp;ldquo;당신을 위해 더 있습니다&amp;rdquo; vs &amp;ldquo;그게 전부입니다&amp;rdquo;. 이 최소한의 표면은 NIP-01 확장에 대해 상대적으로 짧은 검토 기간 후에 PR이 병합된 이유이며, mattn이 PR에서 영어 텍스트에 AI 번역이 사용되었다고 명시적으로 언급하는 이유입니다. 변경은 번역 불확실성이 중요하지 않을 만큼 작습니다.&lt;/p>
&lt;p>캡을 강제하는 릴레이와 클라이언트 간의 NIP-67 인식 교환 예시. 릴레이의 NIP-11 광고:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a5f87fe2d4c8b9a0e3f1c4d5e6a7b8c9d0e1f2a3b4c5d6e7f8091a2b3c4d5e6f&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1781136000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">11&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;{\&amp;#34;supported_nips\&amp;#34;:[1,11,50,67]}&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;f1e2d3c4b5a6978869504132c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>이어지는 와이어 수준 교환:&lt;/p>
&lt;pre tabindex="0">&lt;code>→ [&amp;#34;REQ&amp;#34;, &amp;#34;abc&amp;#34;, {&amp;#34;kinds&amp;#34;:[1],&amp;#34;limit&amp;#34;:500}]
← [...300개의 EVENT 메시지...]
← [&amp;#34;EOSE&amp;#34;, &amp;#34;abc&amp;#34;] // &amp;#34;finish&amp;#34; 없음: 캡에 도달, 더 사용 가능
→ [&amp;#34;REQ&amp;#34;, &amp;#34;def&amp;#34;, {&amp;#34;kinds&amp;#34;:[1],&amp;#34;limit&amp;#34;:300,&amp;#34;until&amp;#34;:1780900000}]
← [...178개의 EVENT 메시지...]
← [&amp;#34;EOSE&amp;#34;, &amp;#34;def&amp;#34;, &amp;#34;finish&amp;#34;] // 명시적으로 완료
&lt;/code>&lt;/pre>&lt;p>178개 이벤트 응답은 이전에는 완료를 확인하기 위해 세 번째 &lt;code>REQ&lt;/code>를 트리거했을 것입니다. NIP-67에서 클라이언트는 거기서 멈춥니다.&lt;/p>
&lt;p>NIP-67은 또한 드문 합의로 도착하는 NIP-01 수정으로도 주목할 만합니다. 대부분의 NIP-01 변경은 프로토콜의 작은 표면이 모든 구현에서 하중을 부담하기 때문에 긴 논의 스레드를 끕니다. NIP-67은 확장된 검토 기간 (공개에서 병합까지 약 7주) 후에 병합되었으며, 이는 NIP-01 변경이 충분히 작고 실패 모드가 충분히 구체적일 때 (조용한 데이터 손실, 필수 낭비된 왕복) 프로토콜 메인테이너가 코어 메시지 어휘를 확장할 의향이 있음을 시사합니다.&lt;/p>
&lt;h2 id="nip-심층-분석-nip-50-검색">NIP 심층 분석: NIP-50 (검색)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-50/">NIP-50&lt;/a>은 &lt;code>REQ&lt;/code> 메시지의 &lt;code>search&lt;/code> 필터 필드를 정의하며, 클라이언트가 쿼리 문자열에 대한 전체 텍스트 매치로 이벤트를 필터링하도록 릴레이에 요청할 수 있게 합니다. 병합된 기본 사양은 의도적으로 최소한입니다: &lt;code>search&lt;/code> 필드는 문자열이고, 각 릴레이는 자체 검색 의미를 결정하며 (어떤 필드가 인덱싱되는지, 스코어링이 어떻게 작동하는지, 어간이 적용되는지), 릴레이는 NIP-11 문서에서 NIP-50 지원을 광고합니다. 클라이언트는 쿼리 문자열 자체를 통해서만 검색 알고리즘을 제어합니다.&lt;/p>
&lt;p>이 미니멀리즘은 NIP-50의 강점이자 제약입니다. 강점은 어떤 릴레이든 어떤 품질 수준에서든 검색을 구현할 수 있다는 것입니다: 기본 하위 문자열 스캔이 사양을 만족하고, Elasticsearch 또는 Meilisearch를 실행하는 릴레이도 동등하게 만족합니다. 제약은 클라이언트가 검색 의도를 표현할 방법이 없다는 것입니다. 프로필 언급 typeahead UI는 표시 이름에 대한 접두사 매칭을 원합니다; 전체 텍스트 콘텐츠 검색은 노트 본문 전체에서 토큰화된 전체 텍스트 스코어링을 원합니다. 동일한 &lt;code>search&lt;/code> 필드가 두 가지를 모두 담고, 릴레이는 쿼리 모양에서 추측해야 합니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2357">PR #2357&lt;/a>은 첫 번째 NIP-50 확장 토큰을 추가합니다: 검색 쿼리에 임베드된 &lt;code>autocomplete:true&lt;/code> 또는 &lt;code>autocomplete:false&lt;/code>는 클라이언트가 어떤 모드를 원하는지 신호합니다. Ditto의 릴레이는 팔로우 팩, 목록, &lt;code>title&lt;/code> 태그가 있는 모든 이벤트에 대해 토큰을 구현하여 &lt;code>autocomplete:true&lt;/code>가 있을 때 접두사 매칭으로 전환합니다. 토큰은 쿼리 내에 인라인으로 존재하므로 (별도의 필터 필드는 그대로 유지) 검색 문자열과 함께 이동하고 와이어 프로토콜 범프가 필요하지 않습니다:&lt;/p>
&lt;pre tabindex="0">&lt;code>search: &amp;#34;fiat autocomplete:true&amp;#34;
&lt;/code>&lt;/pre>&lt;p>이와 같은 토큰 모양의 힌트는 NIP-50이 항상 릴레이 특정 방언을 처리해 온 방법입니다. 릴레이는 이미 &lt;code>language:en&lt;/code> 및 &lt;code>domain:example.com&lt;/code>과 같은 토큰을 지원했습니다. 각각은 릴레이 특정으로 남고, 각 릴레이는 자체 방언을 문서화합니다. NIP-50의 PR #2357은 &lt;code>autocomplete&lt;/code>를 릴레이 사설 토큰에서 사양이 축복한 것으로 승격시켜, 릴레이 전반에 걸친 typeahead 인식 검색으로의 길을 엽니다.&lt;/p>
&lt;p>kind 0 프로필 제목을 인덱싱하는 릴레이를 대상으로 하는 autocomplete 토큰이 있는 NIP-50 &lt;code>REQ&lt;/code> 예시:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;b7c9d0e1f2a3b4c5d6e7f8091a2b3c4d5e6f7081a2b3c4d5e6f70819a2b3c4d5&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1781136000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;client&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;example-mention-picker&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Sent search: kinds=[0], search=\&amp;#34;fiat autocomplete:true\&amp;#34;, limit=10&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;12d3e4f5061728394a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8091a2b3c4d5e6f7081a2b3c4d5e6f70819a2b3c4d5e6f7081a2b3c4d5e6f708192&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>실제 와이어 수준 REQ:&lt;/p>
&lt;pre tabindex="0">&lt;code>[&amp;#34;REQ&amp;#34;, &amp;#34;mention-picker&amp;#34;, {&amp;#34;kinds&amp;#34;:[0],&amp;#34;search&amp;#34;:&amp;#34;fiat autocomplete:true&amp;#34;,&amp;#34;limit&amp;#34;:10}]
&lt;/code>&lt;/pre>&lt;p>토큰을 인식하지 못하는 릴레이는 &lt;code>autocomplete:true&lt;/code>를 리터럴 검색 문자열의 일부로 취급하고 전체 텍스트 매칭으로 폴백하여 (다르게 순위 지정되었더라도) 올바른 결과를 반환합니다. 우아한 성능 저하는 사용 가능할 때 접두사 매칭을 선호하는 클라이언트가 토큰을 무조건 포함하는 것이 안전하게 만듭니다.&lt;/p>
&lt;p>다음 가능성 있는 NIP-50 확장은 kind별 순위 제어입니다: 기본 관련성 점수 대신 &amp;ldquo;created_at 내림차순으로 순위&amp;quot;를 말하는 힌트. 여러 릴레이가 이미 &lt;code>sort:newest&lt;/code>를 릴레이 사설 토큰으로 수용하며, &lt;code>autocomplete&lt;/code>를 사양에 가져온 것과 동일한 승격 경로가 적용됩니다. 검색은 릴레이가 결과 품질로 경쟁하는 몇 안 되는 Nostr 프리미티브 중 하나로 남습니다; 배송의 신뢰성은 모든 준수하는 릴레이에서 동일합니다. 점진적인 토큰을 통해 클라이언트는 릴레이가 무거운 새 사양을 출시하도록 강요하지 않고 그 품질 경쟁을 활용할 수 있습니다.&lt;/p></content:encoded></item><item><title>Nostr Compass #25</title><link>https://nostrcompass.org/ko/newsletters/2026-06-03-newsletter/</link><pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2026-06-03-newsletter/</guid><description>&lt;p>Amber 6.2.0은 사양보다 앞서 NIP-44 v3 암호화를 출시합니다. Mostro는 여덟 개의 PR에 걸쳐 Cashu 정산 escrow의 기초를 도착시켜, 기존 Cashu Development Kit을 Lightning과 함께 두 번째 정산 백엔드로 감쌉니다. NIP-F4 팟캐스트가 27개월의 논쟁 끝에 병합됩니다. fiatjaf는 bunker 대 Marmot 아키텍처 논쟁을 다시 여는 논쟁적인 NIP-17 키 분리 제안을 엽니다. Amethyst는 52개의 미출시 PR에 걸쳐 NIP-32 해시태그 라벨링, 전용 팟캐스트 화면, 온체인 zap을 도착시켰습니다.&lt;/p>
&lt;h2 id="주요-소식">주요 소식&lt;/h2>
&lt;h3 id="amber-620-nip-44-v3-암호화-출시">Amber 6.2.0: NIP-44 v3 암호화 출시&lt;/h3>
&lt;p>6월 1일에 릴리스된 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.2.0">Amber v6.2.0&lt;/a>은 전용 승인 화면, intent 프리뷰, bunker 프리뷰, 이력 로깅, 잘못된 요청에 대한 자동 거부와 함께 &lt;a href="https://github.com/greenart7c3/Amber/pull/448">NIP-44 v3 암호화 지원&lt;/a>을 추가합니다. 이 릴리스는 또한 &lt;a href="https://github.com/greenart7c3/Amber/commit/8b93340">NIP-44 v3 ContentProvider authority&lt;/a>를 등록하므로 다른 Android 앱이 기존 v2 경로와 함께 v3 암호화를 요청할 수 있습니다. NIP-44 자체는 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> 프라이빗 DM, NIP-46 bunker 트래픽 및 기타 Nostr 프리미티브에서 사용되는 버전이 지정된 암호화 페이로드 사양입니다; Amber의 v3는 별도의 signer 메서드로 신호되는 v2와 함께 옵트인이므로 수신자 측 클라이언트는 알고리즘을 명시적으로 협상할 수 있습니다. 해당 NIPs PR은 아직 도착하지 않았으므로, Amber는 다운스트림 클라이언트 통합을 위해 등록된 wire 형식 및 ContentProvider authority와 함께 프로토콜 합의보다 앞서 v3를 롤아웃하고 있습니다.&lt;/p></description><content:encoded>&lt;p>Amber 6.2.0은 사양보다 앞서 NIP-44 v3 암호화를 출시합니다. Mostro는 여덟 개의 PR에 걸쳐 Cashu 정산 escrow의 기초를 도착시켜, 기존 Cashu Development Kit을 Lightning과 함께 두 번째 정산 백엔드로 감쌉니다. NIP-F4 팟캐스트가 27개월의 논쟁 끝에 병합됩니다. fiatjaf는 bunker 대 Marmot 아키텍처 논쟁을 다시 여는 논쟁적인 NIP-17 키 분리 제안을 엽니다. Amethyst는 52개의 미출시 PR에 걸쳐 NIP-32 해시태그 라벨링, 전용 팟캐스트 화면, 온체인 zap을 도착시켰습니다.&lt;/p>
&lt;h2 id="주요-소식">주요 소식&lt;/h2>
&lt;h3 id="amber-620-nip-44-v3-암호화-출시">Amber 6.2.0: NIP-44 v3 암호화 출시&lt;/h3>
&lt;p>6월 1일에 릴리스된 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.2.0">Amber v6.2.0&lt;/a>은 전용 승인 화면, intent 프리뷰, bunker 프리뷰, 이력 로깅, 잘못된 요청에 대한 자동 거부와 함께 &lt;a href="https://github.com/greenart7c3/Amber/pull/448">NIP-44 v3 암호화 지원&lt;/a>을 추가합니다. 이 릴리스는 또한 &lt;a href="https://github.com/greenart7c3/Amber/commit/8b93340">NIP-44 v3 ContentProvider authority&lt;/a>를 등록하므로 다른 Android 앱이 기존 v2 경로와 함께 v3 암호화를 요청할 수 있습니다. NIP-44 자체는 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> 프라이빗 DM, NIP-46 bunker 트래픽 및 기타 Nostr 프리미티브에서 사용되는 버전이 지정된 암호화 페이로드 사양입니다; Amber의 v3는 별도의 signer 메서드로 신호되는 v2와 함께 옵트인이므로 수신자 측 클라이언트는 알고리즘을 명시적으로 협상할 수 있습니다. 해당 NIPs PR은 아직 도착하지 않았으므로, Amber는 다운스트림 클라이언트 통합을 위해 등록된 wire 형식 및 ContentProvider authority와 함께 프로토콜 합의보다 앞서 v3를 롤아웃하고 있습니다.&lt;/p>
&lt;p>NIP-46 세션은 이제 연결 시 ping 요청을 자동 수락하여, 페어링 후 첫 왕복에서 프롬프트를 제거합니다. &lt;code>sign_message&lt;/code> signer 메서드는 사용 중단되고 사용되지 않은 후 완전히 제거되었습니다.&lt;/p>
&lt;p>Amber가 지배적인 Android signer이므로, v3를 원하는 모든 다운스트림 클라이언트는 NIPs PR이 도착할 때까지 Amber의 wire 형식을 대상으로 해야 합니다. 이는 프로토콜이 따라잡을 때까지 최종 v3 사양에 대한 Amber에게 암묵적인 발언권을 부여합니다. 트레이드는 실제적입니다: 프로덕션의 v3는 Amber가 결국의 NIP에 대한 구현 피드백을 수집할 수 있게 하며, 다른 클라이언트가 이제 매칭해야 하는 임시 단일 구현 참조 지점의 비용이 있습니다.&lt;/p>
&lt;h3 id="mostro-cdk를-통한-cashu-escrow-통합">Mostro: CDK를 통한 Cashu escrow 통합&lt;/h3>
&lt;p>grunch는 이번 주에 MostroP2P 전반에 걸쳐 여덟 개의 PR을 도착시켜, Nostr 조정 P2P Bitcoin 거래소에서 Lightning과 함께 두 번째 정산 백엔드로 Cashu의 기존 P2PK multisig 프리미티브(NUT-10 및 NUT-11)를 통합했습니다. 암호학적 프리미티브는 Cashu의 것입니다; 작업은 통합 스캐폴딩과 새로운 escrow 백엔드 trait입니다. 5월 30일에 릴리스된 &lt;a href="https://github.com/MostroP2P/mostro-core/releases/tag/v0.12.0">Mostro core v0.12.0&lt;/a>은 &lt;a href="https://github.com/MostroP2P/mostro-core/pull/150">2-of-3 multisig escrow에 대한 프로토콜 유형&lt;/a>, proof별 P_M 서명을 추가하고, 응답 검증을 통해 escrow 이벤트를 허용합니다. 아키텍처는 &lt;a href="https://github.com/MostroP2P/mostro/pull/756">PR #756&lt;/a>에 문서화되어 있으며 &lt;a href="https://github.com/MostroP2P/mostro/pull/757">PR #757&lt;/a>에서 명확히 한 주문별 거래 키를 사용합니다.&lt;/p>
&lt;p>구현은 하루 동안 여섯 개의 후속 PR에 걸쳐 롤아웃되었습니다. &lt;a href="https://github.com/MostroP2P/mostro/pull/758">F2(PR #758)&lt;/a>는 구성, escrow 모드, 조건부 부팅을 추가했습니다. 다음 슬라이스 &lt;a href="https://github.com/MostroP2P/mostro/pull/760">F3(PR #760)&lt;/a>는 Lightning 구현과 Cashu 스텁이 있는 &lt;code>EscrowBackend&lt;/code> trait를 정의하여, Mostro가 주문 상태 머신을 변경하지 않고 정산 백엔드를 전환할 수 있게 합니다. &lt;a href="https://github.com/MostroP2P/mostro/pull/759">F4(PR #759)&lt;/a>는 mint 및 지갑 작업을 위해 &lt;a href="https://github.com/cashubtc/cdk">CDK&lt;/a>(Cashu Development Kit)를 감쌌습니다. &lt;a href="https://github.com/MostroP2P/mostro/pull/761">F5(PR #761)&lt;/a>의 데이터베이스 작업은 compare-and-swap escrow 잠금과 active-locked 쿼리를 추가했습니다. &lt;a href="https://github.com/MostroP2P/mostro/pull/762">F6(PR #762)&lt;/a>는 엔드투엔드 escrow 테스트를 위해 전용 CI 작업에 컨테이너화된 mint를 구축했습니다. Mostro 흐름은 이미 릴레이를 통한 주문 조정에 NIP-59 gift-wrapped DM을 사용하므로, Cashu escrow는 wire 프로토콜을 건드리지 않고 Lightning과 함께 두 번째 정산 옵션으로 슬롯을 채웁니다.&lt;/p>
&lt;h2 id="릴리스">릴리스&lt;/h2>
&lt;h3 id="ngit-v250-grasp-대체-및-lazy-git-fetch">ngit v2.5.0: GRASP 대체 및 lazy git fetch&lt;/h3>
&lt;p>&lt;a href="https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.5.0">ngit v2.5.0&lt;/a>은 저장소에 등록된 GRASP 서버가 하나 이상 있을 때 새 제안에 대해 PR kind를 생성하도록 &lt;code>git push pr/&amp;lt;branch&amp;gt;&lt;/code> 및 &lt;code>ngit send&lt;/code>의 기본 동작을 변경합니다. 이전에는 60 KB를 초과하는 큰 커밋이나 서브모듈이 포함된 커밋에 대해서만 이 동작이 트리거되었습니다. PR을 저장소의 GRASP 서버에 push할 수 없을 때, ngit는 이제 선언된 서버를 통한 GRASP-06 라우팅으로 대체됩니다. &lt;code>ngit send --git-server&lt;/code> 플래그 또는 &lt;code>git push -o git-server=&amp;lt;url&amp;gt;&lt;/code>은 기여자가 커스텀 git URL 또는 GRASP 서버를 명시적으로 대상으로 지정할 수 있게 합니다.&lt;/p>
&lt;p>&lt;code>ngit init&lt;/code> 재게시는 이제 기존 공지에서 알 수 없는 태그를 보존하므로, 미래의 ngit 버전이나 제3자 도구에 의해 추가된 태그는 재게시에서 살아남습니다. 노란색 경고는 이월된 태그를 나열하며, &lt;code>--clean&lt;/code>은 요청에 따라 이를 제거합니다. &lt;code>ngit pr apply&lt;/code>, &lt;code>ngit pr checkout&lt;/code>, &lt;code>ngit pr list&lt;/code>는 git 서버를 lazily 조회하고 단일 fetch 헬퍼를 공유하므로, 커밋이 이미 로컬에 있을 때 checkout이 더 이상 무조건 fetch하지 않습니다. &lt;code>ngit pr checkout&lt;/code>은 또한 저장소의 선언된 git 서버가 PR tip을 운반하지 않을 때 대체로 PR 이벤트에서 제출자가 제공한 clone URL을 시도하며, &lt;code>ngit pr apply&lt;/code>의 기존 동작과 일치합니다. ngit는 Nostr를 통한 git 협업에 대한 참조 &lt;a href="https://nostrcompass.org/ko/topics/nip-34/">NIP-34&lt;/a> 구현이며, v2.5.0은 GRASP를 새 기여자를 위한 일급 경로로 만듭니다.&lt;/p>
&lt;h3 id="jumble-v2657-exif-제거-및-검증된-zap-카운트">Jumble v26.5.7: EXIF 제거 및 검증된 zap 카운트&lt;/h3>
&lt;p>&lt;a href="https://github.com/CodyTseng/jumble/releases/tag/v26.5.7">Jumble v26.5.7&lt;/a>은 사용자 프라이버시와 데이터 무결성에 직접 영향을 미치는 두 가지 변경을 추가합니다. EXIF 위치 및 카메라 식별자는 이제 이미지가 클라이언트를 떠나기 전에 이미지 업로드에서 제거되어, Jumble에서 게시된 모든 이미지에 영향을 미쳤던 오랫동안 지속된 메타데이터 유출 표면을 닫습니다. Zap 카운트는 이제 암호학적으로 검증된 영수증에서만 계산되며, 공격자가 노트의 zap 총계를 과장할 수 있었던 잘못 형성된 zap 이벤트의 부풀려진 카운트를 수정합니다. 이 릴리스는 또한 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> DM에 대한 발신자 identity 검증을 추가하여, 발신자가 seal에서 자신의 &lt;code>pubkey&lt;/code>를 위조할 수 있는 스푸핑 표면을 닫습니다.&lt;/p>
&lt;h3 id="nostr-calendar-v160-rsvp-및-중복-참가자-처리">nostr-calendar v1.6.0: RSVP 및 중복 참가자 처리&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.6.0">nostr-calendar v1.6.0&lt;/a>은 Formstr의 RSVP 흐름을 도착시키고(&lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/169">PR #169&lt;/a>) 이벤트 초대에서 중복 참가자를 방지합니다(&lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/168">PR #168&lt;/a>). publish 함수의 &lt;code>waitForAll&lt;/code> 옵션은 이제 기본값이 false로 되어 UI가 느린 릴레이에서 차단되지 않도록 합니다(&lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/170">PR #170&lt;/a>). &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/157">PR #157&lt;/a>은 약속 스케줄링 및 예약에 대한 Formstr의 두 NIP 제안 초안을 출시했습니다.&lt;/p>
&lt;h3 id="sprout-036-sprout--mesh-llm-및-채널-섹션">Sprout 0.3.6: Sprout × mesh-llm 및 채널 섹션&lt;/h3>
&lt;p>&lt;a href="https://github.com/block/sprout/releases/tag/v0.3.6">Sprout v0.3.6&lt;/a>은 이번 주 v0.3.1에서 v0.3.6까지 여섯 릴리스 런의 헤드라인입니다. 프로세스 내 Sprout × mesh-llm 통합은 &lt;a href="https://github.com/block/sprout/pull/798">PR #798&lt;/a>에 도착하여, Sprout가 릴레이 admission을 통해 mesh-llm 노드를 서비스하고 소비할 수 있게 합니다. 사용자 정의 채널 섹션은 &lt;a href="https://github.com/block/sprout/pull/792">PR #792&lt;/a>에서 Nostr를 통해 기기 간에 동기화되고, 채널 섹션은 &lt;a href="https://github.com/block/sprout/pull/800">PR #800&lt;/a>에서 릴레이 동기화와 함께 모바일에 도착합니다. 변경 가능한 팔로우 및 음소거 컨트롤이 있는 스레드 인식 알림은 &lt;a href="https://github.com/block/sprout/pull/761">PR #761&lt;/a>에 도착합니다.&lt;/p>
&lt;p>다운로드 카드가 있는 임의 파일 유형 첨부 파일은 &lt;a href="https://github.com/block/sprout/pull/810">PR #810&lt;/a>에 도착하여, Sprout를 이미지 전용 첨부 파일 이상으로 확장합니다. 모바일은 Pulse 소셜 피드 탭(&lt;a href="https://github.com/block/sprout/pull/772">PR #772&lt;/a>)과 피드, 작성, 필터 표면 전반에 걸친 Pulse 다듬기(&lt;a href="https://github.com/block/sprout/pull/796">PR #796&lt;/a>)를 얻었습니다.&lt;/p>
&lt;h3 id="nostrbotkit-v050-rust-봇-프레임워크의-marmot-그룹-채팅">NostrBotKit v0.5.0: Rust 봇 프레임워크의 Marmot 그룹 채팅&lt;/h3>
&lt;p>Codeberg에서 5월 24일에 릴리스된 &lt;a href="https://codeberg.org/Tuxor/NostrBotKit/src/branch/main/CHANGELOG.md">NostrBotKit v0.5.0&lt;/a>은 자체 호스팅 Rust 봇 프레임워크에 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a>(MLS-over-Nostr, &lt;a href="https://github.com/nostr-protocol/nips/pull/2014">NIP-104&lt;/a>) 지원을 추가합니다. &lt;code>marmot: true&lt;/code>가 설정되면 봇은 MLS 키 패키지(kind 443, 30443, 10051)를 게시하고, 그룹 초대를 자동으로 수락하며, 참여한 그룹에서 메시지를 수신합니다. 두 개의 새로운 명령 유형인 &lt;code>dm_marmot&lt;/code> 및 &lt;code>dm_marmot_npub&lt;/code>는 봇이 cron 작업 또는 웹훅을 통해 명명된 Marmot 그룹 또는 1:1 Marmot 채팅에 메시지를 보낼 수 있게 합니다. 다른 봇과의 피드백 루프를 방지하기 위해, NostrBotKit 봇은 &lt;code>/command&lt;/code> 또는 &lt;code>@botname/command&lt;/code>를 통해 명시적으로 자신에게 주소가 지정된 메시지에만 응답합니다. MIP-04를 사용한 암호화된 첨부 파일은 자동 복호화되고 Blossom 또는 NIP-96을 통해 재업로드되며, MLS 상태 데이터베이스는 봇의 private 키에서 파생된 키로 암호화됩니다. NostrBotKit은 NIP-104 봇 지원을 출시한 첫 Rust 프레임워크로, 기존 TypeScript 경로와 다른 운영자 프로필에 Marmot 암호화 봇 배포를 열어줍니다.&lt;/p>
&lt;h3 id="noscrypt-v0114-서명된-암호-라이브러리-릴리스">noscrypt v0.1.14: 서명된 암호 라이브러리 릴리스&lt;/h3>
&lt;p>&lt;a href="https://github.com/vnuge/noscrypt/releases/tag/v0.1.14">noscrypt v0.1.14&lt;/a>는 secp256k1, NIP-04, NIP-44 프리미티브에 대해 여러 Nostr 클라이언트가 사용하는 C 암호 라이브러리의 보안 릴리스입니다. 이 릴리스는 유지 관리자의 public 키에 대해 검증할 수 있는 &lt;a href="https://www.vaughnnugent.com/resources/software/modules/noscrypt">PGP 서명 다운로드&lt;/a>와 함께 출시됩니다. noscrypt를 번들하는 다운스트림 클라이언트는 통합하기 전에 서명을 검증해야 합니다.&lt;/p>
&lt;h3 id="chama-v130-fedimint를-사용한-새로운-nostr-네이티브-p2p-escrow">Chama v1.3.0: Fedimint를 사용한 새로운 Nostr 네이티브 P2P escrow&lt;/h3>
&lt;p>6월 1일에 릴리스된 &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v1.3.0">Chama v1.3.0&lt;/a>은 정산을 위해 Fedimint ecash와 2-of-3 Shamir secret sharing을 사용하는 새로운 Nostr 네이티브 P2P escrow 클라이언트의 네 릴리스 런의 헤드라인입니다. 이 프로젝트는 &lt;a href="https://getchama.app">getchama.app&lt;/a>에서 출시되며 서버 없이 실행됩니다. v1.3.0은 &amp;ldquo;heal that sticks&amp;rdquo;(세션 재시작에서 살아남는 성공적인 재브로드캐스트 및 거래 healing)와 pay-rail 매칭을 도입하며, 미국 지향 Chama는 미국 결제 rail을 먼저 표시합니다. 다중 유닛 storefront 기초 작업은 &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v1.2.11">v1.2.11&lt;/a>(다중 유닛 스키마) 및 &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v1.2.12">v1.2.12&lt;/a>(storefront 재고 회계사 + 네이티브 Fedimint 브릿지 복구 강화)에 걸쳐 도착했습니다. Chama는 서버리스 아키텍처와 Fedimint 기반 escrow 정산으로 구별되며, Nostr 마켓플레이스 카테고리에서 Mostro와 Shopstr에 합류합니다.&lt;/p>
&lt;h2 id="미출시-변경-사항">미출시 변경 사항&lt;/h2>
&lt;h3 id="amethyst-nip-32-해시태그-라벨링-팟캐스트-화면-음악-트랙">Amethyst: NIP-32 해시태그 라벨링, 팟캐스트 화면, 음악 트랙&lt;/h3>
&lt;p>Amethyst는 릴리스 태그를 컷팅하지 않고 이번 주에 52개의 PR과 411개의 커밋을 병합했습니다. 가장 큰 기능적 추가는 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3111">PR #3111&lt;/a>로, &lt;code>L&lt;/code> 네임스페이스 및 &lt;code>l&lt;/code> 라벨 태그가 있는 kind 1985 이벤트를 사용하여 &lt;a href="https://nostrcompass.org/ko/topics/nip-32/">NIP-32&lt;/a> 해시태그 라벨링과 라벨 기반 해시태그 피드를 구현합니다. 이는 취약한 텍스트 매치 &lt;code>#tag&lt;/code> 메커니즘을 라벨러 기반 발견 모델로 대체하며, 사용자는 콘텐츠 작성자를 팔로우하는 방식으로 특정 라벨러 npub를 팔로우할 수 있습니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3105">PR #3105&lt;/a>는 에피소드 리스트와 인라인 플레이어가 있는 전용 팟캐스트 화면을 추가하며, &lt;a href="https://nostrcompass.org/ko/topics/nip-f4/">NIP-F4&lt;/a> 팟캐스트 사양 병합 후 며칠 내에 도착했습니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3071">PR #3071&lt;/a>은 팔로우 리스트 필터링이 있는 소프트웨어 앱 피드를 추가하고, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3067">PR #3067&lt;/a>은 &lt;a href="https://nostrcompass.org/ko/topics/nip-51/">NIP-51&lt;/a> set을 통한 음악 트랙 및 플레이리스트 지원을 추가합니다.&lt;/p>
&lt;p>익명 게시물 업로드를 위한 임시 signer는 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3123">PR #3123&lt;/a>에 도착하여, 사용자가 업로드 서비스에 identity 키를 노출하지 않고 익명으로 게시할 수 있게 합니다. Arti v2.3.0에 대한 통합 테스트가 있는 Tor 자체 치유 watchdog가 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3053">PR #3053&lt;/a>에 도착하여, 일시적인 네트워크 중단 동안 Amethyst의 Tor 라우팅을 강화합니다. Gemini에서 돌아오는 사용자를 위한 온체인 zap과 NIP-05 필터는 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3052">PR #3052&lt;/a>에 도착하여, Lightning을 넘어 온체인 Bitcoin 결제로 zap 표면을 넓힙니다.&lt;/p>
&lt;h3 id="shopstr-opengraph-프리뷰-url-검증">Shopstr: OpenGraph 프리뷰 URL 검증&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr/pull/504">PR #504&lt;/a>는 마켓플레이스 리스팅에서 OpenGraph 프리뷰 URL을 렌더링하기 전에 검증하여, 악의적인 판매자가 조작된 OG 메타데이터를 통해 스크립트된 콘텐츠를 임베드할 수 있는 잠재적 XSS 표면을 닫습니다. Shopstr 호스팅 상점은 외부 링크에 대한 OG 프리뷰를 표시하며, 검증되지 않은 URL은 공격자가 상점 UI에 임의의 콘텐츠를 주입할 수 있게 했습니다.&lt;/p>
&lt;h2 id="nip-업데이트-및-프로토콜-사양-작업">NIP 업데이트 및 프로토콜 사양 작업&lt;/h2>
&lt;h3 id="nip-f4팟캐스트가-2년-후-병합됨">NIP-F4(팟캐스트)가 2년 후 병합됨&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/1093">PR #1093&lt;/a>이 5월 28일에 병합되었으며, fiatjaf가 원본 초안을 연 후 2년 3개월이 지났습니다. NIP-F4는 오디오 파일 메타데이터(URL, mime type, 언어 ISO 코드, 대체 URL, NIP-96 서비스 플래그, bitrate, duration)에 대한 &lt;code>imeta&lt;/code> 태그, &lt;code>title&lt;/code> 태그, 선택적 &lt;code>image&lt;/code> 및 &lt;code>description&lt;/code> 태그, 주제 라벨용 &lt;code>t&lt;/code> 태그가 있는 kind 54 이벤트로 팟캐스트 에피소드를 정의합니다. 이 사양은 의도적으로 RSS를 진실의 소스로 유지합니다: 에피소드는 RSS 팟캐스트 GUID를 참조하는 &lt;code>i&lt;/code> 태그를 운반할 수 있으므로, Nostr 클라이언트는 오디오 호스팅을 복제하지 않고 기존 팟캐스트 피드에 연결할 수 있습니다. PR 스레드의 긴 논쟁(팟캐스트 네임스페이스 공동 저자 Dave Jones, Alex Gleason, Mike Terenzio와 함께)은 Nostr가 RSS 위에 소셜 계층을 제공하는 반면 RSS는 배포 계층을 유지하는 공존 모델로 정착했습니다. Amethyst의 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3105">PR #3105&lt;/a> 팟캐스트 화면은 사양 병합 후 며칠 내에 도착하며, Jumble의 GIF picker 작업에는 초기 팟캐스트 첨부 파일 스캐폴딩도 포함되어 있습니다.&lt;/p>
&lt;h3 id="nip-17-키-분리pr-2361">NIP-17 키 분리(PR #2361)&lt;/h3>
&lt;p>fiatjaf는 6월 1일에 &lt;a href="https://github.com/nostr-protocol/nips/pull/2361">PR #2361&lt;/a>을 열어 NIP-17이 identity 키를 암호화 키에서 분리할 것을 제안했습니다. 수신자는 새로운 kind 10044 이벤트에서 암호화 키를 광고하고, 발신자는 광고가 존재할 때 gift-wrap 내부 seal에 광고된 키를 사용하며, 광고가 없을 때만 수신자의 identity 키로 대체됩니다. 이 PR은 또한 seal에 발신자의 암호화 pubkey를 운반하는 &lt;code>n&lt;/code> 태그를 추가하므로, 수신자는 은퇴한 모든 키에 대한 시행착오 복호화 없이 올바른 대화 키를 유도할 수 있습니다. 명시된 동기는 bunker UX입니다: 현재 설계에서는 암호화 키가 signer가 보유한 identity 키이므로, bunker 사용자는 복호화를 위해 수신된 모든 DM을 signer를 통해 왕복해야 합니다. 분리는 클라이언트가 서명을 위해 identity 키를 bunker에 유지하면서 로컬에서 암호화 키를 보유할 수 있게 합니다.&lt;/p>
&lt;p>이 제안은 이번 주 가장 논쟁적인 리뷰를 끌었습니다. Cody Tseng(Jumble)은 이를 크로스 클라이언트 DM 상호 운용성에 대한 가장 쉬운 경로로 지원합니다. Vitor Pamplona(Amethyst)는 두 가지 근거로 반대합니다: bunker 외부에 새로운 장기 복호화 secret을 추가하며, 이를 출시하지 않는 클라이언트는 출시하는 클라이언트의 메시지를 조용히 복호화하지 못하며, break가 seal 계층에 있기 때문에 저하 경로가 없습니다. Pamplona는 문제가 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a>의 key package와 epoch rotation으로 이미 올바르게 해결되었으며, 기본 NIP-17 사양에 키 분리를 다시 적용하는 것은 Marmot이 2년 동안 설계해 온 것과 같은 종류의 상호 운용성 실패를 만든다고 주장합니다. fiatjaf의 반박은 세 부분입니다: 분리는 수신자별로 선택 사항이고, n-tag 수정은 시행착오 복호화 우려를 해결하며, 대안은 Telegram이 메시징 사용 사례를 먹는 동안 bunker UX를 깨진 채로 유지하는 것입니다. 스레드는 병합 결정 없이 열려 있으며 분기의 가장 주목받는 NIP 논의입니다.&lt;/p>
&lt;h3 id="nip-silent-payments-결제-흐름pr-2362">NIP-Silent Payments 결제 흐름(PR #2362)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2362">silentius-satoshi는 6월 1일에 PR #2362&lt;/a>를 더 넓은 &lt;a href="https://github.com/nostr-protocol/nips/pull/2355">Nostr Silent Payments NIP 초안(PR #2355)&lt;/a>의 동반자로 열었습니다. 결제 흐름 NIP은 silent payment 영수증 알림용 kind 8352(&lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59&lt;/a> gift wrap을 통해 전달되어 영수증 링크가 공개적으로 관찰 가능하지 않음)과 동일한 Silent Payments 지갑에 대해 기기 간에 동기화되는 암호화된 UTXO 캐시용 kind 10353을 정의합니다. 두 개가 함께 지불자는 공개 릴레이 계층에서 온체인 링크를 노출하지 않고 Nostr 네이티브 프리미티브를 사용하여 Silent Payments 주소로 결제를 신호할 수 있습니다.&lt;/p>
&lt;h3 id="nip-pip-perfect-ip-packetspr-2364">NIP-PIP Perfect IP Packets(PR #2364)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2364">RandyMcMillan은 6월 1일에 PR #2364&lt;/a>를 초안으로 열었습니다. 이는 세 개의 새로운 주소 지정 가능한 kind가 있는 packet-tree 전송을 도입합니다: 39078은 manifest를 운반하고, 39079는 개별 슬라이스를 운반하며, 39080은 복구 요청을 운반합니다. 이 사양은 큰 파일이 주소 지정 가능한 슬라이스로 분할되는 wire 형식을 정의하며, manifest는 슬라이스 트리를 설명하고 복구 요청은 수신자가 누락된 슬라이스를 요청할 수 있게 합니다. 초기 초안 상태가 적용되며, 이 제안은 아직 유지 관리자 리뷰를 끌지 못했습니다.&lt;/p>
&lt;h3 id="nip-29-오디오비디오-라이브-공간pr-2238">NIP-29 오디오/비디오 라이브 공간(PR #2238)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2238">PR #2238&lt;/a>이 5월 28일에 병합되어, &lt;a href="https://nostrcompass.org/ko/topics/nip-29/">NIP-29&lt;/a> 릴레이 기반 그룹을 오디오 및 비디오 라이브 공간 지원으로 확장했습니다. 그룹은 이제 활성 라이브 공간 세션을 참조할 수 있으며, &lt;a href="https://nostrcompass.org/ko/topics/nip-53/">NIP-53&lt;/a> 스타일 라이브 활동 이벤트가 NIP-29 그룹 컨텍스트에 앵커링될 수 있게 합니다.&lt;/p>
&lt;h3 id="nip-71-비디오-다중-오디오-트랙pr-2255">NIP-71 비디오 다중 오디오 트랙(PR #2255)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2255">PR #2255&lt;/a>가 5월 28일에 병합되어, NIP-71 비디오 이벤트에 오디오 트랙 &lt;code>imeta&lt;/code> 태그를 추가했습니다. 새 형식은 URL, 해시, mime 유형, 언어 태그(ISO-639-1과 원본 버전 플래그 포함), 대체 URL, NIP-96 서비스 신호, bitrate, duration을 운반합니다. 이는 오디오 전용 스트리밍(비디오 팟캐스트), 안정적인 오디오로 해상도 전환, 여러 언어 트랙, 서버가 오디오를 비디오 파일에 직접 임베드하지 않을 때 저장소 감소를 가능하게 합니다. 클라이언트는 단일 트랙 동작을 가정하기 전에 오디오 트랙 가용성을 확인해야 합니다.&lt;/p>
&lt;h3 id="nip-59-임시-gift-wrappr-2245">NIP-59 임시 gift wrap(PR #2245)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2245">PR #2245&lt;/a>가 5월 28일에 병합되어, 기존 kind 1059 gift wrap의 임시 대응물로 kind 21059를 추가했습니다. 시맨틱은 표준 NIP-59 wrap과 일치하지만 NIP-01에 따른 임시 이벤트 규칙을 따릅니다(릴레이가 브로드캐스트 후 삭제하며 유지하지 않음). 이는 앱이 요구 사항에 따라 지속성을 선택할 수 있게 합니다: 입력 표시기 및 존재 ping은 임시로 이익을 얻는 반면, DM 이력은 지속성이 필요합니다.&lt;/p>
&lt;h3 id="nip-78-애플리케이션-특정-kindpr-2292">NIP-78 애플리케이션 특정 kind(PR #2292)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2292">PR #2292&lt;/a>가 5월 28일에 병합되어, NIP-78 애플리케이션 특정 데이터를 일반 주소 지정 가능한 kind로 재분류하고, 이전의 별도 범위를 삭제했습니다. 이는 replaceability 시맨틱을 단순화하고 NIP-78을 다른 애플리케이션 상태 NIP이 사용하는 주소 지정 가능한 이벤트 모델과 정렬합니다.&lt;/p>
&lt;h3 id="nip-85-명확화pr-2304">NIP-85 명확화(PR #2304)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2304">PR #2304&lt;/a>가 5월 28일에 &lt;a href="https://nostrcompass.org/ko/topics/nip-85/">NIP-85&lt;/a> Trusted Assertion의 서비스 provider별 여러 키 및 릴레이에 대한 언어의 작은 개선과 함께 병합되어, 릴레이 assertion 서비스에 대한 운영자 키 회전 경로를 명확히 했습니다.&lt;/p>
&lt;h3 id="nip-01-릴레이-연결-관리-한-줄pr-2307">NIP-01 릴레이 연결 관리 한 줄(PR #2307)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2307">PR #2307&lt;/a>이 5월 28일에 병합되어, 클라이언트가 릴레이 연결 수명을 처리하는 방법에 대한 단일 문장을 NIP-01에 추가했습니다. 이 수정은 클라이언트가 가져오기 후 WebSocket 연결을 열어 둘지 여부에 대해 달랐던 오랫동안 지속된 격차를 다루며, 이는 유휴 연결을 삭제하는 릴레이에서 조용한 메시지 손실로 이어졌습니다.&lt;/p>
&lt;h3 id="nip-c7-kind-9-채팅-제약-조건pr-2310">NIP-C7 kind 9 채팅 제약 조건(PR #2310)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2310">PR #2310&lt;/a>이 5월 28일에 병합되어, NIP-C7 채팅 뷰를 kind 9 메시지로만 제한합니다. 이는 NIP-C7 스타일 채팅 표면을 구현하는 클라이언트에서 임시 채팅을 kind 1 타임라인 게시물에서 분리합니다.&lt;/p>
&lt;h3 id="nip-55-단순화pr-2363">NIP-55 단순화(PR #2363)&lt;/h3>
&lt;p>greenart7c3가 6월 1일에 연 &lt;a href="https://github.com/nostr-protocol/nips/pull/2363">PR #2363&lt;/a>은 Android signer 애플리케이션 사양을 단순화합니다. Vitor Pamplona는 &amp;ldquo;Looks good&amp;quot;으로 승인했고 fiatjaf는 병합 준비가 되었는지 물었습니다. 이 변경은 Amber가 이번 주에 출시한 NIP-44 v3 ContentProvider authority 등록의 길을 마련합니다.&lt;/p>
&lt;h3 id="nip-44-v3사양-이전의-amber-구현">NIP-44 v3(사양 이전의 Amber 구현)&lt;/h3>
&lt;p>Amber는 암호화 업그레이드 및 ContentProvider authority 등록을 구현하는 여덟 개의 커밋으로 v6.2.0에서 NIP-44 v3를 출시했지만, NIPs 저장소 사양 PR은 아직 도착하지 않았습니다. NIP-44 자체는 서명된 이벤트 내부에서 사용되는 버전이 지정된 암호화 페이로드 형식을 정의합니다; 기존 v2(2024년부터 프로덕션에서)는 secp256k1 ECDH, HKDF, 패딩, ChaCha20, HMAC-SHA256, base64를 사용합니다. v3 wire 형식은 nonce 앞에 새로운 버전 바이트(0x03)를 추가하여, 수신자 클라이언트가 알고리즘을 명시적으로 협상할 수 있게 합니다. Amber의 구현에는 잘못된 v3 요청에 대한 자동 거부, v2 승인과 별개의 전용 승인 화면, 이력에 대한 방향별 평문 로깅이 포함됩니다. NIPs PR이 병합될 때까지 v3는 Amber 특정 확장으로 서 있습니다. 안정적인 프로토콜 전반 신호가 아니라 미래 지향 신호로 취급하십시오.&lt;/p>
&lt;h2 id="nip-심층-분석-nip-32-labeling">NIP 심층 분석: NIP-32 (Labeling)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-32/">NIP-32&lt;/a>는 Nostr 액터가 네임스페이스가 지정된 라벨 어휘와 함께 주소 지정 가능한 kind 1985 이벤트를 사용하여 이벤트, pubkey, 릴레이, URL 또는 주제를 라벨링하는 구조화된 방법을 정의합니다. 이 사양은 두 개의 새로운 태그를 도입합니다: &lt;code>L&lt;/code>은 라벨 네임스페이스를 나타내고, &lt;code>l&lt;/code>은 그 네임스페이스 내의 라벨을 나타냅니다. 라벨 대상 태그(&lt;code>e&lt;/code>, &lt;code>p&lt;/code>, &lt;code>a&lt;/code>, &lt;code>r&lt;/code> 또는 &lt;code>t&lt;/code>)는 무엇이 라벨링되는지를 지정합니다. 네임스페이스 요구 사항은 여러 라벨 시스템이 충돌하는 것을 방지합니다: &lt;code>nip28.moderation&lt;/code>의 &lt;code>spam&lt;/code> 라벨은 &lt;code>relay-report&lt;/code>의 &lt;code>spam&lt;/code> 라벨과 다른 시맨틱을 운반합니다.&lt;/p>
&lt;p>NIP-32를 조정을 넘어 유용하게 만드는 설계 선택은 라벨이 프로토콜 수준 진실이 아니라 assertion이라는 것입니다. Kind 1985 이벤트는 특정 pubkey가 특정 대상을 특정 네임스페이스에서 라벨링했다는 것만 말합니다. 신뢰 모델은 클라이언트에게 위임됩니다: 각 클라이언트는 존중할 라벨러, 읽을 네임스페이스, 각 라벨에 부여할 UI 어포던스를 선택합니다. 동일한 프리미티브는 콘텐츠 경고, 라이선스 할당, kind 1 노트의 ISO-639-1 언어 태그, ISO-3166-2 지리적 태그, 콘텐츠 분류, 분산 조정 제안, 평판 점수를 운반합니다.&lt;/p>
&lt;p>이번 주 Amethyst의 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3111">PR #3111&lt;/a>은 지금까지 가장 큰 배포입니다. NIP-32를 통한 해시태그 라벨링과 라벨 기반 해시태그 피드를 추가하여, 사용자가 신뢰할 수 있는 라벨러가 할당한 라벨로 탐색할 수 있게 합니다. 원래 Nostr에서 해시태그 발견을 주도한 이전 &lt;code>#tag&lt;/code> 텍스트 매치 메커니즘은 라벨링되지 않은 노트에 대한 대체로 남아 있습니다. 라벨로서의 해시태그 모델은 동일한 노트가 다른 라벨러에 의해 할당된 여러 라벨로 발견 가능하다는 것을 의미하며, 사용자는 기본 노트에 영향을 미치지 않고 특정 라벨러를 음소거하거나 부스트할 수 있습니다.&lt;/p>
&lt;p>자체 라벨링도 지원됩니다. 저자는 언어, 위치, 주제를 선언하기 위해 자신의 kind 1 노트에 직접 &lt;code>L&lt;/code> 및 &lt;code>l&lt;/code> 태그를 첨부할 수 있습니다. &lt;code>[&amp;quot;L&amp;quot;, &amp;quot;ISO-639-1&amp;quot;], [&amp;quot;l&amp;quot;, &amp;quot;en&amp;quot;, &amp;quot;ISO-639-1&amp;quot;]&lt;/code>으로 태그된 노트는 자신을 영어로 식별하며, 제3자 라벨링 인프라 없이 언어 인식 클라이언트에 의해 필터링될 수 있습니다.&lt;/p>
&lt;p>kind 1 노트를 영어로 태그하고 조정 태그를 할당하는 NIP-32 라벨 이벤트 예시:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a5f87fe2d4c8b9a0e3f1c4d5e6a7b8c9d0e1f2a3b4c5d6e7f8091a2b3c4d5e6f&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1748908800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1985&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;L&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;ISO-639-1&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;l&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;en&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;ISO-639-1&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;L&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nip28.moderation&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;l&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;approve&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nip28.moderation&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;8b39f4e5d6c7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Labeled as English-language content approved for NIP-28 chat moderation&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;f1e2d3c4b5a6978869504132c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Amethyst 롤아웃은 최근 Trusted Relay Assertion 작업과 결합되어, NIP-32가 Nostr의 &amp;ldquo;대상에 대한 사용자 주도 assertion&amp;rdquo; 패턴의 표준 기질이 되고 있음을 시사합니다. 다음 테스트는 라벨러 자체가 신뢰 계층을 개발할지 여부입니다: 사용자가 콘텐츠 작성자를 팔로우하는 방식으로 특정 라벨러 npub를 팔로우할지 여부입니다.&lt;/p>
&lt;h2 id="nip-심층-분석-nip-f4-podcasts">NIP 심층 분석: NIP-F4 (Podcasts)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/F4.md">NIP-F4&lt;/a>가 이번 주에 병합되었으며, fiatjaf가 원본 초안(PR #1093)을 연 후 2년 3개월이 지났습니다. F 접두사는 평범한 hex 번호 매기기입니다: NIP-F0에서 NIP-FF는 NIP-0A에서 NIP-0D와 동일한 1바이트 hex 공간을 사용하며, 상위 hex 범위는 01-99 십진수 범위가 채워지고 있는 지금 오버플로우 역할을 합니다. NIP-F4는 팟캐스트가 에피소드 및 메타데이터를 Nostr 이벤트로 게시하면서 오디오 파일 자체에 대한 보완 계층으로 RSS를 유지하는 방법을 정의합니다.&lt;/p>
&lt;p>핵심 아키텍처 선택은 각 팟캐스트가 자체 Nostr keypair라는 것입니다. 사양은 이것으로 직접 시작합니다: &amp;ldquo;each podcast is its own Nostr keypair&amp;rdquo;. 이는 팟캐스트가 팟캐스팅 존재를 일반 kind 0 / kind 1 마이크로블로깅 존재와 결합할 수 있게 하며, 팟캐스트가 키 이전 또는 MuSig2 스타일 공유 서명을 통해 시간이 지남에 따라 소유권을 변경할 수 있게 합니다. 네 개의 이벤트 kind가 게시 계층을 운반합니다:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;code>kind:10154&lt;/code>&lt;/strong>: replaceable 팟캐스트 메타데이터. &lt;code>title&lt;/code>, &lt;code>image&lt;/code>, &lt;code>description&lt;/code>, 선택적 &lt;code>website&lt;/code> 태그와 &lt;code>role&lt;/code>이 &lt;code>host&lt;/code>, &lt;code>cohost&lt;/code>, 또는 &lt;code>editor&lt;/code>인 저자를 표시하는 선택적 &lt;code>p&lt;/code> 태그를 운반합니다.&lt;/li>
&lt;li>&lt;strong>&lt;code>kind:10164&lt;/code>&lt;/strong>: 저자 반대 청구. 사양의 예시는 kind &lt;code>10064&lt;/code>(수정을 위해 열려 있는 오타)를 사용하지만, 제목과 주변 텍스트는 이를 &lt;code>kind:10164&lt;/code>로 식별합니다. 사용자는 자신이 저작한 팟캐스트 pubkey를 나열하므로, 클라이언트는 &lt;code>kind:10154&lt;/code>의 &lt;code>p&lt;/code> 태그를 추정된 저자의 동등한 청구에 대해 검증할 수 있습니다. 이것 없이는 팟캐스트가 누구든 호스트로 잘못 태그할 수 있습니다.&lt;/li>
&lt;li>&lt;strong>&lt;code>kind:54&lt;/code>&lt;/strong>: 팟캐스트 pubkey가 직접 저작한 에피소드 이벤트. 태그에는 &lt;code>title&lt;/code>, 선택적 &lt;code>image&lt;/code>, &lt;code>description&lt;/code>, 하나 이상의 &lt;code>audio&lt;/code> 태그가 포함됩니다. 각 &lt;code>audio&lt;/code> 태그는 &lt;code>[&amp;quot;audio&amp;quot;, &amp;quot;&amp;lt;audio-url&amp;gt;&amp;quot;, &amp;quot;&amp;lt;optional_media_type&amp;gt;&amp;quot;]&lt;/code>입니다. 사양은 &amp;ldquo;추가 발견 후 나중에 여기서 지정할 다른 중요한 필드&amp;quot;를 언급하며, 병합된 형식은 의도적으로 최소입니다.&lt;/li>
&lt;li>&lt;strong>&lt;code>kind:10054&lt;/code>&lt;/strong>: &lt;a href="https://nostrcompass.org/ko/topics/nip-51/">NIP-51&lt;/a> 스타일 즐겨찾기 팟캐스트 리스트로, 사용자가 팔로우하는 팟캐스트를 표시할 수 있게 합니다.&lt;/li>
&lt;/ul>
&lt;p>병합 주변의 스레드 논쟁에는 Podcasting 2.0 공동 저자 &lt;a href="https://github.com/daveajones">Dave Jones&lt;/a>, &lt;a href="https://github.com/alexgleason">Alex Gleason&lt;/a>, &lt;a href="https://github.com/mterenzio">Mike Terenzio&lt;/a>, &lt;a href="https://github.com/pablof7z">Pablo F7z&lt;/a>, &lt;a href="https://github.com/staab">staab&lt;/a>가 참여했습니다. Jones는 RSS를 대체하려는 모든 시도에 강하게 반대하며 다음과 같이 주장했습니다: &amp;ldquo;여러 번 시도되었지만 항상 실패합니다&amp;rdquo;, JSONfeed, XMPP, AMP, Twitter의 API, Spotify의 실패한 마이그레이션을 인용했습니다. Terenzio는 제안을 RSS 위의 소셜 계층으로 재구성하여 RSS 자체를 배포 계층으로 유지했습니다. fiatjaf는 물러서서 제안이 성숙하도록 두는 데 동의했습니다: &amp;ldquo;당신이 말한 모든 것에 동의하지만 여전히 우리가 해낼 수 있다고 생각합니다, 잠시 여기서 멈추죠&amp;rdquo;. 2년 후 병합된 사양은 대체보다 공존에 더 가깝게 도착합니다.&lt;/p>
&lt;p>세 가지 설계 질문이 병합된 사양에 명시적으로 남아 있습니다:&lt;/p>
&lt;ul>
&lt;li>&lt;code>kind:10164&lt;/code> 오타(예시는 &lt;code>10064&lt;/code>를 보여줍니다)는 클라이언트가 안전하게 상호 운용될 수 있으려면 조정되어야 합니다.&lt;/li>
&lt;li>RSS GUID 링크 없는 에피소드 수준 발견은 열려 있습니다. 병합된 사양에는 &lt;code>i&lt;/code> 태그, &lt;code>podcast:item:guid&lt;/code> 형식, RSS 브릿징 메커니즘이 없습니다. 기존 RSS 카탈로그를 kind 54 이벤트로 브릿징하려는 클라이언트는 브릿지 관례를 스스로 정의해야 합니다.&lt;/li>
&lt;li>&lt;code>kind:54&lt;/code> 정의의 &amp;ldquo;다른 중요한 필드&amp;rdquo; stub는 bitrate, duration, 언어, 트랜스크립트 포인터, chapter, 세그먼트별 메타데이터를 후속 제안을 위한 열린 영역으로 남깁니다.&lt;/li>
&lt;/ul>
&lt;p>Amethyst의 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3105">PR #3105&lt;/a>는 병합 후 며칠 내에 에피소드 리스트와 인라인 플레이어가 있는 전용 팟캐스트 화면을 도착시키며, 첫 번째 주요 클라이언트 구현입니다. Jumble은 GIF picker와 함께 초기 팟캐스트 첨부 파일 스캐폴딩을 출시했습니다. Wavlake는 여전히 가장 큰 Nostr 네이티브 팟캐스트 플랫폼으로 남아 있으며, 기존 kind 31337 음악 트랙 이벤트를 NIP-F4의 kind 54 에피소드 모델과 정렬할지 결정해야 합니다.&lt;/p>
&lt;p>병합된 사양의 최소 태그 세트와 일치하는 NIP-F4 kind 54 에피소드 이벤트 예시:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;55807e7d5cd90d0303d7dce7397f996fdbaed8697903f326c7cf8ad999b9de3d&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1748995200&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">54&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;title&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Episode 42: Why RSS Won&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;image&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://podcast.example.com/ep42-cover.jpg&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;description&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Dave Jones and fiatjaf on protocol coexistence and the social layer.&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;audio&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://podcast.example.com/audio/ep42.mp3&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;audio/mpeg&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;In this episode we discuss the two-year journey of NIP-F4 from draft to merge, and why coexistence with RSS turned out to be the right architectural choice.&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;abc123def456789012345678901234567890abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef01234567&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>PR #1093은 27개월 동안 열려 있었으며, 병합된 NIPs PR의 중앙값 열린 기간을 훨씬 초과합니다. NIP-F4에 대한 다음 테스트는 kind 10164 오타가 조정되는지, 에피소드 발견 및 RSS 브릿지 관례가 구현자에서 나오는지, 주요 팟캐스트 호스트가 사양이 권장하는 대로 팟캐스트별 keypair 하에 게시하는지 여부입니다.&lt;/p></content:encoded></item><item><title>Nostr Compass #24</title><link>https://nostrcompass.org/ko/newsletters/2026-05-28-newsletter/</link><pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2026-05-28-newsletter/</guid><description>&lt;p>Amethyst v1.11.0은 리마인더, 온체인 Bitcoin zap 분할, Marmot 그룹 답장 지원을 갖춘 완전한 NIP-52 캘린더 구현을 도착시켰습니다. White Noise v2026.5.22는 Notification Service Extension을 통한 iOS 푸시 알림을 차단 UX 및 add-members 버튼과 함께 출시합니다. Vector v0.4.0은 처음부터 다시 만든 vector-core 재작성, 브릿지가 있는 원클릭 Tor, NIP-46 원격 signer, full-negentropy MLS 그룹 동기화, AI 에이전트용 21개 도구 MCP 서버를 도착시켰습니다. Applesauce v6.1.0은 NIP-51 lookup 릴레이 리스트(kind 10086)와 완전한 NIP-34 git-cast 팩토리 세트를 도입합니다. MDK는 통합된 UniFFI 표면을 통해 iOS와 Android 전반에 걸쳐 NIP-40 사라지는 메시지를 추가하고, Mostro v0.17.4는 승자에게 지급되는 Phase 3 slashed-bond 지급으로 anti-abuse 본드 루프를 닫습니다. Notedeck은 giftwrap 및 스레드 백필을 위한 완전한 NIP-77 negentropy 조정을 병합하고, Cordn은 코디네이터 매개 MLS 메신저로 등장하여 단일 지점 가용성 종속성을 더 긴밀한 epoch 정렬과 더 간단한 운영 모델과 교환하며, NIP-B0 참조 구현인 deepmarks는 큐레이터가 수익화하는 북마크 클라이언트를 출시하고, Formstr 팀은 참가자 자체 제거, 프라이빗 이벤트, 반복, 분산 약속 스케줄링을 다루는 네 개의 조정된 캘린더 NIP 제안을 엽니다.&lt;/p></description><content:encoded>&lt;p>Amethyst v1.11.0은 리마인더, 온체인 Bitcoin zap 분할, Marmot 그룹 답장 지원을 갖춘 완전한 NIP-52 캘린더 구현을 도착시켰습니다. White Noise v2026.5.22는 Notification Service Extension을 통한 iOS 푸시 알림을 차단 UX 및 add-members 버튼과 함께 출시합니다. Vector v0.4.0은 처음부터 다시 만든 vector-core 재작성, 브릿지가 있는 원클릭 Tor, NIP-46 원격 signer, full-negentropy MLS 그룹 동기화, AI 에이전트용 21개 도구 MCP 서버를 도착시켰습니다. Applesauce v6.1.0은 NIP-51 lookup 릴레이 리스트(kind 10086)와 완전한 NIP-34 git-cast 팩토리 세트를 도입합니다. MDK는 통합된 UniFFI 표면을 통해 iOS와 Android 전반에 걸쳐 NIP-40 사라지는 메시지를 추가하고, Mostro v0.17.4는 승자에게 지급되는 Phase 3 slashed-bond 지급으로 anti-abuse 본드 루프를 닫습니다. Notedeck은 giftwrap 및 스레드 백필을 위한 완전한 NIP-77 negentropy 조정을 병합하고, Cordn은 코디네이터 매개 MLS 메신저로 등장하여 단일 지점 가용성 종속성을 더 긴밀한 epoch 정렬과 더 간단한 운영 모델과 교환하며, NIP-B0 참조 구현인 deepmarks는 큐레이터가 수익화하는 북마크 클라이언트를 출시하고, Formstr 팀은 참가자 자체 제거, 프라이빗 이벤트, 반복, 분산 약속 스케줄링을 다루는 네 개의 조정된 캘린더 NIP 제안을 엽니다.&lt;/p>
&lt;h2 id="주요-소식">주요 소식&lt;/h2>
&lt;h3 id="amethyst-v1110-캘린더-온체인-zap-분할-marmot-답장">Amethyst v1.11.0: 캘린더, 온체인 zap 분할, Marmot 답장&lt;/h3>
&lt;p>Vitor Pamplona가 유지 관리하는 Android용 Nostr 클라이언트인 Amethyst가 &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.11.0">v1.11.0&lt;/a>을 출시했습니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2994">PR #2994&lt;/a>는 전용 UI와 리마인더 시스템이 있는 &lt;a href="https://nostrcompass.org/ko/topics/nip-52/">NIP-52&lt;/a> 캘린더 이벤트 구현을 추가하므로, 캘린더 이벤트는 이제 제네릭 kind-30023 롱폼 뷰와 별개인 자체 타임라인 카테고리에 렌더링됩니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3018">PR #3018&lt;/a>은 기존 zap-split 태그에 따라 여러 수신자에 걸쳐 단일 Bitcoin 트랜잭션을 분배하는 분할 지원으로 온체인 Bitcoin zap을 확장하므로, 온체인 결제는 Lightning 분할과 동일하게 동작합니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2974">PR #2974&lt;/a>는 블록 확인 상태와 함께 정산된 각 zap을 표시하는 페이지 매김된 온체인 트랜잭션 이력 화면을 추가합니다.&lt;/p>
&lt;p>그룹 메시징은 일대일 채팅과 동등해집니다: &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2995">PR #2995&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a>/MLS 그룹 메시지에 답장 지원을 추가하므로, 암호화된 그룹 내부의 스레드는 이제 공개 노트와 동일한 부모 참조 UI로 렌더링됩니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2984">PR #2984&lt;/a>는 LNURL provider가 수신자의 명시된 lud16과 일치하는지 확인하여 &lt;a href="https://nostrcompass.org/ko/topics/nip-57/">NIP-57&lt;/a> zap 영수증 검증을 강화하고, 제3자 LNURL이 착륙하지 않은 결제에 대한 영수증을 발행할 수 있는 위조 클래스를 닫습니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2968">PR #2968&lt;/a>은 &lt;a href="https://nostrcompass.org/ko/topics/nip-92/">NIP-92&lt;/a> &lt;code>imeta&lt;/code> 태그에서 부동 소수점 차원을 허용하여, iPhone Retina 디스플레이와 같은 기기의 분수 픽셀 밀도 값을 게시하는 클라이언트와 Amethyst를 정렬합니다. 이 릴리스는 또한 아래 프로토콜 섹션에서 다루는 새로운 replaceable 이벤트 다중 레일 팁 항아리인 Payment Targets를 연결합니다.&lt;/p>
&lt;h3 id="white-noise-v2026522-ios-푸시-차단-ux-멤버-추가">White Noise v2026.5.22: iOS 푸시, 차단 UX, 멤버 추가&lt;/h3>
&lt;p>Marmot 프로토콜 그룹 메신저인 White Noise는 헤드라인 기능으로 iOS 푸시 알림과 함께 &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v2026.5.22%2B25">v2026.5.22&lt;/a>를 출시했습니다. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/673">PR #673&lt;/a>은 확장 프로세스 내부에서 MLS 메시지를 복호화하고 시스템 알림으로 표시하는 iOS Notification Service Extension(NSE)을 구현하므로, iPhone 사용자는 더 이상 메시지를 받기 위해 앱을 포그라운드에 둘 필요가 없습니다. Android 푸시 토큰 플러밍은 동일한 백엔드 파이프라인을 통해 라우팅되며, 플랫폼별 NSE는 암호문을 브로커 밖으로 유지합니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/676">PR #676&lt;/a>은 확인 흐름과 연락처 리스트 필터링이 있는 완전한 차단 및 차단 해제 UX를 추가합니다. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/679">PR #679&lt;/a>는 오랫동안 요청되었던 &amp;ldquo;Add members&amp;rdquo; 버튼을 그룹 정보 화면에 추가하여, 그룹 관리자가 공유 링크로 대체해야 했던 UX 격차를 닫습니다. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/688">PR #688&lt;/a>은 전용 iOS 알림 설정 화면을 도입하고, &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/687">PR #687&lt;/a>은 미디어 및 메시지에 대해 길게 누르기 공유를 연결합니다.&lt;/p>
&lt;h3 id="mdk-플랫폼-전반에-걸쳐-nip-40-사라지는-메시지-추가">MDK, 플랫폼 전반에 걸쳐 NIP-40 사라지는 메시지 추가&lt;/h3>
&lt;p>White Noise iOS, White Noise Android, 그리고 미래의 모든 Marmot 클라이언트가 사용하는 공유 Rust 코어인 Marmot Development Kit은 UniFFI 브릿지를 통해 사라지는 메시지 검증 및 &lt;a href="https://nostrcompass.org/ko/topics/nip-40/">NIP-40&lt;/a> 만료 처리를 노출하기 위해 &lt;a href="https://github.com/marmot-protocol/mdk/pull/306">PR #306&lt;/a>을 병합했습니다. 이 PR은 세 부분 시리즈의 두 번째입니다. iOS와 Android는 이제 만료 로직의 하나의 Rust 구현을 공유합니다; 타이밍 규칙은 UniFFI를 통해 두 플랫폼 모두가 소비하는 단일 감사된 코드 경로에 있습니다. &lt;a href="https://github.com/marmot-protocol/mdk/pull/307">PR #307&lt;/a>은 저장된 환영 실패 이유의 길이를 제한하고 유지 전에 정리하며, 지난주에 출시된 환영 이벤트 처리를 보완하는 별도의 강화 단계입니다.&lt;/p>
&lt;p>MLS의 사라지는 메시지는 단순한 UI 어포던스가 아닙니다. 만료 태그는 암호화된 메시지 봉투와 함께 게시되므로, 메시지를 열지 않은 수신자도 수신 클라이언트의 캐시된 사본과 함께 릴레이 계층에서 기본 암호문이 만료됩니다. MDK가 검증 경로를 소유하므로 클라이언트 전반에 걸쳐 동작이 일관되게 유지됩니다: 준수하는 모든 Marmot 구현은 동일한 만료 시맨틱을 강제하므로, 하나의 클라이언트가 만료를 존중하는 동안 다른 클라이언트가 영원히 캐시하는 것은 이식성 위험이 되지 않습니다.&lt;/p>
&lt;h3 id="mostro-v0174-phase-3-slashed-bond-루프-닫기">Mostro v0.17.4: Phase 3, slashed-bond 루프 닫기&lt;/h3>
&lt;p>Nostr 위에 구축된 P2P Bitcoin 거래 프로토콜인 &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a>는 &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.17.4">v0.17.4&lt;/a>에서 anti-abuse 본드 롤아웃의 Phase 3을 출시했습니다. &lt;a href="https://github.com/MostroP2P/mostro/pull/738">PR #738&lt;/a>은 slashed 본드에 대한 지불 흐름을 도착시켜, 패자의 몰수된 담보를 가져와 분쟁 승자에게 지불합니다. &lt;a href="https://github.com/MostroP2P/mostro/pull/743">PR #743&lt;/a>은 Phase 3.5를 추가하며, 승자에게 slashed sats가 정산되었음을 알리는 명시적인 지불 확인 메시지로, 확인 이벤트는 분쟁 해결과 동일한 Nostr 세션에 도착합니다. 지난주에 다룬 Phase 2는 admin 액션으로 slashing을 도입했습니다; Phase 3은 페널티를 위협하는 것과 강제하는 것의 차이입니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro/pull/746">PR #746&lt;/a>은 데몬이 solver 행이 없는 분쟁을 마무리할 수 있게 하며, 이전에는 레거시 분쟁의 해결이 정체되던 엣지 케이스입니다. &lt;a href="https://github.com/MostroP2P/mostro/pull/748">PR #748&lt;/a>은 Yadio의 &lt;code>/exrates/BTC&lt;/code> 응답에서 null 요율을 허용하므로 짧은 Yadio 중단이 더 이상 Mostro의 법정 화폐 변환 경로를 깨뜨리지 않습니다. &lt;a href="https://github.com/MostroP2P/mostro/pull/745">PR #745&lt;/a>는 단일 실패 지점으로서의 Yadio를 제거하기 위한 기초 작업인 다중 소스 가격 provider에 대한 사양을 문서화합니다. Mostro 모바일 클라이언트는 &lt;a href="https://github.com/MostroP2P/mobile/pull/596">PR #596&lt;/a>에서 매칭 Phase 3 청구 경로를 연결했습니다.&lt;/p>
&lt;h3 id="applesauce-v610-lookup-릴레이-및-nip-34-git-cast">Applesauce v6.1.0: lookup 릴레이 및 NIP-34 git cast&lt;/h3>
&lt;p>Coracle, noStrudel, Pablo F7z의 스택을 구동하는 모듈형 Nostr 툴킷인 &lt;a href="https://github.com/hzrd149/applesauce">Applesauce&lt;/a>는 패키지 전반에 걸쳐 &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-actions%406.1.0">v6.1.0&lt;/a>을 출시했습니다. 이 릴리스는 일급 &lt;a href="https://nostrcompass.org/ko/topics/nip-51/">NIP-51&lt;/a> lookup 릴레이 리스트 지원을 추가합니다: kind 10086 이벤트는 사용자가 &amp;ldquo;나를 찾으려면 이 릴레이에게 물어보세요&amp;quot;를 신호로 보낼 수 있게 하며, 발견 프리미티브로서 &lt;a href="https://nostrcompass.org/ko/topics/nip-65/">NIP-65&lt;/a> outbox 리스트와 함께 자리잡습니다. &lt;code>applesauce-core&lt;/code> 위에 구축된 애플리케이션은 반응형 &lt;code>User.lookupRelays$&lt;/code> observable과 &lt;code>applesauce-relay&lt;/code>의 매칭 로더를 얻습니다.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-34/">NIP-34&lt;/a> git-cast 팩토리는 &lt;code>applesauce-factory&lt;/code>에 도착하여, 모든 Applesauce로 구축된 클라이언트에 저장소 공지(kind 30617), 패치(kind 1617), 이슈(kind 1621) 게시에 대한 한 줄 경로를 제공합니다. &lt;code>User.favoriteGitRepos$&lt;/code>, &lt;code>User.gitAuthors$&lt;/code>, &lt;code>User.graspServers$&lt;/code> 반응형 속성은 애플리케이션이 사용자가 팔로우하는 리포지토리, repo 유지 관리자, 구성된 GRASP 서버를 동일한 User 객체에서 직접 나열할 수 있게 합니다. 이 릴리스는 또한 &lt;a href="https://github.com/hzrd149/applesauce/pull/73">PR #73&lt;/a>에서 오프라인 릴레이를 조용히 드롭하는 pool 수동 메서드를 수정합니다.&lt;/p>
&lt;h3 id="notedeck-giftwrap-및-스레드-백필용-nip-77-negentropy-병합">Notedeck, giftwrap 및 스레드 백필용 NIP-77 negentropy 병합&lt;/h3>
&lt;p>Damus의 네이티브 다중 열 데스크톱 클라이언트인 &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>은 5월 25일에 &lt;a href="https://github.com/damus-io/notedeck/pull/1459">PR #1459&lt;/a>를 병합하여 완전한 &lt;a href="https://nostrcompass.org/ko/topics/nip-77/">NIP-77&lt;/a> negentropy 조정을 공유 outbox 경로에 연결했습니다. 이 PR은 NIP-77 클라이언트 및 릴레이 프레임, 릴레이 로컬 negentropy 세션, 로컬 세트 조정 및 누락 이벤트 가져오기를 구동하는 outbox 전체 이력 tracker를 추가합니다. Messages giftwrap은 negentropy 조정을 얻으므로, 선택된 계정의 읽기 릴레이에서 프라이빗 메시지 봉투를 복구할 수 있습니다. 스레드 뷰는 더 이상 라이브 구독 답장 제한으로 제한되지 않습니다. Dave PNS는 Dave 로컬 negentropy 구현을 공유 outbox 경로로 대체하면서 기존의 제한된 이력 동작을 보존합니다.&lt;/p>
&lt;p>라이브 구독과 negentropy는 이제 별도의 필터를 사용합니다. 흐름은 릴레이가 이미 가지고 있는 것을 조정하기 위해 더 넓은 negentropy 필터를 발행하면서 작은 라이브 요청을 유지할 수 있습니다. 이 PR은 콜드 스타트 비용 특성을 변경할 수 있는 홈 또는 프로필 타임라인에 대한 광범위한 negentropy 동기화를 의도적으로 활성화하지 않습니다. 조정, giftwrap 전달, 스레드 백필, Dave PNS 복원, 계정 전환, 릴레이 재타겟팅, 가져오기 재시도, NIP-77 릴레이 동작에 대한 테스트 커버리지가 추가되었습니다.&lt;/p>
&lt;h3 id="vector-v040-vector-core-재작성-tor-nip-46-full-negentropy-mls-mcp-에이전트-표면">Vector v0.4.0: vector-core 재작성, Tor, NIP-46, full-negentropy MLS, MCP 에이전트 표면&lt;/h3>
&lt;p>NIP-17 DM과 Marmot 그룹 위에 구축된 프라이버시 중심 크로스 플랫폼 메신저인 &lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a>는 &lt;a href="https://github.com/VectorPrivacy/Vector/releases/tag/v0.4.0">v0.4.0&lt;/a>을 지금까지의 큰 릴리스로 출시했습니다. 헤드라인은 처음부터 다시 만든 엔진 재작성입니다: Vector의 모든 로직은 이제 데스크톱, Android, 미래의 모든 클라이언트에서 공유되는 단일 분리된 크레이트 &lt;code>vector-core&lt;/code>에 있으며, 코어 자체에 440개 이상의 테스트가 있고 애플리케이션 셸은 수천 줄이 제거되었습니다. 이 재작성은 GUI와 동일한 프로토콜 코드를 구동하는 Vector CLI, 봇, SDK를 위한 기초 작업입니다.&lt;/p>
&lt;p>Tor 통합은 검열 우회를 위한 원클릭 트래픽 라우팅과 브릿지 지원과 함께 출시됩니다. 다중 계정 지원은 앱 내 스위처와 함께 도착합니다. 원격 signer 로그인은 QR 또는 붙여넣은 URI로 bunker 페어링과 함께 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a>을 통해 도착하므로, 사용자는 nsec를 노출하지 않고도 로그인할 수 있습니다. 모두에게 삭제는 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> DM과 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> 그룹 채팅 모두에서 작동하며, Vector는 임시 서명 키를 릴리스 노트가 명시적으로 언급하는 의도적인 사양 편차로 유지합니다: &amp;ldquo;향상된 사용자 프라이버시 제어를 위해 기존 NIP-17/Marmot 사양에서 다각화.&amp;rdquo; 유지된 임시 키는 Vector 클라이언트에 삭제가 원래 발신자에 의해 승인되었다는 로컬 증명을 제공하지만, 이는 또한 Vector를 접하는 다른 모든 클라이언트가 기준선 NIP-17/Marmot 클라이언트와 다른 삭제 검증 가능성 표면을 본다는 것을 의미합니다.&lt;/p>
&lt;p>MLS 그룹 동기화는 이제 &lt;a href="https://nostrcompass.org/ko/topics/nip-77/">NIP-77&lt;/a> negentropy를 통해 완전히 조정되며, 이는 Notedeck이 이번 주에 giftwrap 및 스레드에 대해 취한 것과 동일한 방향입니다. Blossom 업로더는 여러 서버에 걸쳐 페일오버하고, 각 서버의 기능을 학습하며, 기기 간에 서버 리스트를 동기화합니다. 커스텀 이모지 팩은 사용자가 만들 수 있고, 공유 가능하며, 다른 Nostr 클라이언트와 상호 호환됩니다. SQLite 메모리는 약 308MB에서 5MB로 떨어졌습니다. 이모지 패널은 디스크 캐시에서 열리며 Discord 스타일 shortcode(&lt;code>:smile:&lt;/code>)와 Unicode 빈도 순위가 올바른 글리프를 먼저 표시합니다.&lt;/p>
&lt;p>가장 새로운 추가 사항은 AI 에이전트가 Vector를 구동할 수 있도록 21개의 도구를 노출하는 MCP(Model Context Protocol) 서버인 &lt;code>vector-agent&lt;/code>입니다: DM 보내기, 그룹 관리, 파일 업로드, 프로필 편집. 이는 이번 주에 MCP 표면을 출시한 두 번째 Nostr 프로젝트(Shopstr와 함께)이며, 그렇게 한 첫 번째 메신저 클래스 애플리케이션입니다. 지난주에 다룬 AgentNoise와 결합하여, 에이전트가 제어하는 Nostr 클라이언트의 패턴은 일회성 실험에서 의도적인 플랫폼 방향으로 이동하고 있습니다.&lt;/p>
&lt;h3 id="cordn-코디네이터-매개-mls-메신저로-등장">Cordn, 코디네이터 매개 MLS 메신저로 등장&lt;/h3>
&lt;p>&lt;a href="https://cordn.net">Cordn&lt;/a>(&lt;a href="https://cordn.net">cordn.net&lt;/a>의 웹 클라이언트, &lt;a href="https://github.com/Cordn-msg/cordn">Cordn-msg/cordn&lt;/a> 및 &lt;a href="https://github.com/Cordn-msg/cordn-web">Cordn-msg/cordn-web&lt;/a>의 저장소)은 Marmot과 다른 아키텍처 접근을 취하는 새로운 MLS 메신저입니다. &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a>이 특권 있는 코디네이터 없이 완전히 릴레이 기반이지만(모든 그룹 멤버가 릴레이에 직접 쓰고 준수하는 모든 릴레이가 트래픽을 운반할 수 있음), Cordn은 &lt;a href="https://nostrcompass.org/ko/topics/contextvm/">ContextVM&lt;/a> 서비스로 구현된 그룹당 코디네이터 역할을 도입합니다. 코디네이터는 MLS 커밋을 정렬하고 환영 배포를 처리합니다.&lt;/p>
&lt;p>Cordn의 주장은 &lt;a href="https://cordn.net/why">/why&lt;/a> 페이지에 명시되어 있으며, 프로덕션 메신저에 배포된 MLS는 &amp;ldquo;coordination-free가 아니며&amp;rdquo; &amp;ldquo;weakly ordered public dissemination&amp;quot;이 강력한 조정 지점 없이 그룹 상태 수렴을 &amp;ldquo;훨씬 더 어렵게&amp;rdquo; 만든다는 것입니다. 코디네이터 매개 설계는 예측 가능한 epoch 진행과 더 간단한 동시 커밋 해결을 제공합니다. 참가자는 임시 키를 사용하여 코디네이터에 연결하므로, 코디네이터는 그룹 ID와 커밋 트래픽의 타이밍을 학습하지만 어떤 장기 pubkey가 멤버인지는 알지 못합니다. Marmot 그룹에 대한 릴레이를 쿼리하는 모든 당사자는 이미 동일한 표면을 볼 수 있습니다: 그룹 ID별 그룹 활동, 이벤트 도착에서 추론할 수 있는 타이밍. Cordn은 또한 자체 호스팅과 함께 &amp;ldquo;가용성 신뢰가 남아 있음&amp;quot;을 인정합니다: 자체 호스팅 코디네이터는 운영자 계층 중앙 집중화 문제를 피하지만 그룹 활동성에 대한 단일 실패 지점을 도입합니다. Marmot은 정렬을 MLS 자체에 남겨두고(epoch와 Commit 메시지가 프로토콜 내부에서 정렬을 처리) &lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59&lt;/a> gift wrap을 통해 Welcome 이벤트를 배포함으로써 그 단일 지점을 피하지만, admin 측 규율의 비용이 발생합니다: admin은 매칭 Welcome을 보내기 전에 Commit에 대한 릴레이 확인을 기다려야 하며, 클라이언트는 릴레이 전달이 상태 전환과 경쟁할 때 동시 커밋을 조정해야 합니다.&lt;/p>
&lt;p>이 대비는 프라이빗 메시징 스택을 선택하는 모든 팀에게 살펴볼 가치가 있습니다. Marmot은 경로에 특권 있는 액터 없이 릴레이 독립적인 배포를 위해 일부 구현 복잡성을 교환합니다. Cordn은 더 긴밀한 정렬과 더 간단한 운영 모델을 위해 단일 지점 가용성 종속성을 교환합니다. 두 프로젝트 모두 &lt;a href="https://nostrcompass.org/ko/topics/mls/">MLS&lt;/a> 위에 구축되며 Nostr를 identity 및 전송 계층으로 사용합니다. 의견 차이는 조정 비용이 어디에 있는지에 대한 것입니다. cordn-msg 저장소는 ContextVM 위에 구현된 코디네이터 서비스와 &lt;code>ts-mls&lt;/code> 위에 구축된 MLS 계층으로 꾸준한 커밋 케이던스를 보여줍니다.&lt;/p>
&lt;h3 id="deepmarks-큐레이터-수익화-게시가-있는-nip-b0-북마크">deepmarks: 큐레이터 수익화 게시가 있는 NIP-B0 북마크&lt;/h3>
&lt;p>&lt;a href="https://github.com/ostermayer/deepmarks-public">deepmarks-public&lt;/a>은 제안된 &lt;a href="https://nostrcompass.org/ko/topics/nip-b0/">NIP-B0&lt;/a> 북마크 사양(kind 39701)에 대한 참조 클라이언트로, 세 상자 아키텍처(큐레이터, 인덱서, 뷰어)와 큐레이터에게 직접 &lt;a href="https://nostrcompass.org/ko/topics/nip-57/">NIP-57&lt;/a> zap으로 자금이 조달되는 tier 시스템을 갖추고 있습니다. 클라이언트는 NIP-B0, &lt;a href="https://nostrcompass.org/ko/topics/nip-07/">NIP-07&lt;/a>, &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a>, NIP-57, &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a>, &lt;a href="https://nostrcompass.org/ko/topics/nip-98/">NIP-98&lt;/a>, &lt;a href="https://nostrcompass.org/ko/topics/nip-65/">NIP-65&lt;/a>, 파일 저장을 위한 Blossom BUD-01 및 BUD-04를 구현합니다. 21,000 sat 평생 tier는 유료 독자를 큐레이터에 대한 반복 zap 수신자로 변환합니다. 큐레이터는 북마크 이벤트를 게시하고, 인덱서는 기계 판독 가능 메타데이터로 이를 풍부하게 하며, 뷰어는 피드를 렌더링합니다; 각 역할은 별도의 배포 가능한 서비스입니다.&lt;/p>
&lt;h2 id="릴리스">릴리스&lt;/h2>
&lt;h3 id="amber-v610-ga-계정별-암호화-백업">Amber v6.1.0 GA: 계정별 암호화 백업&lt;/h3>
&lt;p>&lt;strong>Amber&lt;/strong>는 이번 주에 &lt;code>v6.1.0-pre3&lt;/code>에서 GA &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.1.0">v6.1.0&lt;/a>으로 이동했습니다. &lt;a href="https://github.com/greenart7c3/Amber/pull/444">PR #444&lt;/a>는 애플리케이션 권한 데이터베이스에 대한 암호화된 백업 및 복원을 출시하고, &lt;a href="https://github.com/greenart7c3/Amber/pull/446">PR #446&lt;/a>은 백업을 계정별로 분할하므로 여러 Nostr identity를 가진 사용자는 각 앱 grant 세트를 독립적으로 백업하고 복원할 수 있습니다. 지난주에 다룬 PSBT 서명 작업은 GA 컷에 있습니다.&lt;/p>
&lt;h3 id="citrine-릴레이별-구독-및-onion-url-유출-방지">Citrine: 릴레이별 구독 및 onion URL 유출 방지&lt;/h3>
&lt;p>Amethyst와 함께 제공되는 온디바이스 개인 릴레이인 &lt;strong>Citrine&lt;/strong>은 이번 사이클에 두 개의 수정을 출시했습니다. &lt;a href="https://github.com/greenart7c3/Citrine/pull/157">PR #157&lt;/a>은 단일 전역 구독에서 릴레이별 태그된 구독으로 전환하므로, &lt;code>kinds: [1]&lt;/code> 필터를 공유하는 두 소스 릴레이가 더 이상 aggregator 측에서 충돌하지 않습니다. &lt;a href="https://github.com/greenart7c3/Citrine/pull/162">PR #162&lt;/a>는 아웃바운드 Tor 프록시가 비활성화된 경우 onion 릴레이 URL을 필터링하여, onion 주소가 clearnet 라우팅 경로에 유출되는 것을 방지합니다.&lt;/p>
&lt;h3 id="angor-v0227-및-v0228-릴레이-신뢰성-및-boltz-재연결">Angor v0.2.27 및 v0.2.28: 릴레이 신뢰성 및 Boltz 재연결&lt;/h3>
&lt;p>&lt;strong>Angor&lt;/strong>는 &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.27">v0.2.27&lt;/a> 및 &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.28">v0.2.28&lt;/a>을 출시했습니다. &lt;a href="https://github.com/block-core/angor/pull/874">PR #874&lt;/a>는 한 번에 하나의 릴레이만 연결되는 relay-dedup 버그를 수정하며, 이는 여러 릴레이 엔드포인트가 있는 프로젝트에 대한 신뢰성을 조용히 저하시킨 회귀였습니다. &lt;a href="https://github.com/block-core/angor/pull/876">PR #876&lt;/a>은 Boltz submarine swap 모니터링을 위한 WebSocket 재연결 로직을 추가하므로, 짧은 연결 해제가 더 이상 swap을 알 수 없는 상태로 남기지 않습니다.&lt;/p>
&lt;h3 id="nostrord-v110-nip-57-zap-및-nip-29-역할-구분">Nostrord v1.1.0: NIP-57 zap 및 NIP-29 역할 구분&lt;/h3>
&lt;p>&lt;strong>Nostrord&lt;/strong>는 메시지 및 프로필에 대한 &lt;a href="https://nostrcompass.org/ko/topics/nip-57/">NIP-57&lt;/a> Lightning zap 지원(&lt;a href="https://github.com/nostrord/nostrord/pull/98">PR #98&lt;/a>)과 이전에 동일하게 렌더링되어 누가 승격되었는지와 누가 초대되었는지를 가렸던 &lt;a href="https://nostrcompass.org/ko/topics/nip-29/">NIP-29&lt;/a> 역할 변경과 멤버 추가 사이의 활동 피드의 적절한 구분(&lt;a href="https://github.com/nostrord/nostrord/pull/92">PR #92&lt;/a>)과 함께 &lt;a href="https://github.com/nostrord/nostrord/releases/tag/v1.1.0">v1.1.0&lt;/a>을 출시했습니다.&lt;/p>
&lt;h3 id="ぬるぬる-v15x-sqlcipher-mls-키스토어-및-epoch-따라잡기">ぬるぬる v1.5.x: SQLCipher MLS 키스토어 및 epoch 따라잡기&lt;/h3>
&lt;p>&lt;strong>ぬるぬる&lt;/strong>(nurunuru, tami1A84 제작)는 NIP-44, NIP-50 고급 검색, NIP-55, NIP-70과 함께 MLS 그룹 메시징(kind 443)을 구현하는 일본어 Nostr 클라이언트로, 이번 주에 다섯 개의 릴리스를 출시했습니다. &lt;a href="https://github.com/tami1A84/null--nostr/pull/184">PR #184&lt;/a>는 rust-engine 계층의 MLS 키스토어에 SQLCipher 암호화를 도입합니다. &lt;a href="https://github.com/tami1A84/null--nostr/pull/187">PR #187&lt;/a> 및 &lt;a href="https://github.com/tami1A84/null--nostr/pull/188">PR #188&lt;/a>은 각각 Android와 iOS로 SQLCipher를 확장하며, 레거시 평문 삭제 단계와 CI 가드가 있습니다. &lt;a href="https://github.com/tami1A84/null--nostr/pull/189">PR #189&lt;/a> 및 &lt;a href="https://github.com/tami1A84/null--nostr/pull/191">PR #191&lt;/a>은 재생 캐시와 두 플랫폼 모두의 복구 배너와 함께 MLS 피어 epoch 따라잡기를 추가하므로, 그룹 커밋에 뒤처지는 클라이언트는 대화를 잃지 않고 복구할 수 있습니다. ぬるぬる는 &lt;code>marmot-protocol/mdk&lt;/code>의 &lt;code>mdk-core&lt;/code>, &lt;code>mdk-sqlite-storage&lt;/code>, &lt;code>mdk-storage-traits&lt;/code> 위에 구축된 Marmot 클라이언트이므로, SQLCipher 및 epoch 따라잡기 작업은 White Noise가 사용하는 것과 동일한 MDK 런타임 내부에 도착합니다.&lt;/p>
&lt;h3 id="bitcredit-core-v0510-nostr-루트-블록-전파-수정">Bitcredit Core v0.5.10: Nostr 루트 블록 전파 수정&lt;/h3>
&lt;p>&lt;strong>Bitcredit Core&lt;/strong>는 identity 업로드를 포함하는 회사 생성 흐름을 깨뜨리던 블록 전파 중 누락된 Nostr 노드 ID 필드에 대한 수정과 함께 &lt;a href="https://github.com/BitcreditProtocol/Bitcredit-Core/releases/tag/v0.5.10">v0.5.10&lt;/a>을 출시했습니다. Bitcredit은 회사 및 청구서 전파 이벤트를 위한 신뢰의 루트로 Nostr identity를 사용하는 e-bill 프로토콜입니다.&lt;/p>
&lt;h2 id="미출시-변경-사항">미출시 변경 사항&lt;/h2>
&lt;p>&lt;strong>Jumble&lt;/strong>은 Pomegranate 임계값 signer를 통한 Google 로그인을 위한 &lt;a href="https://github.com/CodyTseng/jumble/pull/797">PR #797&lt;/a>을 열었으며, 사용자가 Nostr 키를 여러 당사자에 걸쳐 분할할 수 있게 하여 단일 signer가 전체 비밀을 보유하지 않도록 합니다. 이는 bunker 또는 nsec 가져오기 흐름을 넘어서는 의미 있는 단계입니다: 사용자는 한 signer 당사자가 손상되어도 계정을 복구할 수 있으며, 그 당사자가 완전한 private 키를 보유하지 않아도 됩니다.&lt;/p>
&lt;p>&lt;strong>Shopstr&lt;/strong>는 MCP(Model Context Protocol) 서버를 초기화하는 &lt;a href="https://github.com/shopstr-eng/shopstr/pull/492">PR #492&lt;/a>를 열었으며, &lt;a href="https://github.com/shopstr-eng/shopstr/pull/494">PR #494&lt;/a>는 지원 인프라(릴레이 가져오기, 파서, 검증, 오류, dedup, 감사 로깅)를 구축하고 &lt;a href="https://github.com/shopstr-eng/shopstr/pull/472">PR #472&lt;/a>는 MCP 릴레이 관리자에 릴레이 허용 목록을 추가합니다. 이는 Shopstr를 MCP 서버로 자신을 노출하는 첫 번째 Nostr 마켓플레이스로 만들며, AI 에이전트는 구조화된 도구로 NIP-99 리스팅을 탐색하고 조치를 취할 수 있습니다.&lt;/p>
&lt;p>&lt;strong>Keydex&lt;/strong>, Shamir secret sharing 볼트는 &lt;a href="https://github.com/mplorentz/keydex/pull/226">PR #226&lt;/a>에서 커스텀 kinds 1337-1345를 713-721 범위로 이동시키는 상당한 마이그레이션을 열었으며, &lt;a href="https://github.com/mplorentz/keydex/pull/239">PR #239&lt;/a>는 Shamir 공유에 AEAD를 추가하고 &lt;a href="https://github.com/mplorentz/keydex/pull/234">PR #234&lt;/a>는 GF256 산술로 마이그레이션합니다. Kind 범위 마이그레이션은 NIPs 저장소가 커스텀 kind를 할당하는 방식과 Keydex를 정렬하여, 자체 주장 범위에서 멀어집니다.&lt;/p>
&lt;p>&lt;strong>Mill&lt;/strong>(&lt;a href="https://github.com/0ceanSlim/nostr-mill">nostr-mill&lt;/a>)은 &lt;a href="https://github.com/0ceanSlim">OceanSlim&lt;/a>(&lt;a href="https://github.com/0ceanSlim/grain">grain&lt;/a> Go 릴레이의 유지 관리자)의 새로운 드롭인 Nostr signer UI로, &lt;a href="https://www.npmjs.com/package/nostr-mill">npm&lt;/a> 및 &lt;a href="https://cdn.jsdelivr.net/npm/nostr-mill/dist/mill.umd.js">jsDelivr&lt;/a>에서 단일 스크립트 태그 Web Component로 출시됩니다. 하나의 &lt;code>&amp;lt;script&amp;gt;&lt;/code> 태그는 웹 앱에 통합된 UI 뒤에 여섯 개의 일반적인 signer 진입점을 모두 제공합니다: &lt;a href="https://nostrcompass.org/ko/topics/nip-07/">NIP-07&lt;/a> 브라우저 확장, &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> bunker(URL 붙여넣기 또는 사용자 지정 가능한 릴레이가 있는 QR 페어링, 페이지 내 bunker 통합 중 특이함), Android 인텐트를 통한 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> Amber, PBKDF2가 있는 AES-256-GCM을 통해 &lt;code>sessionStorage&lt;/code>에 저장된 암호화된 nsec, 읽기 전용 &lt;code>npub&lt;/code>, 브라우저 내 keypair 생성. 컴포넌트는 Shadow DOM으로 범위가 지정된 29개의 CSS 커스텀 속성을 통해 테마화할 수 있으며, 작은 SemVer 추적 API(&lt;code>MILL.open&lt;/code>, &lt;code>mill:connected&lt;/code> / &lt;code>mill:disconnected&lt;/code> 이벤트, 명명된 테마 내보내기)를 노출합니다. 유지 관리자의 동기는 bunker 로그인 흐름이 Nostr 전반에 걸쳐 웹 앱마다 재구현되어 왔다는 것입니다. 공유 컴포넌트로 통합하면 클라이언트가 signer UX가 어떻게 동작해야 하는지에 대해 수렴할 수 있으며, 선택적 흐름(위에서 다룬 Wisp의 Pomegranate 기반 Google 로그인을 반영하는 임계값 signer를 통한 위임 키 로그인과 같은)을 모든 앱이 드롭인할 수 있는 재사용 가능한 표면으로 전환합니다. Mill은 npm v1.5.0이며, 단일 유지 관리자, 알파 단계로, grain이 계획된 첫 통합자입니다.&lt;/p>
&lt;p>&lt;strong>moStard&lt;/strong>, &lt;a href="https://github.com/roguehashrate">roguehashrate&lt;/a>의 &lt;a href="https://github.com/hzrd149/nostrudel">noStrudel&lt;/a>의 Monero 우선 fork는 이번 주에 축소된 기능 세트와 동일한 Applesauce + worker-relay 스택 위에 계층화된 Monero 테마 identity로 &lt;a href="https://github.com/roguehashrate/moStard/releases">v1.0.1&lt;/a>에 도달했습니다. 이번 주 작업은 Zapstore의 kind 32267 소프트웨어 애플리케이션 이벤트에 대한 렌더링(앱 이름, 아이콘, 스크린샷, 플랫폼, 라이선스, &lt;code>zapstore.dev/apps/&amp;lt;d-tag&amp;gt;&lt;/code>에 대한 실행 링크를 보여주는 타임라인의 임베드 카드), kind 20 및 kind 21을 통한 폴, 방법별 QR 코드가 있는 NIP-A3 Payment Targets 기반 팁, 노트의 markdown 렌더링, 외부 GIF 키보드에 대한 GIF 선택기 지원, Amber signer 페어링 수정을 도착시켰습니다. Monero 프레이밍은 팁 흐름으로 확장됩니다: &lt;code>monero&lt;/code> 주소에 대한 NIP-A3 &lt;code>payto&lt;/code> 항목은 &lt;code>lightning&lt;/code> 및 &lt;code>bitcoin&lt;/code>과 함께 동일한 UI에서 일급 버튼을 얻습니다. 클라이언트는 단일 유지 관리자이고 알파 단계이지만, 5월 27일 작업은 빌더가 이번 주의 프로토콜 사양 발표에서 NIP-A3을 며칠 내에 출시 fork로 바로 가져오는 것을 보여줍니다.&lt;/p>
&lt;h2 id="nip-업데이트-및-프로토콜-사양-작업">NIP 업데이트 및 프로토콜 사양 작업&lt;/h2>
&lt;h3 id="캘린더-nip-스택-formstr-팀의-네-가지-제안">캘린더 NIP 스택: Formstr 팀의 네 가지 제안&lt;/h3>
&lt;p>Ix2(&lt;a href="https://github.com/geralt-debugs">@geralt-debugs&lt;/a>)는 5월 17일에 네 개의 조정된 NIP PR을 열었으며, 모두 동일한 저자 하에서 이미 출시 중인 &lt;a href="https://calendar.formstr.app">calendar.formstr.app&lt;/a> 구현을 참조합니다. &lt;a href="https://github.com/nostr-protocol/nips/pull/2350">PR #2350&lt;/a>은 kind 84를 일반화된 &amp;ldquo;participant self-removal&amp;rdquo; 이벤트로 제안합니다: 모든 이벤트의 태그된 참가자는 &lt;code>e&lt;/code>, &lt;code>a&lt;/code>, &lt;code>k&lt;/code> 태그를 통해 원본을 참조하는 kind 84를 게시하여 옵트 아웃을 신호할 수 있습니다. 릴레이는 제거를 존중하기 전에 kind 84 signer가 참조된 이벤트의 &lt;code>p&lt;/code> 태그에 나타나는지 검증해야 하며, kind 5 삭제는 항상 우선합니다. 이 PR은 이전에 NIP-52 캘린더 컨텍스트 내에서만 설명된 패턴을 일반화하므로, kind 84는 저자가 아닌 사람이 모든 참가자 이벤트에서 철회하는 표준 방법이 됩니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2351">PR #2351&lt;/a>은 캘린더 스택의 기초입니다: 프라이빗 캘린더 이벤트(kinds 32678 시간 기반, 32681 일 이벤트, 32123 프라이빗 캘린더 리스트, 31926 바쁨 리스트, 1052 gift wrap, 52 rumor)를 위한 NIP-52E 및 반복 이벤트를 위한 NIP-52R. 아키텍처 코어에는 view-key 패턴이 있습니다: 무작위로 생성된 keypair가 NIP-44로 이벤트 콘텐츠를 암호화하고, 비밀 절반(&lt;code>nsec&lt;/code>로 bech32 인코딩됨)이 각 참가자에게 gift-wrap됩니다. Signer는 공개 &lt;code>d&lt;/code> 태그만 보유합니다; 나머지 모든 것은 암호화된 &lt;code>content&lt;/code>에 있습니다. 이런 방식으로 identity에서 콘텐츠 암호화를 분리하는 것은 이벤트 편집이 수신자를 다시 키잉하지 않아도 됨을 의미합니다. NIP-52R은 기존 kinds 31923 및 31922에서 두 개의 선택적 태그를 정의하여 bare RFC 5545 RRULE 값을 사용하여 반복을 선언하며, RRULE가 있을 때 &lt;code>D&lt;/code> day-index가 선택 사항이 됩니다. Forward secrecy는 명시적으로 부재합니다: 유출된 view 키는 동일한 &lt;code>d&lt;/code> 태그 하의 이벤트의 모든 과거 및 미래 버전을 노출합니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2352">PR #2352&lt;/a>는 PR 설명이 &amp;ldquo;중앙 중개자가 없는 Calendly/Cal.com에 대한 드롭인 대안&amp;quot;이라고 부르는 분산 약속 스케줄링 사양으로 NIP-52E 위에 구축됩니다. Kind 31927은 암호화된 가용성 창이 있는 스케줄링 페이지를 광고합니다; kind 32680은 view 키에 대한 호스트 측 자체 암호화 복구 레코드입니다; kinds 1057 및 1058은 gift-wrapped 예약 요청 및 응답입니다. 영리한 메커니즘: booker는 요청을 보내기 전에 미래의 프라이빗 이벤트에 대한 &lt;code>d&lt;/code> 태그와 view 키를 모두 생성하므로, booker는 올바른 키로 자신의 캘린더에 약속을 즉시 추가할 수 있으며 호스트는 키를 왕복시킬 필요가 없습니다. 예약 응답은 외부 wrap에 암호화되지 않은 &lt;code>status&lt;/code> 태그를 포함하므로 릴레이는 복호화 없이 필터링할 수 있습니다.&lt;/p>
&lt;p>참조 구현은 이미 &lt;a href="https://calendar.formstr.app">calendar.formstr.app&lt;/a> 및 Zapstore의 Calendar Android 앱에 라이브입니다. &lt;a href="https://github.com/nostr-protocol/nips/pull/2351">PR #2351&lt;/a>은 &lt;a href="https://github.com/nostr-protocol/nips/pull/2027">PR #2027&lt;/a>을 그 대신 닫아, 연초부터 열려 있던 이전 프라이빗 캘린더 제안을 통합합니다.&lt;/p>
&lt;h3 id="payment-targets-및-silent-payments">Payment Targets 및 Silent Payments&lt;/h3>
&lt;p>이번 주에 &lt;code>kind:30023&lt;/code> 롱폼 문서에서 두 개의 NIP 제안이 더 순환되었습니다.&lt;/p>
&lt;p>&lt;strong>Payment Targets&lt;/strong> 제안(NIP-A3 / payto)은 RFC 8905 &lt;code>payto:&lt;/code> URI에 매핑되는 하나 이상의 &lt;code>[&amp;quot;payto&amp;quot;, &amp;quot;&amp;lt;type&amp;gt;&amp;quot;, &amp;quot;&amp;lt;authority&amp;gt;&amp;quot;]&lt;/code> 태그를 포함하는 replaceable kind 10133 이벤트를 정의합니다. 지원되는 유형에는 bitcoin, lightning, ethereum, monero, nano, cashme, revolut, venmo가 포함됩니다. 의도는 lud16 기반 NIP-57 zap을 보완하는(대체하지 않는) 다중 레일 팁 항아리를 표준화하는 것입니다. Amethyst v1.11.0은 첫 번째 구현자입니다; 병합된 PR &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2953">#2953&lt;/a> 및 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3009">#3009&lt;/a>는 구독 및 관찰 표면을 출시하고, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3011">PR #3011&lt;/a>은 &lt;code>PaymentTargetsEvent&lt;/code>에 대한 UI를 연결합니다.&lt;/p>
&lt;p>다른 저자로부터 두 개의 경쟁 Silent Payments 제안이 나왔습니다. 첫 번째 변형은 공개 additive tweak를 통해 &lt;code>nsec&lt;/code>에서 BIP-352 silent payment 스캔 및 지출 키를 유도하므로, 모든 발신자는 설정 없이 &lt;code>npub&lt;/code>에서 &lt;code>sp1q...&lt;/code> 주소를 구성할 수 있습니다. 저자 경고는 사양에서 명시적입니다: &amp;ldquo;bscan과 bspend는 nsec와 정확히 동일한 주의를 기울여 취급되어야 합니다.&amp;rdquo; 왜냐하면 스캔 키가 nsec를 노출하기 때문입니다. 두 번째 변형은 반대 접근 방식을 취하여, 키가 Nostr identity와 독립적으로 유지되는 표준 BIP-352 silent payment 주소를 포함하는 &lt;code>sp_address&lt;/code> 필드를 kind 0 프로필 메타데이터에 추가합니다. 변형 2가 구조적으로 더 안전합니다. 두 제안 모두 사려 깊은 리뷰 스레드를 끌었습니다; erskingardner(Marmot 리드)는 제안을 추적하는 trbouma gist에 자세한 &lt;a href="https://gist.github.com/trbouma/77648ebe1005b181b67d1c4b42c7f31d?permalink_comment_id=6167489#gistcomment-6167489">comment&lt;/a>를 게시했습니다. 그의 중심 우려는 변형 1이 &lt;code>nsec&lt;/code>에 공개적으로 계산 가능한 tweak를 더한 것에서 스캔 private 키를 유도한다는 것이며, 이는 스캔 키를 보유한 누구든지(실제로 사용자가 위임해야 하는 제3자 스캔 서비스 포함) 해당 tweak를 빼서 전체 &lt;code>nsec&lt;/code>를 복구할 수 있음을 의미합니다. 원격 서비스가 인바운드 결제를 스캔하도록 하는 동일한 키는 또한 그 서비스가 identity와 그로부터 파생된 모든 자금을 훔칠 수 있게 합니다.&lt;/p>
&lt;p>NIP-34 git-over-Nostr 측에서 hzrd149는 &lt;a href="https://gitworkshop.dev/npub1zafcms4xya5ap9zr7xxr0jlrtrattwlesytn2s42030lzu0dwlzqpd26k5/relay.ngit.dev/schemata">schemata&lt;/a>에 2개의 패치를 게시했습니다. &lt;a href="https://gitworkshop.dev/">gitworkshop.dev&lt;/a> 자체는 두 개의 이슈 보고서를 끌었습니다: 하나는 NIP-46 원격 signer를 사용할 때 페이지 새로 고침에서 로그인 세션이 손실되는 것을 플래그하고, 다른 하나는 README 프리뷰에서 구별되는 링크 스타일링을 요청합니다.&lt;/p>
&lt;h2 id="여섯-번의-nostr-5월">여섯 번의 Nostr 5월&lt;/h2>
&lt;p>2026년 5월의 마지막 뉴스레터는 그 주의 릴리스에서 물러나 Nostr의 역사를 통해 5월의 달을 걷습니다. 각 해에는 다른 중력 중심이 있었습니다: 2021년은 단일 커밋이었고, 2022년은 NIPs 저장소 자체의 형성이었으며, 2023년은 프로토콜 사양 폭발이었고, 2024년은 통합 사이클이었으며, 2025년은 negentropy가 병합되고 Damus의 Notedeck이 Beta로 졸업한 때였고, 2026년은 이번과 이전 세 이슈에서 다룬 달입니다.&lt;/p>
&lt;h3 id="2021년-5월">2021년 5월&lt;/h3>
&lt;p>Nostr는 6개월이 되었습니다. 유일한 Nostr 코드는 &lt;a href="https://github.com/fiatjaf/nostr">fiatjaf/nostr&lt;/a>에 있었고 전체 달은 정확히 하나의 커밋을 생성했지만, 그 커밋은 프로토콜에서 가장 많이 사용되는 부분 중 하나가 되었습니다. 5월 22일에 fiatjaf는 &lt;a href="https://github.com/fiatjaf/nostr/commit/9ee3a02">NIP-02를 재활용&lt;/a>하여 연락처 리스트 NIP으로 만들었습니다. 커밋 메시지는 &amp;ldquo;repurpose NIP-02 and add NIP authorship&amp;quot;이라고 읽으며, 명시적인 credit은 arcbtc(LNbits의 Ben Arc)의 &lt;a href="https://github.com/nostr-protocol/nostr/pull/16">PR #16&lt;/a>에 있으며, 이는 2월 9일에 열리고 fiatjaf가 아이디어를 NIP-02에 접기 전날 닫혔습니다. arcbtc의 제안은 작았습니다: &amp;ldquo;릴레이에 팔로워 리스트 보내기&amp;quot;를 위한 kind로, &amp;ldquo;계정 복원 및 팔로우할 공개 키 추천에 유용할&amp;rdquo; 것입니다. fiatjaf는 이를 세 가지 목적을 동시에 수행하는 태그가 있는 단일 &lt;code>kind:3&lt;/code> 이벤트로 일반화했습니다. 그것들은 팔로우 리스트(소셜 그래프), petname store(친구를 위한 로컬 별명), 릴레이 추천 소스(팔로우가 사용하는 릴레이)입니다. 저자별로 replaceable인 동일한 이벤트는 &amp;ldquo;이 사람이 누구를 팔로우하는가&amp;rdquo;, &amp;ldquo;그들을 뭐라고 부르는가&amp;rdquo;, &amp;ldquo;그들이 어디서 읽는가&amp;quot;에 대한 canonical 답이 되었습니다. 다음 5년 동안 구축된 모든 클라이언트는 &lt;code>kind:3&lt;/code>을 읽습니다. 동일한 커밋에 추가된 관례, 즉 각 NIP이 저자를 이름 짓는다는 관례는 모든 사양이 이제 byline을 갖는 이유입니다.&lt;/p>
&lt;h3 id="2022년-5월">2022년 5월&lt;/h3>
&lt;p>NIPs 저장소가 커뮤니티 프로젝트가 된 달. 5월 1일에 fiatjaf는 사양을 &lt;code>fiatjaf/nostr&lt;/code>에서 전용 &lt;a href="https://github.com/nostr-protocol/nips">&lt;code>nostr-protocol/nips&lt;/code>&lt;/a> 저장소로 &lt;a href="https://github.com/nostr-protocol/nips/commit/f25c7e6">마이그레이션&lt;/a>했고 5월 2일에 &lt;a href="https://github.com/nostr-protocol/nips/commit/c053670">공식 수용 기준&lt;/a>을 추가했습니다. 이틀 후, Robert C. Martin(Uncle Bob)은 첫 번째 외부 pull request인 &lt;a href="https://github.com/nostr-protocol/nips/pull/1">PR #1&lt;/a>을 열어 &lt;code>e&lt;/code> 및 &lt;code>p&lt;/code> 태그에 대한 스레딩 규칙을 제안했습니다. 이 PR은 원래 NIP-13으로 번호가 매겨졌다가 proof-of-work를 위한 공간을 만들기 위해 &lt;a href="https://github.com/nostr-protocol/nips/commit/bd4a81a">NIP-10으로 이름이 변경&lt;/a>되었습니다. 처음 여섯 NIP 중 세 개는 Uncle Bob의 것입니다: NIP-10(스레딩 마커), NIP-14(&lt;a href="https://github.com/nostr-protocol/nips/commit/ebacbcc">Subject 태그&lt;/a>), 그리고 &lt;a href="https://github.com/nostr-protocol/nips/commit/e22ea1a">&lt;code>kind:1&lt;/code>을 canonical 짧은 텍스트 노트 kind로 확정한&lt;/a> 5월 21일 커밋. 5월 5일에 William Casarin은 첫 NIP 커밋을 만들었습니다: &lt;a href="https://github.com/nostr-protocol/nips/commit/d7a4aad">NIP-13 Proof of Work&lt;/a> 및 &lt;a href="https://github.com/nostr-protocol/nips/commit/ad1eb96">kind:2 recommend-relay 이벤트&lt;/a>. 다음 날, fiatjaf는 &lt;a href="https://github.com/nostr-protocol/nips/commit/37eb53e">NIP-07 &lt;code>window.nostr&lt;/code>&lt;/a>을 게시했는데, 이는 오늘날까지 사용되는 브라우저 확장 signer 인터페이스를 정의하는 20줄의 markdown이었습니다. David A. Harding의 NIP-05 &lt;a href="https://github.com/nostr-protocol/nips/commit/57b86d2">CORS 경고&lt;/a>와 NIP-01의 &lt;a href="https://github.com/nostr-protocol/nips/commit/a4aea53">&lt;code>filter.limit&lt;/code>&lt;/a>이 같은 주에 도착했습니다. nostr-tools는 5월 8일에 &lt;a href="https://github.com/nbd-wtf/nostr-tools/commit/dc489bf">첫 번째 브라우저 가져오기 가능 ESM 빌드&lt;/a>를 출시했습니다. Semisol은 월말에 &lt;a href="https://github.com/nostr-protocol/nips/commit/a787093">NIP-15(End Of Stored Events)&lt;/a>와 &lt;a href="https://github.com/nostr-protocol/nips/commit/62fde6c">NIP-16(이벤트 kind 범위)&lt;/a>를 초안했으며, 이 문서들은 여전히 릴레이 동기화 시맨틱과 regular-vs-replaceable-vs-ephemeral 분류를 지배합니다.&lt;/p>
&lt;h3 id="2023년-5월">2023년 5월&lt;/h3>
&lt;p>프로토콜 사양 폭발. 그 달에 64개의 NIP PR이 열렸으며, 다음 2년 동안 Nostr의 표면 영역을 정의한 여러 제안이 모두 31일 이내에 도착했고, Nostr가 지금까지 받은 가장 큰 자금 발표는 5월 4일에 OpenSats &lt;a href="https://opensats.org/blog/opensats-receives-additional-funding-of-dollar10m-from-startsmall">Jack Dorsey의 #startsmall에서 1천만 달러 grant&lt;/a>로 도착했으며, 이는 이후 모든 Nostr grant 웨이브를 뒷받침한 자금이었습니다. NIP-47(Nostr Wallet Connect)이 &lt;a href="https://github.com/nostr-protocol/nips/pull/406">5월 2일에 병합&lt;/a>되어 Alby의 wallet-connect 사양을 메인 프로토콜에 가져왔습니다. 이틀 후 Vitor Pamplona가 &lt;code>kind:30311&lt;/code> 방과 &lt;code>kind:1311&lt;/code> 채팅 메시지가 있는 &lt;a href="https://github.com/nostr-protocol/nips/pull/498">NIP-53 Live Activities&lt;/a>를 제안했으며, 이는 뒤따르는 모든 Nostr 라이브스트리밍 표면의 기초입니다. Pablo Fernandez는 5월 5일에 &lt;a href="https://github.com/nostr-protocol/nips/pull/501">NIP-84 Highlights&lt;/a>를, 5월 14일에 &lt;a href="https://github.com/nostr-protocol/nips/pull/530">NIP-89 Recommended Application Handlers&lt;/a>를 열었습니다. v0l(Kieran Babich, Snort 저자)은 5월 8일에 &lt;a href="https://github.com/nostr-protocol/nips/commit/29f26e7">NIP-98 HTTP Auth&lt;/a>를 제안했으며, 이는 NIP-96과 Blossom 모두가 나중에 의존한 인증 프리미티브입니다. Jonathan Staab는 5월 15일에 &lt;a href="https://github.com/nostr-protocol/nips/pull/532">NIP-32 Labels&lt;/a>를 제안했고, &lt;a href="https://github.com/nostr-protocol/nips/pull/484">NIP-30 Custom Emoji&lt;/a>가 같은 날 병합되었습니다. Arthur Franca는 5월 21일에 &lt;a href="https://github.com/nostr-protocol/nips/pull/547">NIP-96 HTTP File Storage Integration&lt;/a>을 제안했습니다. 이틀 후, Vitor는 &lt;a href="https://github.com/nostr-protocol/nips/commit/e4937be">NIP-57에 zap 분할&lt;/a>을 추가했고, verbiricha는 &lt;a href="https://github.com/nostr-protocol/nips/commit/0495931">NIP-23에 &lt;code>kind:30024&lt;/code> 롱폼 초안&lt;/a>을 추가했으며, 이는 Habla, YakiHonne, Highlighter의 현대 Nostr 롱폼 저작 워크플로우의 기초가 된 사양입니다. fiatjaf는 5월 28일에 &lt;a href="https://github.com/nostr-protocol/nips/pull/566">NIP-29 Simple Groups&lt;/a>를 제안했으며, 이는 &lt;code>kind:9000&lt;/code>에서 &lt;code>kind:9020&lt;/code>까지의 조정 이벤트를 다루는 첫 번째 릴레이 관리 그룹 사양입니다. 이 달은 5월 31일에 Paul Miller가 &lt;a href="https://github.com/nostr-protocol/nips/pull/574">NIP-44 대화&lt;/a>를 여는 것으로 마감되었으며, 이는 NIP-04를 대체하기 위한 XChaCha20 기반 암호화 DM 설계입니다. 클라이언트 측은 그만큼 빠르게 움직였습니다: Damus는 &lt;a href="https://github.com/damus-io/damus/commits/master/?since=2023-05-10&amp;amp;until=2023-05-15">5월 10일부터 5월 15일까지&lt;/a> NWC, zap pool, Pending Zaps를 출시했습니다; Snort는 &lt;a href="https://github.com/v0l/snort/commit/6cbc3ae">zap pool&lt;/a>과 &lt;a href="https://github.com/v0l/snort/commit/d5032d6">L402 유료 미디어&lt;/a>를 출시했습니다; &lt;a href="https://github.com/vitorpamplona/amethyst/releases">Amethyst&lt;/a>는 그 달을 통해 대략 30개의 버전 릴리스를 출시했으며, 5월 1일 v0.40.1부터 월말 v0.55.x 범위까지, v0.45.0의 zap 분할과 v0.46.0의 NIP-32 labels가 있었습니다; &lt;a href="https://github.com/PrimalHQ/primal-android-app/commit/6654cf9">Primal Android 저장소&lt;/a>는 5월 16일에 생성되었습니다; &lt;a href="https://github.com/rust-nostr/nostr/releases/tag/v0.22.0">rust-nostr v0.22.0&lt;/a>은 NIP-47과 NIP-58을 추가했습니다. 5월 1일에 &lt;a href="https://github.com/hoytech/strfry/commit/de475c5">strfry는 negentropy 통합을 출시&lt;/a>했으며, 이는 나중에 NIP-77이 될 Doug Hoyte의 set-reconciliation 프로토콜의 첫 번째 릴레이 구현이었습니다. 이 달은 &lt;a href="https://www.forbes.com/sites/digital-assets/2023/05/30/bitcoin-social-network-nostr-creator-fiatjaf-/">5월 30일 Forbes가 fiatjaf에 대한 롱폼 프로필을 게시&lt;/a>하는 것으로 마감되었으며, 이는 Nostr의 익명 창시자에 대한 첫 번째 주류 언론 심층 조사 중 하나입니다.&lt;/p>
&lt;h3 id="2024년-5월">2024년 5월&lt;/h3>
&lt;p>통합 사이클. 화려한 제안은 적고, 더 많은 출시. &lt;a href="https://github.com/nostr-protocol/nips/pull/787">NIP-54 Decentralized Wikis&lt;/a>가 5월 2일에 &lt;code>kind:30818&lt;/code> 기사와 대소문자 정규화된 &lt;code>d&lt;/code> 태그와 함께 병합되었습니다. 3일 후, &lt;a href="https://github.com/nostr-protocol/nips/pull/1213">NIP-56&lt;/a>이 확장되어 남용 보고서가 콘텐츠 전용 카테고리와 함께 디지털 위협(malware, phishing)에 플래그를 지정할 수 있게 되었습니다. 5월 6일에 &lt;a href="https://github.com/nostr-protocol/nips/pull/1221">NIP-25 반응이 단순화&lt;/a>되어 전체 답장 스레드를 &lt;code>e&lt;/code> 태그로 포함하는 것을 중지했습니다. Arthur Franca는 5월 12일에 &lt;a href="https://github.com/nostr-protocol/nips/pull/1233">NIP-22 Comment를 제안&lt;/a>하여 &lt;code>kind:1111&lt;/code>을 도입하여 비 &lt;code>kind:1&lt;/code> 이벤트(기사, 파일, 제품)에 대한 답장이 스레드에 대한 구조화된 방법을 얻도록 했습니다. 5월 19일에 fiatjaf는 &lt;a href="https://github.com/nostr-protocol/nips/pull/1248">NIP-46을 개편&lt;/a>하여 NIP-04를 완전히 포기하고 모든 bunker 트래픽을 NIP-44 암호화로 전환했으며, 이는 이후 모든 bunker 구현을 형성한 사용 중단 이동입니다. 5월 20일에 &lt;a href="https://github.com/nostr-protocol/nips/pull/923">NIP-71 Video Events&lt;/a>가 &lt;code>kind:21&lt;/code> 및 &lt;code>kind:22&lt;/code>와 함께 병합되었고, &lt;a href="https://github.com/nostr-protocol/nips/pull/1171">NIP-10&lt;/a>은 &lt;code>e&lt;/code> 태그에 선택적 pubkey 인수를 추가하여 클라이언트가 참조된 이벤트를 먼저 가져오지 않고도 스레드 저자를 해결할 수 있도록 했습니다. Kieran Walsh의 &lt;a href="https://github.com/nostr-protocol/nips/pull/1175">NIP-35 Torrents&lt;/a>가 5월 22일에 병합되었고, 5월 24일에 NIPs README는 오프 저장소 제안으로 &lt;a href="https://github.com/nostr-protocol/nips/pull/1251">CIP-01&lt;/a>을 처음 참조하여 &amp;ldquo;여러 제안 장소 중 하나로서의 NIPs&amp;rdquo; 패턴의 시작을 알렸습니다. 5월 25일에 &lt;a href="https://github.com/nostr-protocol/nips/pull/1254">정리 PR&lt;/a>이 다운스트림 구현이 이를 고정하기 전에 NIP-71에서 &lt;code>aes-256-gcm&lt;/code> 태그를 제거했습니다. NIP-96은 5월 27일에 &lt;a href="https://github.com/nostr-protocol/nips/pull/1262">&lt;code>list files&lt;/code>를 추가하고 변환 요구 사항을 삭제&lt;/a>했습니다. 5월 28일에 Jonathan Staab는 초안이 졸업하기 전에 최소 두 개의 상호 운용 가능한 구현을 요구하도록 &lt;a href="https://github.com/nostr-protocol/nips/pull/1264">NIP 수용 기준을 높일 것을 제안&lt;/a>했습니다. 클라이언트 측: Damus는 5월 9일-10일에 &lt;a href="https://github.com/damus-io/damus/releases/tag/v1.7.2">v1.7.2&lt;/a>와 &lt;a href="https://github.com/damus-io/damus/releases/tag/v1.8">v1.8&lt;/a> 및 &lt;a href="https://github.com/damus-io/damus/commits/v1.9">full NIP-10 마커 처리가 있는 v1.9&lt;/a>를 태그 지정했고, &lt;a href="https://github.com/damus-io/damus/commit/8feb228">푸시 알림에 NIP-98 인증&lt;/a>을 도착시켰으며, 전체 &lt;a href="https://github.com/damus-io/damus/commit/52aefc8">NIP-10 마커 지원&lt;/a>을 출시했습니다. Amethyst는 5월 14일에 &lt;a href="https://github.com/vitorpamplona/amethyst/commit/1f45a63">NIP-17을 기본 DM 모드로&lt;/a> 만들었고, &lt;a href="https://github.com/vitorpamplona/amethyst/commit/aa97c7e">NIP-65 outbox 모델 릴레이 관리&lt;/a>를 구축했으며, &lt;a href="https://github.com/vitorpamplona/amethyst/commit/ff94f45">NIP-96 서버 선택&lt;/a>을 추가했고, &lt;a href="https://github.com/vitorpamplona/amethyst/commit/04c4490">NIP-06 BIP-32/BIP-39 키 유도&lt;/a>를 출시했습니다. 5월 10일 Primal Android &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/0.99.2">0.99.2&lt;/a>는 사용자 태깅과 외부 지갑 NWC를 추가했고, &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/0.99.4">0.99.4&lt;/a>가 뒤따랐습니다. Pablo Fernandez는 5월 24-31일에 걸쳐 &lt;a href="https://github.com/nostr-dev-kit/ndk/commits/master/?since=2024-05-01&amp;amp;until=2024-06-01">NDK 낙관적 업데이트 클러스터&lt;/a>를 도착시켰습니다. Snort는 &lt;a href="https://github.com/v0l/snort/commit/5763d91">NIP-96 서버 선택&lt;/a>을 추가했고, cashu-ts는 &lt;a href="https://github.com/cashubtc/cashu-ts/commit/3e20f45">암호 프리미티브를 분리&lt;/a>하여 &lt;code>@cashu/crypto&lt;/code>로 만들었습니다.&lt;/p>
&lt;h3 id="2025년-5월">2025년 5월&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/1494">NIP-77(Negentropy Syncing)&lt;/a>이 5월 27일에 병합된 달로, brute-force REQ 필터를 로그 비용 차이 계산으로 대체하는 wire 프로토콜에 대한 fiatjaf와 Doug Hoyte의 사양입니다. 이는 strfry가 2년 전에 릴레이 측 기능으로 출시한 것과 동일한 negentropy로, 이제 클라이언트-릴레이 프로토콜로 공식화되었으며 &lt;a href="https://github.com/nostr-protocol/nips/pull/1939">README 항목&lt;/a>이 같은 날 도착했습니다. 그 전 주에는 &lt;a href="https://github.com/nostr-protocol/nips/pull/1897">NIP-23 롱폼&lt;/a>이 5월 24일에 HTML 문서가 &lt;code>&amp;lt;link&amp;gt;&lt;/code> 태그를 통해 Nostr 엔티티와 자신을 연관시키는 방법을 정의했으며, 이는 canonical 웹 사본 프리미티브입니다. NIP-25는 5월 22일에 &lt;a href="https://github.com/nostr-protocol/nips/pull/1702">reaction-target 릴레이 힌트&lt;/a>를 추가하고 &lt;a href="https://github.com/nostr-protocol/nips/pull/1486">emoji-to-like/dislike 권장 사항을 삭제&lt;/a>하여 이모지를 별개의 시맨틱 단위로 취급했습니다. NIP-52는 5월 14일에 &lt;a href="https://github.com/nostr-protocol/nips/pull/1922">단순화&lt;/a>되어 클라이언트가 프로덕션에서 출시하고 있던 kind에 초점을 맞추었으며, 이 트림은 1년 후 Formstr 캘린더 확장을 더 깨끗하게 그래프트하도록 만들었습니다. 5월 9일에 &lt;a href="https://github.com/nostr-protocol/nips/commit/873afc5fb823f58c3b7f29c5090f9c56172623f2">Follow Packs&lt;/a>(kind 39089 큐레이션된 팔로우 리스트)와 &lt;a href="https://github.com/nostr-protocol/nips/pull/1848">Favorite Relays&lt;/a>(NIP-51 하의 새로운 replaceable 리스트)가 같은 날 README에 들어왔습니다. Marmot 프로토콜 아크는 아직 시작되지 않았습니다: &lt;a href="https://github.com/marmot-protocol/whitenoise-rs">whitenoise-rs&lt;/a> 저장소만 존재했고(첫 커밋 2024년 9월 9일), 2025년 5월은 그 Svelte+Tauri 프로토타입 단계였으며, &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/commit/b8e6754">5월 14일 커밋&lt;/a>은 프로젝트가 현재 아키텍처로 피벗함에 따라 Tauri 특정 코드를 제거했습니다. 전용 MDK Rust 코어(2025년 9월 12일), Marmot 사양 저장소(2025년 9월 19일), Flutter UI(2025년 12월 2일)는 모두 그해 후반에 왔습니다. 클라이언트 측에서 Damus의 &lt;a href="https://github.com/damus-io/notedeck/releases/tag/v0.4.0">Notedeck v0.4.0&lt;/a>이 5월 5일에 첫 Beta로 출시되어, 전체 텍스트 검색, Dave AI 어시스턴트, NWC를 통한 zap, GIF, 사용자 태깅, mute 리스트와 함께 Alpha에서 졸업했습니다. 이틀 후, hodlbod의 &lt;a href="https://github.com/coracle-social/flotilla/releases/tag/1.0.0">Flotilla 1.0.0&lt;/a>이 &lt;a href="https://github.com/coracle-social/coracle/releases/tag/0.6.12">Coracle 0.6.12&lt;/a>와 함께 NIP-29 기반 그룹 채팅 클라이언트로 공개 출시 경계를 넘었으며, 이는 &lt;a href="https://github.com/coracle-social/coracle/releases/tag/0.6.17">5월 14일 0.6.17&lt;/a>까지 실행된 여섯 Coracle 릴리스 중 첫 번째였습니다. &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v3.4.0">Amber v3.4.0&lt;/a>은 5월 12일에 사용 중단된 Android Autofill 및 ClipboardManager API에서 벗어나 암호화된 공유 기본 설정에서 DataStore로 마이그레이션했습니다. 5월 20일 Primal Android &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/2.2.20">2.2.20&lt;/a>은 Primal Premium을 위한 Redeem Code 흐름과 재설계된 이미지 갤러리를 추가했습니다. 5월 21일 &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.14.0">nak v0.14.0&lt;/a>은 Coracle, Flotilla, Notedeck 릴리스와 같은 주에 canonical CLI의 마이너를 컷팅했습니다. OpenSats는 5월 22일 &lt;a href="https://opensats.org/blog/opensats-receives-two-million-donation-from-the-reynolds-foundation">Reynolds Foundation이 200만 달러를 기부&lt;/a>했을 때 지금까지 가장 큰 비 Bitcoin 재무부 기부를 받았습니다.&lt;/p>
&lt;h3 id="2026년-5월">2026년 5월&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/newsletters/2026-05-06-newsletter/">Newsletter #21&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-05-13-newsletter/">#22&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-05-21-newsletter/">#23&lt;/a> 및 이번 호에서 다룬 달. 정의하는 스레드는 MLS-on-Nostr가 다중 클라이언트 프로덕션에 도달한 것입니다: &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.8.0">MDK 0.8.0&lt;/a>이 MIP-05 leaf-index 프리미티브와 주소 지정 가능한 key package를 출시했고, &lt;a href="https://github.com/marmot-protocol/mdk/pull/306">PR #306&lt;/a>이 공유 UniFFI 표면을 통해 iOS와 Android 전반에 걸쳐 NIP-40 사라지는 메시지 검증을 추가한 것이 뒤따랐습니다. &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v2026.5.22%2B25">White Noise v2026.5.22+25&lt;/a>는 확장 프로세스 내부에서 MLS 암호문을 복호화하여 브로커가 평문을 보지 않도록 하는 Notification Service Extension을 통해 iOS 푸시를 출시했으며, 두 개의 새로운 Marmot 클라이언트가 등장했습니다: &lt;a href="https://github.com/DavidGershony/Scramble">Scramble&lt;/a>(다중 기기 KeyPackage 슬롯이 있는 .NET/Avalonia 데스크톱 및 Android 클라이언트)과 &lt;a href="https://cordn.net">Cordn&lt;/a>(ContextVM 위에 그룹당 코디네이터를 사용하는 대안 MLS 아키텍처). Angor는 &lt;a href="https://github.com/block-core/angor/pull/860">PR #860&lt;/a>에서 암호화 메시징을 NIP-04에서 NIP-44로 마이그레이션하여 &lt;a href="https://github.com/nostr-protocol/nips/pull/574">Paul Miller의 2023년 5월 NIP-44 제안&lt;/a>으로 열린 사용 중단 아크를 닫았습니다. Formstr 팀은 5월 17일에 최근 기억에서 가장 큰 조정된 NIP 제출을 열었으며, 참가자 자체 제거를 위한 &lt;a href="https://github.com/nostr-protocol/nips/pull/2350">PR #2350&lt;/a>, 프라이빗 캘린더 이벤트 및 반복(NIP-52E 및 NIP-52R)을 위한 &lt;a href="https://github.com/nostr-protocol/nips/pull/2351">PR #2351&lt;/a>, 분산 약속 스케줄링을 위한 &lt;a href="https://github.com/nostr-protocol/nips/pull/2352">PR #2352&lt;/a>와 함께, 모두 &lt;a href="https://calendar.formstr.app">calendar.formstr.app&lt;/a>이 이미 참조 구현을 출시하고 있습니다. &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.11.0">Amethyst v1.11.0&lt;/a>은 NIP-52 캘린더를 일급 타임라인 카테고리로 렌더링하고 온체인 Bitcoin zap을 분할 배포로 확장했습니다. &lt;a href="https://github.com/nostr-protocol/nips/pull/1494">NIP-77이 2025년 5월에 병합&lt;/a>된 지 1년 후, 세 개의 독립적인 구현이 같은 창에서 negentropy 채택을 출시했습니다: &lt;a href="https://github.com/damus-io/notedeck/pull/1459">Notedeck PR #1459&lt;/a>는 giftwrap 및 스레드 백필을 위해 Damus의 데스크톱 클라이언트에 이를 연결했고, &lt;a href="https://github.com/VectorPrivacy/Vector/releases/tag/v0.4.0">Vector v0.4.0&lt;/a>은 원클릭 Tor 및 21개 도구 MCP 에이전트 표면과 함께 처음부터 다시 만든 &lt;code>vector-core&lt;/code> 재작성의 일부로 full-negentropy MLS 동기화를 사용했으며, &lt;a href="https://github.com/greenart7c3/Citrine/releases/tag/v3.0.0-pre1">Citrine v3.0.0-pre1&lt;/a>은 내장 Tor 및 다중 릴레이 집계와 함께 Android 네이티브 릴레이에 이를 추가했습니다. &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.17.4">Mostro v0.17.4&lt;/a>는 &lt;a href="https://github.com/MostroP2P/mostro/pull/738">PR #738&lt;/a>에서 Phase 3 slashed-bond 지불로 anti-abuse 본드 루프를 닫아, 프로토콜이 이전에 위협만 했던 것을 강제합니다. &amp;ldquo;NIP-04를 대체할까&amp;quot;에서 &amp;ldquo;NIP-44를 완전한 MLS 그룹 상태로 대체할까&amp;quot;까지 3년입니다.&lt;/p>
&lt;hr>
&lt;p>논의하고 싶다면 Nostr에서 DM을 보내주세요.&lt;/p></content:encoded></item><item><title>Nostr Compass #23</title><link>https://nostrcompass.org/ko/newsletters/2026-05-21-newsletter/</link><pubDate>Thu, 21 May 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2026-05-21-newsletter/</guid><description>&lt;p>Primal 3.5는 재구축된 Android 셸을 출시했고, Amethyst는 온체인 Bitcoin zap을 추가했으며, White Noise는 markdown 렌더링과 딥 링크를 얻었고, Keycast는 보안 감사를 통과했으며, AgentNoise는 Marmot 암호화 채팅을 통해 로컬 AI 코딩 에이전트를 제어할 수 있게 합니다. Hostr는 리스팅, 예약, EVM 기반 escrow를 다루는 네 개의 초안 NIP과 함께 Nostr 상의 P2P 임대 숙박 플랫폼을 출시합니다. Angor는 암호화된 메시징을 NIP-04에서 NIP-44로 마이그레이션하고, Dart NDK는 NIP-77과 웹 signer를 추가하며, Alby js-sdk v8은 네이티브 NWC 다중 릴레이 재연결을 출시하고, KeyChat은 Signal 일회성 prekey 삭제의 forward secrecy 격차를 패치합니다. 프로토콜 측에서는 Mostro의 anti-abuse 본드가 Phase 2에 도달하고, Wisp는 프라이빗 답장과 gift-wrapped 반응을 출시하며, Namecoin NIP-05 구현 웨이브는 한 주 만에 여섯 개의 클라이언트를 다룹니다.&lt;/p></description><content:encoded>&lt;p>Primal 3.5는 재구축된 Android 셸을 출시했고, Amethyst는 온체인 Bitcoin zap을 추가했으며, White Noise는 markdown 렌더링과 딥 링크를 얻었고, Keycast는 보안 감사를 통과했으며, AgentNoise는 Marmot 암호화 채팅을 통해 로컬 AI 코딩 에이전트를 제어할 수 있게 합니다. Hostr는 리스팅, 예약, EVM 기반 escrow를 다루는 네 개의 초안 NIP과 함께 Nostr 상의 P2P 임대 숙박 플랫폼을 출시합니다. Angor는 암호화된 메시징을 NIP-04에서 NIP-44로 마이그레이션하고, Dart NDK는 NIP-77과 웹 signer를 추가하며, Alby js-sdk v8은 네이티브 NWC 다중 릴레이 재연결을 출시하고, KeyChat은 Signal 일회성 prekey 삭제의 forward secrecy 격차를 패치합니다. 프로토콜 측에서는 Mostro의 anti-abuse 본드가 Phase 2에 도달하고, Wisp는 프라이빗 답장과 gift-wrapped 반응을 출시하며, Namecoin NIP-05 구현 웨이브는 한 주 만에 여섯 개의 클라이언트를 다룹니다.&lt;/p>
&lt;h2 id="주요-소식">주요 소식&lt;/h2>
&lt;h3 id="primal-35-for-android">Primal 3.5 for Android&lt;/h3>
&lt;p>자체 캐싱 릴레이 인프라로 지원되는 소셜 클라이언트인 Primal은 이번 주에 재구축된 애플리케이션 셸과 함께 &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.5.9">3.5.9&lt;/a>를 출시했습니다. 재설계는 이전 내비게이션 구조를 업데이트된 레이아웃과 새로운 Explore 화면으로 대체하여, 주요 발견 표면에 전용 홈을 제공합니다. 이 릴리스는 링크 프리뷰에 오디오 재생을 추가하므로, 노트에 임베드된 오디오 파일이 피드를 떠나지 않고 인라인으로 재생됩니다. NIP-05 검증 배지는 이제 프로필에 인라인으로 표시되어 identity 확인을 한눈에 볼 수 있게 합니다. 알림 필터링은 개편되어 사용자가 알림 리스트에 도달하는 이벤트 유형을 좁힐 수 있게 되었습니다. 에디터는 더 나은 이벤트 링크 처리를 얻었고, 기본 데이터베이스 계층은 안정성 수정을 받았습니다.&lt;/p>
&lt;h3 id="white-noise-markdown-딥-링크-오디오-메타데이터">White Noise: markdown, 딥 링크, 오디오 메타데이터&lt;/h3>
&lt;p>Nostr와 MLS(&lt;a href="https://www.rfc-editor.org/rfc/rfc9420">RFC 9420&lt;/a>) 위에 구축된 Marmot 암호화 그룹 메시징 앱인 White Noise는 프런트엔드와 백엔드 저장소 전반에 걸쳐 지금까지 가장 바쁜 주 중 하나를 보냈습니다.&lt;/p>
&lt;p>프런트엔드에서 &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/665">PR #665&lt;/a>는 채팅 메시지에 대한 전체 markdown 렌더링을 추가하므로, bold, italic, code 블록, 링크가 이제 메시지 뷰에서 네이티브로 렌더링됩니다. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/675">PR #675&lt;/a>는 이전에 마지막이 아닌 admin에게 차단되었던 그룹 나가기 흐름을 활성화하고, &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/661">PR #661&lt;/a>은 HTTP 리디렉션 인프라 없이 사용자, 채팅, 설정을 다루는 &lt;code>whitenoise://&lt;/code> 및 &lt;code>whitenoise-staging://&lt;/code> URI에 대한 네이티브 딥 링크 지원을 추가합니다.&lt;/p>
&lt;p>whitenoise-rs의 백엔드에서 &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/835">PR #835&lt;/a>는 kind:30443 게시에 대해 &lt;code>d_tag&lt;/code> 슬롯을 재사용하여 key package 회전이 제대로 작동하게 하며, NIP-33 replaceable 이벤트 시맨틱을 활성화하여 연속적인 key package 회전이 릴레이에서 이전 이벤트를 대체하고 현재 key package만 유지하도록 합니다. &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/833">PR #833&lt;/a>은 오디오 첨부 파일에 대한 선택적 &lt;code>duration_ms&lt;/code> 및 &lt;code>waveform&lt;/code> 필드로 &lt;code>FileMetadata&lt;/code>를 확장하며, MIP-04 미디어 태그에 동일한 필드를 추가하는 MDK의 &lt;a href="https://github.com/marmot-protocol/mdk/pull/300">PR #300&lt;/a>과 조정됩니다. 새로운 &lt;code>whitenoise-markdown&lt;/code> 크레이트(&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/836">PR #836&lt;/a>)는 이전 nostr-sdk 토큰 파서를 전용 markdown 렌더링 라이브러리로 대체합니다.&lt;/p>
&lt;p>Marmot 프로토콜 사양 자체는 &lt;a href="https://github.com/marmot-protocol/marmot/pull/68">PR #68&lt;/a>에서 보안 수정을 받았으며, MIP-01의 이미지 키 유도에 대해 HKDF-SHA256을 명시적으로 지정함으로써 구현 차이를 초래할 수 있는 모호성을 제거하는 보안 문제를 닫습니다. MDK에서 &lt;a href="https://github.com/marmot-protocol/mdk/pull/307">PR #307&lt;/a>은 환영 실패 이유를 정리하고 저장된 길이를 제한하여 별도의 보안 발견 사항을 닫습니다.&lt;/p>
&lt;h3 id="amethyst-v1100-온체인-bitcoin-zap">Amethyst v1.10.0: 온체인 Bitcoin zap&lt;/h3>
&lt;p>Amethyst는 이번 주에 네 개의 릴리스를 출시했으며, &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.10.0">v1.10.0&lt;/a>이 헤드라인입니다. 이 릴리스는 NIP-BC 온체인 Bitcoin zap 지원을 추가하여, 사용자가 Bitcoin 트랜잭션을 통해 온체인에서 직접 정산되는 zap을 보내고, 받고, 표시할 수 있게 합니다. 이전 릴리스는 비준수 파일명을 거부하도록 Blossom blob 감지를 수정했고(&lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.09.2">v1.09.2&lt;/a>), 데스크톱 빌드용 ProGuard 규칙을 패치했으며, 확장된 반응 갤러리에서 온체인 Bitcoin zapper를 전용 ₿ 행으로 표시하기 위해 pull request &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2977">#2977&lt;/a>을 병합했습니다. 페이지 매김이 있는 진행 중인 온체인 트랜잭션 이력 화면은 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2974">PR #2974&lt;/a>에 도착했습니다.&lt;/p>
&lt;h3 id="agentnoise-white-noise를-통한-코딩-에이전트-제어">AgentNoise: White Noise를 통한 코딩 에이전트 제어&lt;/h3>
&lt;p>nvk의 &lt;a href="https://github.com/nvk/agentnoise">AgentNoise&lt;/a>는 White Noise를 실행하는 전화기를 로컬 Codex 및 Claude 코딩 에이전트 세션의 제어 표면으로 사용할 수 있게 하는 Rust 네이티브 데스크톱 헬퍼입니다. 이 도구는 하나 이상의 White Noise 채팅을 수신하고, 첫 페어링 PIN 흐름을 통해 발신자를 인증하며, 구성된 런처를 통해 로컬 코딩 에이전트를 시작합니다. 전화기에서 &lt;code>/claude &amp;lt;prompt&amp;gt;&lt;/code>를 보내면 머신 호스트명과 짧은 프롬프트 요약으로 명명된 새로운 White Noise 작업 세션이 열리고, 진행 업데이트와 최종 출력이 해당 채팅으로 스트리밍됩니다. 의도적으로 Rust 우선이며 신뢰할 수 있는 브리지 경로에서 Node를 제외합니다. 프로젝트는 이번 주에 &lt;a href="https://github.com/nvk/agentnoise/releases/tag/v0.1.24">v0.1.24&lt;/a>에 도달하여, 전화기에서 읽을 수 있는 더 짧은 답장, 짧은 고유 접두사에 의한 job 참조, 옵트인 로컬 세션 watcher를 추가했습니다. AgentNoise는 &lt;code>marmot-protocol/whitenoise-rs&lt;/code>의 &lt;code>wn&lt;/code> 및 &lt;code>wnd&lt;/code> CLI를 하위 프로세스로 구동하므로 White Noise 클라이언트 자체와 Nostr 전송을 공유합니다.&lt;/p>
&lt;h3 id="keycast-보안-감사-완료">Keycast 보안 감사 완료&lt;/h3>
&lt;p>SQLite에서 정지 상태에서 암호화된 Nostr private 키를 저장하는 팀 지향 NIP-46 원격 서명 서버인 &lt;a href="https://github.com/marmot-protocol/keycast">Keycast&lt;/a>는 2026년 5월에 보안 감사를 완료했습니다. 강화 단계는 auth, permission, 데이터 무결성, 종속성 문제를 다루었으며, 결과는 &lt;a href="https://github.com/marmot-protocol/keycast/blob/master/AUDIT.md">AUDIT.md&lt;/a>에 문서화되어 있습니다. 변경 사항에는 다음이 포함됩니다: NIP-98 HTTP auth는 이제 정확히 하나의 &lt;code>u&lt;/code> 태그와 하나의 &lt;code>method&lt;/code> 태그를 요구하고, 오래된 타임스탬프를 거부하며, &lt;code>payload&lt;/code> 해시를 검증합니다; &lt;code>ALLOWED_PUBKEYS&lt;/code> 허용 목록은 정확하게 파싱되고 서버 측에서 강제됩니다; 빈 정책은 이제 기본적으로 sign/encrypt/decrypt 요청을 거부합니다; SQLite 연결에서 외래 키 강제가 활성화됩니다; &lt;code>/teams/:id&lt;/code>와 같은 중첩된 앱 경로는 서버 측에서 보호됩니다. SQL 마이그레이션은 시작 시 이전 allowed-kinds 권한 JSON을 정규화합니다. 이 프로젝트는 여전히 초기 단계이며 감사는 실제 팀 키로 신뢰하기 전에 잔여 항목을 언급합니다.&lt;/p>
&lt;h3 id="scramble-데스크톱-및-android용-marmot-클라이언트">Scramble: 데스크톱 및 Android용 Marmot 클라이언트&lt;/h3>
&lt;p>&lt;a href="https://github.com/DavidGershony/Scramble">Scramble&lt;/a>(이전의 OpenChat)은 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot Protocol&lt;/a>을 위한 .NET/Avalonia 데스크톱 및 Android 클라이언트로, MIPs 00-04을 구현합니다: KeyPackage 게시(kind:30443), NostrGroupData MLS 확장으로 그룹 메타데이터, NIP-59 gift-wrapped 환영 이벤트(kind:444), ChaCha20-Poly1305 암호화 메시지(kind:445), Blossom 암호화 미디어 첨부 파일. White Noise 및 다른 Marmot 호환 클라이언트와 완전히 상호 운용 가능합니다.&lt;/p>
&lt;p>프로젝트는 이번 주에 13개의 릴리스를 출시했으며, 다중 기기 지원이 주요 기능입니다. 각 기기는 고유한 KeyPackage 슬롯(kind:30443의 &lt;code>d&lt;/code> 태그)을 생성합니다. 시작 시 Scramble은 릴레이에서 사용자 자신의 KeyPackage를 가져오고, 피어 기기 슬롯 ID를 감지하며, staged commit 흐름을 사용하여 기존 MLS 그룹에 자동으로 추가합니다. 자동 추가는 현재 사용자가 admin인 그룹으로 제한됩니다; 비 admin 그룹은 그룹 admin에게 요청하라는 안내와 함께 건너뜁니다. Forward secrecy 공개 배너는 새로 연결된 기기에 이전 메시지를 사용할 수 없음을 알립니다. 슬롯 ID 조정 패스(&lt;code>TryReconcileSlotId&lt;/code>)는 릴레이 KeyPackage 바이트를 로컬 키 자료와 매칭하여 올바른 &lt;code>d&lt;/code> 태그를 채택함으로써 사전 다중 기기 버전에서 마이그레이션된 기기를 처리합니다. Amber 및 NIP-46 사용자를 위한 외부 signer 재연결도 수정되었습니다: &lt;code>ExternalSignerService&lt;/code>의 내장 자동 재연결을 차단하던 &lt;code>IsConnected&lt;/code> 가드가 &lt;code>NostrService&lt;/code>의 아홉 개 호출 사이트 모두에서 제거되었습니다.&lt;/p>
&lt;h3 id="hostr-nostr-상의-p2p-임대-숙박">Hostr: Nostr 상의 P2P 임대 숙박&lt;/h3>
&lt;p>&lt;a href="https://hostr.network">Hostr&lt;/a>(&lt;a href="https://github.com/sudonym-btc/hostr">source&lt;/a>)는 완전히 Nostr 위에 구축된 P2P 임대 숙박 플랫폼입니다. 프로젝트가 애플리케이션과 병렬로 개발하고 있는 네 개의 초안 NIP을 사용하여 전체 Airbnb 스타일 흐름(속성 검색 및 리스팅, 예약 협상, 결제 정산)을 다룹니다.&lt;/p>
&lt;p>숙박 NIP은 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/99.md">NIP-99&lt;/a> 분류 리스팅(kind:30402 활성, kind:30403 초안)을 유형(&lt;code>room&lt;/code>, &lt;code>house&lt;/code>, &lt;code>apartment&lt;/code>, &lt;code>villa&lt;/code>, &lt;code>hotel&lt;/code>, &lt;code>hostel&lt;/code>, &lt;code>resort&lt;/code>), 체크인/체크아웃 시간, 최소 체류, 구성 가능한 정밀도로 위치 기반 검색을 위한 H3 지리 공간 셀 인덱스에 대한 숙박 특정 태그로 확장합니다. 예약 NIP은 전체 협상 및 수명 주기 프로토콜을 정의합니다: kind:32122 replaceable 예약 이벤트는 &lt;code>d&lt;/code> 거래 ID, 리스팅 앵커 &lt;code>a&lt;/code> 태그, 역할(&lt;code>buyer&lt;/code>, &lt;code>seller&lt;/code>, &lt;code>escrow&lt;/code>)이 있는 참가자 &lt;code>p&lt;/code> 태그를 포함합니다; kind:1327 구조화된 메시지 rumor는 NIP-59 gift wrap을 통해 프라이빗 협상 단계 반대 제안을 전달하여 협상이 공개 릴레이에서 벗어나 유지되도록 합니다; kind:1326 append-only 전환 이벤트는 예약이 커밋되면 공개 감사 추적을 만듭니다. 구매자 프라이버시는 암호화된 &lt;code>participant_proof&lt;/code> 태그를 통해 구매자의 실제 identity에 바인딩된 거래별 임시 Nostr 키를 통해 보존됩니다. Escrow NIP은 kind:30303 escrow 서비스 광고와 kind:17388 사용자 신뢰 선언을 정의합니다; 참조 구현은 Rootstock의 EVM 스마트 계약을 사용하며, &lt;code>contractBytecodeHash&lt;/code>는 클라이언트가 배포된 계약이 알려진 감사된 구현과 일치하는지 검증할 수 있게 합니다. 마켓플레이스 리스팅 NIP은 모든 NIP-99 마켓플레이스 프로필에서 공유되는 제네릭 태그를 정의하며, &lt;code>instantBook&lt;/code>, &lt;code>negotiable&lt;/code>, &lt;code>quantity&lt;/code>, &lt;code>securityDeposit&lt;/code>, &lt;code>cancellationPolicy&lt;/code>, &lt;code>maxDisputePeriod&lt;/code>를 포함합니다. 이번 주에 프로젝트는 앱 스토어 제출을 준비하고 에이전트용 자동화를 위한 MCP 클라이언트 identity 지원을 병합했습니다.&lt;/p>
&lt;p>이번 주 Shakespeare MiniApps 플랫폼에 두 개의 새 항목이 등장했습니다: &lt;a href="https://inkpress.shakespeare.wtf">InkPress&lt;/a>는 구조화된 잡지 스타일 콘텐츠를 Nostr 이벤트로 게시하는 AI 잡지 생성기이고, &lt;a href="https://pressstr.shakespeare.wtf">PressStr&lt;/a>는 Soapbox 스택을 위한 글쓰기 및 게시 플랫폼입니다.&lt;/p>
&lt;h2 id="이번-주-출시">이번 주 출시&lt;/h2>
&lt;h3 id="ngit-v244">ngit v2.4.4&lt;/h3>
&lt;p>&lt;strong>ngit&lt;/strong>는 &lt;a href="https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.4.4">v2.4.4&lt;/a>를 출시하여, git 서버가 Nostr 상태보다 fast-forward 앞서 있는 경우에 대한 &lt;code>ngit sync --trust-server&lt;/code>(&lt;code>-t&lt;/code>)를 추가했습니다. 이 상황이 감지되면 sync는 영향을 받는 refs를 보고하고 업데이트된 상태 이벤트에 서명하고 게시하기 위해 플래그를 요구합니다; &lt;code>nostr.trust-server-domains&lt;/code> git 구성 설정은 플래그 없이 자동으로 신뢰해야 하는 서버에 대한 세미콜론으로 구분된 허용 목록을 제공합니다.&lt;/p>
&lt;h3 id="amber-v610-pre3-psbt-서명-추가">Amber v6.1.0-pre3, PSBT 서명 추가&lt;/h3>
&lt;p>&lt;strong>Amber&lt;/strong>는 새 앱 연결을 위한 개선된 레이아웃, 크래시 수정, 권한 화면의 select/deselect all 옵션과 함께 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.1.0-pre3">v6.1.0-pre3&lt;/a>을 출시했습니다. &lt;a href="https://github.com/greenart7c3/Amber/pull/438">PR #438&lt;/a>은 Intent 기반 및 NIP-46 릴레이 기반 경로 모두를 통해 PSBT 서명 지원을 추가하여, Amber가 요청하는 앱에 nsec를 노출하지 않고 Partially Signed Bitcoin Transaction에 서명할 수 있게 합니다.&lt;/p>
&lt;h3 id="wisp-v110-프라이빗-답장-출시-및-amber-지원-제거">Wisp v1.1.0, 프라이빗 답장 출시 및 Amber 지원 제거&lt;/h3>
&lt;p>&lt;strong>Wisp&lt;/strong>는 NIP-17 gift wrap을 통한 프라이빗 답장(&lt;a href="https://github.com/barrydeen/wisp/pull/540">PR #540&lt;/a>), 프라이빗 답장에 대한 gift-wrapped 반응 및 DIP-03 zap(&lt;a href="https://github.com/barrydeen/wisp/pull/543">PR #543&lt;/a>), 노트 자동 번역(&lt;a href="https://github.com/barrydeen/wisp/pull/523">PR #523&lt;/a>), zap 대화 상자의 레지스터 스타일 법정 화폐 입력과 함께 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v1.1.0">v1.1.0&lt;/a>을 출시했습니다. &lt;a href="https://github.com/barrydeen/wisp/pull/541">PR #541&lt;/a>은 프라이빗 zap을 자체 개발한 DM 릴레이 평문 방식에서 적절한 DM 릴레이 라우팅을 사용하는 DIP-03로 마이그레이션합니다. 동일한 릴리스 사이클에서 NIP-55 원격 signer 지원이 제거되었고(&lt;a href="https://github.com/barrydeen/wisp/pull/531">PR #531&lt;/a>), Amber 및 기타 외부 signer 통합이 제거되었으며, 번들된 로컬 릴레이가 제거되었습니다(&lt;a href="https://github.com/barrydeen/wisp/pull/533">PR #533&lt;/a>). Wisp는 Android용 Nostr 소셜 클라이언트입니다.&lt;/p>
&lt;h3 id="calendar-by-formstr-v154-새-참가자를-위한-gift-wrap-수정">Calendar by Formstr v1.5.4, 새 참가자를 위한 gift wrap 수정&lt;/h3>
&lt;p>&lt;strong>Calendar by Formstr&lt;/strong>는 &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.5.4">v1.5.4&lt;/a>(v1.5.2 → v1.5.4 시퀀스의 최신)를 출시했습니다. &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/160">PR #160&lt;/a>은 새 참가자와 함께 프라이빗 캘린더 이벤트를 편집할 때 &lt;code>p&lt;/code> 태그에 새 pubkey가 있는 업데이트된 이벤트를 게시했지만 해당 참가자에게 gift wrap 초대를 생성하거나 전달하지 않아 마지막 순간 추가에 대한 초대 흐름을 깨뜨리는 버그를 수정합니다. &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/156">PR #156&lt;/a>은 프라이빗 이벤트 복호화 주위에 오류 처리를 추가하여 클라이언트가 복호화할 수 없는 이벤트에서 더 이상 throw하지 않도록 하고, &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/138">PR #138&lt;/a>은 시간대에 걸쳐 드리프트되는 반복 이벤트 시간을 수정합니다.&lt;/p>
&lt;h3 id="applesauce-v610-nip-34-git-cast-및-nip-51-lookup-릴레이-추가">Applesauce v6.1.0, NIP-34 git cast 및 NIP-51 lookup 릴레이 추가&lt;/h3>
&lt;p>&lt;strong>Applesauce&lt;/strong>는 상당한 NIP-34(git-over-Nostr) 지원과 함께 패키지 전반에 걸쳐 &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-core%406.1.0">v6.1.0&lt;/a>을 출시했습니다: applesauce-common은 새로운 &lt;code>GitRepository&lt;/code>, &lt;code>GitGraspList&lt;/code>, &lt;code>FavoriteGitRepos&lt;/code> cast와 매칭 팩토리를 추가하고, &lt;code>User.favoriteGitRepos$&lt;/code>, &lt;code>User.gitAuthors$&lt;/code>, &lt;code>User.graspServers$&lt;/code> 반응형 속성을 노출하여 애플리케이션이 사용자가 팔로우하는 git 리포지토리, repo 유지 관리자, 구성된 GRASP 서버를 동일한 User 객체에서 직접 나열할 수 있게 합니다. 동일한 릴리스는 특정 데이터를 찾을 위치를 발견하는 데 사용되는 relay-list 계열의 최근 추가인 NIP-51 kind 10086 lookup 릴레이 리스트에 대한 지원을 추가합니다. applesauce-core는 NIP-01 replaceable 주소 조회를 위한 &lt;code>EventCast&lt;/code>의 &lt;code>replaceableAddress&lt;/code>와 &lt;code>pointer&lt;/code>, &lt;code>kind&lt;/code>, &lt;code>getReplaceableAddressForEvent&lt;/code> 헬퍼를 얻고, 기본 &lt;code>User&lt;/code> cast에 &lt;code>timeline$()&lt;/code> 메서드를 추가합니다. &lt;a href="https://github.com/hzrd149/applesauce/pull/73">PR #73&lt;/a>은 오프라인 릴레이를 조용히 드롭하는 pool 수동 메서드를 수정합니다.&lt;/p>
&lt;h3 id="sprout-v0016-sprig-바이너리-및-huddle-프로토콜-v2-출시">Sprout v0.0.16, Sprig 바이너리 및 huddle 프로토콜 v2 출시&lt;/h3>
&lt;p>인간과 AI 에이전트가 동일한 방과 이벤트 로그를 공유하는 Block의 자체 호스팅 Nostr 릴레이 기반 팀 워크스페이스인 &lt;strong>Sprout&lt;/strong>는 새로운 Sprig 올인원 바이너리의 롤링 빌드와 함께 데스크톱 앱의 &lt;a href="https://github.com/block/sprout/releases/tag/v0.0.16">v0.0.16&lt;/a>을 출시했습니다(&lt;a href="https://github.com/block/sprout/pull/605">PR #605&lt;/a>). Sprig 바이너리는 쉬운 배포를 위해 ACP 하네스, 에이전트, 개발자 MCP를 단일 busybox 스타일 바이너리로 번들합니다. &lt;a href="https://github.com/block/sprout/pull/611">PR #611&lt;/a>에 추가된 &lt;code>--no-memory&lt;/code> 플래그를 통해 운영자는 ACP 하네스에 대한 NIP-AE 핵심 메모리 주입을 비활성화할 수 있습니다. 실시간 측에서 &lt;a href="https://github.com/block/sprout/pull/609">PR #609&lt;/a>는 huddle 음성 프로토콜을 최대 10명의 동시 피어를 지원하는 v2 프레임 헤더로 확장합니다.&lt;/p>
&lt;h3 id="nostrord-v103-os-키체인-및-다중-계정-추가">Nostrord v1.0.3, OS 키체인 및 다중 계정 추가&lt;/h3>
&lt;p>&lt;strong>Nostrord&lt;/strong>는 OS 키체인 및 암호 대체를 사용하여 강화된 로컬 키 저장소, 다중 계정 지원, Android에서 signer 앱을 여는 탭 가능한 bunker QR 코드와 함께 &lt;a href="https://github.com/nostrord/nostrord/releases/tag/v1.0.3">v1.0.3&lt;/a>을 출시했습니다.&lt;/p>
&lt;h3 id="angor-nip-44로-마이그레이션-및-보안-강화-출시">Angor, NIP-44로 마이그레이션 및 보안 강화 출시&lt;/h3>
&lt;p>Nostr와 Taproot 위에 구축된 Bitcoin 크라우드펀딩 앱인 &lt;strong>Angor&lt;/strong>는 이번 주에 보안 강화 및 Nostr 통합 변경 세트와 함께 세 개의 unstable 릴리스(&lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.24">v0.2.24&lt;/a>, &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.25">v0.2.25&lt;/a>, &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.26">v0.2.26&lt;/a>)를 출시했습니다. &lt;a href="https://github.com/block-core/angor/pull/860">PR #860&lt;/a>은 Nostr 암호화 메시징을 NIP-04에서 NIP-44로 마이그레이션하여, 사용 중단된 XOR 기반 방식을 ChaCha20-Poly1305 암호화로 대체합니다. &lt;a href="https://github.com/block-core/angor/pull/861">PR #861&lt;/a>은 임시 Nostr 인증 키를 사용하여 선택된 지갑 없이 Blossom 미디어 업로드를 허용하여, 아직 지갑을 연결하지 않은 사용자에 대한 업로드 차단을 해제합니다. 보안 시리즈는 몇 가지 강화된 카테고리를 다루었습니다: &lt;a href="https://github.com/block-core/angor/pull/854">PR #854&lt;/a>는 AngorKey에 대한 유형 안전성과 니모닉 메모리 보호를 추가하고, &lt;a href="https://github.com/block-core/angor/pull/856">PR #856&lt;/a>은 timelock, 수수료율, dust 임계값, 페널티 규칙에 대한 프로토콜 수준 검증을 강제하며, &lt;a href="https://github.com/block-core/angor/pull/851">PR #851&lt;/a>은 여덟 개의 중간 및 낮은 심각도 카테고리에 걸쳐 breaking하지 않는 강화를 적용합니다. &lt;a href="https://github.com/block-core/angor/pull/859">PR #859&lt;/a>는 AOT 컴파일을 활성화하고 런타임 코드 생성을 제거하여 GrapheneOS 호환성을 수정하고, &lt;a href="https://github.com/block-core/angor/pull/855">PR #855&lt;/a>는 OS가 프로세스를 종료하기 전에 지갑 상태를 유지하여 Android swipe-kill에서의 지갑 손실을 방지합니다.&lt;/p>
&lt;h3 id="alby-js-sdk-v80-nwc-다중-릴레이-재연결-출시">Alby js-sdk v8.0, NWC 다중 릴레이 재연결 출시&lt;/h3>
&lt;p>&lt;strong>Alby js-sdk&lt;/strong>는 NWC 다중 릴레이 구독 지원과 함께 v8.0 라인(&lt;a href="https://github.com/getAlby/js-sdk/releases/tag/v8.0.1">v8.0.1&lt;/a>에서 &lt;a href="https://github.com/getAlby/js-sdk/releases/tag/v8.0.3">v8.0.3&lt;/a>까지)을 출시했습니다. &lt;a href="https://github.com/getAlby/js-sdk/pull/516">PR #516&lt;/a>은 nostr-tools 종속성을 업데이트하고 여러 릴레이에 걸쳐 네이티브 자동 재연결을 활성화하여, 이전 폴링 접근 방식을 릴레이 네이티브 재연결 로직으로 대체합니다. &lt;a href="https://github.com/getAlby/js-sdk/pull/542">PR #542&lt;/a>는 모든 &lt;code>console.debug&lt;/code> 호출을 주입 가능한 로거 인터페이스로 대체하여, 애플리케이션 개발자가 자체 로깅 인프라를 통해 SDK 진단을 라우팅할 수 있게 합니다. 이 릴리스는 WebSocket 폴리필을 제거하여 서버 측 소비자에 대해 Node.js 22 이상을 요구합니다. v8.0.2는 특정 번들러를 깨뜨린 utils crypto import 버그에 대한 수정을 추가했습니다.&lt;/p>
&lt;h3 id="keychat-v1411-forward-secrecy-수정">KeyChat v1.41.1, forward secrecy 수정&lt;/h3>
&lt;p>Signal 프로토콜을 Nostr 릴레이 전송과 결합한 메시징 앱인 &lt;strong>KeyChat&lt;/strong>은 &lt;a href="https://github.com/keychat-io/keychat-app/releases/tag/v1.41.1&amp;#43;6513">v1.41.1+6513&lt;/a>을 출시했습니다. 헤드라인 수정은 성공적인 복호화 직후 Signal 일회성 prekey를 삭제하여 forward secrecy를 강제하며, 나중에 기기가 손상된 경우 유지된 prekey가 과거 메시지를 복호화하는 데 사용될 수 있는 격차를 닫습니다. 이 릴리스는 또한 단일 링크로 구성된 메시지에 대한 URL 프리뷰를 추가하고, 20 MB 자동 임계값과 함께 새로운 &lt;code>FileDownloadManager&lt;/code> 아래로 미디어 자동 다운로드를 중앙 집중화하며, 유료 릴레이 수수료 구성이 항상 올바르게 로드되도록 콜드 스타트에서 강제 새로 고침하기 위해 NIP-11 릴레이 정보 가져오기를 리팩터링합니다.&lt;/p>
&lt;h2 id="개발-중">개발 중&lt;/h2>
&lt;p>&lt;strong>Citrine&lt;/strong>은 NIP-70 강제를 구현하는 &lt;a href="https://github.com/greenart7c3/Citrine/pull/151">PR #151&lt;/a>을 병합했습니다: Android 릴레이는 이제 사양이 요구하는 대로 보호된 이벤트 콘텐츠를 임베드하는 리포스트를 차단합니다. &lt;a href="https://github.com/greenart7c3/Citrine/pull/149">PR #149&lt;/a>는 릴레이 설정 화면에서 여러 연결 주소, localhost, 로컬 Wi-Fi, Tor에 대한 표시 및 복사 작업을 추가합니다. &lt;a href="https://github.com/greenart7c3/Citrine/pull/141">PR #141&lt;/a>은 Amber와의 외부 signer 통합을 통해 NIP-42 AUTH 챌린지 처리를 추가합니다.&lt;/p>
&lt;p>&lt;strong>Mostro&lt;/strong>는 anti-abuse 본드 롤아웃의 Phase 2에 도달했습니다. &lt;a href="https://github.com/MostroP2P/mostro/pull/737">PR #737&lt;/a>은 solver 지시 분쟁 slash 로직을 도입합니다: admin 핸들러는 이제 mostro-core에서 &lt;code>BondResolution&lt;/code> 페이로드를 소비하여, admin이 분쟁을 해결할 때 어느 쪽의 본드도 slash할 수 있게 합니다. &lt;a href="https://github.com/MostroP2P/mostro/pull/736">PR #736&lt;/a>에서 병합된 Phase 1.5는 전용 &lt;code>PayBondInvoice&lt;/code> action과 &lt;code>WaitingTakerBond&lt;/code> 상태를 도입하여, taker의 anti-abuse 본드 지불을 구매자의 거래 지불금에서 분리했습니다. 모바일 클라이언트는 &lt;a href="https://github.com/MostroP2P/mobile/pull/592">PR #592&lt;/a>에서 전체 Phase 1.5 UX를 추가했습니다. Mostro는 Nostr 위에 구축된 P2P Bitcoin 거래 프로토콜입니다.&lt;/p>
&lt;p>&lt;strong>Damus&lt;/strong>는 릴레이 신호 표시기를 복원하는 &lt;a href="https://github.com/damus-io/damus/pull/3773">PR #3773&lt;/a>을 병합했으며, &lt;a href="https://github.com/damus-io/damus/pull/3775">PR #3775&lt;/a>는 초기 연결 실패 후 재연결을 거부하는 릴레이를 수정합니다.&lt;/p>
&lt;p>&lt;strong>rust-nostr&lt;/strong>는 이벤트 완결 traits와 NIP 특정 이벤트 빌더를 추가하는 &lt;a href="https://github.com/rust-nostr/nostr/pull/1358">PR #1358&lt;/a>을 병합하여, 특정 프로토콜 함수에 대해 올바르게 유형이 지정된 이벤트를 더 쉽게 구성할 수 있게 합니다. &lt;a href="https://github.com/rust-nostr/nostr/pull/1363">PR #1363&lt;/a>은 connect 응답을 보내기 전에 NIP-46 signer가 알림을 구독하도록 보장하는 수정을 백포트하여, connect 직후 도착하는 클라이언트 메시지가 누락될 수 있는 race condition을 닫습니다.&lt;/p>
&lt;p>&lt;strong>dart-nostr&lt;/strong>는 Namecoin &lt;code>.bit&lt;/code> 릴레이 리졸버와 TLSA pin 레코드를 추가하는 &lt;a href="https://github.com/ethicnology/dart-nostr/pull/44">PR #44&lt;/a>를 병합하여, Flutter 애플리케이션이 Namecoin DNS를 통해 &lt;code>wss://example.bit/&lt;/code> 릴레이 URL을 실제 WebSocket 주소로 해결할 수 있게 합니다.&lt;/p>
&lt;p>&lt;strong>Dart NDK&lt;/strong>(Dart/Flutter Nostr 개발 키트, 현재 &lt;code>relaystr/ndk&lt;/code>)는 오프라인 이벤트 서명 프로토콜인 NIP-77을 구현하는 &lt;a href="https://github.com/relaystr/ndk/pull/464">PR #464&lt;/a>를 병합했습니다. signer 측에서 &lt;a href="https://github.com/relaystr/ndk/pull/602">PR #602&lt;/a> 및 &lt;a href="https://github.com/relaystr/ndk/pull/601">PR #601&lt;/a>는 웹 특정 이벤트 signer와 &lt;code>PlatformEventVerifier&lt;/code> 추상화를 추가하여, Flutter 웹 앱이 별도의 코드 경로 없이 플랫폼 signer를 사용할 수 있게 합니다; &lt;a href="https://github.com/relaystr/ndk/pull/604">PR #604&lt;/a>는 런타임 signer 선택을 위한 이벤트 signer 팩토리를 도입합니다. &lt;a href="https://github.com/relaystr/ndk/pull/608">PR #608&lt;/a>은 사용자의 NIP-17 DM 릴레이 리스트(kind:10050)를 가져오는 &lt;code>getDmRelays()&lt;/code>를 추가하고, &lt;a href="https://github.com/relaystr/ndk/pull/600">PR #600&lt;/a>은 NIP-46 서명된 필드 보존을 수정하여 원격 signer가 왕복에서 필드를 잃지 않도록 합니다.&lt;/p>
&lt;p>&lt;strong>Pages by Form*&lt;/strong>(&lt;a href="https://github.com/formstr-hq/nostr-docs">repo&lt;/a>)는 &lt;a href="https://pages.formstr.app">pages.formstr.app&lt;/a>에 호스팅된 Formstr의 Nostr 네이티브 협업 문서 앱으로, 이번 주에 암호화 첨부 파일 및 문서 관리 흐름을 강화하는 네 개의 PR을 병합했습니다. &lt;a href="https://github.com/formstr-hq/nostr-docs/pull/37">PR #37&lt;/a>은 암호화된 첨부 파일을 인라인화하여 DOCX, HTML, PDF 내보내기에서 누락된 이미지를 수정합니다: Blossom 서버에서 &lt;code>&amp;lt;encrypted-file&amp;gt;&lt;/code> blob을 가져오고, 저장된 키와 nonce로 AES-GCM 256비트를 사용하여 복호화하고, 이미지 MIME 유형을 검증하고, base64 데이터 URL로 변환하여, 암호화된 형태로 Blossom에만 존재하는 이미지를 내보내기에서 보존합니다. &lt;a href="https://github.com/formstr-hq/nostr-docs/pull/39">PR #39&lt;/a>는 로컬 문서 검색 메커니즘을 추가하고, &lt;a href="https://github.com/formstr-hq/nostr-docs/pull/38">PR #38&lt;/a>은 이름 바꾸기 흐름을 정리하며, &lt;a href="https://github.com/formstr-hq/nostr-docs/pull/40">PR #40&lt;/a>은 공유 백업 처리를 수정합니다.&lt;/p>
&lt;p>&lt;strong>Zap Cooking&lt;/strong>은 사용자에게 보이는 변경 없이 피드 렌더링 프리미티브를 놓는 피드 개편의 첫 단계인 &lt;a href="https://github.com/zapcooking/frontend/pull/396">PR #396&lt;/a>을 병합했습니다. 이 PR은 &lt;code>url&lt;/code>, &lt;code>m&lt;/code>(MIME), &lt;code>dim&lt;/code>(dimensions), &lt;code>blurhash&lt;/code>, &lt;code>alt&lt;/code>, &lt;code>x&lt;/code>(파일 해시), &lt;code>fallback&lt;/code> 슬롯을 읽는 NIP-92 &lt;code>imeta&lt;/code> 태그 파서와, SSR-safe null 대체와 함께 canvas를 통해 PNG 데이터 URL을 생성하는 손으로 이식된 canonical blurhash 디코더(~200 LOC)를 도입합니다. &lt;code>imeta&lt;/code> 태그가 없는 경우 파서는 현재 피드가 이미 사용하는 것과 동일한 휴리스틱을 사용하여 이벤트 콘텐츠에서 원시 이미지 및 비디오 URL을 추출하는 것으로 대체됩니다.&lt;/p>
&lt;p>&lt;strong>Nurunuru&lt;/strong>(ぬるぬる, &lt;code>tami1A84/null--nostr&lt;/code>)는 Rust FFI 엔진을 공유하는 네이티브 Android, iOS, 웹 변형이 있는 Nostr 클라이언트로, &lt;a href="https://github.com/tami1A84/null--nostr/pull/176">PR #176&lt;/a>에서 v1.5.0 Native → Web 동기화를 병합했습니다. 이 동기화는 이미 Android v1.4.9 및 iOS 1.0.4에 출시된 여러 기능 추가를 웹 빌드에 가져옵니다: &lt;a href="https://github.com/tami1A84/null--nostr/pull/176">NotificationModal&lt;/a>은 이제 생일 알림, 상호 팔로우 zap 감지, 커스텀 이모지 반응 알림을 표시합니다; 반응 선택기는 Unicode 기본 반응 빠른 행을 삭제하고 UX를 커스텀 이모지에 집중시킵니다; &lt;code>lib/recommendation.js&lt;/code>의 추천 엔진은 아이콘이나 표시 이름이 없는 사용자를 필터링하고, 백그라운드에서 Recommended를 로드하면서 Following 항목을 우선시합니다. 음성 입력은 반대 방향으로 가는 하나의 기능입니다: 웹 빌드는 이미 ElevenLabs Scribe 스트리밍을 사용하며, v1.5.0은 네이티브 측을 OS 표준 &lt;code>SpeechRecognizer&lt;/code>(Android) 및 &lt;code>SFSpeechRecognizer&lt;/code> + &lt;code>AVAudioEngine&lt;/code>(iOS)로 부분 동기화하는 반면, 전체 네이티브 Scribe 통합은 v1.6으로 연기됩니다.&lt;/p>
&lt;h2 id="프로토콜-및-사양-작업">프로토콜 및 사양 작업&lt;/h2>
&lt;p>**PR &lt;a href="https://github.com/nostr-protocol/nips/pull/2251">#2251&lt;/a>**은 NIP-70 보호된 이벤트 사양을 강화합니다: 이제 보호된 이벤트의 전체 콘텐츠를 임베드하는 리포스트는 릴레이가 거부해야 한다고 명시적으로 명시합니다. NIP-70은 노트 작성자가 자신의 노트가 재게시되는 것에 동의하지 않음을 알리는 &lt;code>-&lt;/code> 태그를 정의합니다. 원래 사양은 릴레이 필터링 동작을 다루었지만 리포스트 사례는 모호하게 남겼습니다. 이 PR은 그 격차를 닫습니다. Citrine의 &lt;a href="https://github.com/greenart7c3/Citrine/pull/151">PR #151&lt;/a>은 같은 주에 릴레이 측에서 강제를 구현합니다.&lt;/p>
&lt;p>**PR &lt;a href="https://github.com/nostr-protocol/nips/pull/1653">#1653&lt;/a>**은 프라이빗 초안 이벤트를 저장하고 동기화하기 위한 Drafts NIP을 제안합니다. 이 제안은 작성자 자신의 키에 대한 &lt;code>draft&lt;/code> 상태와 NIP-44 암호화가 있는 replaceable 이벤트를 사용하여, 클라이언트가 진행 중인 작업을 다른 사람이 볼 수 없이 릴레이에 저장할 수 있게 합니다. 초안 이벤트는 결국의 kind와 태그를 포함한 전체 의도된 게시 이벤트를 암호화된 콘텐츠로 포함합니다.&lt;/p>
&lt;p>**Snapshots(&lt;a href="https://github.com/nostr-protocol/nips/pull/2279">PR #2279&lt;/a>)**는 replaceable Nostr 이벤트의 정확한 한 버전을 보존하기 위한 불변 스냅샷 이벤트를 정의하는 열린 제안입니다. 스냅샷 이벤트는 특정 시점의 replaceable 이벤트의 전체 콘텐츠를 포함하며, replaceable 이벤트의 주소로 다시 링크하는 &lt;code>a&lt;/code> 태그가 있어 모든 이력 버전을 함께 쿼리할 수 있습니다. 이는 릴레이가 이전 버전 유지를 중단한 후에도 관찰자가 이력 상태를 검사할 수 있게 합니다.&lt;/p>
&lt;p>&lt;strong>Namecoin NIP-05 웨이브:&lt;/strong> 이번 주에는 &lt;code>.bit&lt;/code> NIP-05 해결을 Nostr 클라이언트에 추가하기 위한 조정된 push가 있었습니다. NIP 논의 피드는 Aegis(&lt;a href="https://github.com/ZharlieW/Aegis/pull/14">#14&lt;/a>, signer에서 서명 시 검증 추가), nostter(&lt;a href="https://github.com/SnowCait/nostter/pull/2128">#2128&lt;/a>), dart-nostr(&lt;a href="https://github.com/ethicnology/dart-nostr/pull/44">#44&lt;/a>)에 대한 오픈소스 PR과 함께 upstream NIP 초안(&lt;a href="https://github.com/nostr-protocol/nips/pull/2349">PR #2349&lt;/a>)을 캡처했습니다. Aegis PR은 검증을 생산자 측에 배치하는 것으로 주목할 만합니다: signer는 &lt;code>.bit&lt;/code> identity를 주장하는 kind:0 이벤트에 서명하기 전에 Namecoin 체인을 확인하고 불일치 시 사용자에게 경고하여, 이벤트가 어떤 릴레이에도 도달하기 전에 문제를 잡습니다.&lt;/p>
&lt;h2 id="nip-심층-분석-nip-07-windownostr-for-web-browsers">NIP 심층 분석: NIP-07 (window.nostr for Web Browsers)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/07.md">NIP-07&lt;/a>은 브라우저 확장이 웹 애플리케이션에 노출하는 &lt;code>window.nostr&lt;/code> 인터페이스를 정의합니다. 이는 웹에서 가장 널리 배포된 signer 인터페이스이며, Alby, nos2x, Flamingo, horse를 포함한 확장에 의해 구현됩니다.&lt;/p>
&lt;p>인터페이스에는 두 개의 필수 메서드와 여러 선택적 메서드가 있습니다. &lt;code>window.nostr.getPublicKey()&lt;/code>는 private 키를 호출 페이지에 노출하지 않고 사용자의 public 키를 hex 문자열로 반환합니다. &lt;code>window.nostr.signEvent(event)&lt;/code>는 &lt;code>created_at&lt;/code>, &lt;code>kind&lt;/code>, &lt;code>tags&lt;/code>, &lt;code>content&lt;/code>가 있는 부분 이벤트를 받고, &lt;code>id&lt;/code>, &lt;code>pubkey&lt;/code>, &lt;code>sig&lt;/code>가 추가된 완전한 서명된 이벤트를 반환합니다. 핵심은 private 키가 확장의 격리된 컨텍스트를 절대 떠나지 않는다는 것입니다; 웹 애플리케이션은 서명되지 않은 이벤트를 제출하고 서명된 이벤트를 받습니다.&lt;/p>
&lt;p>선택적 메서드는 암호화를 다룹니다: 이전 NIP-04 방식(현재 사용 중단)을 위한 &lt;code>window.nostr.nip04.encrypt&lt;/code> 및 &lt;code>window.nostr.nip04.decrypt&lt;/code>, 그리고 현재 NIP-44 방식을 위한 &lt;code>window.nostr.nip44.encrypt&lt;/code> 및 &lt;code>window.nostr.nip44.decrypt&lt;/code>. 따라서 NIP-44를 지원하는 확장은 호출 페이지가 nsec를 보지 않고도 직접 메시지 암호화와 pubkey 키 암호화가 필요한 다른 애플리케이션 모두를 처리할 수 있습니다.&lt;/p>
&lt;p>사양에는 확장 작성자에 대한 권장 사항도 포함됩니다: 확장 manifest에서 &lt;code>&amp;quot;run_at&amp;quot;: &amp;quot;document_end&amp;quot;&lt;/code>로 스크립트를 로드하여 페이지가 로드될 때 &lt;code>window.nostr&lt;/code>을 동기적으로 사용할 수 있도록 하고, 클라이언트가 확장이 주입하기 전에 &lt;code>window.nostr&lt;/code>을 확인하는 race condition을 피합니다.&lt;/p>
&lt;p>NIP-07의 실행 예시는 위에서 다룬 Keycast 프로젝트입니다. Keycast 웹 프런트엔드는 NIP-98 HTTP auth 이벤트에 서명하기 위해 NIP-07을 사용합니다: SvelteKit 앱은 사용자의 nsec를 직접 처리하지 않습니다. &lt;code>window.nostr.signEvent&lt;/code>를 호출하여 auth 헤더를 생성한 다음, 해당 헤더를 Keycast API로 보냅니다. 이 아키텍처는 전체 팀 키 관리 흐름 동안 키 자료가 브라우저 확장에 유지된다는 것을 의미합니다.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;7f8e9d0c1b2a3e4f5d6c7b8a9f0e1d2c3b4a5f6e7d8c9b0a1f2e3d4c5b6a7f8a&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1747785600&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Hello from a NIP-07 signed event&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2cdd&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="nip-심층-분석-nip-39-external-identities-in-profiles">NIP 심층 분석: NIP-39 (external identities in profiles)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/39.md">NIP-39&lt;/a>는 Nostr 사용자가 자신의 프로필에서 외부 플랫폼 identity에 대한 제어를 선언하는 방법을 정의합니다. 각 선언은 kind:10011 이벤트 내부의 &lt;code>i&lt;/code> 태그를 사용하여, 독립적으로 검증할 수 있는 증명과 함께 다른 플랫폼의 특정 계정에 대한 소유권을 주장합니다.&lt;/p>
&lt;p>각 태그는 &lt;code>[&amp;quot;i&amp;quot;, &amp;quot;platform:identity&amp;quot;, &amp;quot;proof&amp;quot;]&lt;/code> 형식을 따르며, 여기서 &lt;code>platform:identity&lt;/code>는 플랫폼 이름과 사용자명을 콜론 구분자로 결합합니다(&lt;code>github:semisol&lt;/code>, &lt;code>twitter:semisol_public&lt;/code>). &lt;code>proof&lt;/code>는 플랫폼 자체의 검증 가능한 아티팩트를 가리킵니다.&lt;/p>
&lt;p>GitHub의 경우 증명은 Gist ID입니다. 사용자는 자신의 GitHub 계정에서 &lt;code>Verifying that I control the following Nostr public key: npub1...&lt;/code> 텍스트를 포함하는 공개 Gist를 생성합니다. 주장을 검증하는 클라이언트는 &lt;code>https://gist.github.com/&amp;lt;identity&amp;gt;/&amp;lt;proof&amp;gt;&lt;/code>를 가져와서 Gist가 주장된 GitHub 사용자명에 의해 작성되었고 예상 pubkey를 포함하는지 확인합니다. Twitter의 경우 증명은 tweet ID이고, Mastodon의 경우 게시물 ID이며, Telegram의 경우 공개 그룹의 메시지 참조입니다.&lt;/p>
&lt;p>Identity provider 이름은 &lt;code>a-z&lt;/code>, &lt;code>0-9&lt;/code> 및 문자 &lt;code>._-/&lt;/code>만 포함해야 하며 &lt;code>:&lt;/code>를 포함해서는 안 됩니다. Identity 이름은 소문자로 정규화되어야 하며, 여러 개가 존재하는 경우 기본 alias가 사용됩니다.&lt;/p>
&lt;p>이번 주에 진행 중인 Namecoin &lt;code>.bit&lt;/code> NIP-05 논의는 더 넓은 identity 스택에서 NIP-39의 역할을 보여줍니다: 중앙 검증 기관 없이 Nostr 키를 다른 곳의 확립된 identity와 교차 참조하는 표준화된 릴레이 독립적인 방법을 제공합니다. 클라이언트는 명명된 플랫폼의 공개 아티팩트를 가져와서 증명을 독립적으로 검증할 수 있으며, 증명은 제네릭 플랫폼 자격 증명이 아니라 Gist 또는 tweet 텍스트의 특정 Nostr pubkey에 바인딩됩니다.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;7f8e9d0c1b2a3e4f5d6c7b8a9f0e1d2c3b4a5f6e7d8c9b0a1f2e3d4c5b6a7f8a&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1747785600&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">10011&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;i&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;github:semisol&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;9721ce4ee4fceb91c9711ca2a6c9a5ab&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;i&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;twitter:semisol_public&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1619358434134196225&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;i&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;mastodon:bitcoinhackers.org/@semisol&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;109775066355589974&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3eff&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;p>이번 주는 여기까지입니다. 무언가를 만들고 있거나 공유할 소식이 있다면 Nostr에서 DM을 보내거나 &lt;a href="https://nostrcompass.org">nostrcompass.org&lt;/a>에서 찾아주세요.&lt;/p></content:encoded></item><item><title>Nostr Compass #22</title><link>https://nostrcompass.org/ko/newsletters/2026-05-13-newsletter/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2026-05-13-newsletter/</guid><description>&lt;p>Nostr Compass에 오신 것을 환영합니다. Nostr 프로토콜 개발의 주간 가이드입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> Nostr VPN이 7일간 8개의 릴리스를 출시하며 재설계된 기기 페어링 흐름부터 TCP 처리량을 약 두 배로 늘리는 FIPS AEAD 스왑까지 진행했습니다. Marmot Protocol(White Noise의 기반)이 사용자 차단 기능을 완성하는 프론트엔드 릴리스를 출시하고 MDK와 백엔드에서 31개의 PR이 병합되었습니다. Grain이 하나의 마일스톤에 4개의 새로운 NIP 구현을 담은 v0.6.0을 출시했습니다. Citrine이 내장 Tor와 릴레이 집계를 포함한 v3.0.0-pre1을 출시했습니다. Amber가 연결 흐름 및 서명 개선을 포함한 v6.1.0-pre2를 출시했습니다. Alby Hub이 AI 및 에이전트 페이지와 Core Lightning 통합을 포함한 v1.22.2를 출시했습니다. Mostro가 동시 테이커 본드와 mostro-core v0.11.0을 출시했습니다. Jumble이 최근 검색 기록과 계정 데이터 지속성 수정을 포함한 5개의 릴리스를 출시했습니다. Nostrord가 그룹 공유 모달과 Arch Linux 패키지를 포함한 3개의 릴리스를 출시했습니다. Flotilla가 영상 통화, 이메일 렌더링, 룸 언급을 포함한 1.8.0을 출시했습니다. Calendar by Formstr가 예약 스케줄링과 Android 캘린더 동기화를 포함한 v1.5.1을 출시했습니다. Tamagostrich가 sats 보상을 포함한 분산형 NIP-78 다마고치를 출시했습니다.&lt;/p></description><content:encoded>&lt;p>Nostr Compass에 오신 것을 환영합니다. Nostr 프로토콜 개발의 주간 가이드입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> Nostr VPN이 7일간 8개의 릴리스를 출시하며 재설계된 기기 페어링 흐름부터 TCP 처리량을 약 두 배로 늘리는 FIPS AEAD 스왑까지 진행했습니다. Marmot Protocol(White Noise의 기반)이 사용자 차단 기능을 완성하는 프론트엔드 릴리스를 출시하고 MDK와 백엔드에서 31개의 PR이 병합되었습니다. Grain이 하나의 마일스톤에 4개의 새로운 NIP 구현을 담은 v0.6.0을 출시했습니다. Citrine이 내장 Tor와 릴레이 집계를 포함한 v3.0.0-pre1을 출시했습니다. Amber가 연결 흐름 및 서명 개선을 포함한 v6.1.0-pre2를 출시했습니다. Alby Hub이 AI 및 에이전트 페이지와 Core Lightning 통합을 포함한 v1.22.2를 출시했습니다. Mostro가 동시 테이커 본드와 mostro-core v0.11.0을 출시했습니다. Jumble이 최근 검색 기록과 계정 데이터 지속성 수정을 포함한 5개의 릴리스를 출시했습니다. Nostrord가 그룹 공유 모달과 Arch Linux 패키지를 포함한 3개의 릴리스를 출시했습니다. Flotilla가 영상 통화, 이메일 렌더링, 룸 언급을 포함한 1.8.0을 출시했습니다. Calendar by Formstr가 예약 스케줄링과 Android 캘린더 동기화를 포함한 v1.5.1을 출시했습니다. Tamagostrich가 sats 보상을 포함한 분산형 NIP-78 다마고치를 출시했습니다.&lt;/p>
&lt;h2 id="주요-소식">주요 소식&lt;/h2>
&lt;h3 id="nostr-vpn이-v4010에-이르는-8개의-릴리스-출시">Nostr VPN이 v4.0.10에 이르는 8개의 릴리스 출시&lt;/h3>
&lt;p>Nostr 피어 발견을 사용하는 Rust 기반 분산형 메시 VPN인 Nostr VPN이 macOS, Linux, Windows, Android에서 v4.0.1부터 v4.0.10까지 8개의 릴리스를 출시했습니다. v4.0.8의 주요 변경사항: AEAD가 RustCrypto chacha20poly1305 소프트웨어 백엔드에서 ring 0.17의 BoringSSL ChaCha20-Poly1305로 교체되어 aarch64에서는 수동 튜닝된 NEON을, x86_64에서는 AVX2/AVX-512를 사용합니다. 동일한 하드웨어의 Docker 벤치마크에서 2노드 직접 TCP 처리량이 437에서 1097 Mbps로 증가했습니다. v4.0.9는 UDP 전송 경로에 sendmmsg(2) 배치 처리를 추가하여 TCP 단일 스트림을 1066에서 1548 Mbps(1.45×)로 밀어올렸습니다. v4.0.10은 기기 페어링의 전체 UX 개선을 제공했습니다.&lt;/p>
&lt;h3 id="marmot--white-noise가-사용자-차단-완성과-mdk-및-백엔드-31개-pr-병합을-포함한-프론트엔드-릴리스-출시">Marmot / White Noise가 사용자 차단 완성과 MDK 및 백엔드 31개 PR 병합을 포함한 프론트엔드 릴리스 출시&lt;/h3>
&lt;p>White Noise가 5월 7일에 v2026.5.7+24를 출시하여 차단 기능 세트를 완성했습니다. 차단된 사용자는 이제 초대, 채팅 미리보기, 메시지 타임라인, 검색 결과, 알림에서 숨겨지고, 그들의 메시지는 더 이상 읽지 않은 배지에 집계되지 않습니다. MDK는 PR #258로 확장 v3 와이어 포맷과 disappearing_message_secs 스키마를 도입하여 메시지 사라짐 기능의 기반을 마련했습니다.&lt;/p>
&lt;h3 id="grain-v060이-nip-40-nip-50-nip-70-nip-45-추가">Grain v0.6.0이 NIP-40, NIP-50, NIP-70, NIP-45 추가&lt;/h3>
&lt;p>Grain이 5월 6일에 v0.6.0을 출시하며 4개의 새로운 NIP 구현을 추가했습니다. NIP-40 이벤트 만료를 통해 게시자는 만료 타임스탬프를 설정하여 릴레이가 이벤트 만료 후 삭제할 수 있습니다. NIP-50 전문 검색을 통해 클라이언트는 REQ 메시지에서 검색 필터를 발행할 수 있습니다. NIP-70 보호 이벤트는 릴레이가 작성자의 명시적인 허가 없이 이벤트를 재공유하는 것을 방지합니다. NIP-45 카운트 쿼리를 통해 클라이언트는 릴레이에 일치하는 이벤트 수를 반환하도록 요청할 수 있습니다.&lt;/p>
&lt;h2 id="이번-주-출시">이번 주 출시&lt;/h2>
&lt;h3 id="citrine-v300-pre1이-내장-tor와-릴레이-집계-제공">Citrine v3.0.0-pre1이 내장 Tor와 릴레이 집계 제공&lt;/h3>
&lt;p>Citrine이 프라이버시 보호 릴레이 액세스를 위한 내장 Tor 지원과 Citrine이 여러 업스트림 릴레이에서 이벤트를 가져와 로컬 클라이언트에 제공하는 릴레이 집계를 포함한 v3.0.0-pre1을 출시했습니다. PR #139는 효율적인 집합 조정 기반 이벤트 동기화를 위한 NIP-77(Negentropy Reconciliation) 지원을 추가합니다.&lt;/p>
&lt;h3 id="amber-v610-pre2가-새-앱-연결-흐름-개선">Amber v6.1.0-pre2가 새 앱 연결 흐름 개선&lt;/h3>
&lt;p>Amber가 v6.1.0-pre2를 출시했습니다. 주요 수정사항: 서명자 대화상자가 벙커 요청을 수락한 후 올바르게 닫히고, 잘못된 형식의 벙커 요청에는 잘못된 요청 화면이 표시되며, 인텐트 기반 서명 요청에 속도 제한이 추가되었습니다.&lt;/p>
&lt;h3 id="alby-hub-v1222가-ai-및-에이전트-페이지와-core-lightning-지원-추가">Alby Hub v1.22.2가 AI 및 에이전트 페이지와 Core Lightning 지원 추가&lt;/h3>
&lt;p>Alby Hub이 v1.22.2를 출시했습니다. 새로운 AI 및 에이전트 페이지는 Alby Hub의 Lightning 및 NWC 기능을 AI 에이전트와 MCP 호환 도구에 공개합니다. Core Lightning(CLN)이 LND 및 LDK와 함께 지원되는 백엔드가 되었습니다.&lt;/p>
&lt;h3 id="mostro가-동시-테이커-본드와-mostro-core-v0110-출시">Mostro가 동시 테이커 본드와 mostro-core v0.11.0 출시&lt;/h3>
&lt;p>Mostro가 테이커 본드 기능을 진전시키는 11개의 PR을 병합했습니다. PR #733은 여러 테이커가 동시에 본드 인보이스를 제출하고 먼저 잠금을 획득한 자가 이기는 동시 테이커 본드를 구현합니다. mostro-core가 PR #144로 Action::PayBondInvoice와 Status::WaitingTakerBond를 추가하여 v0.11.0을 출시했습니다. mostro-cli가 v0.15.0을 출시했습니다.&lt;/p>
&lt;h3 id="jumble이-최근-검색과-계정-지속성을-포함한-5개의-릴리스-출시">Jumble이 최근 검색과 계정 지속성을 포함한 5개의 릴리스 출시&lt;/h3>
&lt;p>Jumble이 v26.5.2부터 v26.5.6을 출시했습니다. v26.5.5는 최근 검색 기록을 추가합니다. v26.5.6에서 중요한 지속성 버그가 수정되어 계정과 캐시 데이터가 앱 완전 재시작 후에도 유지됩니다.&lt;/p>
&lt;h3 id="nostrord가-그룹-공유-모달-미디어-업로드-arch-linux-패키지-출시">Nostrord가 그룹 공유 모달, 미디어 업로드, Arch Linux 패키지 출시&lt;/h3>
&lt;p>Nostrord가 v1.0.0, v1.0.1, v1.0.2를 출시했습니다. v1.0.1은 AUR을 통해 nostrord-bin으로 PGP 서명 아티팩트, 최신으로 이동 버튼, 채팅에서 이미지/미디어 붙여넣기를 포함한 Arch Linux 패키지를 출시했습니다. v1.0.2는 PR #49를 통해 nostr:naddr URI와 nostrord.com/open/ 링크를 모두 생성하는 공유 모달로 그룹 공유를 추가합니다.&lt;/p>
&lt;h3 id="fips-v030이-크로스-플랫폼-지원-nostr-피어-발견-수정되지-않은-lan을-위한-게이트웨이-출시">FIPS v0.3.0이 크로스 플랫폼 지원, Nostr 피어 발견, 수정되지 않은 LAN을 위한 게이트웨이 출시&lt;/h3>
&lt;p>FIPS가 Linux 전용에서 Linux, macOS, Windows, OpenWrt로 확장하는 주요 마일스톤인 v0.3.0을 출시했습니다. 노드는 이제 공개 Nostr 릴레이에서 kind:37195 파라미터화 교체 가능 이벤트로 서명된 오버레이 광고를 게시합니다. Nostr VPN 처리량 향상을 이끈 동일한 ring 0.17 ChaCha20-Poly1305 스왑이 FIPS v0.3.0에도 적용됩니다.&lt;/p>
&lt;h3 id="camelus-v1101이-데스크톱-빌드-출시">Camelus v1.10.1이 데스크톱 빌드 출시&lt;/h3>
&lt;p>Camelus가 Windows와 Linux 데스크톱 빌드를 포함한 v1.10.1을 출시하여 모바일 전용 배포에서 확장했습니다.&lt;/p>
&lt;h3 id="flotilla-180이-영상-통화-이메일-렌더링-룸-언급-출시">Flotilla 1.8.0이 영상 통화, 이메일 렌더링, 룸 언급 출시&lt;/h3>
&lt;p>Flotilla가 1.8.0을 출시했습니다. 보이스 룸이 이제 영상을 지원하여 참가자가 통화 중 카메라를 켜거나 화면을 공유할 수 있습니다. welshman 라이브러리 업데이트를 통해 이메일 렌더링이 추가되었습니다. 룸 언급을 통해 사용자는 클릭 가능한 인라인 링크로 다른 룸과 릴레이를 참조할 수 있습니다.&lt;/p>
&lt;h3 id="calendar-by-formstr가-예약-스케줄링과-android-캘린더-동기화를-포함한-v151-출시">Calendar by Formstr가 예약 스케줄링과 Android 캘린더 동기화를 포함한 v1.5.1 출시&lt;/h3>
&lt;p>Calendar by Formstr가 5월 10일에 v1.5.0을, 5월 11일에 v1.5.1을 출시했습니다. 예약 스케줄링을 통해 사용자는 예약 가능한 시간대를 만들 수 있습니다. 읽기 전용 Android 캘린더 통합이 Nostr 이벤트를 기기 캘린더와 동기화합니다.&lt;/p>
&lt;h2 id="개발-중">개발 중&lt;/h2>
&lt;h3 id="amethyst가-예약-게시물-nip-9a-커뮤니티-규칙-데스크톱-로컬-릴레이-추가">Amethyst가 예약 게시물, NIP-9A 커뮤니티 규칙, 데스크톱 로컬 릴레이 추가&lt;/h3>
&lt;p>Amethyst가 이번 주 78개의 PR을 병합했습니다. 예약 게시물이 PR #2765에서 구현됩니다. PR #2841에서 데스크톱 빌드가 SQLite 이벤트 지속성을 가진 내장 로컬 릴레이를 얻습니다. NIP-9A 커뮤니티 규칙을 구현하는 3개의 PR: PR #2798은 전송 전에 커뮤니티 규칙에 대해 게시물을 검증하고, PR #2799는 구조화된 NIP-9A 규칙 편집기를 추가하며, PR #2800은 옵트인 NIP-9A 피드 필터를 추가합니다.&lt;/p>
&lt;h3 id="shopstr가-mcp-감사-로깅과-세션-보안-추가">Shopstr가 MCP 감사 로깅과 세션 보안 추가&lt;/h3>
&lt;p>Shopstr가 5개의 PR을 병합했습니다. MCP 도구 레이어의 감사 로깅이 PR #456에서 구현됩니다. PR #477에서 세션 보안이 강화되어 원본 API 키에 세션을 고정하고 TTL 제거가 추가됩니다.&lt;/p>
&lt;h3 id="dart-ndk가-웹-지원과-시일-서명-검증-추가">Dart NDK가 웹 지원과 시일 서명 검증 추가&lt;/h3>
&lt;p>Dart NDK가 6개의 PR을 병합했습니다. PR #571에서 SembastCacheManager에 웹 지원이 추가됩니다. NIP-59 Gift Wrap 흐름의 시일 서명 검증이 PR #595에서 구현됩니다.&lt;/p>
&lt;h2 id="새로운-프로젝트">새로운 프로젝트&lt;/h2>
&lt;h3 id="tamagostrich가-sats-보상을-포함한-분산형-nip-78-다마고치-출시">Tamagostrich가 sats 보상을 포함한 분산형 NIP-78 다마고치 출시&lt;/h3>
&lt;p>Tamagostrich는 IDENTITY Hackathon 2026에서 출시된 브라우저 기반 가상 펫 게임으로, 아기 타조 Nori가 Nostr 소셜 활동을 통해 성장합니다. 펫 상태는 크로스 기기 동기화를 위해 NIP-78 kind:30078 이벤트에 저장됩니다. 마일스톤 보상은 NIP-47을 통해 sats로 지급됩니다: 레벨 5에서 50 sats, 레벨 10에서 210 sats, 최대 레벨 21에서 420 sats가 사용자의 lud16 주소로 전송됩니다.&lt;/p>
&lt;h2 id="프로토콜-및-사양-작업">프로토콜 및 사양 작업&lt;/h2>
&lt;p>이번 주 5개의 새로운 제안이 개설되었습니다.&lt;/p>
&lt;p>PR #2331은 NIP-9A: 검증 가능한 커뮤니티 규칙을 제안하며, 기계 판독 가능한 암호화 서명 커뮤니티 규칙 문서를 위한 kind:34551을 도입합니다.&lt;/p>
&lt;p>PR #2335는 Nostr 마켓플레이스를 위한 예약 이벤트를 제안하며, kind:32122(파라미터화 교체 가능 예약 이벤트), kind:1326(추가 전용 전환 감사 레코드), kind:32124(거래 후 리뷰)를 정의합니다. 협상은 NIP-59 gift-wrapped 메시지를 통해 비공개로 진행됩니다.&lt;/p>
&lt;p>PR #2334는 Nostr 마켓플레이스를 위한 에스크로 서비스를 제안하며, 에스크로 운영자가 EVM 계약 주소와 수수료 일정을 선언하기 위한 kind:30303을 사용합니다.&lt;/p>
&lt;p>PR #2333은 NIP-99 마켓플레이스 리스팅을 위한 숙박 리스팅 프로필을 제안하며, 단기 임대 리스팅을 위한 H3 지리공간 인덱스 g 태그로 NIP-99를 확장합니다.&lt;/p>
&lt;p>PR #2332는 NIP-BC: 온체인 Zaps(kind 8333)를 제안하며, Nostr 키와 Bitcoin Taproot 주소 간의 직접적인 동일성을 활용합니다. kind 번호는 NIP-57을 반영합니다: 9735는 Lightning P2P 포트, 8333은 Bitcoin 메인넷의 P2P 포트입니다.&lt;/p>
&lt;h2 id="nip-심층-분석-nip-78-앱별-데이터">NIP 심층 분석: NIP-78 (앱별 데이터)&lt;/h2>
&lt;p>NIP-78은 애플리케이션이 Nostr 이벤트를 사용하여 사용자를 대신하여 임의의 비공개 또는 공개 데이터를 저장하는 표준 방법을 정의합니다. 핵심 이벤트 종류는 30078으로, d 태그가 애플리케이션 정의 식별자 문자열인 파라미터화 교체 가능 이벤트입니다. 애플리케이션은 저장 슬롯에 고유한 d 태그를 부여하고 지속해야 하는 JSON 또는 텍스트 콘텐츠를 포함한 30078 이벤트를 게시합니다. 주요 동기는 중앙 서버 없는 크로스 기기 동기화입니다. 비공개 애플리케이션 데이터의 경우 NIP-78 이벤트는 게시 전에 NIP-44를 사용하여 콘텐츠 필드를 암호화할 수 있습니다. 현재 사용자로는 Tamagostrich(펫 상태 동기화), Wisp(지갑 백업 및 보안 설정), NosPress(CMS 오케스트레이션 상태), 여러 Nostr 클라이언트 설정 동기화 구현이 있습니다.&lt;/p>
&lt;hr>
&lt;p>주요 소스:&lt;/p>
&lt;ul>
&lt;li>NIP-78 사양: &lt;a href="https://github.com/nostr-protocol/nips/blob/master/78.md">https://github.com/nostr-protocol/nips/blob/master/78.md&lt;/a>&lt;/li>
&lt;li>Tamagostrich: &lt;a href="https://github.com/Negr087/tamagostrich">https://github.com/Negr087/tamagostrich&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>관련 항목: NIP-51 Lists, NIP-65 Relay List Metadata&lt;/p>
&lt;h2 id="nip-심층-분석-nip-98-http-인증">NIP 심층 분석: NIP-98 (HTTP 인증)&lt;/h2>
&lt;p>NIP-98은 Nostr 키 쌍이 HTTP 서버에 대한 요청을 승인할 수 있게 하는 HTTP 인증 체계를 정의하여 사용자 이름, 비밀번호, OAuth 토큰을 제거합니다. 클라이언트는 kind 27235의 단기 Nostr 이벤트를 구성하고, 개인 키로 서명하고, JSON을 base64로 인코딩하여 Authorization: Nostr &lt;base64> HTTP 헤더로 전송합니다. kind 27235 이벤트는 method 태그에 HTTP 메서드, u 태그에 전체 요청 URL, created_at 타임스탬프를 포함합니다. 서버는 서명을 검증하고, 메서드와 URL이 일치하는지 확인하며, 리플레이 공격을 방지하기 위해 타임스탬프가 최근 것인지 확인합니다. NIP-98은 Blossom(BUD-01)의 블롭 업로드 인증, Routstr의 요청별 API 액세스 제어, Sprout의 git 전송 인증, Alby Hub의 관리자 API 인증에 사용됩니다.&lt;/p>
&lt;hr>
&lt;p>주요 소스:&lt;/p>
&lt;ul>
&lt;li>NIP-98 사양: &lt;a href="https://github.com/nostr-protocol/nips/blob/master/98.md">https://github.com/nostr-protocol/nips/blob/master/98.md&lt;/a>&lt;/li>
&lt;li>BUD-01: &lt;a href="https://github.com/hzrd149/blossom/blob/master/buds/01.md">https://github.com/hzrd149/blossom/blob/master/buds/01.md&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>관련 항목: NIP-96 HTTP File Storage Integration&lt;/p>
&lt;hr>
&lt;p>이번 주는 여기까지입니다. 무언가를 만들고 있거나 공유할 소식이 있다면, Nostr에서 DM을 보내거나 nostrcompass.org에서 찾아보세요.&lt;/p></content:encoded></item><item><title>Nostr Compass #21</title><link>https://nostrcompass.org/ko/newsletters/2026-05-06-newsletter/</link><pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2026-05-06-newsletter/</guid><description>&lt;p>Nostr Compass에 오신 것을 환영합니다. Nostr의 주간 가이드입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> Marmot Protocol이 첫 번째 MIP-05 알림 프리미티브, 주소 지정 가능한 NIP-51 키 패키지, 강화된 보안 검토를 포함한 MDK 0.8.0을 출시했습니다. LaWallet NWC가 OpenSats 펀딩 이후 최대 릴리스인 v0.10.0을 출시하며, 완전한 관리자 대시보드, 사용자 지갑, 종단간 활동 로그, 새로운 LightningAddress 1→N 및 NWCConnection 스키마를 제공합니다. Amethyst가 JWT 갱신 중 오디오 끊김 제거, 수명주기 인식 키 데이터 구독, 릴레이 keep-alive 재연결, 애니메이션 발언 참가자 표시기를 포함한 Nests 안정화 스프린트를 진행했습니다. ngit가 PR 제출을 위한 GRASP 서버 감지 수정과 멀티 리모트 상태 이벤트 필터링을 수정한 v2.4.2와 v2.4.3을 출시했습니다. GRAIN이 프로덕션 강화와 자동 데이터 손실 수정을 포함한 v0.5.4를 출시했습니다. Mostro Core가 PGP 서명 릴리스 아티팩트를 포함한 v0.10.1을 출시했습니다. Clave가 iOS에서 멀티 계정 지원을 포함한 v0.2.0을 출시했습니다.&lt;/p></description><content:encoded>&lt;p>Nostr Compass에 오신 것을 환영합니다. Nostr의 주간 가이드입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> Marmot Protocol이 첫 번째 MIP-05 알림 프리미티브, 주소 지정 가능한 NIP-51 키 패키지, 강화된 보안 검토를 포함한 MDK 0.8.0을 출시했습니다. LaWallet NWC가 OpenSats 펀딩 이후 최대 릴리스인 v0.10.0을 출시하며, 완전한 관리자 대시보드, 사용자 지갑, 종단간 활동 로그, 새로운 LightningAddress 1→N 및 NWCConnection 스키마를 제공합니다. Amethyst가 JWT 갱신 중 오디오 끊김 제거, 수명주기 인식 키 데이터 구독, 릴레이 keep-alive 재연결, 애니메이션 발언 참가자 표시기를 포함한 Nests 안정화 스프린트를 진행했습니다. ngit가 PR 제출을 위한 GRASP 서버 감지 수정과 멀티 리모트 상태 이벤트 필터링을 수정한 v2.4.2와 v2.4.3을 출시했습니다. GRAIN이 프로덕션 강화와 자동 데이터 손실 수정을 포함한 v0.5.4를 출시했습니다. Mostro Core가 PGP 서명 릴리스 아티팩트를 포함한 v0.10.1을 출시했습니다. Clave가 iOS에서 멀티 계정 지원을 포함한 v0.2.0을 출시했습니다.&lt;/p>
&lt;h2 id="주요-소식">주요 소식&lt;/h2>
&lt;h3 id="mdk-080이-mip-05-알림-프리미티브와-주소-지정-가능한-키-패키지-추가">MDK 0.8.0이 MIP-05 알림 프리미티브와 주소 지정 가능한 키 패키지 추가&lt;/h3>
&lt;p>Marmot 프로토콜의 Rust 핵심 라이브러리인 MDK가 5월 4일에 v0.8.0을 출시했습니다. 이번 릴리스는 첫 번째 MIP-05 알림 빌딩 블록을 포함하며, MIP-00 키 패키지를 주소 지정 가능한 이벤트로 이전하여 사용자의 키 패키지를 제자리에서 교체할 수 있게 합니다. 혼합 버전 그룹 호환성을 개선하고, 모바일 바인딩을 위한 UniFFI 커버리지를 확장하며, 관리자 작업, 커밋, 저장소, 암호화 경계, 리플레이 처리에 대한 유효성 검사 경로를 강화합니다. MIP-05 프리미티브에는 PR #235에 추가된 리프 인덱스 헬퍼가 포함되어 있으며, 이는 다운스트림 클라이언트에게 그룹 구조를 노출하지 않고 수신자별 푸시 알림을 전달하기에 충분한 정보를 제공합니다. PR #273은 mdk-core crates.io 게시를 복원하고, PR #269는 외부 클라이언트 테스트 스위트가 Marmot의 테스트 하네스를 공유할 수 있도록 test-utils Cargo 기능 뒤에 test_util 모듈을 노출합니다.&lt;/p>
&lt;h3 id="lawallet-nwc-v0100이-전체-모노레포와-사용자-지갑-출시">LaWallet NWC v0.10.0이 전체 모노레포와 사용자 지갑 출시&lt;/h3>
&lt;p>LaWallet 팀의 NIP-47 Nostr Wallet Connect 구현인 LaWallet NWC가 4월 30일에 v0.10.0을 출시했습니다. 이것은 프로젝트가 OpenSats 펀딩을 받은 이후 최대 릴리스입니다. 전체 모노레포, 완전한 관리자 대시보드, 사용자 지갑, 종단간 활동 로그, 동적 브랜딩, 새로운 LightningAddress 1→N 및 NWCConnection 스키마를 제공합니다. PR #191에서 출시된 사용자 대면 지갑은 온보딩, 홈, 송수신, 스캔, 통화, 활동 피드, 오프라인 캐시를 포함합니다.&lt;/p>
&lt;h3 id="amethyst가-keep-alive-jwt-복원력-수명주기-구독으로-nests-안정화">Amethyst가 keep-alive, JWT 복원력, 수명주기 구독으로 Nests 안정화&lt;/h3>
&lt;p>기능이 풍부한 Android 클라이언트인 Amethyst가 프로덕션에서 통화를 끊는 실패 모드에 초점을 맞춘 안정화 스프린트와 함께 NIP-53 Nests 오디오룸 작업을 계속했습니다. PR #2733의 오디오 끊김 수정은 JWT 갱신 중 활성 스트림과 새 자격증명 취득을 겹칩니다. PR #2730의 새로운 keep-alive 메커니즘이 수동 사용자 작업 없이 끊어진 릴레이를 재연결하고, PR #2728은 레거시 KeyDataSourceSubscription을 LifecycleAwareKeyDataSourceSubscription으로 교체합니다. PR #2724는 멀티 스피커 세션에서 발언 중인 참가자를 강조하는 애니메이션 외부 링 표시기를 추가합니다.&lt;/p>
&lt;h3 id="ngit-v242와-v243이-grasp-서버-감지와-멀티-리모트-상태-이벤트-수정">ngit v2.4.2와 v2.4.3이 GRASP 서버 감지와 멀티 리모트 상태 이벤트 수정&lt;/h3>
&lt;p>NIP-34 협업을 위한 명령줄 도구 및 git 플러그인인 ngit가 4월 28일에 v2.4.2를, 5월 1일에 v2.4.3을 출시했습니다. v2.4.2는 repo_grasps가 정규화된 호스트명을 포함하지만 비교가 전체 클론 URL에 대해 이루어지던 URL 정규화 불일치를 수정합니다. v2.4.3은 저장소가 같은 식별자를 공유하는 여러 nostr:// 리모트를 가질 때 발생하는 상태 이벤트 모호성을 수정합니다.&lt;/p>
&lt;h3 id="grain-v054가-프로덕션-강화와-자동-데이터-손실-수정-제공">GRAIN v0.5.4가 프로덕션 강화와 자동 데이터 손실 수정 제공&lt;/h3>
&lt;p>Go 기반 Nostr 릴레이 및 클라이언트 라이브러리인 GRAIN이 4월 30일에 v0.5.4를 출시했습니다. 이번 릴리스에는 v0.5.3 이후 누적된 6가지 수정 사항이 포함되며, 컨테이너 재시작 시 이전에 이벤트를 삭제하던 Docker 빠른 시작의 자동 데이터 손실 버그와 주소 지정 가능한 이벤트 읽기의 저장소 레이어 정확성 버그가 수정됩니다.&lt;/p>
&lt;h3 id="mostro-core-v0101이-pgp-서명-릴리스-아티팩트-추가">Mostro Core v0.10.1이 PGP 서명 릴리스 아티팩트 추가&lt;/h3>
&lt;p>Mostro 데몬의 P2P 기능을 제공하는 Rust 라이브러리인 Mostro Core가 4월 28일에 v0.10.1을 출시했습니다. 새 릴리스는 PGP 서명 릴리스 아티팩트와 릴리스 검증 흐름을 추가하여 다운스트림 패키저가 아티팩트 출처를 확인할 수 있게 합니다.&lt;/p>
&lt;h2 id="릴리스">릴리스&lt;/h2>
&lt;h3 id="clave-v020이-nip-46nostr-connect-서명으로-ios에서-멀티-계정-지원-출시">Clave v0.2.0이 NIP-46(Nostr Connect) 서명으로 iOS에서 멀티 계정 지원 출시&lt;/h3>
&lt;p>iOS NIP-46 원격 서명 앱인 Clave가 5월 5일에 v0.2.0을 출시했습니다. 가장 큰 업데이트는 멀티 계정 지원입니다: Clave는 이제 하나의 기기에서 최대 4개의 계정을 보유할 수 있으며, 원탭 전환기와 계정별 격리를 제공합니다. PR #23은 멀티 계정을 위한 iOS 배관을 추가하고, PR #22는 APNs 페이로드에 signer_pubkey 필드를 추가하여 기기가 원격 서명 요청이 어느 계정에 속하는지 알 수 있게 합니다.&lt;/p>
&lt;h3 id="wisp가-v103--v105-안정화-작업-출시">Wisp가 v1.0.3 → v1.0.5 안정화 작업 출시&lt;/h3>
&lt;p>Android 클라이언트인 Wisp가 5월 4일에 v1.0.3, v1.0.4, v1.0.5를 출시하며 안정화 작업을 진행했습니다. PR #506은 전체 미디어 로딩 중 흐린 이미지 미리보기를 위한 Thumbhash를 추가하고, PR #514는 하단 탭 전환 끊김을 줄입니다.&lt;/p>
&lt;h3 id="amber-610-pre1이-레이아웃-및-안정성-수정-출시">Amber 6.1.0-pre1이 레이아웃 및 안정성 수정 출시&lt;/h3>
&lt;p>NIP-55 및 NIP-46용 Android 서명 앱인 Amber가 새 앱 연결 흐름의 레이아웃 패스와 여러 충돌 수정을 포함한 v6.1.0-pre1을 출시했습니다. PR #416은 ActivityStatsBar 레이아웃과 텍스트 오버플로우 문제를 수정합니다.&lt;/p>
&lt;h3 id="routstr-core-v043이-결제-환불-사용-보고-개선">Routstr Core v0.4.3이 결제, 환불, 사용 보고 개선&lt;/h3>
&lt;p>Routstr Core가 5월 1일에 결제 및 환불 처리, 비용 추적, 사용 보고 개선을 포함한 v0.4.3 사전 릴리스를 출시했습니다.&lt;/p>
&lt;h3 id="nostria-v3137에서-v3141이-웹-북마크와-자동-테마-추가">Nostria v3.1.37에서 v3.1.41이 웹 북마크와 자동 테마 추가&lt;/h3>
&lt;p>멀티 플랫폼 Nostr 클라이언트인 Nostria가 NIP-B0 웹 북마크 지원, 기기 설정을 따르는 자동 테마, 앱 내 PDF 보기를 추가하며 v3.1.37에서 v3.1.41을 출시했습니다.&lt;/p>
&lt;h3 id="noornote-v089가-데스크톱-첫-실행-빈-화면-수정">NoorNote v0.8.9가 데스크톱 첫 실행 빈 화면 수정&lt;/h3>
&lt;p>NoorNote가 4월 28일에 데스크톱 앱의 첫 실행 시 빈 화면 버그를 수정한 v0.8.9를 출시했습니다.&lt;/p>
&lt;h3 id="kubo-v034에서-v041이-부모-통제와-web-of-trust-피드-큐레이션을-갖춘-아동-안전-nostr-비디오-플랫폼-출시">Kubo v0.3.4에서 v0.4.1이 부모 통제와 Web of Trust 피드 큐레이션을 갖춘 아동 안전 Nostr 비디오 플랫폼 출시&lt;/h3>
&lt;p>Nostr 기반의 아동 안전 비디오 플랫폼인 Kubo가 5월 4일과 5일에 걸쳐 v0.3.4에서 v0.4.1을 출시했습니다. 각 어린이는 별도의 Nostr 키 쌍과 비디오 중심 피드를 받으며, 부모는 시간 제한(일일 15~180분), 허용 시간 창, 게시 작업 가시성을 통제합니다.&lt;/p>
&lt;h2 id="미출시-변경사항">미출시 변경사항&lt;/h2>
&lt;h3 id="sprout가-desktop-v004와-v005-nip-oa-에이전트-인증-페어링-릴레이-사이드카-출시">Sprout가 Desktop v0.0.4와 v0.0.5, NIP-OA 에이전트 인증, 페어링 릴레이 사이드카 출시&lt;/h3>
&lt;p>Block의 내장 릴레이가 있는 Nostr 클라이언트인 Sprout가 5월 5일에 Desktop v0.0.4를, 5월 6일에 v0.0.5를 출시했습니다. PR #471은 NIP-OA 에이전트 인증을 릴레이의 NIP-43 멤버십 흐름에 연결하여 자율 에이전트가 특정 인간 공개키가 자신의 작업을 승인했음을 증명할 수 있게 합니다. NIP-AB 기기 페어링을 위한 새로운 임시 사이드카 릴레이가 PR #467에서 sprout-pair-relay로 도착합니다.&lt;/p>
&lt;h3 id="nostream이-marmot-릴레이-지원과-nip-25-반응-추가">nostream이 Marmot 릴레이 지원과 NIP-25 반응 추가&lt;/h3>
&lt;p>Node.js 릴레이 구현인 nostream이 PR #602에서 MIPs 00부터 03을 포함하는 Marmot Protocol 릴레이 지원을, PR #589에서 NIP-25 반응 지원을, PR #586에서 #g 필터를 위한 지오해시 접두사 매칭을 병합했습니다.&lt;/p>
&lt;h3 id="strfry가-연결별-관찰-가능성-추가-및-nofiles-한도-감소">strfry가 연결별 관찰 가능성 추가 및 nofiles 한도 감소&lt;/h3>
&lt;p>C++ Nostr 릴레이인 strfry가 관찰 가능성을 대상으로 한 14개의 PR을 병합했습니다. PR #218은 연결별 보류 중인 아웃바운드 관찰 가능성과 구성 가능한 배압 한도를 추가합니다. PR #224는 이벤트별 모니터 팬아웃에서 std::function 힙 할당을 제거합니다.&lt;/p>
&lt;h3 id="damus가-tenor-gif를-purple-프록시로-교체하고-압축-ux-출시">Damus가 Tenor GIF를 Purple 프록시로 교체하고 압축 UX 출시&lt;/h3>
&lt;p>Damus가 Tenor GIF 통합을 Damus Purple 프록시로 교체하는 PR #3737을 병합했습니다.&lt;/p>
&lt;h3 id="primal-android가-탐색-알림-nip-05-인증-배지-개선">Primal Android가 탐색, 알림, NIP-05 인증 배지 개선&lt;/h3>
&lt;p>Primal Android가 _@domain 식별자를 가진 사용자의 깜박이는 NIP-05 인증 배지를 수정하는 PR #1043을 병합했습니다.&lt;/p>
&lt;h3 id="alby-hub이-앱-연결에서-nwc-결제-추가">Alby Hub이 앱 연결에서 NWC 결제 추가&lt;/h3>
&lt;p>Alby Hub이 앱 연결에서의 결제를 허용하는 PR #2267을 병합했습니다.&lt;/p>
&lt;h3 id="routstrd-auth-nip-98-인증과-npub-rbac를-갖춘-팀용-도커화-routstrd">routstrd-auth: NIP-98 인증과 npub RBAC를 갖춘 팀용 도커화 Routstrd&lt;/h3>
&lt;p>4월 27일에 생성된 routstrd-auth는 npub 기반 역할 기반 액세스 제어와 NIP-98 HTTP 인증을 갖춘 멀티 사용자 팀 배포를 위한 Routstrd의 도커화 변형입니다.&lt;/p>
&lt;h3 id="routstrd가-데몬-클라이언트와-원격-모드를-위해-hermes-통합">Routstrd가 데몬 클라이언트와 원격 모드를 위해 Hermes 통합&lt;/h3>
&lt;p>Routstrd가 Hermes Agent와의 통합을 추가하는 PR #22를 병합하여 에이전트의 구성 파일이 Routstrd가 Nostr를 통해 발견하는 모델 제공업체와 API 키로 채워집니다.&lt;/p>
&lt;h3 id="whitenoise-rs가-계정별-데이터베이스-격리와-제안-업그레이드-출시">whitenoise-rs가 계정별 데이터베이스 격리와 제안 업그레이드 출시&lt;/h3>
&lt;p>whitenoise-rs가 메시지 프로젝션 테이블을 계정별 데이터베이스로 이동하는 PR #796을 병합하고, PR #791은 그룹이 새로운 제안 유형으로 기능을 확장할 수 있는 제안 업그레이드를 추가합니다.&lt;/p>
&lt;h3 id="angor-0221이-컴팩트-앱-흐름과-키-제공자-및-네트워크-전환-강화-출시">Angor 0.2.21이 컴팩트 앱 흐름과 키 제공자 및 네트워크 전환 강화 출시&lt;/h3>
&lt;p>Angor가 5월 6일에 모바일 디자인 성능 개선, 컴팩트 앱 흐름, 보안 키 제공자를 포함한 0.2.21을 출시했습니다.&lt;/p>
&lt;h2 id="새로-추적-및-발견">새로 추적 및 발견&lt;/h2>
&lt;h3 id="bitmacro-signer-클라이언트-측-키-암호화를-갖춘-자체-호스팅-가능한-nip-46-벙커">BitMacro Signer: 클라이언트 측 키 암호화를 갖춘 자체 호스팅 가능한 NIP-46 벙커&lt;/h3>
&lt;p>BitMacro Signer는 NIP-46 벙커 모델을 사용하는 자체 호스팅 가능한 Nostr 서명 도구입니다. 키는 저장 전에 클라이언트에서 암호화되어 서버는 평문을 보유하지 않습니다.&lt;/p>
&lt;p>NIP-34 저장소 발견이 이번 주 26개의 새로운 저장소 발표를 발견했으며, 그 중 4개가 두드러집니다.&lt;/p>
&lt;h3 id="gnostr-nostr-위에-직접-구축된-git-구현">gnostr: Nostr 위에 직접 구축된 git 구현&lt;/h3>
&lt;p>gnostr는 Nostr 위에 직접 구축된 git 구현으로, 처음부터 만들어진 Nostr 네이티브 버전 제어 클라이언트로서 자체 작업 트리 명령어를 제공합니다.&lt;/p>
&lt;h3 id="nostr-archive-nostr와-blossom-위의-내용-주소-지정-아카이브-사양">nostr-archive: Nostr와 Blossom 위의 내용 주소 지정 아카이브 사양&lt;/h3>
&lt;p>nostr-archive는 Nostr와 Blossom 위의 내용 주소 지정 아카이브를 위한 초안 사양 및 참조 구현입니다.&lt;/p>
&lt;h3 id="flower-cache-로컬-blossom-캐시-서버">flower-cache: 로컬 Blossom 캐시 서버&lt;/h3>
&lt;p>flower-cache는 원격 Blossom 서버의 블롭 세트의 핫 로컬 미러를 원하는 클라이언트에 유용한 로컬 Blossom 캐시 서버입니다.&lt;/p>
&lt;h3 id="micro-vpn-ansible-nip-34를-통한-vpn-배포를-위한-ansible-플레이북">micro-vpn-ansible: NIP-34를 통한 VPN 배포를 위한 Ansible 플레이북&lt;/h3>
&lt;p>micro-vpn-ansible은 NIP-34 저장소로 호스팅되는 마이크로 VPN 배포를 위한 소규모 Ansible 플레이북 모음입니다.&lt;/p>
&lt;h2 id="프로토콜-작업">프로토콜 작업&lt;/h2>
&lt;h3 id="nip-업데이트">NIP 업데이트&lt;/h3>
&lt;ul>
&lt;li>Nostr 위의 브로커리스 해시레이트 시장 (초안 제안): 현재 해시레이트 시장 참여자들이 사용자를 KYC하는 위탁 브로커라고 주장하는 익명 초안 NIP. Nostr 이벤트 위의 P2P 해시레이트 시장을 제안합니다.&lt;/li>
&lt;li>Curated Feeds: DVM 피드의 더 간단한 대안 (초안 제안): NIP-90 DVM이 간단한 피드 큐레이션에 너무 무겁다고 주장하며, 순서 있는 이벤트 ID 목록을 가진 얇은 주소 지정 가능한 이벤트를 대신 제안합니다.&lt;/li>
&lt;li>Profile Colors: 결정론적 시각적 정체성 (초안 제안): 클라이언트 전반에 걸쳐 일관된 시각적 정체성을 위해 Nostr 공개키에서 결정론적 읽기 가능한 색상을 파생하는 새로운 NIP 초안.&lt;/li>
&lt;li>Namecoin-Track NIPs: 정체성, 릴레이, TLS, 평판 고정 (초안 클러스터): Nostr 스택 요소를 Namecoin 고정 레코드로 이동하는 초안 NIP 클러스터.&lt;/li>
&lt;/ul>
&lt;h2 id="nip-심층-분석-nip-34-git-stuff">NIP 심층 분석: NIP-34 (git stuff)&lt;/h2>
&lt;p>NIP-34는 Nostr 릴레이에서 git 저장소, 패치, 풀 리퀘스트, 이슈, 병합 상태를 호스팅하기 위한 이벤트 종류를 정의합니다. 저장소는 kind 30617 주소 지정 가능한 이벤트로 발표됩니다. 패치는 git format-patch 출력을 전달하는 kind 1617을 사용합니다. 풀 리퀘스트는 kind 1618을 사용합니다. 이슈는 마크다운 콘텐츠와 함께 kind 1621을 사용합니다. 상태 이벤트는 스레드를 Open(1630), Applied/Merged 또는 Resolved(1631), Closed(1632), Draft(1633) 사이에서 이동시킵니다. 이번 주 NIP-34 소식은 지난 주 GitWorkshop v2 출시와 같습니다: 브라우저 내 PR 병합 버튼이 작동하는 이유는 GRASP 서버, ngit, nostr:// 클론 URL 스키마가 완전히 분산된 포지의 루프를 함께 닫기 때문입니다.&lt;/p>
&lt;h2 id="nip-심층-분석-nip-53-live-activities">NIP 심층 분석: NIP-53 (Live Activities)&lt;/h2>
&lt;p>NIP-53은 Nostr의 라이브 활동을 위한 표준 이벤트 표면을 정의합니다: 라이브 스트림, 영구 미팅 공간, 예약된 컨퍼런스 이벤트, 청취자 존재, 라이브 채팅. 라이브 스트림은 kind 30311 주소 지정 가능한 이벤트로 발표됩니다. NIP-53은 영구 룸과 그 안에서 열리는 예약된 이벤트를 분리합니다: kind 30312 Meeting Space는 룸을 정의하고, kind 30313 Conference Event는 해당 룸의 예약되거나 진행 중인 미팅을 나타냅니다. Nostr 라이브 활동 표면은 의도적으로 얇습니다: NIP-53은 활동을 발표하고, 다른 NIP들이 zaps(NIP-57), zap 목표(NIP-75), 비디오 녹화(NIP-71)와 같은 인접 관심사를 처리합니다.&lt;/p>
&lt;hr>
&lt;p>이번 주는 여기까지입니다. 무언가를 만들고 있거나 공유할 소식이 있다면, Nostr에서 DM을 보내거나 nostrcompass.org에서 찾아보세요.&lt;/p></content:encoded></item><item><title>Nostr Compass #20</title><link>https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/</link><pubDate>Wed, 29 Apr 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/</guid><description>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr에 대한 주간 가이드입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#gitworkshop-ships-in-browser-pr-merge-repository-following-and-a-bandwidth-efficient-git-explorer">GitWorkshop&lt;/a>은 브라우저 내 PR 병합 버튼, Stars 및 저장소 팔로우, 대역폭 효율적인 git 탐색기, kind &lt;code>1111&lt;/code> 인라인 리뷰 코멘트, 암호화된 다중 기기 알림 상태를 통해 git-over-Nostr를 더 완전한 코드 리뷰 표면으로 만듭니다. &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#routstrd-launches-a-local-router-for-inference-over-nostr">Routstrd&lt;/a>는 Nostr kind &lt;code>38421&lt;/code> 공지를 통해 모델 프로바이더를 발견하고 Cashu로 결제하는 로컬 데몬을 출시합니다. 태그된 릴리스에는 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#ngit-v242-fixes-grasp-relay-detection-for-pr-submissions">ngit v2.4.2&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#wisp-v100-graduates-from-beta">Wisp v1.0.0&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#grain-v052-fixes-websocket-lockup-v053-continues-polish">grain v0.5.2와 v0.5.3&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#mostro-core-v0100-and-mostro-mobile-v125-adopt-nip-59-dual-key-gift-wrap">Mostro Core v0.10.0 및 Mostro Mobile v1.2.5&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#marmot-ts-v050-ships-addressable-keypackages">marmot-ts v0.5.0&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#cruxcoach-v013-ships-encrypted-climbing-data-backup-with-nostr-and-blossom">CruxCoach v0.1.3&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#meiso-v130-adds-subtasks-blossom-attachments-and-nip-89-tagging">Meiso v1.3.0&lt;/a>, NoorNote, Nostria, Nostr Calendar, nos2x-fox, applesauce, nostr-double-ratchet 등이 포함됩니다. 미출시 변경 사항은 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#amethyst-advances-nests-audio-rooms-with-moq-interop-testing">Amethyst Nests&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#nostream-adds-nip-65-relay-list-support-and-nwc-payments">nostream NIP-65 및 NWC&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#fips-adds-nostr-based-udpnat-bootstrap">FIPS Nostr 기반 udp:nat 부트스트랩&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#strfry-adds-per-connection-observability">strfry 관측성&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#sprout-adds-owner-attestation-and-multi-workspace-support">Sprout 소유자 증명&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#zap-cooking-adds-recipe-packs-delete-requests-and-bunker-login">Zap Cooking 레시피 팩&lt;/a>을 다룹니다. 새로 추적된 프로젝트에는 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#nostrord-a-nip-29-client-built-with-kotlin-multiplatform-and-wasm">Nostrord&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#clave-brings-nip-46-remote-signing-to-ios-via-apns">Clave&lt;/a>, Treasures, smesh, Surveil, Fundstr, Nod City, deploy-nsite-to-pages, null&amp;ndash;nostr가 포함됩니다. 그리고 월말 회고는 2021년부터 2026년까지 여섯 번의 Nostr 4월을 되짚어봅니다.&lt;/p></description><content:encoded>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr에 대한 주간 가이드입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#gitworkshop-ships-in-browser-pr-merge-repository-following-and-a-bandwidth-efficient-git-explorer">GitWorkshop&lt;/a>은 브라우저 내 PR 병합 버튼, Stars 및 저장소 팔로우, 대역폭 효율적인 git 탐색기, kind &lt;code>1111&lt;/code> 인라인 리뷰 코멘트, 암호화된 다중 기기 알림 상태를 통해 git-over-Nostr를 더 완전한 코드 리뷰 표면으로 만듭니다. &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#routstrd-launches-a-local-router-for-inference-over-nostr">Routstrd&lt;/a>는 Nostr kind &lt;code>38421&lt;/code> 공지를 통해 모델 프로바이더를 발견하고 Cashu로 결제하는 로컬 데몬을 출시합니다. 태그된 릴리스에는 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#ngit-v242-fixes-grasp-relay-detection-for-pr-submissions">ngit v2.4.2&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#wisp-v100-graduates-from-beta">Wisp v1.0.0&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#grain-v052-fixes-websocket-lockup-v053-continues-polish">grain v0.5.2와 v0.5.3&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#mostro-core-v0100-and-mostro-mobile-v125-adopt-nip-59-dual-key-gift-wrap">Mostro Core v0.10.0 및 Mostro Mobile v1.2.5&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#marmot-ts-v050-ships-addressable-keypackages">marmot-ts v0.5.0&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#cruxcoach-v013-ships-encrypted-climbing-data-backup-with-nostr-and-blossom">CruxCoach v0.1.3&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#meiso-v130-adds-subtasks-blossom-attachments-and-nip-89-tagging">Meiso v1.3.0&lt;/a>, NoorNote, Nostria, Nostr Calendar, nos2x-fox, applesauce, nostr-double-ratchet 등이 포함됩니다. 미출시 변경 사항은 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#amethyst-advances-nests-audio-rooms-with-moq-interop-testing">Amethyst Nests&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#nostream-adds-nip-65-relay-list-support-and-nwc-payments">nostream NIP-65 및 NWC&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#fips-adds-nostr-based-udpnat-bootstrap">FIPS Nostr 기반 udp:nat 부트스트랩&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#strfry-adds-per-connection-observability">strfry 관측성&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#sprout-adds-owner-attestation-and-multi-workspace-support">Sprout 소유자 증명&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#zap-cooking-adds-recipe-packs-delete-requests-and-bunker-login">Zap Cooking 레시피 팩&lt;/a>을 다룹니다. 새로 추적된 프로젝트에는 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#nostrord-a-nip-29-client-built-with-kotlin-multiplatform-and-wasm">Nostrord&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#clave-brings-nip-46-remote-signing-to-ios-via-apns">Clave&lt;/a>, Treasures, smesh, Surveil, Fundstr, Nod City, deploy-nsite-to-pages, null&amp;ndash;nostr가 포함됩니다. 그리고 월말 회고는 2021년부터 2026년까지 여섯 번의 Nostr 4월을 되짚어봅니다.&lt;/p>
&lt;h2 id="주요-소식">주요 소식&lt;/h2>
&lt;h3 id="gitworkshop-브라우저-내-pr-병합-저장소-팔로우-대역폭-효율적인-git-탐색기-출시">GitWorkshop, 브라우저 내 PR 병합, 저장소 팔로우, 대역폭 효율적인 git 탐색기 출시&lt;/h3>
&lt;p>&lt;a href="https://gitworkshop.dev">GitWorkshop&lt;/a>은 Dan Conway가 &lt;a href="https://nostrcompass.org/ko/topics/nip-34/">NIP-34&lt;/a> git-over-Nostr용으로 만든 웹 기반 협업 계층으로, 이번 주에 개발자들이 GitHub 또는 GitLab에서 기대하는 워크플로우에 훨씬 가까워지면서도 코멘트, 저장소 목록, 알림을 서명된 Nostr 이벤트 내부에 유지하는 주요 릴리스를 출시했습니다.&lt;/p>
&lt;p>가장 큰 추가 기능은 GRASP 릴레이를 사용하는 저장소를 위해 오랫동안 기다려온 브라우저 내 PR 병합 버튼입니다. 이 릴리스는 또한 반응과 &lt;a href="https://nostrcompass.org/ko/topics/nip-51/">NIP-51&lt;/a> 리스트를 기반으로 구축된 Stars 및 저장소 팔로우를 추가하며, 고정된 저장소 세트는 kind &lt;code>10617&lt;/code> 이벤트로 게시되어 순서가 지정된 &lt;code>a&lt;/code> 태그를 통해 kind &lt;code>30617&lt;/code> 저장소 공지를 가리킵니다. 이제 프로필 페이지에 이식 가능한 저장소 목록을 표시할 수 있습니다.&lt;/p>
&lt;p>대역폭 효율적인 git 탐색기가 이전의 브라우저 내 얕은 clone을 대체합니다. 새로운 탐색기는 GRASP가 구축된 기본 git 클라이언트/서버 프로토콜에 의존하므로, 브라우저가 전체 팩을 가져오도록 강제하지 않고도 큰 저장소를 처리할 수 있습니다. 검색은 이제 사용자명과 저장소 메타데이터를 다루며, &lt;a href="https://github.com/nostr-protocol/nips/blob/master/50.md">NIP-50&lt;/a>과 네트워크 전체에서 저장소 공지를 발견하고 동기화하는 &lt;code>ngit-indexer&lt;/code> 릴레이 구현으로 구동됩니다. 브라우저 내 저장소 생성 워크플로우가 발견 및 온보딩 경로를 마무리합니다.&lt;/p>
&lt;p>리뷰 도구는 Files Changed 탭, 패치별 diff 뷰어, 그리고 실험적인 새 프리미티브 세트를 중심으로 재구축되었습니다. 인라인 코드 리뷰 코멘트는 kind &lt;code>1111&lt;/code>을 사용하며, &lt;a href="https://github.com/nostr-protocol/nips/blob/master/22.md">NIP-22&lt;/a>를 기반으로 합니다: 각 코멘트는 파일 경로(&lt;code>f&lt;/code> 태그), 커밋 SHA(&lt;code>c&lt;/code> 태그), 선택된 라인 범위(&lt;code>line&lt;/code> 태그)를 가리키므로 클라이언트가 diff의 올바른 위치에 코멘트를 렌더링할 수 있습니다. 두 번째 계층의 실험적 프리미티브는 작성자와 저장소 관리자가 권한을 부여하며 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/32.md">NIP-32&lt;/a> 레이블을 사용합니다: 제출 후 Issue 또는 PR 제목 변경, 제출 후 해시태그 추가, 편집 가능한 요약을 위해 PR 또는 Issue의 상단에 버전 관리된 CoverNote 고정, 인라인 코드 논의 서브스레드를 해결됨으로 표시. Verdict 이벤트와 &lt;code>suggestion&lt;/code> 블록은 여전히 초안 상태이며 아직 출시되지 않았습니다.&lt;/p>
&lt;p>기기 간 알림 상태도 Nostr를 통해 동기화되지만, 프라이버시를 보존하는 방식으로 이루어집니다. GitWorkshop은 전용 알림 keypair를 생성하고, 그 nsec를 암호화한 다음 kind &lt;code>30078&lt;/code> 이벤트 안에 저장합니다. 알림 nsec는 실제 알림 상태 이벤트에 서명합니다. 이 간접 참조는 사용자의 메인 signer가 읽기 또는 아카이브 작업마다 빈번한 암호화 및 복호화 요청으로 스팸을 받는 것을 방지하고, 외부 관찰자가 사용자가 알림 상태를 만지는 시점을 쉽게 볼 수 없도록 합니다. 사용자는 기기 간에 읽기 및 아카이브 상태를 동기화할 수 있으며, 릴레이는 암호화된 blob만 볼 수 있습니다.&lt;/p>
&lt;h3 id="routstrd-nostr를-통한-추론을-위한-로컬-라우터-출시">Routstrd, Nostr를 통한 추론을 위한 로컬 라우터 출시&lt;/h3>
&lt;p>&lt;a href="https://github.com/routstr/routstrd">Routstrd&lt;/a>는 로컬 도구에 OpenAI 호환 엔드포인트를 제공하고 각 요청을 경쟁하는 &lt;a href="https://routstr.com">Routstr&lt;/a> 프로바이더로 라우팅하는 새로운 TypeScript 데몬입니다. 데몬은 Routstr의 RIP-02 사양에 정의된 Nostr kind &lt;code>38421&lt;/code> 공지를 통해 프로바이더를 발견합니다. 그런 다음 RIP-06 하에서 가격, 신뢰, 최근 성능으로 프로바이더 점수를 매기고 각 요청을 현재 최고의 옵션으로 보냅니다.&lt;/p>
&lt;p>결제는 cocod가 관리하고 Lightning으로 자금을 조달하는 로컬 Cashu 지갑을 통해 실행됩니다. 이는 클라이언트에게 sats 단위 정산 경로를 제공하는 동시에 Nostr 릴레이를 통한 프로바이더 발견을 공개적이고 무허가 상태로 유지합니다. 세션 중 프로바이더가 실패하면 Routstrd는 다음 순위 노드로 대체할 수 있습니다. 설치 경로는 &lt;code>bun install -g routstrd&lt;/code>이며, 지갑과 릴레이 설정을 위해 &lt;code>routstrd onboard&lt;/code>가 뒤따릅니다.&lt;/p>
&lt;p>더 넓은 &lt;a href="https://github.com/routstr">Routstr org&lt;/a>는 데몬, Python 노드 소프트웨어(&lt;code>routstr-core&lt;/code>), 채팅 UI, 프로토콜 사양을 유지 관리합니다. 사용자에게 로컬 포트는 안정적인 인터페이스가 됩니다: 기존 OpenAI 호환 도구가 Routstrd를 가리키고, 데몬이 프로바이더 발견, 라우팅, 결제를 처리합니다.&lt;/p>
&lt;h2 id="태그된-릴리스">태그된 릴리스&lt;/h2>
&lt;h3 id="ngit-v242-pr-제출을-위한-grasp-서버-감지-수정">ngit v2.4.2, PR 제출을 위한 GRASP 서버 감지 수정&lt;/h3>
&lt;p>&lt;a href="https://codeberg.org/DanConwayDev/ngit-cli">ngit&lt;/a>은 저장소 GRASP 서버 감지 수정 사항을 포함한 &lt;a href="https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.4.2">v2.4.2&lt;/a>를 출시하여, 제안이 PR kind를 사용할 때 PR 제출이 정상 경로를 유지하도록 했습니다. ngit는 현재 대부분의 변경 사항에 대해 크지 않은 한 &lt;code>Patch&lt;/code> kind를 기본으로 사용하며, 관리자는 기본값을 변경하기 위해 노력하고 있습니다. 이번 주 초에 출시된 &lt;a href="https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.4.1">v2.4.1&lt;/a>은 저장소의 지정된 git 서버에서 열려 있는 PR의 git 데이터를 사용할 수 없을 때 clone과 fetch 중 발생하는 &lt;code>fatal&lt;/code> 오류를 수정했습니다.&lt;/p>
&lt;h3 id="wisp-v100-베타-졸업">Wisp v1.0.0, 베타 졸업&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a>는 릴레이 라우팅, 프라이버시, 작은 네이티브 UI에 초점을 맞춘 Kotlin 및 Jetpack Compose Android 클라이언트로, &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v1.0.0">v1.0.0&lt;/a>을 출시하고 이어서 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v1.0.2">v1.0.2&lt;/a>를 출시했습니다. 1.0.0 마일스톤은 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-22-newsletter/#wisp-v0180-beta-adds-normie-mode-for-you-feed-and-nip-29-group-config">Newsletter #19&lt;/a>에서 다룬 Normie Mode 법정화폐 표시 토글, For You 피드, &lt;a href="https://nostrcompass.org/ko/topics/nip-29/">NIP-29&lt;/a> 릴레이 기반 그룹 구성, &lt;a href="https://nostrcompass.org/ko/topics/nip-65/">NIP-65&lt;/a> 릴레이 리스트 브로드캐스팅을 모읍니다. v1.0.2는 Android 15 16 KB 페이지 크기 지원, 드로어 시트의 QR 스캔 탭, 인라인 비디오 컨트롤용 다운로드 버튼, 알림 리스트 성능 수정을 추가합니다.&lt;/p>
&lt;h3 id="grain-v052-websocket-잠금-수정-v053-다듬기-계속">grain v0.5.2, WebSocket 잠금 수정; v0.5.3, 다듬기 계속&lt;/h3>
&lt;p>0ceanSlim의 Go 릴레이인 &lt;a href="https://github.com/0ceanSlim/grain">grain&lt;/a>은 v0.5.0에서 도입된 WebSocket 잠금에 대한 중요한 핫픽스로 &lt;a href="https://github.com/0ceanSlim/grain/releases/tag/v0.5.2">v0.5.2&lt;/a>를 릴리스한 다음 &lt;a href="https://github.com/0ceanSlim/grain/releases/tag/v0.5.3">v0.5.3&lt;/a>을 이어서 출시했습니다. 잠금은 일부 필터 및 WebSocket 경로에서 연결이 멈추게 했으므로 v0.5.1 또는 v0.5.0 운영자는 업그레이드해야 합니다. grain은 모든 주요 Nostr 이벤트 카테고리를 추적하고, NIP-11 릴레이 정보를 노출하며, 화이트리스트/블랙리스트 접근 제어, kind별 요율 제한, 웹 대시보드, v0.5.x 라인에 추가된 Go 클라이언트 라이브러리를 지원합니다.&lt;/p>
&lt;h3 id="mostro-core-v0100-및-mostro-mobile-v125-nip-59-이중-키-gift-wrap-채택">Mostro Core v0.10.0 및 Mostro Mobile v1.2.5, NIP-59 이중 키 gift wrap 채택&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro-core/releases/tag/v0.10.0">Mostro Core v0.10.0&lt;/a>은 분리된 identity 및 거래 키를 갖춘 새로운 &lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59&lt;/a> gift-wrap 모듈을 추가합니다. 이전 전송 코드는 거래 identity와 gift wrapping 모두에 단일 identity 키를 사용했습니다. v0.10.0은 안정적인 거래 identity를 임시 wrapping 키로부터 분리하므로, 각 거래는 거래 프로토콜에 필요한 identity를 보존하면서 새로운 전송 키를 사용할 수 있습니다. 데몬 통합은 &lt;a href="https://github.com/MostroP2P/mostro/pull/718">Mostro PR #718&lt;/a>을 통해 이루어지며, &lt;a href="https://github.com/MostroP2P/mostro-cli/pull/165">mostro-cli PR #165&lt;/a>는 동일한 마이그레이션을 커맨드라인 클라이언트에 적용합니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.5">Mostro Mobile v1.2.5&lt;/a>는 프로토콜 작업과 함께 출시됩니다. &lt;a href="https://github.com/MostroP2P/mobile/pull/581">PR #581&lt;/a>은 taker가 maker의 계정 나이로 offer를 필터링할 수 있게 하여, 사용자에게 주문서에서 새로 생성된 maker 계정을 피할 방법을 제공합니다. &lt;a href="https://github.com/MostroP2P/mobile/pull/580">PR #580&lt;/a>은 취소된 주문 세부 정보의 역할 레이블을 수정하고, &lt;a href="https://github.com/MostroP2P/mobile/pull/576">PR #576&lt;/a>은 협조적 취소 버튼을 정리합니다.&lt;/p>
&lt;h3 id="marmot-ts-v050-주소-지정-가능한-keypackages-출시">marmot-ts v0.5.0, 주소 지정 가능한 KeyPackages 출시&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/marmot-ts">marmot-ts&lt;/a>는 TypeScript &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> 클라이언트의 첫 번째 계획된 breaking change 릴리스인 &lt;a href="https://github.com/marmot-protocol/marmot-ts/releases/tag/%40internet-privacy%2Fmarmot-ts%400.5.0">@internet-privacy/marmot-ts@0.5.0&lt;/a>을 출시했습니다. &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/68">PR #68&lt;/a>은 주소 지정 가능한 KeyPackage 지원을 추가합니다: &lt;code>KeyPackageManager&lt;/code>는 이제 레거시 kind &lt;code>443&lt;/code> 및 새로운 kind &lt;code>30443&lt;/code> KeyPackage 이벤트를 모두 처리할 수 있습니다. 이 릴리스는 &lt;code>KeyPackageStore&lt;/code>와 group-state 저장소 클래스를 제거하고, &lt;code>KeyPackageManager&lt;/code> 및 &lt;code>MarmotGroup&lt;/code>에 전달되는 제네릭 key-value 저장소로 대체합니다. 또한 초대 및 그룹 관리를 &lt;code>MarmotClient.invites&lt;/code> 및 &lt;code>MarmotClient.groups&lt;/code>로 이동하므로, 직접 임베드하는 사용자는 업그레이드 전에 생성자 및 저장소를 변경해야 합니다.&lt;/p>
&lt;h3 id="cruxcoach-v013-nostr와-blossom을-사용한-암호화된-클라이밍-데이터-백업-출시">CruxCoach v0.1.3, Nostr와 Blossom을 사용한 암호화된 클라이밍 데이터 백업 출시&lt;/h3>
&lt;p>&lt;a href="https://codeberg.org/CruxCoach/CruxCoach">CruxCoach&lt;/a>는 Kilter Board 클라이머를 위한 새로운 오픈소스 Android 앱입니다. Kilter Board는 홀드가 Bluetooth를 통해 켜져 경로를 표시하는 인터랙티브 트레이닝 벽입니다. 앱은 4월 14일에 출시되었고 4월 26일에 &lt;a href="https://codeberg.org/CruxCoach/CruxCoach/releases/tag/v0.1.3">v0.1.3&lt;/a>에 도달했습니다.&lt;/p>
&lt;p>v0.1.3은 선택적 암호화된 클라우드 백업을 추가합니다. 사용자의 CruxCoach 계정은 Nostr keypair이며, private 키는 로컬 백업 암호화 키의 입력 역할도 합니다. 앱은 기기에서 클라이밍 데이터를 암호화하고 암호문을 Blossom 저장 서버(&lt;code>blossom.primal.net&lt;/code> 및 &lt;code>nostr.download&lt;/code>)에 미러링합니다. 원격 삭제 작업은 Blossom 정리 경로를 호출합니다. 백업 외에도 CruxCoach는 Amber 지원을 위한 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> 원격 서명, 앱 내 개발자 연락을 위한 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> private DM, 릴레이 검색을 위한 &lt;a href="https://nostrcompass.org/ko/topics/nip-65/">NIP-65&lt;/a> 릴레이 리스트, Nostr 플러밍을 위한 Vitor Pamplona의 &lt;a href="https://github.com/vitorpamplona/quartz">Quartz&lt;/a> 라이브러리를 사용합니다. 사용자는 Zapstore 또는 직접 Codeberg APK를 통해 설치할 수 있습니다.&lt;/p>
&lt;h3 id="meiso-v130-subtask-blossom-첨부-파일-nip-89-태깅-추가">Meiso v1.3.0, subtask, Blossom 첨부 파일, NIP-89 태깅 추가&lt;/h3>
&lt;p>&lt;a href="https://github.com/higedamc/meiso">Meiso&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> 암호화된 kind &lt;code>30078&lt;/code> 애플리케이션 데이터로 Nostr 릴레이에 작업을 저장하는 Android용 미니멀리스트 Flutter 작업 관리자입니다. 4월 6일에 출시된 &lt;a href="https://github.com/higedamc/meiso/releases/tag/v1.3.0">v1.3.0&lt;/a>은 부모/자식 관계가 있는 subtask, blocks/blocked-by/related-to/duplicate-of를 위한 작업 링크, Blossom 및 &lt;a href="https://nostrcompass.org/ko/topics/nip-96/">NIP-96&lt;/a> HTTP 파일 업로드 엔드포인트를 통한 이미지 첨부 파일, 게시된 이벤트의 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/89.md">NIP-89&lt;/a> 권장 애플리케이션 &lt;code>client&lt;/code> 태그, Go 커맨드라인 동기화 도구를 추가합니다. v1.3.0은 또한 콜드 스타트 릴레이 동작 및 Amber 클라이언트 재사용을 수정합니다.&lt;/p>
&lt;h3 id="noornote-nostria-nostr-calendar-nos2x-fox-및-라이브러리-릴리스">NoorNote, Nostria, Nostr Calendar, nos2x-fox 및 라이브러리 릴리스&lt;/h3>
&lt;p>&lt;a href="https://github.com/77elements/noornote">NoorNote&lt;/a>는 &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.8.7">v0.8.7&lt;/a>, &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.8.8">v0.8.8&lt;/a>, &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.8.9">v0.8.9&lt;/a>를 게시했습니다. 이러한 릴리스는 인용된 리포스트에서 이미지 및 비디오 클릭 처리를 수정하고, 롱폼 기사 이미지에 대한 lightbox 지원을 추가하며, 빈 데스크톱 시작 화면을 수정합니다. &lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a>는 &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.29">v3.1.29&lt;/a>, &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.30">v3.1.30&lt;/a>, &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.31">v3.1.31&lt;/a>을 출시하여 article-editor 이미지 압축, 지갑 USD 토글, 프로모션 카드 컨트롤, PDF 지원, 모바일 레이아웃 다듬기를 추가했습니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.4.1">Nostr Calendar v1.4.1&lt;/a>은 캘린더 이벤트 게시를 캘린더 리스트 관리에서 분리하고 초대 추적을 수정합니다. &lt;a href="https://github.com/diegogurpegui/nos2x-fox/releases/tag/v1.19.0">nos2x-fox v1.19.0&lt;/a>은 Firefox NIP-07 브라우저 서명 grant에 대한 사용자 정의 인증 시간 프레임을 추가합니다. &lt;a href="https://github.com/mmalmi/nostr-double-ratchet/releases/tag/v0.0.97">nostr-double-ratchet v0.0.97&lt;/a>은 새로운 바이너리를 출시합니다. &lt;a href="https://github.com/nostr-wot/nostr-wot-sdk/releases/tag/nostr-wot-sdk%400.9.0">nostr-wot-sdk 0.9.0&lt;/a>은 기본적으로 &lt;code>NostrSessionProvider&lt;/code>를 마운트하며, &lt;a href="https://github.com/nbd-wtf/nostr-tools/pull/535">nostr-tools PR #535&lt;/a>는 NIP-47 wallet-connect 문자열에 대한 다중 릴레이 파싱 지원을 추가합니다.&lt;/p>
&lt;p>주 후반에는 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.1.0-pre1">Amber v6.1.0-pre1&lt;/a>이 더 나은 새 앱 연결 레이아웃, signer 대화 상자 수정, 개선된 알림 권한 처리, 재구성된 계정 선택을 포함한 사전 릴리스를 출시했습니다. &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.3.14">nostr-vpn v0.3.14&lt;/a>는 macOS Apple Silicon, Linux 및 Windows 아티팩트로 새 빌드를 출시했습니다. &lt;a href="https://github.com/BitcreditProtocol/Bitcredit-Core/releases/tag/v0.5.8">Bitcredit Core v0.5.7-hotfix-1 및 v0.5.8&lt;/a>은 고아 블록 검증 문제에 대한 연속 수정을 출시했습니다. &lt;a href="https://gitlab.com/chad.curtis/surveil/-/tags/v0.1.6">Surveil v0.1.6&lt;/a>은 모바일 UI 다듬기와 개편된 About 페이지를 가져왔습니다. 프로젝트 자체는 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-29-newsletter/#surveil-a-magic-the-gathering-deck-builder-on-nostr">아래&lt;/a>에서 소개됩니다.&lt;/p>
&lt;h3 id="applesauce-600-레거시-이벤트-팩토리-제거-및-blossom-uri-파싱-추가">applesauce 6.0.0, 레거시 이벤트 팩토리 제거 및 Blossom URI 파싱 추가&lt;/h3>
&lt;p>hzrd149의 TypeScript Nostr 툴킷인 &lt;a href="https://github.com/hzrd149/applesauce">applesauce&lt;/a>는 monorepo 전반에 걸쳐 6.0.0 릴리스 열차를 출시했습니다. &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-core%406.0.0">applesauce-core@6.0.0&lt;/a>은 레거시 &lt;code>EventFactory&lt;/code> 클래스와 이전의 &lt;code>buildEvent&lt;/code>, &lt;code>modifyEvent&lt;/code>, &lt;code>createEvent&lt;/code> 헬퍼를 제거하고, 호출자를 &lt;code>applesauce-core/factories&lt;/code> 및 &lt;code>applesauce-common&lt;/code>의 새로운 팩토리 클래스로 안내합니다. 또한 IP 주소 및 로컬호스트 처리를 링크 파싱에 추가하고, BUD-10 Blossom URI 정규 표현식, &lt;code>timeoutWithIgnore&lt;/code>, &lt;code>combineLatestBy&lt;/code>, &lt;code>combineLatestByIndex&lt;/code>, &lt;code>combineLatestByKey&lt;/code>와 같은 새로운 observable 헬퍼를 추가합니다.&lt;/p>
&lt;p>패키지 수준 릴리스는 Nostr 특정 부분을 채웁니다. &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-content%406.0.0">applesauce-content@6.0.0&lt;/a>은 텍스트 및 Markdown용 BUD-10 Blossom URI 노드를 추가하여, 렌더러에 콘텐츠에서 Blossom 참조를 파싱할 수 있는 일급 방법을 제공합니다. &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-actions%406.0.0">applesauce-actions@6.0.0&lt;/a>은 릴레이, 사용자, 항목을 다루는 NIP-51 리스트를 위한 기본 팩토리 클래스를 추가하여 리스트 구성을 덜 임시적으로 만듭니다. &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-wallet-connect%406.0.0">applesauce-wallet-connect@6.0.0&lt;/a>은 &lt;code>WalletConnect.connectURI&lt;/code>를 노출하므로 앱이 기존 NIP-47 wallet-connect URI에 직접 액세스할 수 있습니다.&lt;/p>
&lt;h2 id="미출시-변경-사항">미출시 변경 사항&lt;/h2>
&lt;h3 id="amethyst-moq-상호-운용성-테스트로-nests-오디오-룸-진전">Amethyst, MoQ 상호 운용성 테스트로 Nests 오디오 룸 진전&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>는 지난주의 &lt;a href="https://datatracker.ietf.org/group/moq/about/">Media over QUIC&lt;/a> 오디오 룸 스택을 기반으로 이번 주에 여러 Nests 중심 PR을 병합했습니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2622">PR #2622&lt;/a>는 Amethyst MoQ 클라이언트를 참조 웹 구현에 대해 훈련하는 교차 클라이언트 상호 운용성 하네스를 추가합니다. 목표는 사용자가 부딪히기 전에 Android/브라우저 wire 레벨 차이를 잡는 것입니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2625">PR #2625&lt;/a>는 picture-in-picture 스피커 포커스와 연결 상태를 개선하는 반면, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2620">PR #2620&lt;/a>은 참가자 그리드에서 아바타, 음소거 상태, 말하는 상태를 명확하게 합니다. 주 후반에는 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2634">PR #2634&lt;/a>가 전체 화면 Nest 뷰에서 IME 패딩과 창 인셋을 수정하고 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2635">PR #2635&lt;/a>는 Nests 피드에 존재 기반 신선도 필터링을 추가합니다. 별도로, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2627">PR #2627&lt;/a>은 Amethyst의 사용자 정의 C secp256k1 구현을 제거하고 &lt;code>libschnorr256k1&lt;/code>으로 마이그레이션합니다.&lt;/p>
&lt;h3 id="nostream-nip-65-릴레이-리스트-지원-및-nwc-결제-추가">nostream, NIP-65 릴레이 리스트 지원 및 NWC 결제 추가&lt;/h3>
&lt;p>&lt;a href="https://github.com/Cameri/nostream">nostream&lt;/a>은 지난주의 53개 PR 릴레이 스프린트 이후 세 개의 주목할 만한 PR을 병합했습니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-65/">NIP-65&lt;/a> 릴레이 리스트 메타데이터 지원은 &lt;a href="https://github.com/Cameri/nostream/pull/585">PR #585&lt;/a>에 도착하여, 릴레이가 kind &lt;code>10002&lt;/code> 릴레이 리스트 이벤트를 인덱싱하고 제공할 수 있습니다. Nostr Wallet Connect 결제 프로세서는 &lt;a href="https://github.com/Cameri/nostream/pull/539">PR #539&lt;/a>에서 이어져 pay-to-relay 경로를 추가합니다. 연결 정리는 &lt;a href="https://github.com/Cameri/nostream/pull/438">PR #438&lt;/a>에서 개선되며, 활성 구독이 있는 소켓이 회수되지 않아 장기 실행 인스턴스에서 구독 수가 드리프트되는 죽은 연결 버그를 수정합니다.&lt;/p>
&lt;h3 id="fips-nostr-기반-udpnat-부트스트랩-추가">FIPS, Nostr 기반 udp:nat 부트스트랩 추가&lt;/h3>
&lt;p>&lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-25-newsletter/#fips-nostr-native-mesh-networking">Newsletter #6&lt;/a> 및 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-25-newsletter/#fips-v020-ships-tor-transport-reproducible-builds-and-sidecar-examples">Newsletter #10&lt;/a>에서 이전에 다루었던 Free Internetworking Peering System으로, Nostr 기반 &lt;code>udp:nat&lt;/code> 부트스트랩과 함께 &lt;a href="https://github.com/jmcorgan/fips/pull/53">PR #53&lt;/a>을 병합했습니다. 이 변경은 노드가 Nostr 광고를 게시하고, 암호화된 offer/answer 시그널링을 교환하며, STUN을 통해 공용 주소를 발견하고, UDP 홀 펀칭을 수행하며, 펀치된 소켓을 일반 FIPS 전송 스택으로 넘길 수 있게 합니다. 구현은 신호 페이로드 identity를 실제 Nostr 발신자에게 바인딩하고, 인박스 조회를 위해 구성된 DM 및 광고 릴레이를 쿼리하며, 실패한 채택된 순회 핸드오프를 롤백하여 고아 UDP 전송이 활성 상태로 남지 않도록 합니다. 이것이 canonical 저장소인 &lt;code>jmcorgan/fips&lt;/code>에서 추적할 Nostr 공지 및 NAT 순회 작업입니다.&lt;/p>
&lt;h3 id="strfry-연결별-관측성-추가">strfry, 연결별 관측성 추가&lt;/h3>
&lt;p>&lt;a href="https://github.com/hoytech/strfry">strfry&lt;/a>는 &lt;a href="https://github.com/hoytech/strfry/pull/214">PR #214&lt;/a>를 병합하여 연결별 관측성과 Prometheus를 통해 내보낼 수 있는 연결 수준 메트릭을 추가했습니다. &lt;a href="https://github.com/hoytech/strfry/pull/204">PR #204&lt;/a>는 Prometheus 레이블을 정규화하고, &lt;a href="https://github.com/hoytech/strfry/pull/215">PR #215&lt;/a>는 strfry 위에 구축된 Namecoin identity 프로젝트를 다루는 Community Integrations 섹션을 문서에 추가합니다.&lt;/p>
&lt;h3 id="sprout-owner-attestation-및-다중-워크스페이스-지원-추가">Sprout, Owner Attestation 및 다중 워크스페이스 지원 추가&lt;/h3>
&lt;p>Block의 Nostr 클라이언트인 &lt;a href="https://github.com/block/sprout">Sprout&lt;/a>는 NIP-OA(Owner Attestation)를 구현하는 &lt;a href="https://github.com/block/sprout/pull/406">PR #406&lt;/a>을 병합했습니다. 이 기능은 자율 에이전트에게 특정 인간 pubkey가 그 행동을 승인했다는 암호학적 증명을 제공합니다. &lt;a href="https://github.com/block/sprout/pull/409">PR #409&lt;/a>는 데스크톱 앱에 다중 워크스페이스 지원을 추가하고, &lt;a href="https://github.com/block/sprout/pull/411">PR #411&lt;/a>은 모바일 작성에 &lt;code>#channel&lt;/code> 자동완성을 추가하며, &lt;a href="https://github.com/block/sprout/pull/410">PR #410&lt;/a>은 활성 채널 메시지를 드롭할 수 있는 race window를 닫습니다. &lt;a href="https://github.com/block/sprout/pull/413">PR #413&lt;/a>은 기기 간 읽기 상태 동기화를 위한 NIP-RS를 도입하고, 후속 &lt;a href="https://github.com/block/sprout/pull/420">PR #420&lt;/a> 및 &lt;a href="https://github.com/block/sprout/pull/422">PR #422&lt;/a>는 그 읽기 상태를 모바일 미확인 배지에 연결합니다.&lt;/p>
&lt;h3 id="zap-cooking-레시피-팩-삭제-요청-bunker-로그인-추가">Zap Cooking, 레시피 팩, 삭제 요청, bunker 로그인 추가&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapcooking/frontend">Zap Cooking&lt;/a>은 생산적인 레시피 게시 작업 주간을 병합했습니다. 사용자 자신의 Recipe Pack에 대한 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/09.md">NIP-09&lt;/a> 삭제 요청은 &lt;a href="https://github.com/zapcooking/frontend/pull/367">PR #367&lt;/a>에 도착합니다. 게시 신뢰성은 모든 새 레시피를 garden 릴레이로 강제하고 공유 레시피 세트에 대한 재시도 큐를 추가하는 &lt;a href="https://github.com/zapcooking/frontend/pull/366">PR #366&lt;/a>을 통해 개선됩니다. 원클릭 저자 팩 게시는 &lt;a href="https://github.com/zapcooking/frontend/pull/365">PR #365&lt;/a>에 도착하고, &lt;a href="https://github.com/zapcooking/frontend/pull/331">PR #331&lt;/a>은 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> bunker 로그인 지원을 추가합니다.&lt;/p>
&lt;h3 id="whitenoise-rs-로컬-데이터베이스-암호화">Whitenoise-rs, 로컬 데이터베이스 암호화&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise-rs">whitenoise-rs&lt;/a>는 &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/758">PR #758&lt;/a>을 병합하여 온디스크 Whitenoise 데이터베이스에 SQLCipher 암호화를 추가했습니다. 이는 Marmot 데몬 스택에 대한 오랫동안 지속된 정지 상태 보안 격차를 좁힙니다. &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/775">PR #775&lt;/a>는 그룹 필수 기능을 노출하고, &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/772">PR #772&lt;/a>는 그룹 미디어 작업을 세션 소유 &lt;code>MediaOps&lt;/code>로 마이그레이션하며, &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/773">PR #773&lt;/a>은 session-ops 리팩터의 일부로 &lt;code>SharedServices&lt;/code> 홀더를 추출합니다. 모바일 측에서는 &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/577">whitenoise PR #577&lt;/a>이 Android 포그라운드 서비스에 대한 부팅 자동 재시작을 활성화하여 기기 재부팅 후 데몬이 다시 돌아오지 않는 경우를 수정합니다.&lt;/p>
&lt;h2 id="새로-추적-및-발견됨">새로 추적 및 발견됨&lt;/h2>
&lt;h3 id="nostrord-kotlin-multiplatform과-wasm으로-구축된-nip-29-클라이언트">Nostrord: Kotlin Multiplatform과 WASM으로 구축된 NIP-29 클라이언트&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrord/nostrord">Nostrord&lt;/a>는 Discord 대체 사용 사례를 대상으로 하는 새로운 &lt;a href="https://nostrcompass.org/ko/topics/nip-29/">NIP-29&lt;/a> 그룹 채팅 클라이언트입니다. 그룹은 릴레이 강제 멤버십, 역할, 조정, 접근 제어와 함께 Nostr 릴레이에 상주하므로 그룹 상태는 선택한 NIP-29 릴레이에 의해 호스팅됩니다. 클라이언트 개발자는 해당 그룹에 대한 별도의 애플리케이션 데이터베이스를 제어하지 않습니다. 웹 앱은 &lt;a href="https://web.nostrord.com">web.nostrord.com&lt;/a>에서 실행되며 WebAssembly로 컴파일되는 Kotlin Multiplatform으로 구축되고, 네이티브 Android, iOS, 데스크톱 빌드가 개발 중입니다. Nostrord는 &lt;a href="https://opensats.org">OpenSats&lt;/a> grant 수령자이며 Flotilla, Chachi, 0xChat가 사용하는 동일한 NIP-29 릴레이와 상호 운용됩니다.&lt;/p>
&lt;h3 id="clave-apns를-통해-ios에-nip-46-원격-서명-도입">Clave, APNs를 통해 iOS에 NIP-46 원격 서명 도입&lt;/h3>
&lt;p>&lt;a href="https://github.com/DocNR/clave">Clave&lt;/a>는 앱이 열려 있지 않을 때 Nostr 이벤트에 서명하는 베타 상태의 iOS 원격 signer입니다. private 키는 iPhone Keychain에 유지됩니다. 클라이언트가 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> 원격 서명 요청을 보내면 서버 측 프록시가 Apple Push Notification을 전달하여 최대 30초 동안 Notification Service Extension을 깨웁니다. 그 확장은 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> 암호화로 요청을 복호화하고 Keychain 키로 서명한 다음 응답을 게시합니다. 기기 토큰 등록은 토큰 하이재킹을 방지하기 위해 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/98.md">NIP-98&lt;/a> HTTP Auth를 사용합니다. Clave는 &lt;code>bunker://&lt;/code> 및 &lt;code>nostrconnect://&lt;/code> 페어링, 클라이언트별 신뢰 수준, kind별 오버라이드를 지원하며 Nostur 및 noStrudel에서 테스트되었습니다.&lt;/p>
&lt;h3 id="treasures-nostr-상의-분산-지오캐싱">Treasures: Nostr 상의 분산 지오캐싱&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/chad.curtis/treasures">Treasures&lt;/a>는 캐시와 발견이 서명된 Nostr 이벤트인 지오캐싱 플랫폼입니다. 캐시 작성자는 GPS 좌표와 함께 kind &lt;code>37516&lt;/code> 주소 지정 가능한 이벤트를 게시합니다. 발견자는 물리적 캐시에 부착된 QR 코드를 스캔하여 발견을 기록합니다. 코드는 작성자 pubkey, 캐시 &lt;code>d&lt;/code> 태그, 물리적 방문의 증거로 사용되는 검증 private 키를 인코딩합니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-57/">NIP-57&lt;/a> zap은 발견자에서 캐시 작성자로 흐를 수 있으며, 라이브 앱은 &lt;a href="https://treasures.to">treasures.to&lt;/a>에 있습니다.&lt;/p>
&lt;h3 id="smesh-v051-자체-호스팅-nostr-릴레이-클라이언트-signer를-하나의-스택으로">smesh v0.5.1: 자체 호스팅 Nostr 릴레이, 클라이언트, signer를 하나의 스택으로&lt;/h3>
&lt;p>&lt;a href="https://git.smesh.lol/smesh/smesh">smesh&lt;/a>는 mleku가 Go와 TinyGo에서 파생한 사용자 정의 언어인 Moxie로 작성된 자체 호스팅 Nostr 스택입니다. 이 스택은 HTTP, WebSocket, AUTH, 검색, Blossom 지원을 갖춘 네이티브 릴레이 바이너리, ES 모듈로 컴파일된 웹 클라이언트인 &lt;code>sm3sh&lt;/code>, NIP-07 브라우저 서명과 NIP-04 및 NIP-44 암호화 지원을 갖춘 브라우저 signer 확장을 제공합니다. 최근 작업에는 v0.5.0의 MLS(RFC 9420) 그룹 메시징, 릴레이 동기화를 위한 negentropy 집합 조정, Web of Trust 그래프 엔진이 포함됩니다. 코드는 mleku의 자체 호스팅 forge인 &lt;code>git.smesh.lol&lt;/code>에 있으며 그의 자체 &lt;code>git-web&lt;/code> 도구로 구축되었습니다. 관련 &lt;a href="https://git.smesh.lol/smesh/gitea-nostr-auth">gitea-nostr-auth&lt;/a> 저장소는 Gitea용 OAuth2/OIDC 브리지입니다: 사용자는 NIP-07 브라우저 signer로 인증하고, 브리지는 NIP-65를 통해 릴레이를 발견하며, Gitea는 표준 OIDC identity claim을 받습니다.&lt;/p>
&lt;h3 id="surveil-nostr-상의-magic-the-gathering-덱-빌더">Surveil: Nostr 상의 Magic: The Gathering 덱 빌더&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/chad.curtis/surveil">Surveil&lt;/a>은 Magic: The Gathering 플레이어를 위한 Nostr 클라이언트로, 사용자가 카드를 검색하고, 덱을 만들고, Android에서 온디바이스 ML Kit OCR로 종이 카드를 스캔하고, 네트워크 전체에 덱을 공유할 수 있게 합니다. 덱은 kind &lt;code>37381&lt;/code> 주소 지정 가능한 이벤트로 게시되며, 덱 이벤트 사양은 프로젝트의 &lt;code>NIP.md&lt;/code>에 문서화되어 있습니다. 소셜 계층은 표준 Nostr 프리미티브로 구축됩니다: 각 덱으로 범위가 지정된 NIP-22(kind &lt;code>1111&lt;/code>) 스레드 코멘트, NIP-25(kind &lt;code>7&lt;/code>) 반응, 플레이어 홈용 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/78.md">NIP-78&lt;/a>(kind &lt;code>30078&lt;/code>) 프로필 데이터, kind &lt;code>3&lt;/code> 팔로우 피드, 원본 덱으로 다시 연결되는 &lt;code>a&lt;/code> 태그를 가진 fork. &lt;a href="https://gitlab.com/chad.curtis/surveil/-/tags/v0.1.6">v0.1.6&lt;/a>은 이번 주에 모바일 UI 다듬기, 라이프 카운터 개선, 개편된 About 페이지, 덱 히어로 배너의 릴레이 pill과 함께 출시되었습니다. 웹 앱은 정적 HTML이 제공되는 어디에서나 실행되고, Android 빌드는 &lt;a href="https://zapstore.dev">Zapstore&lt;/a>를 통해 배송되며, kind &lt;code>37381&lt;/code> 이벤트는 Magic 덱으로 &lt;a href="https://about.ditto.pub/reference">Ditto&lt;/a>에서도 네이티브로 인덱싱됩니다. 저장소는 GitLab의 &lt;a href="https://gitlab.com/chad.curtis/surveil">chad.curtis/surveil&lt;/a>에 있습니다.&lt;/p>
&lt;h3 id="작은-추가-항목-fundstr-nod-city-deploy-nsite-to-pages-null--nostr">작은 추가 항목: Fundstr, Nod City, deploy-nsite-to-pages, null&amp;ndash;nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/ritty65/Fundstr">Fundstr&lt;/a>는 일회성 및 반복 pledge를 위해 Cashu ecash를 사용하는 Nostr 상의 크리에이터 자금 조달 플랫폼으로, 크리에이터 tier 정의와 Nostr DM을 갖추고 있습니다. &lt;a href="https://nod.city">Nod City&lt;/a>는 리뷰가 서명된 Nostr 이벤트이고 리뷰어가 zap을 받을 수 있는 Bitcoin 서비스 리뷰 사이트입니다. 공개 소스 저장소는 발견되지 않았습니다. &lt;a href="https://github.com/Origami74/deploy-nsite-to-pages">deploy-nsite-to-pages&lt;/a>는 &lt;code>nsyte download&lt;/code>를 사용하여 nsite를 GitHub Pages에 미러링하는 GitHub Action이며, 루트 kind &lt;code>15128&lt;/code> 및 명명된 kind &lt;code>35128&lt;/code> nsite를 지원합니다. 이번 주 NIP-34 데이터에서도 발견된 &lt;a href="https://github.com/tami1A84/null--nostr">null&amp;ndash;nostr&lt;/a>는 최근 OpenSats 웨이브에서 Nurunuru로 다룬 클라이언트입니다. MLS 그룹 메시징, Amber, NIP-50 검색, NIP-70 보호된 게시물, ProofMode 배지, Zapstore 배포를 지원합니다.&lt;/p>
&lt;p>FIPS는 Compass의 새 프로젝트가 아닙니다. &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-25-newsletter/#fips-nostr-native-mesh-networking">Newsletter #6&lt;/a> 및 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-25-newsletter/#fips-v020-ships-tor-transport-reproducible-builds-and-sidecar-examples">Newsletter #10&lt;/a>에서 다루었습니다. 데이터베이스는 이제 올바른 canonical 저장소인 &lt;a href="https://github.com/jmcorgan/fips">jmcorgan/fips&lt;/a>를 가리키며, 이번 주의 NIP-34 발견은 또한 &lt;code>fips&lt;/code> 및 &lt;code>awesome-fips&lt;/code>와 같은 관련 git-over-Nostr 미러를 표면화했습니다.&lt;/p>
&lt;h2 id="프로토콜-작업">프로토콜 작업&lt;/h2>
&lt;h3 id="nip-업데이트">NIP 업데이트&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs repository&lt;/a>의 최근 제안 및 논의:&lt;/p>
&lt;p>&lt;strong>이번 주 병합됨:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>NIP-34 git repositories: remove unused refs tag extension&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2325">PR #2325&lt;/a>): 정의되었지만 사용되지 않은 &lt;a href="https://nostrcompass.org/ko/topics/nip-34/">NIP-34&lt;/a>의 &lt;code>refs&lt;/code> 태그 확장을 제거합니다. 이 정리는 git-over-Nostr 도구에 대한 구현 모호성을 줄입니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-34 git repositories: remove incorrect NIP-09 claim&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2326">PR #2326&lt;/a>): &lt;a href="https://github.com/nostr-protocol/nips/blob/master/09.md">NIP-09&lt;/a> 삭제 이벤트가 저장소 상태를 재설정할 수 있다는 잘못된 주장을 제거합니다. NIP-09 삭제는 저장소 상태 머신이 아니라 클라이언트 측 이벤트 삭제 요청입니다. 이 수정은 NIP-34 구현자가 삭제 힌트를 권위 있는 저장소 재설정으로 취급하는 것을 방지합니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>열려 있고 구현 주도 작업:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>GitWorkshop kind &lt;code>1111&lt;/code> 인라인 리뷰 코멘트&lt;/strong>: 인라인 코드 리뷰 코멘트 kind는 GitWorkshop의 &lt;code>NIP.md&lt;/code>에 문서화되어 있으며 현재 활발히 사용되고 있지만, 아직 공식 NIP로 제안되지 않았습니다. Verdict 이벤트(kind &lt;code>7321&lt;/code>)와 &lt;code>suggestion&lt;/code> 블록은 여전히 초안 상태이며 아직 출시되지 않았습니다. GitWorkshop 및 ngit의 구현 피드백에 따라 이 형태가 독립형 git-review NIP가 될지 아니면 NIP-34 위에 계층화된 애플리케이션 관례로 남을지가 결정됩니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Nostr mail core 및 Nostrmon&lt;/strong>: 이번 주에 두 개의 새로운 커스텀 NIP 초안이 순환되었습니다. &lt;a href="https://njump.me/57d11cdf2f9ed73f7f39d6a7a6012ee3d642584ab11887f96a031f7d00fd9697">Nostr mail core&lt;/a>는 RFC 2822 이메일 콘텐츠에 대해 kind &lt;code>1301&lt;/code>을 제안하며, 프라이빗 전달을 위해 NIP-59로 wrap되고 NIP-05로 해결된 브리지 pubkey를 통해 레거시 이메일에 브리지됩니다. &lt;a href="https://njump.me/5e9a8cee19d464f5f0322518ac9ccaf2399c69da6572346b4fb12d36acb17a27">Nostrmon&lt;/a>은 지역, 지도, 생물, NPC, 플레이어 저장, 아이템을 위한 주소 지정 가능한 이벤트 kind를 스케치합니다. 둘 다 병합된 NIP가 아니라 커스텀 초안으로 남아 있습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-67: EOSE Completeness Hint&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2317">PR #2317&lt;/a>): 이 제안은 &lt;code>EOSE&lt;/code>에 긍정적 완결성 마커를 추가하는 반복을 계속하여, 릴레이가 완결성 주장을 하지 않는 레거시 &lt;code>EOSE&lt;/code> 사례와 &amp;ldquo;저장된 이벤트가 완전히 전달됨&amp;quot;을 구별할 수 있게 합니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="여섯-번의-nostr-4월">여섯 번의 Nostr 4월&lt;/h2>
&lt;p>4월은 Nostr 개발 경로의 깨끗한 단면을 제공합니다: 2021년의 프로토콜 문서, 2022년의 초기 클라이언트 작업, 2023년의 Damus 이후 애플리케이션 웨이브, 2024년의 프라이빗 메시징 및 git-over-Nostr 작업, 2025년의 Blossom 및 릴레이 리스트 정리, 2026년의 채택 중심 클라이언트 grant.&lt;/p>
&lt;h3 id="2021년-4월-nips-저장소-이전의-프로토콜-문서">2021년 4월: NIPs 저장소 이전의 프로토콜 문서&lt;/h3>
&lt;p>Fiatjaf는 2020년 11월 20일에 원본 Nostr 기사 &lt;a href="https://fiatjaf.com/nostr.html">&amp;ldquo;Notes and Other Stuff Transmitted by Relays&amp;rdquo;&lt;/a>를 게시했습니다. 그 첫 번째 텍스트는 이미 프로토콜을 정의하는 핵심 형태를 포함하고 있었습니다: 사용자는 키로 이벤트에 서명하고, 릴레이에 게시하며, 선택한 릴레이에서 읽습니다. &lt;a href="https://github.com/nostr-protocol/nostr/commits?since=2021-04-01&amp;amp;until=2021-04-30">&lt;code>nostr-protocol/nostr&lt;/code> 커밋 로그&lt;/a>는 4월 1일에서 4월 30일 사이에 커밋이 없음을 보여줍니다. 활동은 양쪽에 자리잡고 있습니다: 2021년 3월 커밋은 초기 &amp;ldquo;nostwitter&amp;rdquo; 링크와 &lt;code>kind&lt;/code> 필터를 추가했고, 2021년 5월은 NIP-02를 재활용하고 NIP 저자를 추가했습니다.&lt;/p>
&lt;p>2021년 4월에는 공개 클라이언트 시장이 없었고, 눈에 보이는 릴레이 네트워크도 없었으며, NIPs 저장소도 없었습니다. 프로토콜은 여전히 작은 문서와 몇 가지 실험으로 존재했습니다. Nostr는 아직 소셜 네트워크나 개발 플랫폼이 되지 않았습니다. 첫 번째 지속적인 기여자 웨이브를 기다리는 릴레이/키/이벤트 모델이었습니다.&lt;/p>
&lt;h3 id="2022년-4월-nip는-여전히-메인-저장소에-있었음">2022년 4월: NIP는 여전히 메인 저장소에 있었음&lt;/h3>
&lt;p>2022년 4월은 NIP가 메인 &lt;code>nostr-protocol/nostr&lt;/code> 저장소에서 이동하기 전 마지막 달이었습니다. 분리가 아직 일어나지 않았기 때문에 전용 &lt;a href="https://github.com/nostr-protocol/nips">&lt;code>nostr-protocol/nips&lt;/code>&lt;/a> 저장소는 4월 pull request 이력이 없습니다. 메인 저장소에서는 세 개의 4월 커밋이 들어왔습니다: 4월 8일 goswami1999의 &lt;a href="https://github.com/nostr-protocol/nostr/commit/bae286312a233b971bee5429adda7aff41747eb8">&amp;ldquo;Update readme to add nip12&amp;rdquo;&lt;/a>, 4월 25일 jb55의 &lt;a href="https://github.com/nostr-protocol/nostr/commit/4b9e9d123273ba8a5c70d77df46922070c11c11d">&amp;ldquo;add kinds list&amp;rdquo;&lt;/a>, 4월 28일 steliosrammos의 &lt;a href="https://github.com/nostr-protocol/nostr/commit/759997657f07e0344064228ffe5e93febe85d367">&amp;ldquo;add js formatting to sample code&amp;rdquo;&lt;/a>.&lt;/p>
&lt;p>클라이언트 작업도 형태를 갖추기 시작했습니다. 2022년 4월의 Damus 커밋은 초기 채팅방 동작, 프로필 처리, 앱 아이콘을 추가했고, nostr-tools는 초기 클라이언트 및 실험을 위한 JavaScript 라이브러리 경로가 되고 있었습니다. 프로토콜 측면에서는 NIP-12 제네릭 태그 쿼리가 태그 검색에 문서화된 자리를 제공했고, kinds 리스트는 Nostr를 레지스트리 모델로 이동시켰으며, 더 나은 JavaScript 예제는 클라이언트 및 라이브러리 작성자가 사양을 구현하기 더 쉽게 만들었습니다. 5월 1일에 fiatjaf는 NIP를 전용 저장소로 이동시켰습니다. 2022년 4월은 원래의 단일 저장소 시대의 마지막 달이었습니다.&lt;/p>
&lt;h3 id="2023년-4월-damus-이후-애플리케이션-확장">2023년 4월: Damus 이후 애플리케이션 확장&lt;/h3>
&lt;p>2023년 4월은 2023년 1월 31일에 Damus가 iOS App Store에서 출시된 지 3개월 후, 그리고 Jack Dorsey가 Nostr 공개 키를 게시한 후에 왔습니다. 네트워크는 첫 번째 주요 공개 성장 웨이브를 막 흡수했습니다. Damus, Snort, Iris, Coracle, Amethyst와 같은 클라이언트가 활발했으며, 릴레이 운영자는 더 큰 소셜 그래프가 대역폭, 스팸, 검색, 조정 가정에 미치는 영향을 배우고 있었습니다.&lt;/p>
&lt;p>2023년 4월에는 병합된 NIPs PR이 하나 있었습니다: 4월 17일에 병합된 &lt;a href="https://github.com/nostr-protocol/nips/pull/456">PR #456&lt;/a>은 NIP-21 URI 처리에 NIP-19 bech32 엔티티 링크를 추가했습니다. 주변 커밋은 프로토콜 작업 배후의 애플리케이션 압력을 보여줍니다. 2023년 4월은 &lt;a href="https://github.com/nostr-protocol/nips/commit/8b39976e78f90fe766ad7149e250777cddacbb5e">NIP-45 COUNT&lt;/a>, 이벤트별 zap 마커, &lt;a href="https://github.com/nostr-protocol/nips/commit/bf0a0da6a48b96467172414d8e41dc72b0ca379c">NIP-15 marketplace&lt;/a>, NIP-26 delete delegation 시맨틱, NIP-94 파일 메타데이터, NIP-47 wallet-connect 오류 처리, &lt;a href="https://github.com/nostr-protocol/nips/commit/e91ce3409e1ce8267fc07a21784d2538621267c3">NIP-30 커스텀 이모지&lt;/a> 작업을 보았습니다. 기여자 목록은 fiatjaf, staab, pablof7z, Semisol, CodyTseng, sethforprivacy, mikedilger, AsaiToshiya, alexgleason, martindsq, frbittencourt, arkin0x을 포함하도록 넓어졌습니다.&lt;/p>
&lt;p>Damus, Snort, Iris, Coracle, Amethyst는 더 이상 사양을 둘러싼 데모가 아니었습니다. 그들은 온보딩, 피드, 스팸, zap, 미디어, 릴레이 선택을 다루는 프로덕션 클라이언트였습니다. 2023년 4월의 프로토콜 작업은 그러한 클라이언트가 만든 백로그처럼 읽힙니다: zap, 마켓플레이스, 파일 메타데이터, 카운팅, 이모지, identity 링크가 모두 사양을 단순한 노트와 팔로우 이상으로 밀어붙였습니다.&lt;/p>
&lt;h3 id="2024년-4월-프라이빗-메시징-git-over-nostr-유지-관리자-지원">2024년 4월: 프라이빗 메시징, git-over-Nostr, 유지 관리자 지원&lt;/h3>
&lt;p>2024년 4월에는 두 개의 NIP PR 병합이 있었습니다. 4월 10일에 병합된 &lt;a href="https://github.com/nostr-protocol/nips/pull/1167">PR #1167&lt;/a>은 클라이언트와 signer가 요청된 및 승인된 작업에 대한 정확한 언어가 필요한 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> 원격 서명의 혼란스러운 용어를 수정했습니다. 4월 17일에 병합된 &lt;a href="https://github.com/nostr-protocol/nips/pull/1108">PR #1108&lt;/a>은 status 이벤트, 명확화, 선택적 유지 관리자, 저장소 식별자, 발견 가능성 태그로 &lt;a href="https://nostrcompass.org/ko/topics/nip-34/">NIP-34&lt;/a> git 저장소를 확장했습니다. 이 단계는 git-over-Nostr를 ngit와 나중의 GitWorkshop에 더 실용적으로 만들었습니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/commit/df30012430c88d49fb5b124992b04d5c61b6338b">NIP-17&lt;/a>은 이전에 NIP-24였으며, 4월 24일에 프라이빗 DM과 소규모 그룹 채팅을 위한 sealed gift-wrapped 메시지로 도착했습니다. 클라이언트 및 라이브러리 작업이 함께 진행되었습니다: Amethyst, Primal, Gossip, nostr-tools, NDK, rust-nostr가 모두 같은 기간에 활발했습니다.&lt;/p>
&lt;p>OpenSats는 또한 2024년 4월에 Nostr 개발자에 대한 장기 지원을 발표했습니다: 4월 9일 &lt;a href="https://opensats.org/blog/pablofz7-receives-lts-grant">PabloF7z&lt;/a>, 4월 12일 &lt;a href="https://opensats.org/blog/stuart-bowman-receives-lts-grant">Stuart Bowman&lt;/a>, 4월 15일 &lt;a href="https://opensats.org/blog/hzrd149-receives-lts-grant">hzrd149&lt;/a>. 이러한 grant는 자금을 고립된 프로젝트 grant에서 릴레이, 라이브러리, 클라이언트 인프라의 지속적인 유지 관리로 이동시켰습니다.&lt;/p>
&lt;h3 id="2025년-4월-밀도-있는-nip-정리-및-blossom-공식화">2025년 4월: 밀도 있는 NIP 정리 및 Blossom 공식화&lt;/h3>
&lt;p>2025년 4월은 이 회고에서 가장 밀도 있는 프로토콜 달로, 16개의 병합된 NIPs PR이 있었습니다. 이 달은 NIP-73에 블록체인 트랜잭션 및 주소를 추가하는 &lt;a href="https://github.com/nostr-protocol/nips/pull/1846">PR #1846&lt;/a>, 표준화된 태그 테이블에 NIP-C0 태그를 추가하는 &lt;a href="https://github.com/nostr-protocol/nips/pull/1865">PR #1865&lt;/a>로 시작했습니다. 계속해서 &lt;a href="https://github.com/nostr-protocol/nips/pull/1801">PR #1801&lt;/a> 및 &lt;a href="https://github.com/nostr-protocol/nips/pull/1889">PR #1889&lt;/a>는 kind &lt;code>10002&lt;/code> 릴레이 리스트 재게시 가이드를 개선했고, &lt;a href="https://github.com/nostr-protocol/nips/pull/1879">PR #1879&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/topics/nip-65/">NIP-65&lt;/a>를 축소하고 명확하게 했습니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/1822">PR #1822&lt;/a>는 Blossom 상호작용을 위한 NIP-B7을 추가하여, 1년 이상의 비공식 관행 이후 Nostr 클라이언트와 Blossom 서버에 canonical 조정 계층을 제공했습니다. &lt;a href="https://github.com/nostr-protocol/nips/pull/1051">PR #1051&lt;/a>은 위임 이벤트 서명 사양인 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/26.md">NIP-26&lt;/a>을 폐지했습니다. NIP-26은 안전하게 구현하기 어려웠으며 NIP-46과 다른 signer 패턴이 성숙해지면서 덜 매력적으로 되었습니다.&lt;/p>
&lt;p>이 달의 나머지는 정리와 애플리케이션 확장을 결합했습니다: &lt;a href="https://github.com/nostr-protocol/nips/pull/1882">PR #1882&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/topics/nip-11/">NIP-11&lt;/a>에 개인 정보 보호 정책 및 서비스 약관 필드를 추가했고, &lt;a href="https://github.com/nostr-protocol/nips/pull/1849">PR #1849&lt;/a>는 NIP-B0 하의 kind &lt;code>39701&lt;/code> 웹 북마크를 확장했으며, &lt;a href="https://github.com/nostr-protocol/nips/pull/1891">PR #1891&lt;/a>은 그 북마크 kind를 README에 추가했고, &lt;a href="https://github.com/nostr-protocol/nips/pull/1895">PR #1895&lt;/a>는 NIP-B0 표준화된 태그를 추가했습니다. OpenSats는 4월 16일에 &lt;a href="https://opensats.org/blog/eleventh-wave-of-nostr-grants">Eleventh Wave of Nostr Grants&lt;/a>를 발표하여 Swae, HAMSTR, Vertex, Nostr Double Ratchet, Nostr Game Engine을 지원했습니다. Primal, Coracle, noStrudel, nostr-tools, NDK, rust-nostr도 이 기간에 출시되고 있었으므로, 프로토콜 정리는 활발한 클라이언트 및 라이브러리 작업 옆에 자리잡았습니다.&lt;/p>
&lt;h3 id="2026년-4월-nip-34-강화-배지-채택-중심-grant">2026년 4월: NIP-34 강화, 배지, 채택 중심 grant&lt;/h3>
&lt;p>이 이슈가 마무리되는 달인 2026년 4월에는 네 개의 병합된 NIPs PR이 있었습니다. 첫 번째는 4월 1일에 병합된 &lt;a href="https://github.com/nostr-protocol/nips/pull/2276">PR #2276&lt;/a>으로, &lt;a href="https://github.com/nostr-protocol/nips/blob/master/58.md">NIP-58&lt;/a> 프로필 배지를 kind &lt;code>10008&lt;/code>로 변경하고 kind &lt;code>30008&lt;/code> 배지 세트를 추가하여, 배지 할당 및 배지 컬렉션을 더 조합 가능하게 만들었습니다. 두 번째 git-over-Nostr 사용성 변경은 4월 10일에 병합된 &lt;a href="https://github.com/nostr-protocol/nips/pull/2312">PR #2312&lt;/a>에 도착하여 &lt;a href="https://nostrcompass.org/ko/topics/nip-34/">NIP-34&lt;/a>에 &lt;code>nostr://&lt;/code> clone URL 시맨틱을 추가했습니다. 4월 25일 정리인 &lt;a href="https://github.com/nostr-protocol/nips/pull/2325">PR #2325&lt;/a> 및 &lt;a href="https://github.com/nostr-protocol/nips/pull/2326">PR #2326&lt;/a>은 사용되지 않고 잘못된 NIP-34 언어를 제거했습니다.&lt;/p>
&lt;p>관련 커밋은 같은 표면을 다듬습니다. 4월 22일에 fiatjaf는 NIP-51에 Blossom 서버 리스트를 추가하고 Flotilla의 PUT 스타일 동작에 맞게 NIP-29 메타데이터 편집을 조정했습니다. 4월 26일에 그는 명확성을 위해 NIP-5A의 이름을 변경했습니다. 2026년 4월은 이미 사용 중인 프로토콜 표면을 구현하기 쉽고 잘못 읽기 어렵게 만드는 데 초점을 맞췄습니다.&lt;/p>
&lt;p>OpenSats는 4월 8일에 &lt;a href="https://opensats.org/blog/sixteenth-wave-of-nostr-grants">Sixteenth Wave of Nostr Grants&lt;/a>를 발표하여 Amethyst Desktop, Nostr Mail, Nostrord, Nurunuru(null&amp;ndash;nostr), HAMSTR 갱신을 지원했습니다: 데스크톱 클라이언트, 이메일과 유사한 메시징, 그룹 UX, 일본어 온보딩, 오프그리드 연결.&lt;/p>
&lt;hr>
&lt;p>&lt;em>Nostr Compass #20을 읽어주셔서 감사합니다. 팁, 수정 사항 또는 다루어야 할 새 프로젝트가 있으시면 &lt;a href="https://nostr.com">Nostr에서 DM을 보내주세요&lt;/a>.&lt;/em>&lt;/p></content:encoded></item><item><title>Nostr Compass #19</title><link>https://nostrcompass.org/ko/newsletters/2026-04-22-newsletter/</link><pubDate>Wed, 22 Apr 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2026-04-22-newsletter/</guid><description>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>가 대규모 Marmot, 커뮤니티, MoQ 오디오 룸 작업을 마무리했고, &lt;a href="https://github.com/OpenTollGate/tollgate">TollGate&lt;/a>는 v0.1.0에서 Nostr와 Cashu 위의 종량제 인터넷 접속을 안정화했습니다. &lt;a href="https://github.com/Cameri/nostream">nostream&lt;/a>은 &lt;a href="https://nostrcompass.org/ko/topics/nip-45/">NIP-45&lt;/a>, &lt;a href="https://nostrcompass.org/ko/topics/nip-62/">NIP-62&lt;/a>, 압축, query hardening, 완전한 &lt;a href="https://nostrcompass.org/ko/topics/nip-11/">NIP-11&lt;/a> parity를 둘러싼 릴레이 작업 한 주를 마무리했습니다. Forgesworn은 Nostr용 signing, identity, paid-API 스택 전체를 공개했습니다. ShockWallet은 Nostr 네이티브 Lightning wallet 흐름을 계속 밀고 있습니다. Formstr 계열(Pollerama, Forms, Calendar)은 보안 강화와 RRULE 지원 전반에 걸쳐 26개의 PR을 병합했습니다. StableKraft, Keep, topaz, WoT Relay, Flotilla, NipLock도 이번 주 배포 목록에 포함됩니다. 심층 분석은 &lt;a href="https://nostrcompass.org/ko/topics/nip-72/">NIP-72 moderated communities&lt;/a>와 &lt;a href="https://nostrcompass.org/ko/topics/nip-57/">NIP-57 zaps&lt;/a>를 다룹니다.&lt;/p></description><content:encoded>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>가 대규모 Marmot, 커뮤니티, MoQ 오디오 룸 작업을 마무리했고, &lt;a href="https://github.com/OpenTollGate/tollgate">TollGate&lt;/a>는 v0.1.0에서 Nostr와 Cashu 위의 종량제 인터넷 접속을 안정화했습니다. &lt;a href="https://github.com/Cameri/nostream">nostream&lt;/a>은 &lt;a href="https://nostrcompass.org/ko/topics/nip-45/">NIP-45&lt;/a>, &lt;a href="https://nostrcompass.org/ko/topics/nip-62/">NIP-62&lt;/a>, 압축, query hardening, 완전한 &lt;a href="https://nostrcompass.org/ko/topics/nip-11/">NIP-11&lt;/a> parity를 둘러싼 릴레이 작업 한 주를 마무리했습니다. Forgesworn은 Nostr용 signing, identity, paid-API 스택 전체를 공개했습니다. ShockWallet은 Nostr 네이티브 Lightning wallet 흐름을 계속 밀고 있습니다. Formstr 계열(Pollerama, Forms, Calendar)은 보안 강화와 RRULE 지원 전반에 걸쳐 26개의 PR을 병합했습니다. StableKraft, Keep, topaz, WoT Relay, Flotilla, NipLock도 이번 주 배포 목록에 포함됩니다. 심층 분석은 &lt;a href="https://nostrcompass.org/ko/topics/nip-72/">NIP-72 moderated communities&lt;/a>와 &lt;a href="https://nostrcompass.org/ko/topics/nip-57/">NIP-57 zaps&lt;/a>를 다룹니다.&lt;/p>
&lt;h2 id="top-stories">Top Stories&lt;/h2>
&lt;h3 id="amethyst-ships-marmot-mip-compliance-nip-72-communities-zap-goals-and-moq-audio-rooms">Amethyst ships Marmot MIP compliance, NIP-72 communities, zap goals, and MoQ audio rooms&lt;/h3>
&lt;p>vitorpamplona가 유지 관리하는 Android 클라이언트 &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>는 이번 주 57개의 PR을 병합했습니다. 이번 주 핵심 주제는 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> 암호화 그룹 준수, 1급 moderated community 지원, 라이브 스트림 zap goal, 그리고 Media over QUIC 기반의 새로운 audio room 스택입니다.&lt;/p>
&lt;p>Marmot 준수 측면에서 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2462">PR #2462&lt;/a>는 내장 &lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a> 구현을 MIP-01 및 MIP-05 wire format과 맞추며, TLS 스타일 길이 prefix의 VarInt 인코딩과 MDK test vector에 대한 round-trip 검증을 추가합니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2435">PR #2435&lt;/a>는 MIP-00 KeyPackage Relay List 지원을 추가해 invitee가 자신의 KeyPackage를 어느 릴레이가 제공하는지 광고할 수 있게 하고, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2436">PR #2436&lt;/a>은 &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>와의 교차 클라이언트 테스트에서 드러난 admin-gate 및 media 처리 공백을 닫았습니다. 같은 날 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2466">PR #2466&lt;/a>은 암호화된 welcome이 &lt;a href="https://github.com/marmot-protocol/mdk">mdk-core&lt;/a>가 만드는 바이트와 동일하게 직렬화되도록 MLS commit framing을 고쳤고, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2471">PR #2471&lt;/a>은 Marmot 공동 관리자 사이에서 상태 분기를 일으키던 outer-layer 복호화 버그를 해결했습니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2477">PR #2477&lt;/a>과 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2493">PR #2493&lt;/a>의 두 번째 준수 패스는 추가 commit 경로와 메시지 암호화 공백을 닫고, 서명, key schedule, welcome-message derivation을 참조 vector와 대조하는 완전한 MLS commit cryptography validator를 추가합니다.&lt;/p>
&lt;p>프로토콜 작업과 함께 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2488">PR #2488&lt;/a>은 &lt;code>amy&lt;/code>를 배포합니다. 이는 Amethyst 구현을 기반으로 Marmot와 MLS 그룹 작업을 수행하는 command-line tool입니다. Amy는 통합자에게 그룹 생성, KeyPackage 생성, welcome 시뮬레이션, 실제 Amethyst signer와의 commit 검증을 스크립트 방식으로 수행할 수 있게 해 주며, 이는 오늘날 cross-client Marmot interop에서 가장 큰 디버깅 공백을 메웁니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2468">PR #2468&lt;/a>은 1급 &lt;a href="https://nostrcompass.org/ko/topics/nip-72/">NIP-72&lt;/a> 커뮤니티 생성 및 관리 기능을 추가합니다. 사용자는 kind &lt;code>34550&lt;/code> 커뮤니티 정의를 작성하고, moderator와 relay hint를 추가하고, 커뮤니티를 가리키는 &lt;code>a&lt;/code> 태그가 포함된 게시물을 제출하고, kind &lt;code>4549&lt;/code> approval 이벤트를 통해 대기 중인 승인을 관리할 수 있습니다. 이 기능은 community moderation 측면에서 Amethyst와 &lt;a href="https://github.com/hzrd149/nostrudel">noStrudel&lt;/a> 사이의 오랜 격차를 메웁니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2458">PR #2458&lt;/a>과 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2473">PR #2473&lt;/a>은 emoji set 지원과 완전한 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/30.md">NIP-30&lt;/a> emoji-pack 관리 UI를 추가해 사용자가 자신의 custom emoji 라이브러리를 구성할 수 있게 합니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2469">PR #2469&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/topics/nip-75/">NIP-75&lt;/a> zap goal을 &lt;a href="https://nostrcompass.org/ko/topics/nip-53/">NIP-53&lt;/a> Live Activities 화면에 연결합니다. 이제 각 라이브 스트림에는 progress bar, 원탭 zap 버튼, top-zappers 리더보드가 있는 fundraising goal 헤더가 붙습니다. 이 리더보드는 스트림의 kind &lt;code>30311&lt;/code> 이벤트에 연결된 kind &lt;code>9735&lt;/code> zap receipt를 읽고 goal의 &lt;code>amount&lt;/code> 목표와 대조해 집계합니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2486">PR #2486&lt;/a>은 전용 Live Streams 피드 화면을 추가하고, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2491">PR #2491&lt;/a>은 NIP-53 proof-of-agreement와 event-builder helper를 넣으며, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2461">PR #2461&lt;/a>은 피드 내 최저 해상도 HLS, picture-in-picture 재생, 전체 화면 자동 해상도 선택을 추가합니다.&lt;/p>
&lt;p>가장 야심찬 새 표면은 실시간 오디오입니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2494">PR #2494&lt;/a>는 &lt;a href="https://datatracker.ietf.org/group/moq/about/">Media over QUIC&lt;/a> transport client와 audio room 지원을 추가합니다. QUIC 위의 pub-sub 모델을 가진 MoQ는, 클라이언트가 특정 track과 priority를 subscribe하고 congestion 처리를 transport에 맡길 수 있기 때문에 WebSocket relay보다 라이브 오디오에 더 잘 맞습니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2487">PR #2487&lt;/a>의 새 Public Chats 화면과 합쳐 보면, Amethyst는 이제 Marmot 암호화 메시징 옆에 놓이는 공개 audio room용 end-to-end 표면을 갖추게 되었습니다.&lt;/p>
&lt;p>탐색과 신뢰성 측면에서는 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2485">PR #2485&lt;/a>와 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2490">PR #2490&lt;/a>이 Follow Pack 탐색 피드를 추가하고 curated follow set을 기본 onboarding preference에 연결해, 새 사용자가 첫 실행부터 내용이 있는 타임라인을 보게 합니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1983">PR #1983&lt;/a>는 실시간 relay 연결을 위한 상시 notification service를 도입해 Marmot DM과 mention이 앱이 foreground가 아니어도 도착하게 하고, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2480">PR #2480&lt;/a>은 adaptive cache sizing이 포함된 on-demand HLS video caching을 추가합니다.&lt;/p>
&lt;h3 id="tollgate-v010-stabilizes-pay-per-use-internet-over-nostr-and-cashu">TollGate v0.1.0 stabilizes pay-per-use internet over Nostr and Cashu&lt;/h3>
&lt;p>&lt;a href="https://github.com/OpenTollGate/tollgate">TollGate&lt;/a>는 4월 21일 &lt;a href="https://github.com/OpenTollGate/tollgate/releases/tag/v0.1.0">v0.1.0 release&lt;/a>를 발표했습니다. 이는 종량제 네트워크 접속용 명세 세트의 첫 태그 스냅샷입니다. 이 프로토콜은 WiFi router, Ethernet switch, Bluetooth tether처럼 연결을 제어할 수 있는 장치가 가격을 광고하고, &lt;a href="https://nostrcompass.org/ko/topics/cashu/">Cashu&lt;/a> ecash token을 받고, 계정이나 구독 대신 선불 local token으로 세션을 관리할 수 있게 합니다. local Cashu wallet에 몇 sats만 있는 고객도 네트워크의 호환 TollGate 어디에서나 다음 1분 또는 다음 megabyte의 접속을 살 수 있습니다.&lt;/p>
&lt;p>이번 릴리스는 아키텍처의 세 계층을 고정합니다. &lt;a href="https://github.com/OpenTollGate/tollgate/blob/v0.1.0/TIP-01.md">TIP-01&lt;/a>에서 정의된 프로토콜 계층은 세 가지 기본 이벤트 형식(Advertisement, Session, Notice)을 규정하고, &lt;a href="https://github.com/OpenTollGate/tollgate/blob/v0.1.0/TIP-02.md">TIP-02&lt;/a>는 그 위에 Cashu 결제를 얹어 고객이 gate가 광고한 임의의 mint에서 token을 상환할 수 있게 합니다. 그 위의 인터페이스 계층에서는 &lt;a href="https://github.com/OpenTollGate/tollgate/blob/v0.1.0/HTTP-01.md">HTTP-01&lt;/a>부터 HTTP-03까지가 제한적인 운영체제용 plain-HTTP 표면을 정의하고, &lt;a href="https://github.com/OpenTollGate/tollgate/blob/v0.1.0/NOSTR-01.md">NOSTR-01&lt;/a>은 WebSocket을 열 수 있는 클라이언트용 Nostr-relay transport를 정의합니다. 마지막으로 &lt;a href="https://github.com/OpenTollGate/tollgate/blob/v0.1.0/WIFI-01.md">WIFI-01&lt;/a>은 결제 고객을 위한 captive-portal routing을 설명하는 medium 계층을 다룹니다.&lt;/p>
&lt;p>결제 자산이 credential이 아니라 bearer token이기 때문에, 고객은 이를 만들기 위해 사전 인터넷 접속이 필요하지 않습니다. 로컬 wallet 안의 Cashu token만으로 첫 1분의 연결을 살 수 있고, 그 뒤 더 많은 token으로 충전할 수 있습니다. Gate끼리 서로 uplink를 살 수도 있으므로, 도달 범위는 단일 운영자를 넘어 확장됩니다. 새 &lt;a href="https://nostrcompass.org/ko/topics/tollgate/">TollGate topic page&lt;/a>가 전체 계층 구조를 정리합니다.&lt;/p>
&lt;h3 id="nostream-merges-53-prs-for-nip-45-nip-62-compression-and-query-hardening">nostream merges 53 PRs for NIP-45, NIP-62, compression, and query hardening&lt;/h3>
&lt;p>&lt;a href="https://github.com/Cameri/nostream">nostream&lt;/a>는 Cameri의 TypeScript relay 구현으로, 이번 주 새로운 NIP 지원, query 성능, 보안 hardening, 운영 다듬기를 포함해 53개의 PR을 병합했습니다.&lt;/p>
&lt;p>기능 작업으로는 &lt;a href="https://github.com/Cameri/nostream/pull/522">PR #522&lt;/a>가 &lt;a href="https://nostrcompass.org/ko/topics/nip-45/">NIP-45&lt;/a> &lt;code>COUNT&lt;/code> 지원을 추가해 클라이언트가 이벤트를 받지 않고도 필터 일치 수를 물을 수 있게 했고, &lt;a href="https://github.com/Cameri/nostream/pull/544">PR #544&lt;/a>는 광고 기능 목록에 &lt;a href="https://nostrcompass.org/ko/topics/nip-62/">NIP-62&lt;/a> right-to-vanish를 추가했습니다. &lt;a href="https://github.com/Cameri/nostream/pull/548">PR #548&lt;/a>은 최근 태그 대소문자 규약에 맞춰 uppercase 태그 필터(&lt;code>#A&lt;/code>부터 &lt;code>#Z&lt;/code>)도 받을 수 있도록 필터 스키마를 확장했고, &lt;a href="https://github.com/Cameri/nostream/pull/514">PR #514&lt;/a>는 이벤트 import/export에 gzip과 xz 압축을 추가해 운영자가 별도 도구 없이도 대형 이벤트 덤프를 노드 간 이동할 수 있게 했습니다.&lt;/p>
&lt;p>query 성능과 정확도 측면에서는 &lt;a href="https://github.com/Cameri/nostream/pull/534">PR #534&lt;/a>가 benchmarking harness와 filter-to-SQL 변환 최적화를 도입했고, &lt;a href="https://github.com/Cameri/nostream/pull/524">PR #524&lt;/a>는 prefix matching 대신 exact-match 검사로 바꾸어 whitelist/blacklist pubkey 매칭 버그를 수정했으며, &lt;a href="https://github.com/Cameri/nostream/pull/553">PR #553&lt;/a>은 &lt;code>upsertMany&lt;/code>에 결정적 tie-breaker를 추가해 &lt;code>created_at&lt;/code> timestamp가 같은 concurrent insert가 더 이상 경합하지 않게 했고, &lt;a href="https://github.com/Cameri/nostream/pull/493">PR #493&lt;/a>은 설정된 trusted proxy에서만 &lt;code>X-Forwarded-For&lt;/code>를 신뢰하도록 제한했습니다. &lt;a href="https://github.com/Cameri/nostream/pull/557">PR #557&lt;/a>은 retention limit, authentication hint, 줄어든 optional field set을 포함한 모든 광고 필드를 현재 명세와 맞추며 relay를 완전한 &lt;a href="https://nostrcompass.org/ko/topics/nip-11/">NIP-11&lt;/a> parity 상태로 끌어올렸습니다.&lt;/p>
&lt;h2 id="shipping-this-week">Shipping This Week&lt;/h2>
&lt;h3 id="primal-android-ships-explore-tab-nip-05-verification-and-audio-player">Primal Android ships Explore tab, NIP-05 verification, and audio player&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a>는 지난주 피드 재설계 위에 11개의 PR을 추가로 병합했습니다. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1021">PR #1021&lt;/a>은 인기 사용자, follow pack, curated feed 중심의 새 Explore 탭을 도입하고, &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1015">PR #1015&lt;/a>는 Primal의 Advanced Search DSL을 미리 채워 넣는 feed editor를 추가합니다. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/994">PR #994&lt;/a>는 프로필용 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/05.md">NIP-05&lt;/a> verification UI를 제공하고, &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/997">PR #997&lt;/a>는 피드 안에서 바로 오디오 첨부를 재생하는 in-feed audio player를 넣습니다. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1018">PR #1018&lt;/a>은 wallet QR scanner 경로를 재사용해 signer pairing과 wallet linking을 모두 처리하는 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> nostr-connect pairing을 추가합니다.&lt;/p>
&lt;h3 id="strfry-adds-prometheus-write-path-metrics-and-fixes-nip-42-auth-envelope">strfry adds Prometheus write-path metrics and fixes NIP-42 AUTH envelope&lt;/h3>
&lt;p>&lt;a href="https://github.com/hoytech/strfry">strfry&lt;/a>는 운영자 관점의 개선 묶음을 배포했습니다. &lt;a href="https://github.com/hoytech/strfry/pull/194">PR #194&lt;/a>는 전용 Prometheus write-path metrics exporter와 새 connection gauge를 추가하고, &lt;a href="https://github.com/hoytech/strfry/pull/197">PR #197&lt;/a>은 대역폭 추적용으로 연결별 업/다운 바이트와 압축 비율을 기록합니다. &lt;a href="https://github.com/hoytech/strfry/pull/192">PR #192&lt;/a>는 하드코딩된 filter tag limit를 런타임 설정 옵션으로 승격해 재컴파일 없이 조정할 수 있게 합니다. 프로토콜 정확성 측면에서는 &lt;a href="https://github.com/hoytech/strfry/pull/201">PR #201&lt;/a>이 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/42.md">NIP-42&lt;/a> AUTH 실패 응답을 &lt;code>NOTICE&lt;/code> 메시지에서, NIP가 실제로 요구하는 &lt;code>OK&lt;/code> envelope로 바꿨습니다. 이는 auth-gated relay에서 오래된 interop 문제였습니다.&lt;/p>
&lt;h3 id="shopstr-hardens-storefront-security-across-13-prs">Shopstr hardens storefront security across 13 PRs&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a>는 Nostr marketplace 클라이언트로, 이번 주 13개의 PR 대부분이 보안 수정이었습니다. &lt;a href="https://github.com/shopstr-eng/shopstr/pull/434">PR #434&lt;/a>는 판매자가 방문자 브라우저에서 스크립트를 실행할 수 있게 하던 storefront link의 stored-JavaScript 취약점을 막고, &lt;a href="https://github.com/shopstr-eng/shopstr/pull/417">PR #417&lt;/a>은 reflected XSS를 막기 위해 storefront policy HTML 렌더링을 escape하며, &lt;a href="https://github.com/shopstr-eng/shopstr/pull/418">PR #418&lt;/a>은 인증 없이 cached event를 삭제할 수 있던 API를 닫아 교차 사용자 데이터 삭제를 막습니다. &lt;a href="https://github.com/shopstr-eng/shopstr/pull/433">PR #433&lt;/a>은 cached message 읽기에 인증을 요구하고, &lt;a href="https://github.com/shopstr-eng/shopstr/pull/419">PR #419&lt;/a>는 proper auth 뒤에 storefront mutation과 event-cache endpoint를 보호하며, &lt;a href="https://github.com/shopstr-eng/shopstr/pull/435">PR #435&lt;/a>와 &lt;a href="https://github.com/shopstr-eng/shopstr/pull/414">PR #414&lt;/a>는 code scanning에서 발견된 두 개의 SSRF 문제를 고칩니다. 기능 버그로는 &lt;a href="https://github.com/shopstr-eng/shopstr/pull/421">PR #421&lt;/a>이 failed-relay-publish queue의 replay 문제를 해결하고, &lt;a href="https://github.com/shopstr-eng/shopstr/pull/425">PR #425&lt;/a>는 wallet-events fetch를 수리하며, &lt;a href="https://github.com/shopstr-eng/shopstr/pull/392">PR #392&lt;/a>는 checkout 전에 저장된 cart discount를 다시 검증합니다.&lt;/p>
&lt;h3 id="nostria-v3126-through-v3128-add-background-music-playback-on-android">Nostria v3.1.26 through v3.1.28 add background music playback on Android&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a>는 이번 주 &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.22">v3.1.22&lt;/a>부터 &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.28">v3.1.28&lt;/a>까지 여섯 개의 릴리스를 배포했습니다. 핵심 변화는 &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.26">v3.1.26&lt;/a>의 Android background music playback입니다. 앱은 오디오가 재생되는 동안 살아 있으며, notification bar와 lock screen에서 media control을 제공합니다. 뒤이은 &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.27">v3.1.27&lt;/a>과 &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.28">v3.1.28&lt;/a>은 이 새 media-service 표면을 더 단단하게 만들었습니다. &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-15-newsletter/">뉴스레터 #18&lt;/a>은 직전의 local-image-generation 릴리스(v3.1.19부터 v3.1.21)를 다뤘습니다.&lt;/p>
&lt;h3 id="wisp-v0180-beta-adds-normie-mode-for-you-feed-and-nip-29-group-config">Wisp v0.18.0-beta adds Normie Mode, For You feed, and NIP-29 group config&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a>는 barrydeen이 Kotlin과 Jetpack Compose로 만든 Android 클라이언트로, 4월 16일 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.18.0-beta">v0.18.0-beta&lt;/a>를 배포했습니다. 이 릴리스는 Bitcoin 네이티브 맥락 밖에서 들어오는 사용자를 겨냥합니다. &lt;a href="https://github.com/barrydeen/wisp/pull/462">PR #462&lt;/a>는 앱 전반에 fiat 표시 금액을 보여 주는 Normie Mode를 추가하고, &lt;a href="https://github.com/barrydeen/wisp/pull/464">PR #464&lt;/a>는 topic picker와 첫 게시물 가이드를 포함한 onboarding overhaul을 수행합니다. &lt;a href="https://github.com/barrydeen/wisp/pull/469">PR #469&lt;/a>는 extended follows, trending event, followed hashtag를 혼합하는 For You 피드를 추가합니다.&lt;/p>
&lt;p>프로토콜 작업으로는 &lt;a href="https://github.com/barrydeen/wisp/pull/471">PR #471&lt;/a>이 flags, invites, roles, AUTH prompt를 위한 &lt;a href="https://nostrcompass.org/ko/topics/nip-29/">NIP-29&lt;/a> 그룹 설정을 추가하고, &lt;a href="https://github.com/barrydeen/wisp/pull/478">PR #478&lt;/a>은 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/42.md">NIP-42&lt;/a> AUTH가 끝나기 전에 그룹 &lt;code>9021&lt;/code>, &lt;code>9007&lt;/code>, &lt;code>9009&lt;/code> 이벤트를 보내지 않도록 순서 버그를 고치며 admin 측 실패도 표시합니다. &lt;a href="https://github.com/barrydeen/wisp/pull/481">PR #481&lt;/a>은 mention된 pubkey의 &lt;a href="https://nostrcompass.org/ko/topics/nip-65/">NIP-65&lt;/a> inbox relay로 노트를 방송해, 발신자와 수신자의 relay 집합이 겹치지 않아도 답글이 도달하게 합니다.&lt;/p>
&lt;h3 id="noornote-v084-adds-scheduled-posts-and-live-stream-zapping">NoorNote v0.8.4 adds Scheduled Posts and live stream zapping&lt;/h3>
&lt;p>&lt;a href="https://github.com/77elements/noornote">NoorNote&lt;/a>는 &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.8.4">v0.8.4&lt;/a>와 &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.8.5">v0.8.5&lt;/a>를 배포했습니다. v0.8.4의 핵심 기능은 Scheduled Posts add-on입니다. 앱은 완전히 서명된 이벤트를 NoorNote가 운영하는 릴레이에 넘기고, 릴레이가 지정 시각에 이를 게시하므로 개인 키는 장치를 떠나지 않습니다. 같은 릴리스는 라이브 스트림 카드에서 한 번 탭하는 것만으로 zap을 보낼 수 있게 했고, 보낸 sats는 &lt;a href="https://nostrcompass.org/ko/topics/nip-53/">NIP-53&lt;/a>을 통해 스트림의 chat overlay에 나타납니다. 또한 fiat-rate API가 잠시 불안정할 때도 wallet balance를 계속 표시합니다. v0.8.5는 긴 Android 스크롤에서 중복 게시물을 만들던 timeline deduplication 버그를 수정합니다.&lt;/p>
&lt;h3 id="topaz-v002-ships-a-nostr-relay-for-android">topaz v0.0.2 ships a Nostr relay for Android&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/topaz">topaz&lt;/a>는 &lt;a href="https://github.com/fiatjaf">fiatjaf&lt;/a>가 만든 Android 휴대폰용 Nostr relay로, 2026-04-17에 &lt;a href="https://github.com/fiatjaf/topaz/releases/tag/v0.0.2">v0.0.2&lt;/a>를 배포했습니다. 이 프로젝트는 Kotlin-first이며, 휴대폰을 항상 켜져 있는 개인 relay로 위치시킵니다. 현재 범위는 좁습니다. 설치 가능한 Android 패키지 안에서 동작하는 relay라는 점 자체가 핵심입니다.&lt;/p>
&lt;h3 id="stablekraft-v100-ships-the-first-stable-music-and-podcast-pwa-release">StableKraft v1.0.0 ships the first stable music-and-podcast PWA release&lt;/h3>
&lt;p>&lt;a href="https://github.com/ChadFarrow/stablekraft-app">StableKraft&lt;/a>는 podcast 피드에서 가져온 음악을 발견하고 정리하고 스트리밍하는 Next.js PWA로, auth와 social 기능에는 Nostr를, V4V 결제에는 Lightning을 사용합니다. 2026-04-18에 &lt;a href="https://github.com/ChadFarrow/stablekraft-app/releases/tag/v1.0.0">v1.0.0&lt;/a>에 도달했습니다. 같은 주에는 &lt;a href="https://github.com/ChadFarrow/stablekraft-app/commit/7ac90f6">15분 OPML cache와 잘못된 XML 제거&lt;/a>로 feed ingestion을 강화했고, &lt;a href="https://github.com/ChadFarrow/stablekraft-app/commit/fbf337b">후속 수정&lt;/a>에서 nightly reparse window를 720시간에서 24시간으로 줄여 새로 추가된 feed가 더 빨리 스스로 복구되도록 했습니다.&lt;/p>
&lt;h3 id="niplock-ships-a-nip-17-based-password-manager">NipLock ships a NIP-17-based password manager&lt;/h3>
&lt;p>&lt;a href="https://gitworkshop.dev/npub1z5jf78uhd68znuwwwu926th55rzd0wy8nd9clkr03cx22mwme0jqazk56h/relay.ngit.dev/passwd">NipLock&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> gift-wrapped direct message를 사용해 장치 간 자격 증명을 저장하고 동기화하는 password manager입니다. 각 password entry는 사용자 키에서 자기 자신으로 보내는 NIP-17 DM이므로, 같은 키로 인증한 모든 장치에 같은 이벤트가 복제됩니다. 서명은 raw &lt;code>nsec&lt;/code>, &lt;a href="https://github.com/fiatjaf/nos2x">nos2x&lt;/a> 같은 browser extension, 또는 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a>를 통한 &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>로 할 수 있어 master key를 클라이언트 장치 밖에 둘 수 있습니다.&lt;/p>
&lt;h3 id="flotilla-budabit-polishes-its-nip-34-repo-surface">flotilla-budabit polishes its NIP-34 repo surface&lt;/h3>
&lt;p>Budabit 커뮤니티의 &lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a> fork인 &lt;a href="https://github.com/Pleb5/flotilla-budabit">flotilla-budabit&lt;/a>는 NIP-34 git-over-nostr 워크플로를 다듬는 수정 묶음을 배포했습니다. 이번 주 업데이트는 &lt;a href="https://github.com/Pleb5/flotilla-budabit/commit/a6fb67e">repo discussion control 복원&lt;/a>, &lt;a href="https://github.com/Pleb5/flotilla-budabit/commit/e2b891a">detail page에서 sticky repo tab 유지&lt;/a>, &lt;a href="https://github.com/Pleb5/flotilla-budabit/commit/43d5e9e">저장된 GRASP relay에서 repo announcement 불러오기&lt;/a>, &lt;a href="https://github.com/Pleb5/flotilla-budabit/commit/2dbb9f0">maintainer가 적용한 patch 상태 동기화 유지&lt;/a>를 포함합니다. upstream Flotilla와 가깝게 움직이면서도, 이 fork는 Budabit 기여자를 위한 repo view를 우선합니다.&lt;/p>
&lt;h3 id="rx-nostr-372-through-374-add-default-verifier-and-optional-constructor-args">rx-nostr 3.7.2 through 3.7.4 add default verifier and optional constructor args&lt;/h3>
&lt;p>&lt;a href="https://github.com/penpenpng/rx-nostr">rx-nostr&lt;/a>는 RxJS 기반 Nostr 라이브러리로, &lt;a href="https://github.com/penpenpng/rx-nostr/releases/tag/rx-nostr%403.7.2">3.7.2&lt;/a>, &lt;a href="https://github.com/penpenpng/rx-nostr/releases/tag/rx-nostr%403.7.3">3.7.3&lt;/a>, &lt;a href="https://github.com/penpenpng/rx-nostr/releases/tag/rx-nostr%403.7.4">3.7.4&lt;/a>를 배포했습니다. &lt;a href="https://github.com/penpenpng/rx-nostr/pull/192">PR #192&lt;/a>는 기본 Schnorr signature verifier를 추가해 호출자가 이를 수동으로 연결할 필요를 없앴고, 짝을 이루는 &lt;a href="https://github.com/penpenpng/rx-nostr/releases/tag/crypto%403.1.6">crypto@3.1.6&lt;/a>은 &lt;code>@noble/curves&lt;/code> 사용 버그를 바로잡아 가짜 검증 실패를 제거했습니다. &lt;a href="https://github.com/penpenpng/rx-nostr/pull/195">PR #195&lt;/a>는 3.7.4에서 &lt;code>createRxNostr()&lt;/code> 인수를 optional로 만들어, 빠른 통합에서는 zero configuration으로 라이브러리를 만들 수 있게 합니다.&lt;/p>
&lt;h3 id="keep-android-v100-ships-with-reproducible-builds-and-zero-trackers">Keep Android v1.0.0 ships with reproducible builds and zero trackers&lt;/h3>
&lt;p>&lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a>는 Nostr 네이티브 password 및 secret manager로, hardening PR 연속 이후 4월 21일 &lt;a href="https://github.com/privkeyio/keep-android/releases/tag/v1.0.0">v1.0.0&lt;/a>을 배포했습니다. &lt;a href="https://github.com/privkeyio/keep-android/pull/241">PR #241&lt;/a>은 고정되고 검증된 toolchain을 사용하는 reproducible build recipe를 추가하고, &lt;a href="https://github.com/privkeyio/keep-android/pull/248">PR #248&lt;/a>은 Google Play Services 의존성을 없애기 위해 Google ML Kit를 ZXing으로 교체하며, &lt;a href="https://github.com/privkeyio/keep-android/pull/252">PR #252&lt;/a>는 &lt;a href="https://reports.exodus-privacy.eu.org/en/">Exodus Privacy scan&lt;/a>를 공개해 v1.0.0 빌드에 tracker가 0개임을 보여 줍니다. &lt;a href="https://github.com/privkeyio/keep-android/pull/256">PR #256&lt;/a>은 &lt;a href="https://zapstore.dev">zapstore&lt;/a>를 통한 배포를 위해 &lt;code>zapstore.yaml&lt;/code> manifest를 추가합니다.&lt;/p>
&lt;h3 id="flotilla-173-and-174-add-kind-9-wrapping-for-richer-nip-29-rooms">Flotilla 1.7.3 and 1.7.4 add kind-9 wrapping for richer NIP-29 rooms&lt;/h3>
&lt;p>&lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a>는 hodlbod의 &lt;a href="https://nostrcompass.org/ko/topics/nip-29/">NIP-29&lt;/a> groups 클라이언트로, &lt;a href="https://gitea.coracle.social/coracle/flotilla/src/tag/1.7.3">1.7.3&lt;/a>과 &lt;a href="https://gitea.coracle.social/coracle/flotilla/src/tag/1.7.4">1.7.4&lt;/a>를 배포했습니다. 핵심 프로토콜 변화는 &lt;a href="#ZgotmplZ">hodlbod의 release note&lt;/a>에 공지되고 &lt;a href="https://github.com/nostr-protocol/nips/pull/2310">NIP PR #2310&lt;/a>과 연계된, 비채팅 콘텐츠 타입의 kind-9 wrapping입니다. 캘린더 이벤트, poll, 기타 비채팅 payload를 kind &lt;code>9&lt;/code> 안에 감싸 그룹에 보내면, 클라이언트는 포함된 객체를 렌더링하면서도 그것이 어느 room에서 왔는지 문맥을 유지할 수 있습니다.&lt;/p>
&lt;p>같은 릴리스 계열은 poll, &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> 로그인용 Aegis URL scheme, space invite를 위한 native share, room mention, 모바일 clipboard 이미지 붙여넣기, draft, 통화 중 video, feed pagination 개선도 추가합니다. 이는 &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-01-newsletter/">voice room과 email login&lt;/a>으로 다뤘던 &lt;a href="https://gitea.coracle.social/coracle/flotilla/src/tag/1.7.0">1.7.0과 1.7.1&lt;/a> 이후 첫 Flotilla 릴리스입니다.&lt;/p>
&lt;h3 id="wot-relay-v021-migrates-eventstore-to-lmdb">WoT Relay v0.2.1 migrates eventstore to LMDB&lt;/h3>
&lt;p>&lt;a href="https://github.com/bitvora/wot-relay">WoT Relay&lt;/a>는 bitvora의 web-of-trust filtered relay로, 2026-04-22에 &lt;a href="https://github.com/bitvora/wot-relay/releases/tag/v0.2.1">v0.2.1&lt;/a>을 배포했습니다. &lt;a href="https://github.com/bitvora/wot-relay/pull/97">PR #97&lt;/a>은 eventstore를 &lt;a href="http://www.lmdb.tech/">LMDB&lt;/a>로 옮기고 WoT bootstrap fetch를 재조정해 relay가 upstream read budget을 소진하지 않고 초기 trust graph를 만들게 했으며, &lt;a href="https://github.com/bitvora/wot-relay/pull/99">PR #99&lt;/a>는 대응하는 보안 수정을 위해 &lt;code>golang.org/x/crypto&lt;/code>를 v0.45.0으로 올렸습니다. &lt;a href="https://github.com/bitvora/wot-relay/pull/100">PR #100&lt;/a>은 릴리스에 맞춰 광고되는 &lt;a href="https://nostrcompass.org/ko/topics/nip-11/">NIP-11&lt;/a> software URL과 version string을 갱신합니다.&lt;/p>
&lt;h3 id="formstr-suite-pollerama-security-pass-forms-i18n-calendar-rrule-support">Formstr suite: Pollerama security pass, Forms i18n, Calendar RRULE support&lt;/h3>
&lt;p>Formstr 계열은 이번 주 Pollerama, Formstr forms, Nostr Calendar 전반에 걸쳐 26개의 PR을 병합했습니다. 투표 앱 쪽에는 보안 테마가 강했고, 나머지 제품에는 기능 작업이 들어갔습니다.&lt;/p>
&lt;p>&lt;a href="https://pollerama.fun">Pollerama&lt;/a>는 &lt;a href="https://github.com/formstr-hq/nostr-polls">nostr-polls&lt;/a> 기반 Nostr poll 생성 및 투표 앱으로, 키 처리 방식을 강화했습니다. &lt;a href="https://github.com/formstr-hq/nostr-polls/pull/182">PR #182&lt;/a>는 로그아웃 시 캐시된 direct message를 만료시켜 공유 기기에서 이전 사용자 상태가 남지 않게 했고, &lt;a href="https://github.com/formstr-hq/nostr-polls/pull/175">PR #175&lt;/a>는 로컬 키를 안전한 browser storage로 옮겼으며, &lt;a href="https://github.com/formstr-hq/nostr-polls/pull/171">PR #171&lt;/a>은 모든 login 경로에서 kind &lt;code>0&lt;/code> profile content에 대한 &lt;code>JSON.parse&lt;/code>를 방어해 잘못된 프로필이 세션을 깨지 못하게 했습니다. 제품 측면에서는 &lt;a href="https://github.com/formstr-hq/nostr-polls/pull/186">PR #186&lt;/a>이 &lt;code>pollerama.fun&lt;/code>용 HTTPS deep linking을 연결해 공유된 poll URL이 앱을 직접 열게 했고, &lt;a href="https://github.com/formstr-hq/nostr-polls/pull/169">PR #169&lt;/a>은 poll 결과에서 작성자 이름을 클릭 가능하게 만들었습니다.&lt;/p>
&lt;p>&lt;a href="https://formstr.app">Formstr&lt;/a>는 &lt;a href="https://github.com/formstr-hq/nostr-forms">nostr-forms&lt;/a> 기반 Nostr 네이티브 form 제품군으로, 입력 방식과 onboarding 표면을 넓혔습니다. &lt;a href="https://github.com/formstr-hq/nostr-forms/pull/475">PR #475&lt;/a>는 audio와 video URL 지원을 추가해 form 안에 미디어를 직접 임베드할 수 있게 했고, &lt;a href="https://github.com/formstr-hq/nostr-forms/pull/439">PR #439&lt;/a>는 웹 앱에 i18n을 도입했으며, &lt;a href="https://github.com/formstr-hq/nostr-forms/pull/466">PR #466&lt;/a>은 기존 제작자가 설문을 다시 만들지 않고도 이전할 수 있도록 Google Forms onboarding importer를 추가했습니다. &lt;a href="https://github.com/formstr-hq/nostr-forms/pull/463">PR #463&lt;/a>은 browser console에서 민감한 키 로그를 제거해 privacy leak를 막았습니다.&lt;/p>
&lt;p>&lt;a href="https://calendar.formstr.app">Nostr Calendar by Formstr&lt;/a>는 같은 날 &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.3.0">v1.3.0&lt;/a>과 &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.4.0">v1.4.0&lt;/a>을 배포했고, 핵심은 제대로 된 recurrence-rule 표면입니다. &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/107">PR #107&lt;/a>은 multiple 및 custom RRULE 지원을 추가해 이벤트가 단일 cadence를 넘어 복잡한 일정으로 반복되게 하고, &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/101">PR #101&lt;/a>은 floating RRULE date를 RFC 5545에 맞춰 UTC로 해석해 timezone 간 event-time drift를 일으키던 오래된 버그를 고칩니다. &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/97">PR #97&lt;/a>은 공유 이벤트를 자신의 캘린더에 추가할 수 있게 하고, &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/86">PR #86&lt;/a>은 list 단위 notification preference를 도입하며, &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/112">PR #112&lt;/a>은 v1.4.0에 들어간 재작업된 login/loading 경로를 배포합니다. 세 프로젝트 모두 &lt;a href="https://nostrcompass.org/ko/topics/nip-52/">NIP-52&lt;/a> calendar event 위에 구축되며 공통 login stack을 공유합니다.&lt;/p>
&lt;h3 id="also-shipped-notedeck-nostrblue-cliprelay-captains-log">Also shipped: notedeck, nostr.blue, cliprelay, Captain&amp;rsquo;s Log&lt;/h3>
&lt;p>몇몇 클라이언트도 큰 headline 기능 없이 반복적 릴리스를 내놓았습니다. Damus의 Rust 데스크톱 및 모바일 클라이언트 &lt;a href="https://github.com/damus-io/notedeck">notedeck&lt;/a>는 &lt;a href="https://github.com/damus-io/notedeck/releases/tag/v0.10.0-beta.4">v0.10.0-beta.4&lt;/a>를 배포하며 column rendering과 relay pool 버그를 고쳤습니다. Dioxus 기반 Rust 클라이언트 &lt;a href="https://github.com/patrickulrich/nostr.blue/releases/tag/v0.8.6">nostr.blue v0.8.6&lt;/a>은 &lt;a href="https://github.com/patrickulrich/nostr.blue/commit/d90b4ff">Dioxus 0.7.5&lt;/a>를 끌어왔고, 네이티브 오디오 bridge를 &lt;code>manganis::ffi&lt;/code> plugin으로 &lt;a href="https://github.com/patrickulrich/nostr.blue/commit/4207f0c">변환&lt;/a>해 Android 빌드를 다시 가능하게 했습니다. Nostr를 통해 장치 간 clipboard를 동기화하는 &lt;a href="https://github.com/tajava2006/cliprelay">cliprelay&lt;/a>는 &lt;a href="https://github.com/tajava2006/cliprelay/releases/tag/desktop%2Fv0.0.3">Desktop v0.0.3&lt;/a>과 &lt;a href="https://github.com/tajava2006/cliprelay/releases/tag/android%2Fv0.0.4">Android v0.0.4&lt;/a>를 배포하며 sync loop를 다듬고 32-bit Android variant를 제거했습니다. &lt;a href="https://github.com/nodetec/comet">Captain&amp;rsquo;s Log&lt;/a>는 dropped socket을 사용자 개입 없이 교체하는 sync-relay &lt;a href="https://github.com/nodetec/comet/releases/tag/alpha-95f47bd">liveness detection&lt;/a>을 포함한 세 개의 alpha build를 배포했습니다.&lt;/p>
&lt;h2 id="in-development">In Development&lt;/h2>
&lt;h3 id="whitenoise-rs-refactors-to-session-scoped-account-views">whitenoise-rs refactors to session-scoped account views&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise-rs">whitenoise-rs&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> 클라이언트 아래에서 동작하는 Rust daemon으로, 전역 singleton에서 계정별 &lt;code>AccountSession&lt;/code> 뷰로 바꾸는 다단계 리팩터링을 진전시키는 15개의 PR을 병합했습니다. 목표는 하나의 공유 모놀리스를, 부작용이 daemon 전체에 새어나가지 않고 더 쉽게 추론하고 테스트하고 진화시킬 수 있는 계정별 표면으로 쪼개는 것입니다.&lt;/p>
&lt;p>기반은 &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/743">PR #743&lt;/a>의 &lt;code>AccountSession&lt;/code>과 &lt;code>AccountManager&lt;/code> scaffolding에서 시작됐고, 이어서 &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/753">PR #753&lt;/a>에서 scoped relay handle이 추가됐습니다. 그 뒤 단계들은 &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pulls?q=is%3Apr&amp;#43;is%3Amerged&amp;#43;768&amp;#43;OR&amp;#43;763&amp;#43;OR&amp;#43;766">PR #760부터 #769까지&lt;/a>에서 draft와 settings, message ops, 그룹 읽기와 쓰기, membership, push notification, key-package 읽기, 그룹 생성을 모두 session 소유 표면으로 옮겼습니다. 마지막으로 &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/770">PR #770&lt;/a>은 이벤트 dispatch를 session에 재배치해 각 계정이 공유 dispatcher 경합 없이 자기 relay 트래픽만 소비하게 했습니다.&lt;/p>
&lt;h3 id="white-noise-app-adds-blockunblock-ui-leave-group-and-offline-notices">White Noise app adds block/unblock UI, leave-group, and offline notices&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> 클라이언트로, 빠져 있던 group lifecycle control을 추가했습니다. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/578">PR #578&lt;/a>은 &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/573">PR #573&lt;/a>의 block hook 위에 block/unblock UI를 올렸고, &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/571">PR #571&lt;/a>과 &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/572">PR #572&lt;/a>는 Rust 쪽 &lt;code>clear_chat&lt;/code>, &lt;code>delete_chat&lt;/code>, &lt;code>leave_and_delete_group&lt;/code>를 앱에 연결했습니다. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/569">PR #569&lt;/a>와 &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/576">PR #576&lt;/a>은 daemon이 relay에 닿지 못할 때 사용자가 이를 알 수 있도록 chat과 settings 화면에 offline notice를 추가했습니다. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/585">PR #585&lt;/a>는 광범위한 &amp;ldquo;delete all key packages&amp;rdquo; 경로를 &amp;ldquo;delete legacy key packages&amp;rdquo; 작업으로 좁혀, KeyPackage 형식 마이그레이션 중 현재 키까지 같이 지우는 일을 막습니다.&lt;/p>
&lt;h3 id="mdk-adds-mixed-version-invite-support-and-selfupdate-convergence">MDK adds mixed-version invite support and SelfUpdate convergence&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> Development Kit로, 7개의 PR을 병합했습니다. 작업을 관통하는 주제는 호환성입니다. Marmot 버전이 조금씩 다른 클라이언트들도 서로 초대하고, 자기 상태를 회전시키고, 잘못된 입력에서 깨끗하게 복구할 수 있게 하는 데 초점이 있습니다.&lt;/p>
&lt;p>핵심 수정은 &lt;a href="https://github.com/marmot-protocol/mdk/pull/261">PR #261&lt;/a>로, 그룹의 &lt;code>RequiredCapabilities&lt;/code>를 초대받는 쪽 capability의 LCD로 계산해 &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>와 &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a> 사이의 mixed-version invite를 가능하게 합니다. &lt;a href="https://github.com/marmot-protocol/mdk/pull/264">PR #264&lt;/a>는 구현체 간 SelfUpdate wire format을 수렴시킵니다. SelfUpdate는 그룹 구성원이 자기 KeyPackage 또는 capability 상태를 회전할 때 보내는 control message이므로, 여기서 drift가 생기면 invite와 welcome이 계속 파싱되더라도 self-rotation이 조용히 깨집니다. robustness 측면에서 &lt;a href="https://github.com/marmot-protocol/mdk/pull/262">PR #262&lt;/a>는 생성자의 signer를 저장하기 전에 invitee key package를 파싱하게 해 잘못된 invitee가 찌꺼기 state를 남기지 못하게 하고, &lt;a href="https://github.com/marmot-protocol/mdk/pull/256">PR #256&lt;/a>은 receiver 쪽 admin depletion validation을 고치며, &lt;a href="https://github.com/marmot-protocol/mdk/pull/259">PR #259&lt;/a>는 메모리 저장소 backend가 압박 상황에서 보안상 중요한 state를 밀어내지 못하게 막습니다. &lt;a href="https://github.com/marmot-protocol/mdk/pull/265">PR #265&lt;/a>는 클라이언트가 MDK 내부를 직접 건드리지 않고도 다음 commit이 유효하려면 반드시 들어가야 할 proposal을 검사할 수 있는 &lt;code>group_required_proposals&lt;/code> accessor를 노출합니다.&lt;/p>
&lt;h3 id="nostter-adds-nip-44-encryption-across-people-lists-bookmarks-and-mutes">nostter adds NIP-44 encryption across people lists, bookmarks, and mutes&lt;/h3>
&lt;p>&lt;a href="https://github.com/SnowCait/nostter">nostter&lt;/a>는 10개의 PR을 병합했습니다. &lt;a href="https://github.com/SnowCait/nostter/pull/2088">PR #2088&lt;/a>은 mute list에 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> 암호화를 추가하고, &lt;a href="https://github.com/SnowCait/nostter/pull/2089">PR #2089&lt;/a>는 bookmark에, &lt;a href="https://github.com/SnowCait/nostter/pull/2090">PR #2090&lt;/a>는 people list에 같은 암호화를 추가해 가능한 범위에서 &lt;a href="https://nostrcompass.org/ko/topics/nip-04/">NIP-04&lt;/a>를 대체합니다. &lt;a href="https://github.com/SnowCait/nostter/pull/2087">PR #2087&lt;/a>은 encrypted kind-10000 흐름이 안정화된 الآن, 예전 kind-30000 mute migration 경로를 제거합니다.&lt;/p>
&lt;h3 id="zapcooking-ships-nourish-scoring-and-a-reusable-comment-thread">zap.cooking ships Nourish scoring and a reusable comment thread&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapcooking/frontend">zap.cooking&lt;/a>은 Nostr 레시피 클라이언트로, 이번 주 20개의 PR을 병합했습니다. 핵심 기능은 nutritional axis를 기준으로 레시피를 평가하는 새 Nourish recipe-scoring 모듈(&lt;a href="https://github.com/zapcooking/frontend/pull/317">PR #317&lt;/a>, &lt;a href="https://github.com/zapcooking/frontend/pull/319">PR #319&lt;/a>)입니다. 동시에 &lt;a href="https://github.com/zapcooking/frontend/pull/299">PR #299&lt;/a>부터 &lt;a href="https://github.com/zapcooking/frontend/pull/302">PR #302&lt;/a>까지 이어지는 4단계 리팩터링은 Comments 모듈을 어디에나 넣을 수 있는 재사용 가능한 &lt;code>CommentThread&lt;/code>로 뽑아냈습니다. 레시피 측 polish에는 &lt;a href="https://github.com/zapcooking/frontend/pull/309">PR #309&lt;/a>의 scaling, &lt;a href="https://github.com/zapcooking/frontend/pull/307">PR #307&lt;/a>의 통합 media-upload 버튼, &lt;a href="https://github.com/zapcooking/frontend/pull/310">PR #310&lt;/a>의 profile Replies 탭이 포함됩니다.&lt;/p>
&lt;h3 id="ridestr-extracts-shared-rider-coordinator">ridestr extracts shared rider coordinator&lt;/h3>
&lt;p>&lt;a href="https://github.com/variablefate/ridestr">ridestr&lt;/a>는 분산 ride-sharing 앱으로, 10개의 PR을 병합하며 Compose 화면을 더 집중된 컴포넌트로 리팩터링하고 rider 및 driver 프로토콜 로직을 공통 &lt;code>:common&lt;/code> coordinator 모듈로 추출했습니다(&lt;a href="https://github.com/variablefate/ridestr/pull/70">PR #70&lt;/a>). &lt;a href="https://github.com/variablefate/ridestr/pull/60">PR #60&lt;/a>은 앱의 Roadflare 쪽을 위한 kind &lt;code>3189&lt;/code> driver-ping receiver를 추가합니다.&lt;/p>
&lt;h3 id="blossom-drafts-a-bud-01-sunset-header-for-blob-expiration">Blossom drafts a BUD-01 Sunset header for blob expiration&lt;/h3>
&lt;p>&lt;a href="https://github.com/hzrd149/blossom">Blossom&lt;/a>은 SHA-256 hash를 key로 삼아 HTTP 서버에 blob을 저장하는 hzrd149의 프로토콜로, &lt;a href="https://github.com/hzrd149/blossom/pull/99">PR #99&lt;/a>에서 BUD-01에 &lt;code>Sunset&lt;/code> header를 추가하는 초안을 열었습니다. 서버는 이 header를 사용해 특정 blob이 언제부터 더 이상 제공되지 않을지를 미리 광고할 수 있어, 클라이언트가 404를 먼저 맞지 않고도 제한된 retention을 고려해 행동할 수 있습니다. 이 제안은 표준 &lt;a href="https://www.rfc-editor.org/rfc/rfc8594.html">RFC 8594&lt;/a> 의미를 사용하고 참고용일 뿐이므로, 서버는 blob을 더 오래 유지할 수도 있고, 선언된 만료 시점을 best-effort 기준으로 따를 수도 있습니다.&lt;/p>
&lt;h2 id="new-projects">New Projects&lt;/h2>
&lt;h3 id="forgesworn-publishes-a-29-repo-cryptographic-toolkit-for-nostr">Forgesworn publishes a 29-repo cryptographic toolkit for Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/forgesworn">Forgesworn&lt;/a>은 5일 동안 29개의 오픈소스 저장소를 공개하며 Nostr용 signing, identity, attestation, web-of-trust, paid-API discovery 전반을 한꺼번에 내놓았습니다.&lt;/p>
&lt;p>signing stack의 중심은 하나의 master secret에서 무제한의 unlinkable Nostr identity를 파생하는 결정론적 하위 신원 도출 체계 &lt;a href="https://github.com/forgesworn/nsec-tree">nsec-tree&lt;/a>와, Tor를 기본으로 켠 Raspberry Pi용 NIP-46 remote signer &lt;a href="https://github.com/forgesworn/heartwood">Heartwood&lt;/a>입니다. &lt;a href="https://github.com/forgesworn/sapwood">Sapwood&lt;/a>는 Heartwood signer를 관리하기 위한 웹 UI를 제공하고, &lt;a href="https://github.com/forgesworn/heartwood-esp32">heartwood-esp32&lt;/a>는 Heltec WiFi LoRa 32 보드 위에 같은 signing token 로직의 스파이크 구현을 올립니다. &lt;a href="https://github.com/forgesworn/nsec-tree-cli">nsec-tree-cli&lt;/a>는 derivation, proof, Shamir recovery 흐름을 offline-first로 노출합니다.&lt;/p>
&lt;p>identity와 trust 측면에서는 &lt;a href="https://github.com/forgesworn/signet">Signet&lt;/a>이 &lt;a href="https://github.com/forgesworn/signet/releases/tag/v1.6.0">v1.6.0&lt;/a>에 도달했습니다. 이는 Nostr용 탈중앙 identity verification 프로토콜로, session pubkey를 검증하고 relay에 pin하는 QR 기반 pairing 흐름을 가집니다. &lt;a href="https://github.com/forgesworn/nostr-attestations">nostr-attestations&lt;/a>는 credential, endorsement, vouch, provenance, licensing, trust를 포괄하는 단일 kind &lt;code>31000&lt;/code> 이벤트(NIP-VA)를 정의해, 현재 여러 임시 이벤트 형식에 흩어져 있는 것을 하나로 모으려 합니다. &lt;a href="https://github.com/forgesworn/nostr-veil">nostr-veil&lt;/a>은 그 위에 privacy-preserving web of trust를 구축합니다. secp256k1 위 &lt;a href="https://github.com/forgesworn/ring-sig">LSAG ring signature&lt;/a>가 뒷받침하는 NIP-85 assertion을 통해, 어떤 vouch가 어느 멤버에게서 왔는지는 숨긴 채 그룹 소속 증명은 할 수 있게 합니다.&lt;/p>
&lt;p>수익화 측면에서는 Lightning과 Nostr 위의 paid API를 다룹니다. &lt;a href="https://github.com/forgesworn/toll-booth">toll-booth&lt;/a>는 Express, Hono, Deno, Bun, Cloudflare Workers용 L402 middleware로, 어떤 API든 한 줄로 Lightning toll booth로 바꿉니다. &lt;a href="https://github.com/forgesworn/toll-booth-dvm">toll-booth-dvm&lt;/a>은 이 gated API를 &lt;a href="https://nostrcompass.org/ko/topics/nip-90/">NIP-90&lt;/a> Data Vending Machine으로 노출하고, &lt;a href="https://github.com/forgesworn/toll-booth-announce">toll-booth-announce&lt;/a>는 이를 &lt;a href="https://github.com/forgesworn/402-announce">402-announce&lt;/a>와 연결해 HTTP 402 서비스 발견용 kind &lt;code>31402&lt;/code> parameterized replaceable event를 Nostr에 게시합니다. &lt;a href="https://github.com/forgesworn/402-indexer">402-indexer&lt;/a>는 이 공지를 수집하는 crawler입니다. 이 조직은 service coordination, trust, payment, dispute, key hierarchy, resource curation, paid API discovery를 다루는 &lt;a href="https://github.com/forgesworn/nip-drafts">29개 NIP 초안 모음&lt;/a>도 공개했습니다.&lt;/p>
&lt;p>모든 것이 TypeScript이고, 가능한 경우 zero-dependency를 지향하며, multi-runner reproducible-build attestation과 OIDC trusted publishing이 포함된 bash-only 공급망 강화 도구 &lt;a href="https://github.com/forgesworn/anvil">anvil&lt;/a>로 배포됩니다. ring signature, range proof, Shamir word share를 포함한 이 세트의 여러 primitive는 Nostr 라이브러리 계층의 오래된 공백을 메웁니다.&lt;/p>
&lt;h3 id="shockwallet-ships-nostr-native-lightning-wallet-sync-and-multi-node-connections">ShockWallet ships Nostr-native Lightning wallet sync and multi-node connections&lt;/h3>
&lt;p>&lt;a href="https://github.com/shocknet/wallet2">ShockWallet&lt;/a>은 self-custodial Lightning node에 연결하는 transport로 Nostr를 사용하는 Lightning wallet입니다. 앱은 하나 이상의 &lt;a href="https://github.com/shocknet/Lightning.Pub">Lightning.Pub&lt;/a> 노드와 &lt;code>nprofile&lt;/code>을 통해 Nostr 위에서 pairing하고, wallet과 node 사이에서 end-to-end로 결제 승인을 서명합니다. 팀은 2026-04-18에 &lt;a href="https://github.com/shocknet/wallet2/pull/608">PR #608&lt;/a>을 배포하며 channels dashboard UI를 손봤고, 신규 PUB 사용자를 위한 admin invite-link QR 흐름(&lt;a href="https://github.com/shocknet/wallet2/pull/606">PR #606&lt;/a>)과 metrics dashboard 가독성 개선(&lt;a href="https://github.com/shocknet/wallet2/pull/607">PR #607&lt;/a>)도 함께 반영했습니다.&lt;/p>
&lt;p>ShockWallet은 multi-device wallet state sync를 위해 &lt;a href="https://nostrcompass.org/ko/topics/nip-01/">NIP-78&lt;/a> application-specific data event를 사용하므로, 중앙 sync 서버 없이도 사용자의 wallet 뷰가 데스크톱 브라우저와 휴대폰 사이에서 일관되게 유지됩니다. 이는 &lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47&lt;/a> (Nostr Wallet Connect)보다 한 계층 아래에 있습니다. NIP-47이 앱이 기존 wallet에 결제를 요청하는 인터페이스라면, ShockWallet은 Nostr를 wallet 자체의 account 및 session transport로 사용해 실제 Lightning node에 연결합니다. 팀은 wallet과 함께 wallet-to-app 연결용 Nostr 기반 session-pairing 프로토콜 &lt;a href="https://github.com/shocknet/CLINK">CLINK&lt;/a>도 밀고 있으며, web, Android, iOS로 빌드되는 단일 TypeScript 코드베이스를 유지하고 있습니다.&lt;/p>
&lt;h3 id="nostrability-issues-migrate-to-git-over-nostr-after-github-censorship">Nostrability issues migrate to git over Nostr after GitHub censorship&lt;/h3>
&lt;p>&lt;a href="https://gitworkshop.dev/elsat@habla.news/nostrability/issues">Nostrability&lt;/a>는 elsat의 Nostr 클라이언트 및 relay 상호운용성 트래커로, GitHub 지원에서 2주 동안 응답을 받지 못한 채 조직이 내려간 뒤 issue 워크플로를 git over Nostr로 옮기고 있습니다. 이 issue 트래커는 이제 GitWorkshop/ngit에 있으며, 기존 issue도 옮겨졌고 앞으로의 interop report도 Nostr 네이티브 인프라 안에서 유지될 수 있습니다.&lt;/p>
&lt;h3 id="nowhere-encodes-full-websites-into-url-fragments-and-routes-orders-through-nostr">nowhere encodes full websites into URL fragments and routes orders through Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/5t34k/nowhere">nowhere&lt;/a>는 &lt;a href="https://github.com/5t34k">5t34k&lt;/a>의 새 AGPL-3.0 프로젝트로, 사이트 전체를 &lt;code>#&lt;/code> 뒤 URL fragment에 직렬화하고 dictionary substitution과 raw DEFLATE로 압축한 뒤 base64url로 인코딩합니다. HTTP는 브라우저가 fragment를 서버로 보내지 못하게 하므로, 페이지를 전달하는 호스트는 콘텐츠를 보지 못하고 사이트 자체도 서버에 저장되지 않습니다. 이 프로젝트는 event, fundraiser, store, petition, message, drop, art, forum의 여덟 가지 site type을 제공하며, 각 site는 제작자의 암호학적 서명을 붙일 수 있고 URL 수준의 비밀번호 암호화도 가능합니다.&lt;/p>
&lt;p>여덟 가지 중 다섯 가지는 순수 정적이지만, store, forum, petition은 order, post, signature를 위한 실시간 통신이 필요하고, 이 트래픽은 일회용 키와 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> 암호화를 사용해 Nostr relay를 통과합니다. 따라서 relay는 읽을 수 없는 이벤트를, 추적하기 어려운 일회용 키에서 받아 저장하게 됩니다. 단일 상품 store는 약 120자 안에 들어가므로, companion reader &lt;a href="https://nowhr.xyz/install">nowhr.xyz&lt;/a>를 통해 nowhere 링크를 오프라인용 인쇄 QR 코드로도 사용할 수 있습니다. 저장소는 standalone &lt;code>codec&lt;/code> 패키지, Nostr 통합 및 결제 처리가 들어간 Svelte 5 &lt;code>web&lt;/code> component library, &lt;a href="https://nowhr.xyz/app">nowhr.xyz&lt;/a>의 &lt;code>nowhr&lt;/code> app shell로 나뉜 pnpm workspace입니다.&lt;/p>
&lt;h3 id="small-new-surfaces-relaykit-and-brainstorm-search">Small new surfaces: relayk.it and Brainstorm Search&lt;/h3>
&lt;p>큰 changelog hook은 없지만 짧게 언급할 만한 두 프로젝트입니다. &lt;a href="https://relayk.it">relayk.it&lt;/a>은 Soapbox 팀의 &lt;a href="https://nostr.com/sam@relayk.it">sam&lt;/a>이 만든, &lt;a href="https://shakespeare.diy">Shakespeare&lt;/a> 기반의 relay discovery 클라이언트로 브라우저에서 완전히 실행되며 사용자에게 활성 Nostr relay를 안내합니다. &lt;a href="https://brainstorm.world">Brainstorm Search&lt;/a>는 네트워크 전반의 콘텐츠를 보여 주는 데 초점을 맞춘 single-page Nostr search UI로 출시됐습니다.&lt;/p>
&lt;h2 id="protocol-and-spec-work">Protocol and Spec Work&lt;/h2>
&lt;h3 id="nip-updates">NIP Updates&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 저장소&lt;/a>의 최근 제안과 논의입니다:&lt;/p>
&lt;p>&lt;strong>Open PRs and Discussions:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-67/">NIP-67&lt;/a>: EOSE Completeness Hint&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2317">PR #2317&lt;/a>): &lt;a href="https://nostrcompass.org/ko/topics/nip-01/">NIP-01&lt;/a>의 &lt;code>EOSE&lt;/code> 메시지에 선택적인 세 번째 요소를 추가해, 릴레이가 필터와 일치하는 저장 이벤트를 모두 전달했는지 표시하자는 제안입니다. 현재 &lt;code>EOSE&lt;/code>는 저장 이벤트와 실시간 이벤트의 경계를 표시할 뿐 완전성 정보는 담지 않습니다. 예를 들어 300개 cap이 있는 릴레이에 이벤트 500개를 요청하면, 클라이언트는 300개와 &lt;code>EOSE&lt;/code>를 받지만 이것이 &amp;ldquo;원래 300개뿐&amp;quot;인지 &amp;ldquo;중간에서 끊겼다&amp;quot;인지를 구분할 수 없습니다. 제안은 릴레이가 모든 결과를 보냈을 때 &lt;code>[[&amp;quot;EOSE&amp;quot;, &amp;quot;&amp;lt;sub_id&amp;gt;&amp;quot;, &amp;quot;finish&amp;quot;]]&lt;/code> 형식을 사용하고, 기존 두 요소 형식은 아무 주장도 하지 않는 legacy 형식으로 남겨 둡니다. 이 설계는 하위 호환적이며, 이를 아는 클라이언트는 &lt;code>&amp;quot;finish&amp;quot;&lt;/code>를 보는 즉시 pagination을 멈출 수 있습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-5D: Nostr Applets&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2303">PR #2303&lt;/a>): Nostr 위에서 상호작용 applet을 배포하는 새 kind를 제안합니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-5a/">NIP-5A&lt;/a>가 정적 웹사이트를, 개발 중인 &lt;a href="https://nostrcompass.org/ko/topics/nip-5c/">NIP-5C&lt;/a>가 실행 가능한 WASM scroll을 다룬다면, NIP-5D는 클라이언트의 sandboxed iframe 또는 WebView에서 실행되는 self-contained front-end applet이라는 중간 지대를 노립니다. 이로써 클라이언트는 각자 별도의 플러그인 시스템을 만들지 않고도 poll, 계산기, 미니게임 같은 서드파티 경험을 실을 수 있습니다. 열린 PR은 host와 applet 사이 message passing 보안 모델을 계속 다듬고 있습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-29: Subgroups spec&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2319">PR #2319&lt;/a>): &lt;a href="https://nostrcompass.org/ko/topics/nip-29/">NIP-29&lt;/a> 릴레이 기반 그룹을 subgroup 계층으로 확장해, 같은 그룹 안에 여러 병렬 채널을 둘 수 있게 합니다. 이 PR은 기존 &lt;code>h&lt;/code> 태그에 subgroup 식별자를 실어 보내는 방식을 정의하고, kind &lt;code>9000&lt;/code>번대 moderation 이벤트가 subgroup에 어떻게 적용되는지와 클라이언트 렌더링 방식을 명확히 합니다. 변경은 일반 메시지의 단일 &lt;code>h&lt;/code> 태그 형태를 유지하므로 오래된 클라이언트도 subgroup이 있는 room에서 계속 동작할 수 있습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-29: Explicit role permissions on kind 39003&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2316">PR #2316&lt;/a>): &lt;a href="https://nostrcompass.org/ko/topics/nip-29/">NIP-29&lt;/a> kind &lt;code>39003&lt;/code> 역할 이벤트에 명시적 권한 스키마를 정의합니다. 각 역할은 invite, add-user, remove-user, edit-metadata, delete-event, add-permission 같은 허용 작업의 이름 붙은 집합이 되고, 선택적인 만료 시각도 가질 수 있습니다. 현재 동일한 그룹을 운영하는 두 NIP-29 relay가 &amp;ldquo;moderator&amp;rdquo; 권한을 서로 다르게 해석할 수 있는데, 이 스키마는 그 차이를 클라이언트가 사용자에게 보여 줄 수 있게 합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-11: access_control field for gated-relay discovery&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2318">PR #2318&lt;/a>): &lt;a href="https://nostrcompass.org/ko/topics/nip-11/">NIP-11&lt;/a> relay information document에 선택적 &lt;code>access_control&lt;/code> 객체를 추가하는 제안입니다. 여기에는 relay의 게이팅 방식(open, invite, payment, allowlist)과 접근 요청 endpoint가 담깁니다. 이 필드는 참고용이며, 클라이언트와 디렉터리가 gated relay를 public discovery 목록에서 필터링하고 사용자가 왜 쓰기 요청이 거부되는지 미리 알 수 있게 합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-63a: Minimal Payment Gateway Descriptor&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2315">PR #2315&lt;/a>): &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-15-newsletter/">뉴스레터 #18&lt;/a>에서 다뤘습니다. 이 PR은 kind &lt;code>10164&lt;/code> payment-gateway-descriptor 형식과 tier별 subscription rule 레이아웃을 계속 다듬고 있습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-XX: Agent Reputation Attestations (Kind 30085)&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2320">PR #2320&lt;/a>): Nostr의 자율 에이전트와 서비스에 대한 서명된 평판 attestations를 위한 kind &lt;code>30085&lt;/code> addressable event를 제안합니다. 여기에 포함되는 평가는 reliability, honest-advertising, dispute-resolution 관련 주장입니다. 각 attestation은 대상 pubkey를 가리키고, bounded range 안의 score를 담으며, 그 score를 정당화하는 evidence event를 참조합니다. 동기는 &lt;a href="https://nostrcompass.org/ko/topics/nip-90/">NIP-90&lt;/a> Data Vending Machine과 기타 서비스 시장에 고객 피드백을 표준 방식으로 게시하고 필터링할 수 있는 규약이 아직 없다는 점입니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-TPLD: Transient Private Location Data&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2309">PR #2309&lt;/a>): &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-15-newsletter/">뉴스레터 #18&lt;/a>에서 이어지는 작업으로, kind &lt;code>20411&lt;/code> ephemeral 범위, 수신자별 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> 암호화 구조, relay retention을 위한 &lt;code>ttl&lt;/code> 태그 의미를 더 다듬고 있습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>marmot-ts 0.5.0 release PR&lt;/strong> (&lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/70">PR #70&lt;/a>): 보류 중인 &lt;code>@internet-privacy/marmot-ts@0.5.0&lt;/code> 릴리스 PR은 TypeScript Marmot 클라이언트의 첫 계획된 breaking change를 묶고 있습니다. 릴리스는 &lt;code>KeyPackageManager&lt;/code>가 예전 kind &lt;code>443&lt;/code>과 새 kind &lt;code>30443&lt;/code> 이벤트를 둘 다 지원하도록 바꾸고, &lt;code>KeyPackageStore&lt;/code>와 group-state storage 클래스를 제거하는 대신 일반 key-value store를 &lt;code>KeyPackageManager&lt;/code>와 &lt;code>MarmotGroup&lt;/code>에 직접 넘기도록 하며, invite와 group 관리를 &lt;code>MarmotClient.invites&lt;/code>와 &lt;code>MarmotClient.groups&lt;/code>로 옮깁니다. marmot-ts를 직접 임베드한 프로젝트는 이 릴리스를 적용하기 전에 constructor와 storage layer 변경이 필요합니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-deep-dive-nip-72-moderated-communities">NIP Deep Dive: NIP-72 (Moderated Communities)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/72.md">NIP-72&lt;/a>은, moderation이 otherwise-unrestricted write 위에 curated read view를 만드는 Nostr의 주제 기반 community 모델을 정의합니다. 멤버십과 moderation 모두를 릴레이가 권한으로 쥐는 &lt;a href="https://nostrcompass.org/ko/topics/nip-29/">NIP-29&lt;/a>와 달리, NIP-72 커뮤니티는 일반 Nostr 이벤트 위에 존재하며 관련 kind를 운반하는 모든 릴레이에서 제공할 수 있습니다. 누구나 커뮤니티에 게시할 수 있고, 인정된 moderator가 승인한 게시물만 커뮤니티 피드에 나타납니다.&lt;/p>
&lt;p>커뮤니티는 생성자가 게시하는 kind &lt;code>34550&lt;/code> addressable event로 정의됩니다. 이 이벤트는 &lt;code>d&lt;/code> 태그를 가진 replaceable event이므로, 생성자는 identity를 유지한 채 메타데이터를 업데이트할 수 있습니다. &lt;code>d&lt;/code> 태그는 안정적인 slug이고, &lt;code>name&lt;/code>, &lt;code>description&lt;/code>, &lt;code>image&lt;/code>, &lt;code>rules&lt;/code> 태그는 표시용 메타데이터를 담으며, &lt;code>&amp;quot;moderator&amp;quot;&lt;/code> 마커가 붙은 일련의 &lt;code>p&lt;/code> 태그는 어느 pubkey의 승인이 유효한지 나열합니다. 선택적인 &lt;code>relay&lt;/code> 태그는 &lt;code>author&lt;/code>, &lt;code>requests&lt;/code>, &lt;code>approvals&lt;/code> 마커와 함께 각 이벤트 유형을 어디서 게시하고 어디서 읽어야 하는지 힌트를 줍니다:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;f1e2d3c4b5a69788f1e2d3c4b5a69788f1e2d3c4b5a69788f1e2d3c4b5a69788&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;c3d2e1f0a9b8c7d6e5f4a3b2c1d0e9f8a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1745280000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">34550&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;bitcoin-devs&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;name&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Bitcoin Devs&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;description&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;A moderated community for Bitcoin protocol discussion.&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;image&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://example.com/bitcoin-devs.png&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;rules&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Technical discussion only. No price talk.&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;moderator&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;a1b2c3d4e5f6a7b8c9d0a1b2c3d4e5f6a7b8c9d0a1b2c3d4e5f6a7b8c9d0a1b2&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;moderator&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;relay&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;author&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;relay&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.moderator.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;approvals&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>사용자는 일반 이벤트(kind &lt;code>1&lt;/code> 노트, kind &lt;code>30023&lt;/code> 장문 글, kind &lt;code>31922&lt;/code> 캘린더 이벤트 등)를 게시하고, 값이 커뮤니티 좌표 &lt;code>34550:&amp;lt;creator_pubkey&amp;gt;:&amp;lt;slug&amp;gt;&lt;/code>인 &lt;code>a&lt;/code> 태그를 추가해 게시물을 제출합니다. 이 게시물은 그 자체로 완전히 유효한 Nostr 이벤트이며, NIP-72를 모르는 클라이언트는 단순히 커뮤니티 형태 좌표를 가리키는 노트로 보게 됩니다. 반면 community-aware 클라이언트는 인정된 moderator가 승인한 게시물만 커뮤니티 뷰에 보여 줍니다.&lt;/p>
&lt;p>승인은 moderator가 게시하는 별도의 kind &lt;code>4549&lt;/code> 이벤트입니다. 이 이벤트는 &lt;code>e&lt;/code> 태그로 제출물을, &lt;code>p&lt;/code> 태그로 제출자를, &lt;code>a&lt;/code> 태그로 커뮤니티를 참조하고, 문자열화된 제출 이벤트를 &lt;code>content&lt;/code>에 캐시 사본으로 내장합니다. 이 캐시 사본 덕분에 원 작성자가 나중에 원본 이벤트를 삭제해도 승인된 게시물은 계속 렌더링할 수 있습니다.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1745283600&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">4549&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;34550:c3d2e1f0a9b8c7d6e5f4a3b2c1d0e9f8a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2:bitcoin-devs&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;k&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;{\&amp;#34;id\&amp;#34;:\&amp;#34;b3c4d5e6...\&amp;#34;,\&amp;#34;pubkey\&amp;#34;:\&amp;#34;e4f5a6b7...\&amp;#34;,\&amp;#34;kind\&amp;#34;:1,\&amp;#34;content\&amp;#34;:\&amp;#34;Question about sighash flags\&amp;#34;,\&amp;#34;tags\&amp;#34;:[[\&amp;#34;a\&amp;#34;,\&amp;#34;34550:c3d2e1f0...:bitcoin-devs\&amp;#34;]],\&amp;#34;created_at\&amp;#34;:1745283500,\&amp;#34;sig\&amp;#34;:\&amp;#34;...\&amp;#34;}&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;bbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aa&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>이 승인 모델에는 세 가지 유용한 성질이 있습니다. moderation 결정은 투명합니다. 각 승인은 누구나 가져올 수 있는 서명된 Nostr 이벤트이므로, 의심이 많은 사용자는 어느 moderator가 어느 게시물을 언제 승인했는지 감사할 수 있습니다. moderation은 배타적이지 않습니다. 같은 제출물이 여러 커뮤니티에서 승인될 수 있고, 한 커뮤니티가 거절한 글을 다른 커뮤니티는 승인할 수 있습니다. &lt;code>a&lt;/code> 태그는 단지 curated view의 주소이기 때문입니다. moderation은 read layer에서 되돌릴 수 있습니다. 커뮤니티가 kind &lt;code>34550&lt;/code> 이벤트에서 어떤 moderator를 제거하면, 현재 moderator 목록을 따르는 클라이언트에서는 그 moderator의 과거 승인도 더 이상 세지지 않습니다.&lt;/p>
&lt;p>클라이언트 구현은 read 쪽에서 갈립니다. 대부분의 community-aware 클라이언트는 커뮤니티 좌표가 붙은 kind &lt;code>4549&lt;/code> 이벤트를 필터링하고, 내부 event ID로 deduplicate한 뒤, 내장된 게시물을 렌더링합니다. 일부 클라이언트는 제출 이벤트를 직접 가져오고 approval을 whitelist로만 사용하기도 합니다. approval이 불완전하거나 stale할 때는 이 편이 더 실용적일 수 있습니다. &lt;a href="https://github.com/hzrd149/nostrudel">noStrudel&lt;/a>과, 이번 주 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2468">PR #2468&lt;/a> 기준 &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>를 포함한 몇몇 클라이언트는 moderator용 대기 제출 큐도 별도 뷰로 노출합니다.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-29/">NIP-29&lt;/a>와 비교한 tradeoff는 분명합니다. NIP-72 커뮤니티는 특별한 릴레이 지원 없이 어떤 릴레이 네트워크에서도 동작하므로 write path가 이식 가능하고 moderation이 가시적이며 fork 가능합니다. 반면 제출물은 게시되는 순간 public이고, 승인되지 않은 게시물은 클라이언트 렌더링 계층에서만 숨겨집니다. 스팸이 wire에 아예 올라오면 안 되는 공간이라면 NIP-29가 더 적합합니다. 승인이 gate라기보다 curated front page처럼 작동하는 공개 토픽 커뮤니티에는 NIP-72가 더 잘 맞습니다.&lt;/p>
&lt;h2 id="nip-deep-dive-nip-57-zaps">NIP Deep Dive: NIP-57 (Zaps)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/57.md">NIP-57&lt;/a>은 Lightning 결제를 Nostr 신원과 이벤트에 연결하고, 검증 가능한 payment receipt를 릴레이 위에 다시 게시하는 zap을 정의합니다. zap은 특정 발신자가 특정 수신자에게 특정 대상에 대해 특정 금액을 지불했다는 사실을 증명하며, 그 증명은 발신자의 말을 신뢰하지 않고도 어떤 Nostr 클라이언트든 읽을 수 있습니다. 이 명세는 LNURL, Lightning, Nostr라는 세 시스템을 가로지르며 각자가 어떻게 협력해야 하는지 고정합니다.&lt;/p>
&lt;p>흐름에는 네 명의 행위자가 있습니다. 발신자 클라이언트는 수신자의 kind &lt;code>0&lt;/code> 프로필 메타데이터(&lt;code>lud06&lt;/code> 또는 &lt;code>lud16&lt;/code>)나 zap 대상 이벤트의 &lt;code>zap&lt;/code> 태그에서 수신자의 LNURL endpoint를 발견합니다. 그 클라이언트는 의도된 결제를 설명하는 kind &lt;code>9734&lt;/code> zap request 이벤트에 서명하고, 이를 릴레이가 아니라 수신자의 LNURL callback으로 게시합니다. 반대편에서 수신자의 LNURL 서버는 요청을 검증하고, description hash가 문자열화된 request 이벤트에 커밋되는 Lightning invoice를 반환합니다. 발신자가 이를 결제하면, 서버는 발신자가 요구한 relay 집합에 kind &lt;code>9735&lt;/code> zap receipt를 게시합니다.&lt;/p>
&lt;p>zap request(kind &lt;code>9734&lt;/code>)는 결제 의도를 선언하는 서명된 이벤트입니다. 핵심 필드는 수신자 pubkey를 담은 &lt;code>p&lt;/code> 태그, zap 대상 이벤트나 addressable 콘텐츠를 가리키는 선택적 &lt;code>e&lt;/code> 또는 &lt;code>a&lt;/code> 태그, millisats 단위 &lt;code>amount&lt;/code> 태그, receipt 게시 릴레이 목록인 &lt;code>relays&lt;/code> 태그입니다. &lt;code>content&lt;/code>에는 zap과 함께 전달되는 발신자 메시지가 들어갈 수 있습니다. &lt;code>k&lt;/code> 태그는 대상 kind를 기록해, 소비자가 어떤 종류의 콘텐츠에 자금이 갔는지 분류하게 합니다:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a5b4c3d2e1f09876a5b4c3d2e1f09876a5b4c3d2e1f09876a5b4c3d2e1f09876&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1745280000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">9734&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;amount&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;21000&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;relays&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.damus.io&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://nos.lol&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.nostr.band&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;k&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;great post&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;ccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbcc&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>zap receipt(kind &lt;code>9735&lt;/code>)는 결제 확인 후 수신자의 wallet 서버가 게시합니다. 이 receipt는 발신자가 아니라, LNURL 응답에서 수신자가 광고한 &lt;code>nostrPubkey&lt;/code>를 사용하는 wallet 서버가 서명합니다. 유효한 receipt는 &lt;code>description&lt;/code> 태그 안에 문자열화된 zap request를, &lt;code>bolt11&lt;/code> 태그에 지불된 인보이스를, &lt;code>preimage&lt;/code> 태그에 결제 완료 증명을 담습니다:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1745280060&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">9735&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;P&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;a5b4c3d2e1f09876a5b4c3d2e1f09876a5b4c3d2e1f09876a5b4c3d2e1f09876&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;bolt11&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;lnbc210n1pj...bolt11invoicestring&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;description&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;{\&amp;#34;id\&amp;#34;:\&amp;#34;c1d2e3f4...\&amp;#34;,\&amp;#34;pubkey\&amp;#34;:\&amp;#34;a5b4c3d2...\&amp;#34;,\&amp;#34;kind\&amp;#34;:9734,\&amp;#34;content\&amp;#34;:\&amp;#34;great post\&amp;#34;,\&amp;#34;tags\&amp;#34;:[...]}&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;preimage&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;ddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccdd&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>검증 규칙이 NIP-57의 신뢰 보장을 만듭니다. kind &lt;code>9735&lt;/code> receipt를 zap으로 표시하는 클라이언트는 네 가지를 확인해야 합니다. receipt 서명이 LNURL 응답의 &lt;code>nostrPubkey&lt;/code>와 일치하는지, &lt;code>bolt11&lt;/code> 인보이스 금액이 내장 zap request의 &lt;code>amount&lt;/code> 태그와 같은지, 인보이스 description hash가 문자열화된 zap request에 커밋되는지, &lt;code>preimage&lt;/code>가 인보이스의 &lt;code>payment_hash&lt;/code>로 해시되는지입니다. 이 중 하나라도 실패하면 그것은 결제 증명이 아니라 결제 주장일 뿐입니다. 이런 검증 없이 누적 zap count를 렌더링하는 클라이언트는 공격자가 게시한 위조 kind &lt;code>9735&lt;/code> 이벤트에 쉽게 속습니다.&lt;/p>
&lt;p>private zap은 여기에 기밀성 계층을 하나 더 얹습니다. 발신자는 zap request의 &lt;code>content&lt;/code>를 수신자용으로 암호화하고 바깥 zap request에 &lt;code>anon&lt;/code> 태그를 넣을 수 있어, 릴레이 네트워크는 결제 대상은 보되 메모는 읽지 못합니다. 어떤 클라이언트는 더 나아가 zap request 자체를 위해 새 일회용 키페어를 만들어, receipt는 결제가 일어났음을 증명하면서도 수신자가 이를 발신자의 장기 pubkey와 연결하지 못하게 합니다. 이 &amp;ldquo;anonymous zap&amp;rdquo; 패턴은 메시지는 숨지만 발신자 키는 요청 경로에 남을 수 있는 일반 private zap보다 강합니다.&lt;/p>
&lt;p>NIP-57은 &lt;a href="https://nostrcompass.org/ko/topics/nip-75/">NIP-75&lt;/a>에서 정의한 zap-goal 시스템의 기반이기도 합니다. goal은 목표 금액과 receipt를 집계할 relay 집합을 선언하는 kind &lt;code>9041&lt;/code> 이벤트이며, goal의 event ID에 연결된 모든 zap receipt가 그 진행률에 기여합니다. 클라이언트는 일치하는 kind &lt;code>9735&lt;/code> 이벤트의 검증된 &lt;code>bolt11&lt;/code> 금액을 합산해 진행률을 계산합니다. &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>의 이번 주 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2469">PR #2469&lt;/a>는 goal을 &lt;a href="https://nostrcompass.org/ko/topics/nip-53/">NIP-53&lt;/a> Live Activities 화면에 연결하고, 같은 receipt로 top-zappers 리더보드도 렌더링합니다.&lt;/p>
&lt;p>zap split은 이 NIP의 부록에 정의되어 있습니다. 수신자는 가중치가 다른 여러 &lt;code>zap&lt;/code> 태그를 가진 kind &lt;code>0&lt;/code> 프로필을 게시해, 하나의 zap 결제가 여러 pubkey 사이에 원자적으로 분배되게 할 수 있습니다. 콘텐츠 제작자, 협업자, 플랫폼 수수료 수취자를 모두 하나의 발신자 서명 zap request로 함께 지불할 수 있습니다. &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, &lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>, &lt;a href="https://github.com/hzrd149/nostrudel">noStrudel&lt;/a>을 포함한 여러 클라이언트가 split-paying을 end-to-end로 구현합니다.&lt;/p>
&lt;hr>
&lt;p>이번 주는 여기까지입니다. 무언가를 만들고 있거나 소식을 나누고 싶다면 Nostr에서 DM을 보내거나 &lt;a href="https://nostrcompass.org">nostrcompass.org&lt;/a>에서 찾아 주세요.&lt;/p></content:encoded></item><item><title>Nostr Compass #18</title><link>https://nostrcompass.org/ko/newsletters/2026-04-15-newsletter/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2026-04-15-newsletter/</guid><description>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>가 데스크톱 Tor 지원, JNI 바인딩이 포함된 커스텀 C secp256k1 구현, &lt;a href="https://nostrcompass.org/ko/topics/nip-ac/">NIP-AC&lt;/a> 음성 및 영상 통화를 위한 완전한 WebRTC 호출 시스템, &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a>용 RFC 9420 MLS 준수, 그리고 멀티 지갑 NWC를 포함해 29개의 PR을 병합했습니다. &lt;a href="https://github.com/vcavallo/nstrfy-android">nstrfy&lt;/a>는 kind &lt;code>7741&lt;/code> 이벤트를 사용해 Firebase를 Nostr 릴레이로 대체하는 Android 푸시 알림 앱으로 출시되었습니다. &lt;a href="https://github.com/LibertyFarmer/hamstr">HAMSTR&lt;/a>는 Reticulum mesh networking을 추가해 인터넷 연결 없이 LoRa radio 위로 Nostr 이벤트를 전달할 수 있게 했습니다. &lt;a href="https://github.com/nostrnative/bloom">Bloom&lt;/a>은 &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a> 미디어 서버와 Nostr relay를 한데 묶은 데스크톱 앱 v0.1.0을 출시했습니다. &lt;a href="https://github.com/zeSchlausKwab/wavefunc">WaveFunc&lt;/a>는 Nostr 기반 인터넷 라디오 디렉터리이자 플레이어인 v0.1.0으로 데뷔했습니다. &lt;a href="https://github.com/marmot-protocol/botburrow">Botburrow&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> 암호화 그룹 채팅용 self-hosted bot 플랫폼으로 개발을 시작했습니다. &lt;a href="https://github.com/v0l/snort">Snort&lt;/a>는 보안 감사, batched WASM 검증, 재작성된 메시징 시스템이 포함된 v0.5.0부터 v0.5.3까지를 배포했습니다. 이번 주 NIP 심층 분석은 &lt;a href="https://nostrcompass.org/ko/topics/nip-29/">NIP-29&lt;/a>와 &lt;a href="https://nostrcompass.org/ko/topics/nip-90/">NIP-90&lt;/a>을 다룹니다.&lt;/p></description><content:encoded>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>가 데스크톱 Tor 지원, JNI 바인딩이 포함된 커스텀 C secp256k1 구현, &lt;a href="https://nostrcompass.org/ko/topics/nip-ac/">NIP-AC&lt;/a> 음성 및 영상 통화를 위한 완전한 WebRTC 호출 시스템, &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a>용 RFC 9420 MLS 준수, 그리고 멀티 지갑 NWC를 포함해 29개의 PR을 병합했습니다. &lt;a href="https://github.com/vcavallo/nstrfy-android">nstrfy&lt;/a>는 kind &lt;code>7741&lt;/code> 이벤트를 사용해 Firebase를 Nostr 릴레이로 대체하는 Android 푸시 알림 앱으로 출시되었습니다. &lt;a href="https://github.com/LibertyFarmer/hamstr">HAMSTR&lt;/a>는 Reticulum mesh networking을 추가해 인터넷 연결 없이 LoRa radio 위로 Nostr 이벤트를 전달할 수 있게 했습니다. &lt;a href="https://github.com/nostrnative/bloom">Bloom&lt;/a>은 &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a> 미디어 서버와 Nostr relay를 한데 묶은 데스크톱 앱 v0.1.0을 출시했습니다. &lt;a href="https://github.com/zeSchlausKwab/wavefunc">WaveFunc&lt;/a>는 Nostr 기반 인터넷 라디오 디렉터리이자 플레이어인 v0.1.0으로 데뷔했습니다. &lt;a href="https://github.com/marmot-protocol/botburrow">Botburrow&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> 암호화 그룹 채팅용 self-hosted bot 플랫폼으로 개발을 시작했습니다. &lt;a href="https://github.com/v0l/snort">Snort&lt;/a>는 보안 감사, batched WASM 검증, 재작성된 메시징 시스템이 포함된 v0.5.0부터 v0.5.3까지를 배포했습니다. 이번 주 NIP 심층 분석은 &lt;a href="https://nostrcompass.org/ko/topics/nip-29/">NIP-29&lt;/a>와 &lt;a href="https://nostrcompass.org/ko/topics/nip-90/">NIP-90&lt;/a>을 다룹니다.&lt;/p>
&lt;h2 id="top-stories">Top Stories&lt;/h2>
&lt;h3 id="amethyst-merges-desktop-tor-c-secp256k1-webrtc-calls-and-multi-wallet-nwc">Amethyst merges desktop Tor, C secp256k1, WebRTC calls, and multi-wallet NWC&lt;/h3>
&lt;p>vitorpamplona가 유지 관리하는 Android 클라이언트 &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>는 이번 주 암호화, 네트워킹, 통화, 지갑 인프라 전반에 걸쳐 29개의 PR을 병합했습니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2381">PR #2381&lt;/a>은 이번 주 가장 큰 변경으로, fail-closed 설계를 가진 내장 kmp-tor daemon을 통해 데스크톱 Tor 지원을 추가합니다. Tor가 켜져 있으면 모든 relay 연결이 내장 Tor 프로세스를 통해 라우팅되고, Tor가 시작되지 않으면 앱은 연결을 거부합니다. 이제 privacy routing은 Android와 데스크톱 빌드 사이에서 기능 parity를 갖추며, Tor 통합에는 130개가 넘는 unit test가 붙었습니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2374">PR #2374&lt;/a>는 서명 검증용 JNI 바인딩이 포함된 커스텀 C secp256k1 구현을 추가합니다. 이 구현은 GLV decomposition, wNAF (windowed Non-Adjacent Form) point encoding, 그리고 x86_64와 ARM64 양쪽의 하드웨어 가속 SHA-256을 사용합니다. 결과적으로 Schnorr signature 검증이 이전 pure Kotlin 경로보다 2배에서 3배 빨라졌습니다. 이어지는 PR들(&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2188">PR #2188&lt;/a>, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2195">PR #2195&lt;/a>, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2204">PR #2204&lt;/a>)은 fused multiply-reduce 연산, field element 저장용 LongArray를 대체하는 전용 Fe4 struct, 플랫폼별 intrinsic을 추가해 Android에서 약 28%의 추가 개선을 목표로 합니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2202">PR #2202&lt;/a>는 pure Kotlin MLS 구현을 RFC 9420에 맞추어 갱신하며, &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> 프로토콜 통합을 위해 reuse guard 검사, ciphertext 연산의 additional authenticated data (AAD), ciphertext sample derivation, commit 처리 수정, thread safety를 추가합니다. &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-08-newsletter/">지난주 다룬 Kotlin MLS 작업&lt;/a>을 바탕으로, 이 작업은 &lt;a href="https://nostrcompass.org/ko/topics/quartz/">Quartz&lt;/a>를 완전한 MLS 명세 준수에 더 가깝게 밀어 붙입니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2203">PR #2203&lt;/a>부터 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2211">PR #2211&lt;/a>까지 이어지는 WebRTC PR 묶음은 &lt;a href="https://nostrcompass.org/ko/topics/nip-ac/">NIP-AC&lt;/a>용 완전한 음성 및 영상 통화 시스템을 추가합니다. 구현 범위에는 연결이 끊겼을 때의 ICE restart, 런타임 camera 전환, 자동 재연결이 포함된 network monitoring, 설정 가능한 통화 옵션(resolution, bitrate, TURN server 선택), Android 14+ 백그라운드 제한 대응용 foreground service 수정, 그리고 통화 state machine 전반의 thread safety가 포함됩니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1988">PR #1988&lt;/a>는 멀티 지갑 &lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47&lt;/a> (Nostr Wallet Connect) 지원을 추가합니다. 이제 사용자는 하나의 계정에 여러 NWC 지갑을 연결하고, 각 지갑의 잔액 카드를 보고, 기본 지갑을 선택하고, 예전 단일 지갑 구성에서 마이그레이션할 수 있습니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2189">PR #2189&lt;/a>는 품질 슬라이더가 있는 GIF-to-MP4 변환을 추가해 3MB GIF를 약 159KB MP4로 줄입니다. 같은 주에 post composer에는 자동 언어 감지와 제안 사전 계산 병렬화가 포함된 AI tone suggestion도 들어왔습니다.&lt;/p>
&lt;h3 id="nstrfy-launches-nostr-native-push-notifications-for-android">nstrfy launches Nostr-native push notifications for Android&lt;/h3>
&lt;p>&lt;a href="https://github.com/vcavallo/nstrfy-android">nstrfy&lt;/a>는 4월 13일 &lt;a href="https://github.com/vcavallo/nstrfy-android/releases/tag/v1.0.0">v1.0.0&lt;/a>부터 &lt;a href="https://github.com/vcavallo/nstrfy-android/releases/tag/v1.2.0">v1.2.0&lt;/a>까지 세 개의 릴리스와 함께 출시되었습니다. 이 앱은 ntfy-android의 fork로, HTTP transport를 Nostr로 교체했습니다. 서버를 polling해 푸시 알림을 받는 대신, nstrfy는 설정 가능한 릴레이에서 kind &lt;code>7741&lt;/code> 이벤트를 subscribe하고 이를 네이티브 Android notification으로 표시합니다.&lt;/p>
&lt;p>알림 모델은 평문 payload와 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> 암호화 payload를 모두 지원합니다. 암호화가 켜져 있으면 nstrfy는 &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>를 통해 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a>로 서명하거나 로컬 nsec을 사용합니다. 주제별 subscription을 통해 사용자는 topic별 발신자 allowlist와 npub whitelist를 구성할 수 있어 승인된 발신자만 특정 topic의 알림을 발생시킬 수 있습니다. 앱은 &lt;a href="https://nostrcompass.org/ko/topics/nip-65/">NIP-65&lt;/a>를 사용해 사용자 프로필에서 relay 목록을 가져오고, &lt;a href="https://nostrcompass.org/ko/topics/nip-40/">NIP-40&lt;/a> 이벤트 만료도 존중합니다. 전체 ntfy 알림 어휘, 즉 URL tap-to-open, priority level, custom icon, action button을 지원하므로 대부분의 ntfy 스타일 알림은 거의 그대로 옮겨집니다. 사용자 검색은 brainstorm.world의 &lt;a href="https://nostrcompass.org/ko/topics/web-of-trust/">Web of Trust&lt;/a> 데이터를 통한 NIP-50 기반입니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/vcavallo/nstrfy.sh">nstrfy.sh&lt;/a> 동반 프로젝트는 browser에서 전송과 수신을 할 수 있는 bash CLI와 &lt;a href="https://nstrfy.sh">nstrfy.sh&lt;/a> 호스팅 웹 클라이언트를 함께 제공합니다. NIP-07 signer도 지원합니다. 네이티브 앱은 &lt;a href="https://zapstore.dev/apps/io.nstrfy.android">Zapstore&lt;/a>에서 받을 수 있습니다.&lt;/p>
&lt;h3 id="hamstr-adds-reticulum-for-nostr-over-lora-mesh">HAMSTR adds Reticulum for Nostr over LoRa mesh&lt;/h3>
&lt;p>&lt;a href="https://github.com/LibertyFarmer/hamstr">HAMSTR&lt;/a>는 ham radio 위로 Nostr 이벤트와 Lightning zap을 보내는 프로젝트로, 4월 12일 &lt;a href="https://github.com/LibertyFarmer/hamstr/pull/10">PR #10&lt;/a>을 병합해 &lt;a href="https://reticulum.network/">Reticulum&lt;/a> mesh networking을 transport backend로 추가했습니다. Reticulum은 LoRa, HF, VHF/UHF radio, serial link, TCP/IP 위에서 동작하는 암호화 mesh 프로토콜입니다. 이 추가로 HAMSTR는 인터넷 인프라가 전혀 없는 상태에서도 RNode hardware 장치 mesh를 통해 Nostr 이벤트를 중계할 수 있게 됩니다.&lt;/p>
&lt;p>기존 AX.25 Packet Radio와 VARA HF transport도 그대로 유지되므로, 운영자는 자신의 환경에 맞는 radio link를 선택할 수 있습니다. HAMSTR의 zero-knowledge 서버 아키텍처는 relay가 개인 키를 보지 못하게 하며, &lt;a href="https://nostrcompass.org/ko/topics/nip-57/">NIP-57&lt;/a> zap 준수 덕분에 offline Lightning zap이 Amethyst와 Primal 같은 클라이언트에 올바르게 표시됩니다. Reticulum transport용 설정 가이드는 &lt;a href="https://github.com/LibertyFarmer/hamstr/blob/master/RETICULUM.MD">RETICULUM.MD&lt;/a>에 포함되어 있습니다. 같은 주에 &lt;a href="https://github.com/LibertyFarmer/hamstr/pull/11">PR #11&lt;/a>은 프론트엔드를 Svelte 5와 TailwindCSS v4로 옮겼습니다.&lt;/p>
&lt;h2 id="shipping-this-week">Shipping This Week&lt;/h2>
&lt;h3 id="bloom-v010-ships-self-hosted-blossom-server-and-relay">Bloom v0.1.0 ships self-hosted Blossom server and relay&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrnative/bloom">Bloom&lt;/a>은 4월 9일 첫 릴리스인 &lt;a href="https://github.com/nostrnative/bloom/releases/tag/v0.1.0">v0.1.0&lt;/a>을 배포했습니다. Tauri v2 (Rust backend)와 React 19로 구축된 Bloom은 전체 &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a> 프로토콜 미디어 서버(BUD-00부터 BUD-10까지)와 Nostr relay를 하나의 데스크톱 애플리케이션으로 묶어 macOS, Windows, Linux에서 실행합니다. Android와 iOS 빌드도 계획되어 있습니다. 사용자는 SHA-256 content addressing, &lt;a href="https://nostrcompass.org/ko/topics/nip-94/">NIP-94&lt;/a> 파일 메타데이터 지원, &lt;code>blossom://&lt;/code> URI 해석을 갖춘 sovereign file storage를 별도의 서버 인프라 관리 없이 사용할 수 있습니다. 릴리스에는 16개의 플랫폼별 binary asset이 포함됩니다.&lt;/p>
&lt;h3 id="wavefunc-v010-and-v011-launch-nostr-internet-radio">WaveFunc v0.1.0 and v0.1.1 launch Nostr internet radio&lt;/h3>
&lt;p>&lt;a href="https://github.com/zeSchlausKwab/wavefunc">WaveFunc&lt;/a>는 4월 13일 &lt;a href="https://github.com/zeSchlausKwab/wavefunc/releases/tag/v0.1.0">v0.1.0&lt;/a>과 &lt;a href="https://github.com/zeSchlausKwab/wavefunc/releases/tag/v0.1.1">v0.1.1&lt;/a>을 배포하며 Nostr 기반 인터넷 라디오 디렉터리이자 플레이어로 출범했습니다. 커스텀 event kind가 데이터 모델을 정의합니다. 라디오 방송국 목록용 kind &lt;code>31237&lt;/code>, 즐겨찾기 목록용 kind &lt;code>30078&lt;/code>, 라이브 채팅용 kind &lt;code>1311&lt;/code>, 방송국 댓글용 kind &lt;code>1111&lt;/code>입니다. Khatru relay backend는 SQLite 저장과 Bluge full-text search를 제공하며 &lt;a href="https://nostrcompass.org/ko/topics/nip-50/">NIP-50&lt;/a>을 지원합니다.&lt;/p>
&lt;p>WaveFunc는 &lt;a href="https://nostrcompass.org/ko/topics/nip-60/">NIP-60&lt;/a> Cashu wallet과 nutzap 지원을 포함해 출시되었고, NDK에서 applesauce-core로 마이그레이션했습니다. &lt;a href="https://github.com/zeSchlausKwab/wavefunc/releases/tag/v0.1.1">v0.1.1&lt;/a>은 genre carousel, Lightning donation popover, 인증 사용자용 방송국 관리, Zapstore listing을 추가합니다. Tauri v2 데스크톱 빌드는 system tray 통합, media key 지원, autostart, deep linking을 얻었습니다. 빌드는 &lt;a href="https://wavefunc.live">wavefunc.live&lt;/a>에서 macOS, Windows, Linux, Android용으로 제공됩니다.&lt;/p>
&lt;h3 id="snort-ships-v050-through-v053-with-security-hardening-and-performance-overhaul">Snort ships v0.5.0 through v0.5.3 with security hardening and performance overhaul&lt;/h3>
&lt;p>&lt;a href="https://github.com/v0l/snort">Snort&lt;/a>는 React 기반 Nostr 웹 클라이언트로, &lt;a href="https://github.com/v0l/snort/releases/tag/v0.5.0">v0.5.0&lt;/a>부터 &lt;a href="https://github.com/v0l/snort/releases/tag/v0.5.3">v0.5.3&lt;/a>까지 세 개의 릴리스를 배포했습니다. 핵심인 v0.5.0은 실제 Schnorr signature 검증, 위조 relay 메시지에 대한 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> 보호 강화, 개선된 PIN 암호화, 검증되지 않은 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/26.md">NIP-26&lt;/a> delegation 신뢰 제거를 포함한 포괄적 보안 감사를 제공합니다. 성능 측면에서는 batched WASM signature 검증, lazy-loaded route, batch loading과 chunking이 포함된 재작성된 priority profile loader, worker-relay 최적화가 들어갔습니다. 같은 릴리스는 &lt;a href="https://nostrcompass.org/ko/topics/nip-90/">NIP-90&lt;/a> DVM을 위한 kind &lt;code>7000&lt;/code> payment-required invoice 표시도 추가했습니다. &lt;a href="https://github.com/v0l/snort/pull/620">PR #620&lt;/a>은 메시징 시스템을 성능 중심으로 재설계해 worker relay에 gift wrap을 영속화하고 O(n²) 채팅 목록 계산을 단일 pass Map 기반 접근으로 바꿨습니다.&lt;/p>
&lt;h3 id="primal-android-ships-3021-and-redesigns-feed-layout">Primal Android ships 3.0.21 and redesigns feed layout&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a>는 poll zap 투표, wallet multi-account sharing, remote signer와 wallet service의 auto-reconnect 버그 수정을 포함한 &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.0.21">v3.0.21&lt;/a>을 배포했습니다. 이어서 일곱 개의 PR이 병합됐습니다. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1008">PR #1008&lt;/a>은 main screen layout을 통합하고, &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1010">PR #1010&lt;/a>은 더 큰 avatar와 content indentation을 가진 새 feed card 디자인을 도입하며, &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1009">PR #1009&lt;/a>은 media feed card에 video 지원과 portrait layout을 추가하고, &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1012">PR #1012&lt;/a>는 빠른 답글용 compact text field를 도입하며, &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1013">PR #1013&lt;/a>은 app bar를 재설계합니다.&lt;/p>
&lt;h3 id="nostria-v3119-through-v3121-add-local-ai-image-generation">Nostria v3.1.19 through v3.1.21 add local AI image generation&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a>는 &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.19">v3.1.19&lt;/a>부터 &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.21">v3.1.21&lt;/a>까지 세 개의 릴리스를 80개가 넘는 커밋과 함께 배포했습니다. 핵심 추가 사항은 WebGPU 가속을 사용하는 Janus Pro 기반 로컬 이미지 생성으로, 사용자가 외부 API 없이 장치에서 이미지를 생성할 수 있게 합니다. 이 릴리스들은 cloud image generation, multimodal chat, ONNX runtime 지원, AI prompt library, AI cache 관리도 추가합니다. 클라이언트 쪽에서는 새로운 dialog 시스템, note editor overhaul, music embed 개선, signer login flow 변경이 포함됐습니다. &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-08-newsletter/">뉴스레터 #17&lt;/a>은 local signer 지원이 포함된 v3.1.18 native mobile 릴리스를 다뤘습니다.&lt;/p>
&lt;h3 id="tubestr-v103-ships-feed-and-studio-updates">TubeStr v1.0.3 ships feed and studio updates&lt;/h3>
&lt;p>&lt;a href="https://github.com/Tubestr/tubestr-v2">TubeStr&lt;/a>는 Nostr 위에 구축된 private family video sharing 앱으로, 4월 13일 &lt;a href="https://github.com/Tubestr/tubestr-v2/releases/tag/v1.0.3">v1.0.3&lt;/a>을 배포했습니다. 이 릴리스는 feed와 studio 개선을 포함합니다. &lt;a href="https://github.com/Tubestr/tubestr-v2/pull/3">PR #3&lt;/a>은 onboarding screen을 전면 개편하고, &lt;a href="https://github.com/Tubestr/tubestr-v2/pull/2">PR #2&lt;/a>는 video export 오류를 수정합니다. 이 앱은 가족 간 암호화 미디어 공유를 위해 NDK와 MDK (&lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> Development Kit)를 사용하며, 미디어 저장을 위한 &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a> 통합도 계획 중입니다. TubeStr는 &lt;a href="https://zapstore.dev">Zapstore&lt;/a>에서 받을 수 있습니다.&lt;/p>
&lt;h2 id="in-development">In Development&lt;/h2>
&lt;h3 id="botburrow-begins-development-as-marmot-bot-platform">Botburrow begins development as Marmot bot platform&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/botburrow">Botburrow&lt;/a>는 Marmot 팀의 새 프로젝트로, 4월 3일 시작됐습니다. 이는 self-hosted bot 관리 플랫폼으로, 각 bot은 자체 Nostr identity를 갖고 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> MLS 암호화 그룹 채팅에 Welcome 메시지로 참여하며, end-to-end encrypted 메시지를 주고받습니다. Rails 8.1로 구축된 dashboard는 하나의 whitenoise-rs daemon (&lt;code>wnd&lt;/code>)과 Unix socket을 통해 통신합니다.&lt;/p>
&lt;p>Botburrow는 꽤 큰 scripting 및 운영 계층을 노출합니다. command, trigger, scheduled action이 커스텀 Ruby 코드를 실행하고, script는 &lt;code>wnd&lt;/code>를 통해 profile, group membership, pending invite를 검사할 수 있으며, dashboard에는 실제 그룹 안에서 bot을 메시징하는 live chat view가 포함됩니다. 각 bot은 config, 캐시 데이터, 생성 결과물을 위한 자체 file storage도 가집니다. &lt;a href="https://github.com/marmot-protocol/botburrow/commit/2ed012078eaab3c5b92dff16b87865c2e353bd80">멀티 아키텍처 Docker image&lt;/a>는 Umbrel과 Start9에서 zero-config self-hosting을 목표로 합니다. README의 &lt;a href="https://github.com/marmot-protocol/botburrow/commit/c8ef8c306af247560b1952878206d854cde3fe20">trust model section&lt;/a>은 보안 경계를 문서화합니다.&lt;/p>
&lt;h3 id="nostr-archives-adds-trending-feeds-relay-and-entity-resolution">Nostr Archives adds trending feeds relay and entity resolution&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/nostrarchives-api">Nostr Archives&lt;/a>는 &lt;a href="https://nostrarchives.com">nostrarchives.com&lt;/a>의 Nostr archival 및 analytics 플랫폼으로, &lt;a href="https://github.com/barrydeen/nostrarchives-api">API&lt;/a> (Rust)와 &lt;a href="https://github.com/barrydeen/nostrarchives-frontend">frontend&lt;/a> (Next.js 16) 양쪽에서 꾸준한 개발을 이어갔습니다. API 쪽에서는 &lt;a href="https://github.com/barrydeen/nostrarchives-api/pull/118">PR #118&lt;/a>이 client leaderboard에 time-range filtering을 추가했고, &lt;a href="https://github.com/barrydeen/nostrarchives-api/pull/117">PR #117&lt;/a>은 reply 이벤트에 engagement counter를 추가했습니다. 프론트엔드에서는 &lt;a href="https://github.com/barrydeen/nostrarchives-frontend/pull/85">PR #85&lt;/a>가 URL path에서 Nostr entity를 직접 해석하고, &lt;a href="https://github.com/barrydeen/nostrarchives-frontend/pull/86">PR #86&lt;/a>은 API 문서 페이지를 추가합니다. 이 플랫폼은 NIP-50 search relay, trending feeds relay(&lt;code>wss://feeds.nostrarchives.com&lt;/code>), 미래 시각 이벤트용 scheduler relay, kinds 0, 3, 10002용 indexer relay까지 네 개의 relay 서비스를 운영합니다.&lt;/p>
&lt;h3 id="damus-fixes-favorites-timeline">Damus fixes favorites timeline&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>는 iOS 클라이언트로, &lt;a href="https://github.com/damus-io/damus/pull/3708">PR #3708&lt;/a>을 병합해 &lt;code>subscribe_to_favorites()&lt;/code> 함수를 in-place filtering, deduplication rebuilding, persisted tab selection 방식으로 재작성했습니다.&lt;/p>
&lt;h3 id="nostur-adds-private-zaps-and-custom-emoji-viewing">Nostur adds private zaps and custom emoji viewing&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a>는 이번 주 10개의 커밋을 푸시하며 private zap 지원, custom emoji 보기, animated &lt;code>.webp&lt;/code> 렌더링 수정, voice message audio format 감지를 추가했습니다.&lt;/p>
&lt;h3 id="amber-ships-v601-through-v603-with-webdav-backup-and-relay-reconnection-fixes">Amber ships v6.0.1 through v6.0.3 with WebDAV backup and relay reconnection fixes&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>는 Android &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> signer 앱으로, 이번 주 세 개의 릴리스를 배포했습니다. &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.0.1">v6.0.1&lt;/a>은 두 개의 새 backup 옵션(WebDAV와 Google Drive 공유), relay 재연결용 exponential backoff, Quartz 라이브러리 1.08.0 업데이트, 앱 업데이트와 profile 이벤트에 대한 event validation 수정을 포함합니다. &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.0.2">v6.0.2&lt;/a>는 seed word 사용 시 account index 옵션을 추가하고, 시작 시 relay가 offline인 경우 relay 재연결 문제를 고칩니다. &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.0.3">v6.0.3&lt;/a>은 intent 수신 시 비어 있는 request ID 문제에 대한 추가 수정을 담습니다.&lt;/p>
&lt;h3 id="plektos-v060-redesigns-with-ditto-themes">Plektos v0.6.0 redesigns with Ditto themes&lt;/h3>
&lt;p>&lt;a href="https://github.com/derekross/plektos">Plektos&lt;/a>는 인터랙티브 맵 위에 구축된 &lt;a href="https://nostrcompass.org/ko/topics/nip-52/">NIP-52&lt;/a> 기반 분산 meetup 및 이벤트 플랫폼으로, 4월 14일 &lt;a href="https://github.com/derekross/plektos/commit/7a691cdf089ceb7a8582dd5c0ee026830f2cdc77">v0.6.0&lt;/a>과 &lt;a href="https://github.com/derekross/plektos/commit/3a6474ae380522d8ee1b3526423fcfc3328fd879">v0.6.1&lt;/a>을 배포했습니다. 이 업데이트는 custom background image 업로드, avatar shape 설정, UI overhaul이 포함된 Ditto 스타일 community theme를 추가합니다. &lt;a href="https://github.com/derekross/plektos/pull/6">PR #6&lt;/a>은 보안, 아키텍처, UX 결과를 포함한 전체 코드 리뷰를 반영합니다. Plektos는 프로토콜 통합에 Nostrify를, 원격 로그인에 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a>을, 티켓 결제에 zaps를 사용합니다. Android 빌드는 Zapstore에서 받을 수 있습니다.&lt;/p>
&lt;h3 id="shadow-adds-nostr-os-api-and-cashu-wallet-app">Shadow adds Nostr OS API and Cashu wallet app&lt;/h3>
&lt;p>&lt;a href="https://github.com/justinmoon/shadow">Shadow&lt;/a>는 Justin Moon의 앱 runtime 플랫폼으로, 이틀 동안 30개가 넘는 커밋을 푸시했습니다. &lt;a href="https://github.com/justinmoon/shadow/commit/88cbda5131814d2730a2d892029932136db005df">Commit 88cbda5&lt;/a>는 Shadow runtime 안에서 실행되는 Cashu wallet 앱을 추가합니다. &lt;a href="https://github.com/justinmoon/shadow/commit/865c415">Commit 865c415&lt;/a>는 podcast player 데모를 더합니다. runtime은 &lt;code>Shadow.os.nostr&lt;/code>와 &lt;code>Shadow.os.audio&lt;/code>를 1급 OS 수준 API로 노출하며, Pixel runtime 레인은 루팅된 Android 장치에서 GPU compositing이 포함된 Wayland compositor를 실행합니다. 기여자 k0sti의 &lt;a href="https://github.com/justinmoon/shadow/pull/1">PR #1&lt;/a>과 &lt;a href="https://github.com/justinmoon/shadow/pull/2">PR #2&lt;/a>는 데스크톱 Linux font loading과 XDG state directory 처리를 수정합니다. 아직 정식 릴리스는 없습니다.&lt;/p>
&lt;h3 id="lief-fixes-amber-login-and-adds-zapstore">Lief fixes Amber login and adds Zapstore&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/chad.curtis/lief">Lief&lt;/a>는 다른 Nostr 사용자에게 장문 편지를 작성하고 보내는 앱으로, 4월 12일 build &lt;code>v2026.04.12&lt;/code>를 배포했습니다. 이 업데이트는 Android에서 &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> signer 로그인 문제를 고치고, signer nudge 흐름을 단순화하며, nostrify 의존성을 업그레이드하고, Zapstore 통합을 추가합니다.&lt;/p>
&lt;h3 id="espy-overhauls-color-picker-and-fixes-amber-login">Espy overhauls color picker and fixes Amber login&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/chad.curtis/espy">Espy&lt;/a>는 사용자가 현실 장면에서 3개에서 6개의 색 팔레트를 공유하는 Nostr 소셜 앱으로, 4월 12일 build &lt;code>v2026.04.12&lt;/code>를 배포했습니다. 이 업데이트는 grayscale toggle을 대체하는 curved saturation arc가 포함된 color picker overhaul, hue ring flicker 수정, Easter egg 캐릭터(Alchemist와 Astrologer) 추가를 포함합니다. PNG asset 압축으로 703KB를 줄였습니다. 이 릴리스는 또한 &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> signer 로그인 문제를 고치고, signer nudge 흐름을 단순화하며, nostrify 의존성을 올리고, Zapstore 통합을 더합니다.&lt;/p>
&lt;h3 id="jumble-adds-per-feed-kind-filters-and-articles-tab">Jumble adds per-feed kind filters and articles tab&lt;/h3>
&lt;p>&lt;a href="https://github.com/CodyTseng/jumble">Jumble&lt;/a>은 이번 주 13개의 커밋을 푸시하며 per-feed kind filtering, Articles 탭, privacy-preserving 옵션이 있는 notification read status sync, avatar 숨김 모드, account switching race condition 수정을 추가했습니다.&lt;/p>
&lt;h3 id="primal-web-ships-8-version-bumps">Primal Web ships 8 version bumps&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-web-app">Primal Web&lt;/a>는 1주일 동안 21개 커밋과 함께 3.0.93부터 3.0.101까지 버전을 배포했습니다. 작업은 live stream chat 개선, mention 경계 수정, bookmark pagination, duplicate like 방지, relay proxy 수리에 집중됐습니다.&lt;/p>
&lt;h2 id="protocol-and-spec-work">Protocol and Spec Work&lt;/h2>
&lt;h3 id="nip-updates">NIP Updates&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 저장소&lt;/a>의 최근 변경 사항입니다:&lt;/p>
&lt;p>&lt;strong>Merged:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-34/">NIP-34&lt;/a> (Git Stuff): Add &lt;code>nostr://&lt;/code> clone URLs&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2312">PR #2312&lt;/a>): &lt;a href="https://nostrcompass.org/ko/topics/nip-34/">NIP-34&lt;/a>는 브랜치, 태그, relay 위치, maintainer pubkey를 나열하는 kind &lt;code>30617&lt;/code> 저장소 공지로 git 저장소를 Nostr 위에 호스팅하는 방법을 정의합니다. 지금까지 이 명세에는 저장소를 참조하는 공식 URL scheme이 없었습니다. 이 PR은 &lt;code>git-remote-nostr&lt;/code> helper와 함께 동작하는 &lt;code>nostr://&lt;/code> clone URL 형식을 추가합니다. 따라서 &lt;code>git clone nostr://npub1.../relay.ngit.dev/ngit&lt;/code> 같은 형식으로 npub 또는 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/05.md">NIP-05&lt;/a> 주소를 해석하고, 저장소 relay 위치를 발견하며, 저장소 데이터를 가져올 수 있습니다. 세 가지 URL 패턴이 정의됩니다. 직접 addressable event 참조용 &lt;code>nostr://&amp;lt;naddr&amp;gt;&lt;/code>, 사람이 읽을 수 있는 저장소 참조용 &lt;code>nostr://&amp;lt;npub|nip05&amp;gt;/&amp;lt;identifier&amp;gt;&lt;/code>, 그리고 클라이언트가 relay hint가 필요할 때의 &lt;code>nostr://&amp;lt;npub|nip05&amp;gt;/&amp;lt;relay-hint&amp;gt;/&amp;lt;identifier&amp;gt;&lt;/code>입니다. relay hint와 identifier는 모두 RFC 3986에 따라 percent-encoding됩니다. 이 형식은 이미 Shakespeare, ngit의 git-remote-nostr helper, GitWorkshop.dev, NostrHub.io가 구현하거나 표시하고 있습니다. PR은 또한 저장소 식별자를 위한 &lt;code>d&lt;/code> 태그 형식을 더 엄격히 해 &lt;code>nostr://&lt;/code> URL이 유효한 URI를 생성하도록 만듭니다.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Open PRs and Discussions:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>NIP-63a: Minimal Payment Gateway Descriptor&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2315">PR #2315&lt;/a>): 유료 콘텐츠 접근을 위해 콘텐츠 제작자가 payment gateway, pricing model, subscription rule을 선언할 수 있는 새 kind &lt;code>10164&lt;/code> replaceable event를 제안합니다. 현재 Nostr에서 결제 게이트 콘텐츠를 지원하려면 각 클라이언트가 자체 결제 흐름을 구현해야 하며, 제작자가 &amp;ldquo;이 콘텐츠는 gateway Y를 통해 X sats&amp;quot;라고 표준 방식으로 선언할 수 없습니다. 제안된 이벤트는 payment gateway descriptor를 Nostr 이벤트에 직접 내장해, 클라이언트가 하나의 replaceable event에서 제작자의 허용 결제 방식, 가격 tier, subscription 옵션을 발견할 수 있게 합니다. 이로써 결제 표현을 특정 제공자와 분리하므로 제작자는 각 클라이언트가 제공자별로 별도 통합을 구현하지 않아도 Lightning, Cashu, fiat gateway를 함께 받을 수 있습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-XX: Relay Self-Declaration Manifest and Retention Horizon&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2314">PR #2314&lt;/a>): relay transparency를 위한 두 개의 wire protocol primitive를 제안합니다. 첫 번째는 relay 운영자가 endpoint(clearnet, Tor, I2P), retention window, write policy, 지원 NIP를 선언하는 gossip 가능한 replaceable event kind &lt;code>10100&lt;/code>입니다. HTTP로만 제공되고 Nostr 자체로는 발견할 수 없는 &lt;a href="https://nostrcompass.org/ko/topics/nip-11/">NIP-11&lt;/a> relay information document와 달리, kind &lt;code>10100&lt;/code> manifest는 다른 이벤트처럼 Nostr event 네트워크를 통해 전파됩니다. NIP-11 &lt;code>pubkey&lt;/code> 필드를 통한 TOFU key binding으로 spoofing을 막습니다. 두 번째는 &lt;code>HORIZON&lt;/code>이라는 새 relay-to-client 메시지 &lt;code>[[&amp;quot;HORIZON&amp;quot;, &amp;lt;sub_id&amp;gt;, &amp;lt;earliest_timestamp&amp;gt;]]&lt;/code>로, &lt;code>EOSE&lt;/code> 전에 전송됩니다. 클라이언트의 subscription time range가 릴레이 retention window를 넘어가면, 릴레이는 자신이 보유한 가장 이른 타임스탬프를 알려 줍니다. 이렇게 하면 &amp;ldquo;결과 없음&amp;quot;이라는 침묵 대신 &amp;ldquo;timestamp X부터의 데이터만 있다&amp;quot;는 명시적 경계가 생깁니다. 동기는 2026년 2월 NIP-11의 &lt;code>retention&lt;/code> 필드가 거의 쓰이지 않는 HTTP 전용 전달 모델 때문에 제거된 데 있습니다. 참조 구현은 nostr-rs-relay 0.9.0 위에서 90일 pruning으로 동작합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-TPLD: Transient Private Location Data&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2309">PR #2309&lt;/a>): 특정 수신자와 암호화된 위치 데이터를 공유하기 위한 kind &lt;code>20411&lt;/code>(ephemeral 범위)을 제안합니다. Google Maps와 Apple Find My 같은 중앙화 위치 공유 서비스는 실시간 이동 정보를 중앙 권한자에게 맡기게 만듭니다. 이 NIP는 privacy-first 대안을 정의합니다. 이벤트 content에는 수신자 pubkey를 key로 하고, configurable precision의 geohash를 담은 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> 암호화 payload를 value로 하는 JSON map이 들어갑니다. precision 5면 도시 수준, precision 8이면 거리 수준입니다. 여러 수신자를 하나의 이벤트 안에서 수신자별 암호화로 처리하므로, 각자는 자기 payload만 복호화할 수 있습니다. &lt;code>ttl&lt;/code> 태그는 권장 보존 시간(초)을 지정하고, ephemeral kind 범위(&lt;code>20000&lt;/code>-&lt;code>20999&lt;/code>)는 릴레이가 이를 무기한 저장하지 말아야 함을 시사합니다. &lt;code>p&lt;/code> 태그는 content 복호화 없이도 관련 이벤트를 필터링하게 합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-5c/">NIP-5C&lt;/a> (Scrolls): WASM programs update&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2281">PR #2281&lt;/a>): WebAssembly 프로그램 게시와 실행 명세 개발을 계속 이어갑니다. 이 명세는 WASM binary를 Nostr 이벤트로 게시하고 발견하기 위한 규약을 정의합니다. Scroll은 클라이언트가 relay에서 내려받아 sandboxed runtime에서 실행할 수 있는 self-contained 프로그램으로, Nostr를 실행 가능한 코드의 배포 네트워크로 바꿉니다. 이 PR은 이벤트 형식과 runtime interface를 다듬습니다. &lt;a href="https://nprogram.netlify.app/">데모 앱&lt;/a>은 브라우저 안에서 실행되는 scroll을 보여 주며, 어떤 클라이언트든 가져와 실행할 수 있는 예제 프로그램이 Nostr 이벤트로 게시돼 있습니다. 이 개념은 &lt;a href="https://nostrcompass.org/ko/topics/nip-5a/">NIP-5A&lt;/a>가 HTML 페이지를 제공하는 데서 더 나아가, 같은 relay 인프라를 통해 상호작용 프로그램까지 배포하려는 것입니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> large payload support&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/1907">PR #1907&lt;/a>): 현재 65,535바이트 제한보다 더 큰 payload를 다룰 수 있도록 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> versioned encryption을 확장하는 제안입니다. 이 변경은 하위 호환적입니다. 큰 메시지가 필요 없는 구현체는 이를 완전히 무시해도 됩니다. 실제 동기는 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> 원격 서명에서 큰 kind &lt;code>3&lt;/code> contact list를 다뤄야 하는 경우입니다. 사용자의 follow list는 JSON 직렬화 시 암호화 크기 한도를 넘길 수 있으므로, 이 변경이 없으면 remote signer는 큰 contact list 응답을 암호화할 수 없고 우회책이나 잘라내기가 필요해집니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-c7/">NIP-C7&lt;/a>: Restrict kind 9 to chat views&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2310">PR #2310&lt;/a>): &lt;a href="https://nostrcompass.org/ko/topics/nip-c7/">NIP-C7&lt;/a>는 kind &lt;code>9&lt;/code>를 경량 채팅 메시지로 정의합니다. 이는 &lt;a href="https://nostrcompass.org/ko/topics/nip-29/">NIP-29&lt;/a> 그룹 채팅이나 &lt;a href="https://nostrcompass.org/ko/topics/nip-53/">NIP-53&lt;/a> 라이브 액티비티 스트림 같은 채팅 맥락의 실시간 대화를 위한 짧은 텍스트 노트입니다. 이 PR은 클라이언트가 순서 있는 이벤트 흐름을 &amp;ldquo;chat view&amp;quot;로 렌더링할 때 kind &lt;code>9&lt;/code> 이벤트만 가져와야 한다는 요구를 추가합니다. 이렇게 하면 kind &lt;code>1&lt;/code> 노트나 kind &lt;code>30023&lt;/code> article 같은 다른 콘텐츠가 채팅 타임라인에 섞여 들어가 문맥이 깨지는 일을 막습니다. 다른 콘텐츠는 여전히 &lt;a href="https://nostrcompass.org/ko/topics/nip-18/">NIP-18&lt;/a> repost 규약에 따라 kind &lt;code>9&lt;/code> 메시지 안에서 인용할 수 있습니다. 동기는 일반 피드에 kind &lt;code>9&lt;/code> 메시지가 나타나면 문맥 없이 짧은 답변 조각처럼 보인다는 커뮤니티 논의입니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-deep-dive-nip-29-relay-based-groups">NIP Deep Dive: NIP-29 (Relay-based Groups)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/29.md">NIP-29&lt;/a>은 릴레이 자체가 그룹 멤버십과 moderation을 관리하는 그룹 메시징 모델을 정의합니다. 그룹은 특정 릴레이 위에 존재하며 임의 문자열 ID로 식별되고, 누가 그룹에 쓸 수 있는지는 릴레이가 강제합니다. 이는 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a>의 client-side MLS 암호화나 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> 그룹 채팅의 gift-wrapped DM 아키텍처와는 다릅니다. NIP-29에서는 릴레이가 권한 주체이고, 메시지는 릴레이 운영자가 읽을 수 있으며, moderation도 릴레이 수준에서 이뤄집니다.&lt;/p>
&lt;p>그룹은 &lt;code>&amp;lt;host&amp;gt;'&amp;lt;group-id&amp;gt;&lt;/code> 형식으로 식별됩니다. 예를 들어 &lt;code>groups.nostr.com'abcdef&lt;/code>입니다. 특수 그룹 ID &lt;code>_&lt;/code>는 릴레이 전체 토론용 최상위 그룹으로 예약되어 있습니다. 그룹에 보내는 모든 사용자 이벤트는 그룹 ID를 담은 &lt;code>h&lt;/code> 태그를 가집니다:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1744675200&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">9&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;h&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;abcdef&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;previous&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;a1b2c3d4&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;e5f67890&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;12345678&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Has anyone tested the new relay config?&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>previous&lt;/code> 태그는 tamper-detection 메커니즘입니다. 클라이언트는 같은 릴레이에서 최근 50개 메시지 안에서 본 이벤트의 처음 8개 hex 문자(4바이트)를 포함합니다. 릴레이는 데이터베이스에 없는 이벤트를 가리키는 &lt;code>previous&lt;/code> 참조가 들어간 이벤트를 거부하므로, 그룹이 다른 릴레이 포크로 문맥 없이 재브로드캐스트되는 일을 감지할 수 있습니다. 완전한 chain of custody는 아니지만, 맥락 밖 재유포를 눈에 띄게 만듭니다.&lt;/p>
&lt;p>그룹 멤버십은 &lt;code>9000&lt;/code>-&lt;code>9020&lt;/code> 범위의 moderation event kind로 관리됩니다. 사용자는 kind &lt;code>9021&lt;/code> 가입 요청을 게시해 그룹에 들어가며, 릴레이는 정책에 따라 이를 수락하거나 거부합니다:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;f1a2b3c4d5e6f7890123456789abcdef0123456789abcdef1234567890abcdef&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1744675200&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">9021&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;h&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;abcdef&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;code&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;invite-xyz-123&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;I&amp;#39;d like to join the dev discussion group.&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>선택적인 &lt;code>code&lt;/code> 태그는 관리자가 kind &lt;code>9009&lt;/code> 이벤트로 만든 invite code와 연결됩니다. 사용자가 떠날 때는 kind &lt;code>9022&lt;/code>를 게시하고, 릴레이는 자동으로 kind &lt;code>9001&lt;/code> removal을 발행합니다. 관리자는 역할이 포함된 사용자 추가(kind &lt;code>9000&lt;/code>), 사용자 제거(kind &lt;code>9001&lt;/code>), 그룹 메타데이터 편집(kind &lt;code>9002&lt;/code>), 이벤트 삭제(kind &lt;code>9005&lt;/code>)를 할 수 있습니다. 역할 시스템은 유연합니다. 역할은 임의 레이블이며, 각 역할의 권한은 프로토콜이 아니라 릴레이 정책이 정합니다. 릴레이는 그룹 설정을 addressable event로 게시합니다. 메타데이터용 kind &lt;code>39000&lt;/code>, admin 목록용 kind &lt;code>39001&lt;/code>, member 목록용 kind &lt;code>39002&lt;/code>, 역할과 capability용 kind &lt;code>39003&lt;/code>입니다.&lt;/p>
&lt;p>그룹은 public(누구나 읽고 멤버만 쓰기), closed(멤버만 읽고 쓰기), fully open 상태를 가질 수 있습니다. 가시성과 쓰기 접근 설정은 kind &lt;code>9002&lt;/code> 메타데이터 편집 이벤트의 &lt;code>public&lt;/code>, &lt;code>open&lt;/code>, &lt;code>visible&lt;/code>, &lt;code>unrestricted&lt;/code> 플래그로 직교적으로 제어됩니다. 하나의 릴레이는 멤버십과 moderation이 서로 독립적인 여러 그룹을 동시에 호스팅할 수 있습니다.&lt;/p>
&lt;p>이 명세는 채팅 메시지만이 아니라 그룹 안의 어떤 event kind도 허용합니다. 장문 글(&lt;a href="https://nostrcompass.org/ko/topics/nip-23/">NIP-23&lt;/a>), 캘린더 이벤트(&lt;a href="https://nostrcompass.org/ko/topics/nip-52/">NIP-52&lt;/a>), 라이브 스트림(&lt;a href="https://nostrcompass.org/ko/topics/nip-53/">NIP-53&lt;/a>), 마켓 listing까지 모두 &lt;code>h&lt;/code> 태그를 달고 그룹 맥락에 참여할 수 있습니다. 그래서 NIP-29 그룹은 서로 다른 콘텐츠 타입이 같은 namespace 안에 공존하는 Discord 서버나 Slack workspace처럼 동작합니다.&lt;/p>
&lt;p>&lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a>는 가장 활발히 개발되는 NIP-29 클라이언트이며, &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-01-newsletter/">v1.7.0&lt;/a>에서 voice room, email login, proof-of-work DM을 추가했습니다. &lt;a href="https://github.com/coracle-social/coracle">Coracle&lt;/a>도 NIP-29 그룹을 지원합니다. 릴레이 측에서는 &lt;a href="https://github.com/fiatjaf/relay29">groups.fiatjaf.com&lt;/a>이 fiatjaf의 참조 구현입니다. &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-08-newsletter/">OpenSats&lt;/a>의 지원을 받은 Kotlin Multiplatform NIP-29 클라이언트 &lt;a href="https://github.com/Nostrord/nostrord">Nostrord&lt;/a>는 Discord 스타일 moderation과 threading을 갖춘 초기 개발 단계에 있습니다.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> 같은 암호화 대안과 비교한 tradeoff는 분명합니다. NIP-29 그룹은 릴레이 운영자가 읽을 수 있습니다. end-to-end encryption도, forward secrecy도, post-compromise security도 없습니다. 콘텐츠 무결성과 멤버십 강제는 릴레이가 신뢰 당사자입니다. 그 대가로 단순함을 얻습니다. 관리할 key material도 없고, 장치 간 state sync도 없고, MLS handshake 협상도 없습니다. 릴레이 운영자가 그룹을 띄우고, 사용자가 참여하며, 메시지가 흐릅니다. 공개 커뮤니티, 개발 채널, 열려 있는 토론 공간에는 이 릴레이 신뢰 모델이 용도와 맞습니다. 릴레이가 콘텐츠를 읽지 못해야 하는 private messaging에는 NIP-17이나 Marmot이 더 적절합니다.&lt;/p>
&lt;h2 id="nip-deep-dive-nip-90-data-vending-machines">NIP Deep Dive: NIP-90 (Data Vending Machines)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/90.md">NIP-90&lt;/a>은 Nostr 위의 온디맨드 계산 프로토콜을 정의합니다. 고객이 작업 요청을 게시하면, 서비스 제공자가 이를 수행하기 위해 경쟁하고, 결과는 Nostr 이벤트로 전달됩니다. 명세는 이를 &amp;ldquo;money in, data out&amp;quot;이라고 설명하며, 고객이 누가 결과를 만들었는지보다 어떤 결과가 나왔는지에 관심을 갖는 데이터 처리 시장으로 Nostr를 다룹니다.&lt;/p>
&lt;p>이 프로토콜은 작업 요청용 kinds &lt;code>5000&lt;/code>-&lt;code>5999&lt;/code>, 결과용 &lt;code>6000&lt;/code>-&lt;code>6999&lt;/code>, 피드백용 kind &lt;code>7000&lt;/code>을 예약합니다. 결과 kind는 항상 요청 kind보다 1000 큽니다. kind &lt;code>5001&lt;/code> 요청은 kind &lt;code>6001&lt;/code> 결과를 만듭니다. 다음은 텍스트 요약을 요청하는 예시입니다:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1744675200&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">5001&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;i&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://example.com/article.txt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;url&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;output&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;text/plain&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;relays&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.damus.io&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://nos.lol&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;bid&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;5000&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;param&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;lang&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;en&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;param&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;max_tokens&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;280&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>i&lt;/code> 태그는 타입 마커와 함께 입력 데이터를 지정합니다. 정의된 입력 타입은 네 가지입니다. &lt;code>url&lt;/code>(이 URL에서 데이터를 가져와 처리), &lt;code>event&lt;/code>(Nostr 이벤트를 입력으로 사용), &lt;code>job&lt;/code>(이전 작업의 출력에 이어서 처리), &lt;code>text&lt;/code>(인라인 텍스트)입니다. &lt;code>bid&lt;/code> 태그는 millisats 단위 최대 지불 금액을 설정합니다. &lt;code>param&lt;/code> 태그는 작업 종류별 파라미터를 담고, &lt;code>output&lt;/code> 태그는 기대하는 응답 형식을 지정합니다.&lt;/p>
&lt;p>서비스 제공자는 이 요청을 받아 결과를 게시합니다:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1744675260&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">6001&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;request&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;{\&amp;#34;id\&amp;#34;:\&amp;#34;c3d4e5...\&amp;#34;,\&amp;#34;kind\&amp;#34;:5001,...}&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.damus.io&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;i&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://example.com/article.txt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;url&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;amount&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;5000&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;lnbc50n1pj...&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;The article discusses three protocol changes proposed for the next quarter...&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>결과는 원본 요청 이벤트를 태그하고, 입력을 참조용으로 포함하며, 고객 pubkey를 지정하고, 선택적으로 &lt;code>amount&lt;/code> 태그에 Lightning invoice를 넣을 수 있습니다. 고객은 pubkey를 확인해 결과가 특정 서비스 제공자에게서 왔는지 검증할 수 있습니다.&lt;/p>
&lt;p>작업 피드백(kind &lt;code>7000&lt;/code>)은 작업이 진행되는 동안 상태 업데이트를 제공합니다. 서비스 제공자는 &lt;code>payment-required&lt;/code>, &lt;code>processing&lt;/code>, &lt;code>error&lt;/code>, &lt;code>success&lt;/code> 같은 상태 값을 가진 피드백 이벤트를 발행할 수 있습니다. 덕분에 고객은 오래 걸리는 작업의 진행 상태를 실시간으로 볼 수 있습니다:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1744675230&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">7000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;status&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;payment-required&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.damus.io&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;amount&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;5000&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;lnbc50n1pj...&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>작업 체이닝도 가능합니다. 고객은 입력 타입을 &lt;code>job&lt;/code>으로 두고 이전 작업의 event ID를 참조할 수 있습니다. 하위 작업을 맡은 서비스 제공자는 상위 작업 결과를 기다린 뒤 이를 처리합니다. 이렇게 하면 오디오 전사(kind &lt;code>5002&lt;/code>), 전사 요약(kind &lt;code>5001&lt;/code>), 요약 번역(kind &lt;code>5003&lt;/code>) 같은 조합 가능한 파이프라인을 만들 수 있습니다. 각 단계는 서로 다른 서비스 제공자가 맡을 수 있습니다.&lt;/p>
&lt;p>프라이버시를 위해 고객은 서비스 제공자의 pubkey로 &lt;a href="https://nostrcompass.org/ko/topics/nip-04/">NIP-04&lt;/a> 암호화를 사용해 &lt;code>i&lt;/code>와 &lt;code>param&lt;/code> 태그를 암호화할 수 있습니다. 이 경우 암호문은 &lt;code>content&lt;/code> 필드에 들어가고 &lt;code>encrypted&lt;/code> 태그가 추가됩니다. 이렇게 하면 릴레이와 다른 서비스 제공자는 입력 데이터와 파라미터를 볼 수 없지만, 고객은 미리 특정 제공자를 선택해야 합니다.&lt;/p>
&lt;p>구체적인 작업 요청 타입은 &lt;a href="https://github.com/nostr-protocol/data-vending-machines/tree/master/kinds">별도 저장소&lt;/a>에 정의되어 있습니다. 현재는 text generation(kind &lt;code>5050&lt;/code>), summarization(kind &lt;code>5001&lt;/code>), translation(kind &lt;code>5002&lt;/code>), speech-to-text(kind &lt;code>5003&lt;/code>), image generation(kind &lt;code>5100&lt;/code>), content recommendation(kind &lt;code>5300&lt;/code>) 등이 있습니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/v0l/snort">Snort&lt;/a>는 &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-08-newsletter/">뉴스레터 #17&lt;/a>에서 다룬 kind &lt;code>7000&lt;/code> payment-required invoice 표시를 추가해, DVM이 결제 요구로 응답할 때 feed 안에 Lightning invoice를 직접 렌더링합니다. &lt;a href="https://github.com/hzrd149/nostrudel">noStrudel&lt;/a>에는 사용 가능한 서비스 제공자를 둘러보는 DVM explorer가 있습니다. 제공자 쪽에서는 &lt;a href="https://github.com/dtdannen/dvmdash">DVMDash&lt;/a> 같은 프로젝트가 네트워크 전반의 DVM 활동을 추적하고, 여러 AI 중심 서비스가 NIP-90 프로토콜을 통해 text generation, image creation, content moderation을 제공합니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-89/">NIP-89&lt;/a> (Recommended Application Handlers)는 서비스 제공자가 자신의 capability를 발견 가능한 Nostr 이벤트로 게시할 수 있게 해 NIP-90을 보완합니다.&lt;/p>
&lt;hr>
&lt;p>이번 주는 여기까지입니다. 무언가를 만들고 있거나 전할 소식이 있다면 Nostr에서 DM을 보내거나 &lt;a href="https://nostrcompass.org">nostrcompass.org&lt;/a>에서 찾아 주세요.&lt;/p></content:encoded></item><item><title>Nostr Compass #17</title><link>https://nostrcompass.org/ko/newsletters/2026-04-08-newsletter/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2026-04-08-newsletter/</guid><description>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>가 Arti Tor 통합과 재설계된 Shorts UI가 포함된 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-08-newsletter/#amethyst-ships-arti-tor-merges-pure-kotlin-mls-and-marmot">v1.08.0&lt;/a>을 출시했고, &lt;a href="https://nostrcompass.org/ko/topics/quartz/">Quartz&lt;/a> 라이브러리에 &lt;a href="https://nostrcompass.org/ko/topics/mls/">MLS&lt;/a>와 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a>의 순수 Kotlin 구현을 병합했습니다. &lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a>는 동영상 녹화, 애니메이션 GIF 프로필, 비공개 답글이 포함된 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-08-newsletter/#nostur-v1270-adds-video-recording-and-private-replies">v1.27.0&lt;/a>을 출시했습니다. &lt;a href="https://github.com/r0d8lsh0p/shosho-releases">Shosho&lt;/a>는 Shows(OBS와 연결되는 맞춤형 라이브 스트림 정보)와 TikTok 스타일의 세로 동영상 캐러셀이 포함된 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-08-newsletter/#shosho-v0150-launches-shows-and-vertical-video-carousel">v0.15.0&lt;/a>을 공개했습니다. &lt;a href="https://github.com/Spl0itable/NYM">Nymchat&lt;/a>는 회전하는 일회용 키를 사용하는 향상된 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> 그룹 채팅과 함께 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-08-newsletter/#nymchat-reverts-marmot-ships-enhanced-nip-17-group-chats">Marmot 되돌리기 릴리스&lt;/a>를 내놓았습니다. &lt;a href="https://github.com/mmalmi/nostr-vpn">Nostr VPN&lt;/a>은 여섯 개 릴리스에 걸쳐 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-08-newsletter/#nostr-vpn-ships-exit-node-support-and-umbrel-packaging">exit node 지원과 Umbrel 패키징&lt;/a>을 추가했습니다. &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>는 연결별 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> 서명 키와 Zapstore 인앱 업데이트가 포함된 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-08-newsletter/#amber-v600-pre1-adds-per-connection-nip-46-signing-keys">v6.0.0-pre1&lt;/a>로 올라섰습니다. &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>는 Zapstore를 통한 APK 자체 업데이트가 포함된 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-08-newsletter/#notedeck-v0100-beta-ships-zapstore-self-update">v0.10.0-beta&lt;/a>에 도달했고, &lt;a href="https://nostrcompass.org/ko/topics/nip-58/">NIP-58&lt;/a> (Badges)은 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-08-newsletter/#nip-updates">kind 마이그레이션&lt;/a>을 받았습니다. 이번 주 NIP 심층 분석은 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages)과 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> (Nostr Remote Signing)을 다룹니다.&lt;/p></description><content:encoded>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>가 Arti Tor 통합과 재설계된 Shorts UI가 포함된 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-08-newsletter/#amethyst-ships-arti-tor-merges-pure-kotlin-mls-and-marmot">v1.08.0&lt;/a>을 출시했고, &lt;a href="https://nostrcompass.org/ko/topics/quartz/">Quartz&lt;/a> 라이브러리에 &lt;a href="https://nostrcompass.org/ko/topics/mls/">MLS&lt;/a>와 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a>의 순수 Kotlin 구현을 병합했습니다. &lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a>는 동영상 녹화, 애니메이션 GIF 프로필, 비공개 답글이 포함된 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-08-newsletter/#nostur-v1270-adds-video-recording-and-private-replies">v1.27.0&lt;/a>을 출시했습니다. &lt;a href="https://github.com/r0d8lsh0p/shosho-releases">Shosho&lt;/a>는 Shows(OBS와 연결되는 맞춤형 라이브 스트림 정보)와 TikTok 스타일의 세로 동영상 캐러셀이 포함된 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-08-newsletter/#shosho-v0150-launches-shows-and-vertical-video-carousel">v0.15.0&lt;/a>을 공개했습니다. &lt;a href="https://github.com/Spl0itable/NYM">Nymchat&lt;/a>는 회전하는 일회용 키를 사용하는 향상된 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> 그룹 채팅과 함께 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-08-newsletter/#nymchat-reverts-marmot-ships-enhanced-nip-17-group-chats">Marmot 되돌리기 릴리스&lt;/a>를 내놓았습니다. &lt;a href="https://github.com/mmalmi/nostr-vpn">Nostr VPN&lt;/a>은 여섯 개 릴리스에 걸쳐 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-08-newsletter/#nostr-vpn-ships-exit-node-support-and-umbrel-packaging">exit node 지원과 Umbrel 패키징&lt;/a>을 추가했습니다. &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>는 연결별 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> 서명 키와 Zapstore 인앱 업데이트가 포함된 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-08-newsletter/#amber-v600-pre1-adds-per-connection-nip-46-signing-keys">v6.0.0-pre1&lt;/a>로 올라섰습니다. &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>는 Zapstore를 통한 APK 자체 업데이트가 포함된 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-08-newsletter/#notedeck-v0100-beta-ships-zapstore-self-update">v0.10.0-beta&lt;/a>에 도달했고, &lt;a href="https://nostrcompass.org/ko/topics/nip-58/">NIP-58&lt;/a> (Badges)은 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-08-newsletter/#nip-updates">kind 마이그레이션&lt;/a>을 받았습니다. 이번 주 NIP 심층 분석은 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages)과 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> (Nostr Remote Signing)을 다룹니다.&lt;/p>
&lt;h2 id="top-stories">Top Stories&lt;/h2>
&lt;h3 id="amethyst-ships-arti-tor-merges-pure-kotlin-mls-and-marmot">Amethyst ships Arti Tor, merges pure Kotlin MLS and Marmot&lt;/h3>
&lt;p>vitorpamplona가 유지 관리하는 Android 클라이언트 &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>는 &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.07.3">v1.07.3&lt;/a>부터 &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.08.0">v1.08.0&lt;/a>까지 네 개의 릴리스를 배포했고, 아직 릴리스되지 않은 대규모 작업 묶음을 &lt;a href="https://nostrcompass.org/ko/topics/quartz/">Quartz&lt;/a> 라이브러리(공유 Kotlin Multiplatform Nostr 모듈)에 병합했습니다. 핵심 릴리스는 v1.08.0 &amp;ldquo;Arti Tor&amp;quot;로, 앱의 Tor 연결을 C 기반 Tor 라이브러리에서 Tor Project의 Rust 구현인 &lt;a href="https://gitlab.torproject.org/tpo/core/arti">Arti&lt;/a>로 옮깁니다. 이 전환은 이전 C Tor 바인딩에서 발생하던 무작위 충돌을 해결합니다. Arti는 메모리 안전성과 async I/O를 위해 Rust로 처음부터 다시 작성된 Tor Project의 장기적인 C 코드베이스 대체물입니다.&lt;/p>
&lt;p>v1.07.3 릴리스는 Shorts UI를 재설계해 페이지 단위 디자인을 사진, 쇼츠, 긴 동영상을 위한 edge-to-edge 피드로 바꿨습니다. 같은 릴리스는 badges를 kind &lt;code>10008&lt;/code>로, bookmarks를 kind &lt;code>10003&lt;/code>으로 옮겨 이번 주 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-08-newsletter/#nip-updates">병합된&lt;/a> &lt;a href="https://nostrcompass.org/ko/topics/nip-58/">NIP-58&lt;/a> kind 마이그레이션과 맞췄습니다. v1.07.4는 Nostr Wallet Connect secret 처리 문제를 수정했고, v1.07.5는 이미지 업로드 충돌을 수정했습니다.&lt;/p>
&lt;p>아직 태그된 릴리스에는 포함되지 않았지만 main에는 이미 들어간 작업으로, 팀은 &lt;a href="https://nostrcompass.org/ko/topics/mls/">MLS&lt;/a>와 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> 프로토콜 모두의 전체 Kotlin 구현을 작성해 네이티브 C/Rust 라이브러리 바인딩이 더 이상 필요 없게 만들었습니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2147">PR #2147&lt;/a>은 핵심 Marmot MLS 그룹 메시징 계층을 추가하고, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2149">PR #2149&lt;/a>는 그룹 채팅 UI를 추가하며, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2146">PR #2146&lt;/a>은 구독 관리자와 함께 수신 및 발신 메시지 프로세서를 추가합니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2141">PR #2141&lt;/a>은 MLS 그룹 상태 영속화와 KeyPackage rotation 관리를 추가하고, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2150">PR #2150&lt;/a>은 향상된 GroupInfo signing과 함께 전체 MLS 테스트 스위트를 추가하며, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2158">PR #2158&lt;/a>은 KeyPackage publication status 추적을 더합니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2166">PR #2166&lt;/a>은 Nostr 암호화 연산을 위한 순수 Kotlin secp256k1 구현을 추가해 네이티브 C 라이브러리 의존성을 대체합니다. Kotlin MLS 구현까지 더해지면서 &lt;a href="https://nostrcompass.org/ko/topics/quartz/">Quartz&lt;/a>는 네이티브 바인딩 없이도 Nostr signing과 Marmot 그룹 메시징을 수행할 수 있게 되었고, 이는 iOS를 포함한 Kotlin Multiplatform 타깃으로 나아갈 길을 엽니다.&lt;/p>
&lt;p>팀은 또한 &lt;a href="https://nostrcompass.org/en/topics/nip-ac/">NIP-AC&lt;/a> (P2P Voice and Video Calls) 지원도 구축하고 있습니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2143">PR #2143&lt;/a>은 NIP-AC call state machine에 대한 전체 테스트 스위트를 추가하고, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2164">PR #2164&lt;/a>는 앱 재시작 후 오래된 call offer가 다시 트리거되는 일을 막습니다.&lt;/p>
&lt;h3 id="nostur-v1270-adds-video-recording-and-private-replies">Nostur v1.27.0 adds video recording and private replies&lt;/h3>
&lt;p>iOS Nostr 클라이언트 &lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a>는 4월 2일 &lt;a href="https://github.com/nostur-com/nostur-ios-public/releases/tag/v1.27.0">v1.27.0&lt;/a>을 출시했습니다. 이 릴리스는 업로드 전 잘라내기가 가능한 인앱 동영상 녹화를 추가해, 사용자가 짧은 영상을 촬영하고 길이를 조정한 뒤 클라이언트를 벗어나지 않고 게시할 수 있게 합니다. 애니메이션 GIF 지원은 프로필 사진과 배너 사진까지 확장되며, animated WebP 렌더링도 추가됐습니다. 새로운 Shortcuts 통합을 통해 사용자는 Apple Shortcuts 자동화에서 Nostr 게시물을 보낼 수 있습니다. 이번 릴리스는 또한 비공개 답글을 추가했고, Nostur와 다른 클라이언트 사이의 메시지 전달에 영향을 주던 DM 호환성 문제도 수정했습니다.&lt;/p>
&lt;h3 id="shosho-v0150-launches-shows-and-vertical-video-carousel">Shosho v0.15.0 launches Shows and vertical video carousel&lt;/h3>
&lt;p>Nostr 라이브 스트리밍 앱 &lt;a href="https://github.com/r0d8lsh0p/shosho-releases">Shosho&lt;/a>는 4월 7일 &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.15.0">v0.15.0&lt;/a>과 &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.15.1">v0.15.1&lt;/a>을 출시했습니다. 핵심 기능은 Shows입니다. 스트리머는 라이브를 시작하기 전에 맞춤형 쇼 정보를 설정하고, 자신의 쇼를 OBS나 다른 외부 인코더에 연결할 수 있습니다. 이렇게 하면 &amp;ldquo;무엇을 스트리밍하는가&amp;quot;라는 메타데이터를 실제 라이브 시작 행위와 분리할 수 있어, 방송 전에 제목, 설명, 상품을 미리 준비할 수 있습니다. 같은 릴리스는 라이브, 클립, 리플레이를 전체 화면 피드에서 스와이프해 넘기는 TikTok 스타일의 세로 동영상 캐러셀과, 프로필 페이지에서 바로 동영상 클립 게시와 상품 추가를 할 수 있는 Quick Add도 포함합니다. v0.15.1은 키보드가 라이브 스트림 채팅 입력창을 가리던 버그를 수정합니다.&lt;/p>
&lt;h2 id="shipping-this-week">Shipping This Week&lt;/h2>
&lt;h3 id="notedeck-v0100-beta-ships-zapstore-self-update">Notedeck v0.10.0-beta ships Zapstore self-update&lt;/h3>
&lt;p>Damus 팀의 데스크톱 및 모바일 클라이언트 &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>는 APK 자체 업데이트를 시험하기 위한 테스트 프리릴리스로 &lt;a href="https://github.com/damus-io/notedeck/releases/tag/v0.10.0-beta.1">v0.10.0-beta.1&lt;/a>과 &lt;a href="https://github.com/damus-io/notedeck/releases/tag/v0.10.0-beta.2">v0.10.0-beta.2&lt;/a>를 배포했습니다. &lt;a href="https://github.com/damus-io/notedeck/pull/1417">PR #1417&lt;/a>은 Android에서 Nostr/Zapstore 업데이터를 통한 APK 자체 업데이트를 추가하며, 이는 &lt;a href="https://nostrcompass.org/en/newsletters/2026-03-18-newsletter/#notedeck-moves-release-discovery-onto-nostr">뉴스레터 #14의 Nostr 네이티브 업데이트 탐색 작업&lt;/a>을 바탕으로 합니다. 이 업데이트 흐름은 relay에 게시된 Nostr 이벤트를 통해 새 릴리스를 발견하고, 개발자가 호스팅하는 위치(GitHub releases, Blossom CDN, 그 밖의 소스)에서 APK를 다운로드한 뒤, 서명된 Nostr 이벤트와 SHA-256 해시를 대조해 검증하고 설치합니다. &lt;a href="https://github.com/damus-io/notedeck/pull/1438">PR #1438&lt;/a>은 Login과 CreateAccount 버튼이 즉시 뒤로 이동해 버리던 welcome screen 버그를 수정하고, &lt;a href="https://github.com/damus-io/notedeck/pull/1424">PR #1424&lt;/a>은 Agentium AI session view의 텍스트 overflow를 수정합니다.&lt;/p>
&lt;h3 id="amber-v600-pre1-adds-per-connection-nip-46-signing-keys">Amber v6.0.0-pre1 adds per-connection NIP-46 signing keys&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> (Android Signer Application) signer 앱으로, 4월 4일 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.0.0-pre1">v6.0.0-pre1&lt;/a>을 출시했습니다. 가장 중요한 변화는 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> (Nostr Remote Signing) bunker 프로토콜을 위한 연결별 서명 키입니다. Amber는 이제 모든 bunker 연결에 단일 키페어를 쓰는 대신, 연결된 각 클라이언트마다 별도의 키를 생성합니다. 한 클라이언트 연결이 손상되더라도 공격자는 다른 클라이언트에 대해 signer를 사칭할 수 없습니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber/pull/377">PR #377&lt;/a>은 Zapstore를 통한 인앱 업데이트 확인 및 설치를 추가해, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-08-newsletter/#notedeck-v0100-beta-ships-zapstore-self-update">Notedeck&lt;/a>과 함께 Nostr 네이티브 앱 배포를 채택합니다. &lt;a href="https://github.com/greenart7c3/Amber/pull/375">PR #375&lt;/a>는 AndroidKeyStore 실패 시 충돌 대신 사용자에게 경고를 표시하도록 처리하고, &lt;a href="https://github.com/greenart7c3/Amber/pull/371">PR #371&lt;/a>은 무제한 저장소 증가를 막기 위해 크기 제한과 콘텐츠 잘라내기가 포함된 데이터베이스 정리를 추가합니다. 이 프리릴리스에는 &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-01-newsletter/#amber-v502-through-v504">지난주 v5.0.x 주기에서 다룬&lt;/a> &lt;a href="https://nostrcompass.org/ko/topics/nip-42/">NIP-42&lt;/a> relay auth 화이트리스트와 mnemonic recovery phrase 로그인도 포함되어 있습니다.&lt;/p>
&lt;h3 id="nostria-ships-native-mobile-app">Nostria ships native mobile app&lt;/h3>
&lt;p>SondreB가 유지 관리하는 크로스 플랫폼 Nostr 클라이언트 &lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a>는 Android용 네이티브 모바일 앱을 출시했고, &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.11">v3.1.11&lt;/a>부터 &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.18">v3.1.18&lt;/a>까지 여덟 개의 릴리스를 배포했습니다. 가장 중요한 새 기능은 &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>와 Aegis 같은 signer를 위한 네이티브 로컬 signer 지원입니다. Linux, macOS, Windows용 &lt;a href="https://www.nostria.app/download">데스크톱 설치 파일&lt;/a>도 함께 제공됩니다. &lt;a href="https://github.com/nostria-app/nostria/pull/610">PR #610&lt;/a>은 적응형 런타임 제한과 preview URL 정리를 통해 피드 메모리 압박을 줄입니다. v3.1.14는 &lt;a href="https://nostrcompass.org/ko/topics/web-of-trust/">Web of Trust&lt;/a> provider인 Brainstorm과의 통합을 수정합니다. v3.1.15는 음악 관련 개선에 집중합니다. 새 Android 앱은 &lt;a href="https://zapstore.dev/apps/app.nostria">Zapstore&lt;/a>에서 받을 수 있습니다.&lt;/p>
&lt;h3 id="divine-108-ships-resumable-uploads-and-dms">diVine 1.0.8 ships resumable uploads and DMs&lt;/h3>
&lt;p>짧은 형식의 동영상 클라이언트 &lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>는 87개의 병합된 PR과 함께 &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.8">1.0.8&lt;/a>을 출시했습니다. resumable upload를 통해 제작자는 불안정한 연결에서 업로드가 끊겨도 처음부터 다시 시작하지 않고 청크 단위로 이어서 올릴 수 있습니다. 이 릴리스는 동영상 품질 및 bitrate 설정, double-tap 좋아요, DM 개선도 추가합니다. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2722">PR #2722&lt;/a>는 데스크톱 동영상 캡처를 위한 macOS 카메라 플러그인을 추가하고, &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2820">PR #2820&lt;/a>은 알림 시스템을 enrichment와 grouping이 포함된 BLoC 아키텍처로 옮깁니다. 팀은 또한 AI 생성 스티커와 카테고리 아트를 OpenMoji SVG로 교체했습니다(&lt;a href="https://github.com/divinevideo/divine-mobile/pull/2844">PR #2844&lt;/a>, &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2842">PR #2842&lt;/a>).&lt;/p>
&lt;h3 id="manent-v130-adds-sensitive-note-blurring-and-nip-42-auth">Manent v1.3.0 adds sensitive note blurring and NIP-42 auth&lt;/h3>
&lt;p>개인 암호화 노트 및 파일 저장 앱 &lt;a href="https://github.com/dtonon/manent">Manent&lt;/a>는 4월 2일 &lt;a href="https://github.com/dtonon/manent/releases/tag/v1.3.0">v1.3.0&lt;/a>을 출시했습니다. 이제 사용자는 노트를 민감한 항목으로 표시해 목록 보기에서 흐리게 처리할 수 있어, 가볍게 스크롤할 때 사적인 내용을 가릴 수 있습니다. 이번 릴리스는 또한 &lt;a href="https://nostrcompass.org/ko/topics/nip-42/">NIP-42&lt;/a> (Authentication of Clients to Relays) 지원을 추가해, 이벤트를 받기 전에 인증을 요구하는 relay에 Manent가 인증할 수 있게 합니다. Manent는 모든 데이터를 사용자의 키페어를 사용해 Nostr relay에 암호화 저장하므로, NIP-42 지원은 저장에 활용할 수 있는 relay 집합을 넓혀 줍니다.&lt;/p>
&lt;h3 id="wisp-v0170-through-v0173-add-live-stream-zaps-and-wallet-backup">Wisp v0.17.0 through v0.17.3 add live stream zaps and wallet backup&lt;/h3>
&lt;p>Android Nostr 클라이언트 &lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a>는 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.16.2-beta">v0.16.2-beta&lt;/a>부터 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.17.3-beta">v0.17.3-beta&lt;/a>까지 여섯 개의 릴리스를 배포했고, 44개의 PR을 병합했습니다. v0.17.0은 지갑 백업 안전 프롬프트와 zap UX 개선을 추가합니다. &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.17.1-beta">v0.17.1&lt;/a>은 플랫폼 전반에서 라이브 스트림 채팅 가시성과 라이브 스트림 zap 기능을 더합니다. &lt;a href="https://github.com/barrydeen/wisp/pull/423">PR #423&lt;/a>은 프로필 자동 검색, zap 성공 애니메이션, 사용자 상태 개선을 추가합니다. &lt;a href="https://github.com/barrydeen/wisp/pull/426">PR #426&lt;/a>은 큰 태그 목록이 있는 이벤트에서 &lt;code>computeId&lt;/code>가 out-of-memory로 충돌하던 문제를 수정합니다. v0.16.x 릴리스는 emoji shortcode 자동완성, 그룹 채팅 UI 개선, 모든 알림 경로에 걸친 차단 사용자 필터링을 추가했습니다.&lt;/p>
&lt;h3 id="mostro-ships-deep-links-nostr-exchange-rates-and-a-duplicate-payment-fix">Mostro ships deep links, Nostr exchange rates, and a duplicate payment fix&lt;/h3>
&lt;p>Nostr 위에 구축된 P2P Bitcoin 거래소 &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a>는 이번 주 서버 데몬과 모바일 클라이언트 양쪽에서 업데이트가 있었습니다. 서버 측에서는 &lt;a href="https://github.com/MostroP2P/mostro/pull/692">PR #692&lt;/a>가 오래된 주문 쓰기로 인해 중복 결제가 발생하는 문제를 막아, 판매자가 같은 거래에 대해 두 번 지급받을 수 있는 버그를 차단합니다. &lt;a href="https://github.com/MostroP2P/mostro/pull/693">PR #693&lt;/a>은 전체 주문 덮어쓰기 대신 dev_fee 쓰기에 표적화된 업데이트를 사용합니다.&lt;/p>
&lt;p>Flutter 클라이언트 &lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a>은 4월 3일 &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.3">v1.2.3&lt;/a>을 출시했습니다. 이 릴리스는 서로 다른 Mostro 인스턴스에서 오는 딥 링크를 처리해, 사용자가 올바른 거래 서버로 연결되는 링크를 탭할 수 있게 합니다. &lt;a href="https://github.com/MostroP2P/mobile/pull/498">PR #498&lt;/a>은 백그라운드 알림 파이프라인에서 admin 및 dispute DM을 감지하고, 앱은 이제 HTTP/cache fallback과 함께 Nostr에서 환율을 가져옵니다. &lt;a href="https://github.com/MostroP2P/mobile/pull/560">PR #560&lt;/a>은 특정 네트워크 조건에서 앱이 relay에 도달하지 못하게 하던 relay 연결 차단 버그를 수정합니다.&lt;/p>
&lt;h3 id="unfiltered-v1012-adds-hashtags-and-comments">Unfiltered v1.0.12 adds hashtags and comments&lt;/h3>
&lt;p>이미지 중심 콘텐츠에 초점을 맞춘 Nostr 클라이언트 &lt;a href="https://github.com/dmcarrington/unfiltered">Unfiltered&lt;/a>는 &lt;a href="https://github.com/dmcarrington/unfiltered/releases/tag/v1.0.12">v1.0.12&lt;/a>를 출시했습니다. &lt;a href="https://github.com/dmcarrington/unfiltered/pull/69">PR #69&lt;/a>는 hashtag 지원을 추가하고, &lt;a href="https://github.com/dmcarrington/unfiltered/pull/72">PR #72&lt;/a>는 게시물에 댓글을 작성하고 표시하는 기능을 추가합니다. &lt;a href="https://github.com/dmcarrington/unfiltered/pull/71">PR #71&lt;/a>은 게시물당 여러 이미지를 다룰 때의 내비게이션 문제를 수정합니다.&lt;/p>
&lt;h3 id="primal-android-ships-wallet-multi-account-sharing-and-remote-signer-auto-reconnect">Primal Android ships wallet multi-account sharing and remote signer auto-reconnect&lt;/h3>
&lt;p>Android Nostr 클라이언트 &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal&lt;/a>은 4월 7일 릴리스를 배포했습니다. 이번 업데이트는 지갑 다중 계정 공유와 Dev Tools의 지갑 삭제가 포함된 overflow menu를 추가합니다. remote signer는 이제 연결이 끊기면 자동으로 다시 연결되며, 지갑 서비스도 자체 auto-reconnect 로직을 갖게 됐습니다. 수정 사항에는 poll zap 투표가 더 이상 Top Zaps로 나타나지 않는 문제, 빈 poll option 충돌 방지, 지갑이 없을 때 wallet balance 숨김, NWC 응답에서 WalletException 타입을 에러 코드에 매핑하는 작업이 포함됩니다.&lt;/p>
&lt;h3 id="titan-v010-launches-native-nsite-browser-with-bitcoin-name-registration">Titan v0.1.0 launches native nsite:// browser with Bitcoin name registration&lt;/h3>
&lt;p>Nostr 웹을 위한 네이티브 데스크톱 브라우저 &lt;a href="https://github.com/btcjt/titan">Titan&lt;/a>은 4월 7일 &lt;a href="https://github.com/btcjt/titan/releases/tag/v0.1.0">v0.1.0&lt;/a>을 출시했습니다. Titan은 Bitcoin에 등록된 사람이 읽을 수 있는 이름을 조회해 &lt;code>nsite://&lt;/code> URL을 해석하고, 사이트의 콘텐츠 이벤트를 얻기 위해 Nostr relay를 질의하며, &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a> 서버에서 가져온 페이지를 렌더링합니다. 결과적으로 DNS도, TLS 인증서도, 호스팅 제공자도 없는 웹 브라우징 경험이 만들어집니다. 이름은 Bitcoin 거래와 연결된 &lt;a href="https://npub1hmq6xuqnplk5lw0h3700cujmx5gymqn5wrn42u6432r6ntzumezqc3marw.nsite.lol/register">웹 인터페이스&lt;/a>를 통해 등록됩니다. 초기 릴리스는 macOS &lt;code>.dmg&lt;/code>(ARM, Intel용 Rosetta 2 지원)로 배포되며, Nix 개발 환경 지원도 포함합니다.&lt;/p>
&lt;h3 id="bikel-v150-ships-native-foreground-service-for-de-googled-phones">Bikel v1.5.0 ships native foreground service for de-Googled phones&lt;/h3>
&lt;p>주행 기록을 Nostr를 통해 공공 인프라 데이터로 바꾸는 탈중앙화 사이클링 트래커 &lt;a href="https://github.com/Mnpezz/bikel">Bikel&lt;/a>은 4월 4일 &lt;a href="https://github.com/Mnpezz/bikel/releases/tag/v1.5.0">v1.5.0&lt;/a>을 출시했습니다. 이 릴리스는 GMS 의존 Expo TaskManager에서 커스텀 네이티브 foreground service로 전환해, LineageOS, GrapheneOS, 그 밖의 de-Googled Android 변형에서 안정적인 백그라운드 주행 추적을 보장합니다. Bikel Bot은 Cashu nutzaps를 통한 자율 eCash 수집이 가능한 dual-pocket 아키텍처를 갖추게 됐습니다. v1.4.3과 v1.4.2는 비표준 Android 환경에서의 백그라운드 추적 동기화를 수정하고, 앱은 OSM 자전거 거치대 지도 포인트 토글도 추가합니다.&lt;/p>
&lt;h3 id="sprout-adds-nip-01-nip-23-and-nip-33-support">Sprout adds NIP-01, NIP-23, and NIP-33 support&lt;/h3>
&lt;p>내장 Nostr relay를 갖춘 Block의 커뮤니케이션 플랫폼 &lt;a href="https://github.com/block/sprout">Sprout&lt;/a>은 4월 6일 &lt;a href="https://github.com/block/sprout/releases/tag/desktop/v0.1.0-rc7">desktop/v0.1.0-rc7&lt;/a>을 출시했습니다. 이번 주 팀은 &lt;a href="https://nostrcompass.org/en/topics/nip-23/">NIP-23&lt;/a> (Long-form Content) kind &lt;code>30023&lt;/code> article, &lt;code>d&lt;/code> 태그 기반 교체를 사용하는 &lt;a href="https://nostrcompass.org/en/topics/nip-33/">NIP-33&lt;/a> parameterized replaceable event, 그리고 &lt;a href="https://nostrcompass.org/ko/topics/nip-01/">NIP-01&lt;/a>/&lt;a href="https://nostrcompass.org/en/topics/nip-02/">NIP-02&lt;/a> kind &lt;code>1&lt;/code> text note와 kind &lt;code>3&lt;/code> follow list 지원을 추가했습니다. 이번 릴리스는 54개 테마를 갖춘 적응형 IDE 테마 시스템, workflow 및 agent run history UX 개선, members sidebar 정리도 포함합니다.&lt;/p>
&lt;h3 id="mesh-llm-v0560-ships-distributed-config-protocol">mesh-llm v0.56.0 ships distributed config protocol&lt;/h3>
&lt;p>노드 신원에 Nostr 키페어를 사용하는 분산 LLM 추론 시스템 &lt;a href="https://github.com/michaelneale/mesh-llm">mesh-llm&lt;/a>은 4월 7일 &lt;a href="https://github.com/michaelneale/mesh-llm/releases/tag/v0.56.0">v0.56.0&lt;/a>을 출시했습니다. 이 릴리스는 ownership semantics가 포함된 분산 config 프로토콜, 메모리 사용량을 줄이기 위한 비대칭 KV cache 양자화(Q8_0 keys와 Q4 values), identity keystore를 위한 OS keychain 저장, 메시지 queue를 이용한 부드러운 chat streaming, fullscreen layout과 flash attention 기반 KV cache splitting 수정 사항을 추가합니다.&lt;/p>
&lt;h3 id="nostr-vpn-ships-exit-node-support-and-umbrel-packaging">Nostr VPN ships exit node support and Umbrel packaging&lt;/h3>
&lt;p>신호에는 Nostr relay를 사용하고 암호화 터널에는 WireGuard를 사용하는 P2P VPN &lt;a href="https://github.com/mmalmi/nostr-vpn">Nostr VPN&lt;/a>은 이번 주 &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.3.0">v0.3.0&lt;/a>부터 &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.3.6">v0.3.6&lt;/a>까지 여섯 개의 릴리스를 배포했습니다. v0.3.x 주기는 Windows와 macOS에서 exit node 지원을 추가해, 피어가 네트워크 안의 다른 노드를 통해 인터넷 트래픽을 라우팅할 수 있게 합니다. invite와 alias 전파도 이제 Nostr를 통해 동기화되므로, 사용자는 별도의 바깥 채널 조율 없이 네트워크 접근 권한을 공유할 수 있습니다. 이번 릴리스들은 self-hosted 배포를 위한 Umbrel 패키징, 기억된 public endpoint를 이용한 NAT punch-through, 오래된 exit node 자동 정리, 공개된 프로토콜 사양도 추가합니다. 프로젝트는 또한 self-healing default route와 underlay repair를 통해 macOS route 처리를 안정화했고, Tauri 기반 Android 빌드도 추가했습니다. 빌드는 macOS(Apple Silicon 및 Intel), Linux(AppImage 및 .deb), Windows, Android에서 제공됩니다.&lt;/p>
&lt;h3 id="nymchat-reverts-marmot-ships-enhanced-nip-17-group-chats">Nymchat reverts Marmot, ships enhanced NIP-17 group chats&lt;/h3>
&lt;p>MLS 지원 채팅 클라이언트 &lt;a href="https://github.com/Spl0itable/NYM">Nymchat&lt;/a>은 &lt;a href="https://github.com/Spl0itable/NYM/releases/tag/3.56.261">v3.56.261&lt;/a>부터 &lt;a href="https://github.com/Spl0itable/NYM/releases/tag/v3.58.274">v3.58.274&lt;/a>까지 14개의 릴리스를 배포했습니다. 가장 중요한 변화는 프로토콜 방향 전환입니다. &lt;a href="https://github.com/Spl0itable/NYM/releases/tag/v3.57.261">v3.57.261&lt;/a>은 Marmot MLS 그룹 채팅을 추가했지만, &lt;a href="https://github.com/Spl0itable/NYM/releases/tag/v3.58.268">v3.58.268&lt;/a>은 Marmot의 다중 장치 지원이 아직 완성되지 않아 장치 간 그룹 채팅 상태 동기화에 문제가 생기면서 다시 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a>으로 되돌렸습니다. v3.58.271은 모든 메시지에 대해 회전하는 일회용 키를 사용하는 향상된 NIP-17 그룹 채팅을 도입해, timing 및 correlation 공격을 막도록 설계됐습니다. 이번 주에는 세밀한 설정 제어가 가능한 친구 시스템(&lt;a href="https://github.com/Spl0itable/NYM/releases/tag/v3.58.262">v3.58.262&lt;/a>), 암호화된 앱 설정 속 MLS 그룹 채팅 메시지 동기화, 여러 relay 연결성 수정도 포함됐습니다.&lt;/p>
&lt;h3 id="nak-v0195-adds-blossom-multi-server-and-outbox-publishing">nak v0.19.5 adds Blossom multi-server and outbox publishing&lt;/h3>
&lt;p>fiatjaf의 커맨드라인 Nostr 도구킷 &lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a>은 &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.5">v0.19.5&lt;/a>를 출시했습니다. &lt;code>blossom&lt;/code> 명령은 이제 여러 &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a> 서버에 한 번에 업로드할 수 있도록 다중 &lt;code>--server&lt;/code> 플래그를 받습니다. 새 &lt;code>key&lt;/code> 명령은 부분 키를 왼쪽에 0을 채워 확장합니다. &lt;code>event&lt;/code> 명령은 outbox model을 통해 이벤트를 게시하는 &lt;code>--outbox&lt;/code> 플래그를 얻었고, &lt;code>fetch&lt;/code>는 이벤트가 반환되지 않을 때 에러 코드와 함께 종료합니다.&lt;/p>
&lt;h2 id="in-development">In Development&lt;/h2>
&lt;h3 id="white-noise-adds-thumbhash-previews-and-push-registration-bridge">White Noise adds thumbhash previews and push registration bridge&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> 프로토콜 위에 구축된 개인 메신저 &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>는 다섯 개의 PR을 병합했습니다. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/549">PR #549&lt;/a>는 blurhash 이미지 미리보기를 더 작은 payload 크기로 더 선명한 placeholder 이미지를 생성하는 최신 알고리즘 thumbhash로 교체합니다(보통 blurhash의 약 50-100 bytes에 비해 30 bytes 이하). 이 알고리즘은 원본의 종횡비와 색 분포를 유지합니다. 오래된 콘텐츠를 위해 blurhash는 fallback으로 남겨 둡니다. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/548">PR #548&lt;/a>은 whitenoise-rs를 업데이트하고 &lt;a href="https://nostrcompass.org/ko/topics/mip-05/">MIP-05&lt;/a> push registration bridge를 추가해, &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-01-newsletter/#marmot-moves-keypackages-to-addressable-events-and-tightens-push-notifications">지난주 다룬 push notification spec 작업&lt;/a>을 클라이언트와 연결합니다. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/493">PR #493&lt;/a>은 채팅 메시지에 cursor 기반 pagination을 추가해, 이전 로딩 전략을 스크롤 기반 접근으로 교체합니다.&lt;/p>
&lt;h3 id="route96-adds-dynamic-label-configuration-and-zero-egress-cleanup">Route96 adds dynamic label configuration and zero-egress cleanup&lt;/h3>
&lt;p>v0l의 &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a> 미디어 서버 &lt;a href="https://github.com/v0l/route96">Route96&lt;/a>는 세 개의 PR을 병합했습니다. &lt;a href="https://github.com/v0l/route96/pull/80">PR #80&lt;/a>은 admin API를 통한 동적 label model 설정을 추가해, 운영자가 서버를 재시작하지 않고도 콘텐츠 분류 모델을 교체할 수 있게 합니다. &lt;a href="https://github.com/v0l/route96/pull/82">PR #82&lt;/a>는 admin UI에 label configuration 필드를 추가합니다. &lt;a href="https://github.com/v0l/route96/pull/79">PR #79&lt;/a>는 한 번도 다운로드되지 않은 파일을 자동으로 제거하는 zero-egress file cleanup 정책을 추가해, 운영자의 저장 비용을 낮춥니다.&lt;/p>
&lt;h3 id="snort-ships-security-hardening-and-dvm-payment-invoices">Snort ships security hardening and DVM payment invoices&lt;/h3>
&lt;p>웹 클라이언트 &lt;a href="https://github.com/v0l/snort">Snort&lt;/a>는 이번 주 포괄적인 보안 감사와 함께 두 개의 릴리스를 배포했습니다. 수정 사항에는 Schnorr signature 검증, &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> relay message forgery 방지(손상된 relay를 통해 공격자가 signing request를 주입하는 것을 막음), PIN 암호화 개선, NIP-26 delegation 신뢰 제거가 포함됩니다. 성능 개선은 WASM에서의 batched Schnorr verification, lazy-loaded route, 사전 컴파일된 번역, 이벤트당 이중 검증 제거에서 나옵니다. &lt;a href="https://github.com/v0l/snort/pull/618">PR #618&lt;/a>은 &lt;a href="https://nostrcompass.org/en/topics/nip-90/">NIP-90&lt;/a> (Data Vending Machine) kind &lt;code>7000&lt;/code> payment-required invoice 표시를 추가해, DVM이 결제 요구와 함께 응답할 때 Snort가 Lightning invoice를 피드에 직접 렌더링하게 합니다.&lt;/p>
&lt;h3 id="damus-improves-lmdb-compaction">Damus improves LMDB compaction&lt;/h3>
&lt;p>iOS 클라이언트 &lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>는 &lt;a href="https://github.com/damus-io/damus/pull/3719">PR #3719&lt;/a>를 병합해 일정에 따라 자동 LMDB compaction을 수행하도록 했고, 로컬 데이터베이스가 시간이 지나며 무제한으로 커지는 일을 막습니다. &lt;a href="https://github.com/damus-io/damus/pull/3663">PR #3663&lt;/a>는 BlurOverlayView가 고장난 것처럼 보이지 않고 보호 기능처럼 보이도록 개선합니다.&lt;/p>
&lt;h3 id="captains-log-adds-tag-indexing-and-note-sync">Captain&amp;rsquo;s Log adds tag indexing and note sync&lt;/h3>
&lt;p>Nodetec의 Nostr 네이티브 장문 글쓰기 도구 &lt;a href="https://github.com/nodetec/captains-log">Captain&amp;rsquo;s Log&lt;/a> (Comet)는 이번 주 네 개의 PR을 병합했습니다. &lt;a href="https://github.com/nodetec/captains-log/pull/156">PR #156&lt;/a>은 노트 전반에 걸친 태그 인덱싱과 sync 지원을 추가하고, &lt;a href="https://github.com/nodetec/captains-log/pull/157">PR #157&lt;/a>은 노트 sync와 태그 처리를 리팩터링하며, &lt;a href="https://github.com/nodetec/captains-log/pull/159">PR #159&lt;/a>은 휴지통으로 보낸 노트 sync를 수정해 삭제된 노트가 장치 간에도 삭제 상태를 유지하게 합니다.&lt;/p>
&lt;h3 id="relatr-v02x-redesigns-plugin-system-with-nostr-native-validator-marketplace">Relatr v0.2.x redesigns plugin system with Nostr-native validator marketplace&lt;/h3>
&lt;p>&lt;a href="https://github.com/ContextVM/relatr">Relatr&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/topics/web-of-trust/">Web of Trust&lt;/a> 점수 엔진으로, 사회적 그래프 거리와 설정 가능한 validator를 바탕으로 신뢰 순위를 계산합니다. 이번 주 v0.2.x 계열을 배포하며 플러그인 시스템을 전면 재설계했습니다. validator는 이제 다단계 host orchestration capability(Nostr query, social graph lookup, NIP-05 resolution)를 지원하도록 포크된 휴대용 함수형 표현 언어 Elo로 작성됩니다. 플러그인은 kind &lt;code>765&lt;/code> Nostr 이벤트로 게시되므로, 배포 자체가 relay 네트워크에 네이티브하게 올라갑니다. 새 &lt;a href="https://relatr.net">plugin marketplace&lt;/a>는 운영자가 브라우저에서 validator를 발견하고, 설치하고, 가중치를 설정할 수 있게 하며, 로컬 작성과 게시를 위한 CLI(&lt;code>relo&lt;/code>)도 제공합니다. 이 아키텍처는 sandboxed되어 있어, 플러그인은 host가 명시적으로 제공한 capability만 호출할 수 있으므로 악성 validator가 정의된 범위를 벗어날 수 없습니다. 이제 Relatr 인스턴스는 웹사이트에서 관리할 수 있고, 어떤 플러그인이 점수 알고리즘을 구성하는지와 각 가중치를 완전히 볼 수 있습니다.&lt;/p>
&lt;h3 id="shopstr-improves-mobile-navigation-and-access-control">Shopstr improves mobile navigation and access control&lt;/h3>
&lt;p>Bitcoin으로 사고파는 Nostr 네이티브 마켓플레이스 &lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a>는 이번 주 메인 앱과 동반 프로젝트 &lt;a href="https://github.com/shopstr-eng/milk-market">Milk Market&lt;/a> 전반에 걸쳐 158개의 커밋을 푸시했습니다. 수정 사항에는 모바일 community 레이아웃 개선, 내비게이션 시 메뉴 자동 닫기 동작, dropdown 자동 닫기가 포함됩니다. 보호된 route는 이제 로그인하지 않고 직접 URL로 접근할 수 없으며, slug 매칭 로직은 여러 개의 정확 일치 항목도 올바르게 처리합니다.&lt;/p>
&lt;h3 id="pollerama-adds-notifications-movie-search-and-rating-ui">Pollerama adds notifications, movie search, and rating UI&lt;/h3>
&lt;p>Nostr 기반 polling, survey, social rating 앱 &lt;a href="https://github.com/formstr-hq/nostr-polls">Pollerama&lt;/a>는 thread 알림, 영화 검색 기능, rating UI 전면 개편을 추가했습니다. 이번 릴리스는 피드 로딩 문제를 수정하고 의존성 버전도 올립니다.&lt;/p>
&lt;h3 id="purser-builds-nostr-native-payment-daemon-with-marmot-encryption">Purser builds Nostr-native payment daemon with Marmot encryption&lt;/h3>
&lt;p>&lt;a href="https://github.com/EthnTuttle/purser">Purser&lt;/a>는 Zaprite 대체를 목표로 하는 Nostr 네이티브 payment daemon으로, 이번 주 아홉 개의 PR을 병합하며 핵심 아키텍처를 구축했습니다. 이 프로젝트는 판매자와 고객 간 암호화 메시징을 위해 MDK를 통한 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> MLS를 사용하고, 결제 제공자로 Strike와 Square를 사용합니다. 이번 주에는 config와 catalog 로딩, message schema 검증, MDK communication layer, Strike 및 Square provider 구현, polling engine, anti-spam rate limiting, pending payment 영속화, order processing pipeline이 들어왔습니다. 팀이 local mode에서 mock MLS를 제거하고 실제 암호화를 사용하도록 바꾸면서, 이제 99개 테스트 전체가 실제 mdk-core MLS 동작을 실행합니다.&lt;/p>
&lt;h3 id="vector-refactors-dm-attachments-and-adds-profile-editing">Vector refactors DM attachments and adds profile editing&lt;/h3>
&lt;p>Tauri로 구축된 privacy 중심 Nostr 메신저 &lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a>는 프론트엔드를 리팩터링하는 &lt;a href="https://github.com/VectorPrivacy/Vector/pull/55">PR #55&lt;/a>를 병합했습니다. DM 첨부파일 복호화와 저장은 vector-core 라이브러리로 이동했고, 앱은 이제 프로필 편집도 지원합니다. 업로드 취소 플래그는 TauriSendCallback을 통해 제대로 연결됐고, 사용되지 않던 첨부파일 미리보기 callback도 정리됐습니다.&lt;/p>
&lt;h2 id="protocol-and-spec-work">Protocol and Spec Work&lt;/h2>
&lt;h3 id="nip-updates">NIP Updates&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 저장소&lt;/a>의 최근 변경 사항:&lt;/p>
&lt;p>&lt;strong>Merged:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-58/">NIP-58&lt;/a> (Badges): Profile Badges move to kind 10008, Badge Sets to kind 30008&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2276">PR #2276&lt;/a>): Profile Badges를 kind &lt;code>30008&lt;/code>에서 kind &lt;code>10008&lt;/code>로 옮기고(pubkey당 하나의 replaceable event), Badge Sets를 위한 kind &lt;code>30008&lt;/code>을 도입합니다. 이전에는 Profile Badges가 Badge 정의와 같은 kind(&lt;code>30008&lt;/code>)를 사용해 &lt;code>d&lt;/code> 태그로 키가 정해지는 parameterized replaceable event였습니다. 새 kind &lt;code>10008&lt;/code>은 단순한 replaceable event로, pubkey당 하나이며 &lt;code>d&lt;/code> 태그가 필요 없습니다. 클라이언트는 이제 사용자당 하나의 replaceable event만 질의하면 되고, parameterized replaceable event를 스캔할 필요가 없습니다. Amethyst v1.07.3은 이미 이 마이그레이션을 포함하고 있습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-34/">NIP-34&lt;/a> (Git Stuff): Add git-related follow lists&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2130">PR #2130&lt;/a>): NIP-34 저장소 및 issue 추적을 위한 follow list 규약을 추가합니다. 사용자는 &lt;code>git-repos&lt;/code>나 &lt;code>git-issues&lt;/code> 같은 &lt;code>d&lt;/code> 태그를 가진 kind &lt;code>30000&lt;/code> follow set을 게시하고, 안에는 추적하려는 저장소(kind &lt;code>30617&lt;/code>)를 가리키는 &lt;code>a&lt;/code> 태그 참조를 담습니다. 클라이언트는 이 follow set을 구독해, kind &lt;code>3&lt;/code> contact list가 pubkey에 대해 동작하는 것과 비슷하게 사용자의 피드에 저장소 활동을 보여줄 수 있습니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Open PRs and Discussions:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>NIP-AC: P2P Voice and Video Calls over WebRTC&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2301">PR #2301&lt;/a>): 원래의 NIP-100(0xChat이 구현함)을 세 가지 방식으로 확장합니다. 첫째, 메타데이터 누출을 없애기 위해 &lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59&lt;/a> gift wrap으로 감싼 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> 암호화로 이동합니다. 둘째, 음성 및 영상 통화 설정을 위한 WebRTC 워크플로(offer, answer, ICE candidate)를 명시합니다. 셋째, 각 피어가 다른 모든 피어와 직접 WebRTC 연결을 맺는 mesh 그룹 통화 모델을 정의합니다. 이 사양은 NIP-100과 하위 호환되지 않습니다. Amethyst는 이미 이에 맞춰 개발 중이며, call state machine 테스트 스위트(&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2143">PR #2143&lt;/a>)와 오래된 call offer 처리(&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2164">PR #2164&lt;/a>)가 이번 주에 반영됐습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/en/topics/nip-340/">NIP-340&lt;/a> (FROST Quorum)&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2299">PR #2299&lt;/a>): Nostr에서 &lt;a href="https://nostrcompass.org/ko/topics/frost/">FROST&lt;/a> (Flexible Round-Optimized Schnorr) threshold signing을 위한 규약을 제안합니다. FROST는 signer 집단이 Nostr 신원을 공동으로 제어하게 해 주며, 전체 개인 키를 재구성하지 않고도 t-of-n 구성원만으로 이벤트에 서명할 수 있게 합니다. 이 NIP는 &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-01-newsletter/#igloo-signer-11">FROSTR 프로젝트&lt;/a>의 Igloo signer 작업을 바탕으로, 서명 라운드 조정, 키 share 배포, threshold-signed event 게시 방법을 정의합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/en/topics/nip-5d/">NIP-5D&lt;/a> (Nostr Web Applets)&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2303">PR #2303&lt;/a>): iframe 안에서 실행되는 sandboxed 웹 애플리케이션(&amp;ldquo;napplets&amp;rdquo;)이 호스팅 애플리케이션(&amp;ldquo;shell&amp;rdquo;)과 통신하기 위한 &lt;code>postMessage&lt;/code> 프로토콜을 정의합니다. shell은 구조화된 message API를 통해 napplet에 Nostr signing, relay access, 사용자 컨텍스트를 제공합니다. 반면 iframe sandbox는 키에 직접 접근하는 일을 막습니다. 이는 &lt;a href="https://nostrcompass.org/en/topics/nip-5a/">NIP-5A&lt;/a>의 정적 웹사이트 호스팅 모델을, Nostr 이벤트를 읽고 쓸 수 있는 상호작용 애플리케이션 쪽으로 확장합니다. 이 NIP는 동작하는 runtime 구현과 함께 활발히 개발 중입니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/en/topics/nip-5c/">NIP-5C&lt;/a> (Scrolls)&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2281">PR #2281&lt;/a>): 이전 NIP-A5 제안에서 이름이 바뀌었습니다. Nostr에서 WebAssembly 프로그램을 게시하고 발견하기 위한 규약을 정의합니다. WASM 바이너리는 Nostr 이벤트로 저장되고, 클라이언트는 이를 다운로드해 sandboxed runtime에서 실행할 수 있습니다. &lt;a href="https://nprogram.netlify.app/">데모 앱&lt;/a>은 브라우저 안에서 실행되는 scrolls를 보여 주며, 어떤 클라이언트든 가져와 실행할 수 있는 예제 프로그램이 Nostr 이벤트로 게시돼 있습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-85/">NIP-85&lt;/a> (Trusted Assertions): Clarifications&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2304">PR #2304&lt;/a>): 서비스 제공자당 여러 키와 relay를 다루는 사양 문구를 더 엄격하게 다듬어, 제공자가 여러 pubkey나 relay endpoint에 걸쳐 동작할 때 클라이언트가 assertion을 어떻게 처리해야 하는지 분명히 합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-24/">NIP-24&lt;/a> (Extra Metadata Fields): published_at for replaceable events&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2300">PR #2300&lt;/a>): &lt;a href="https://nostrcompass.org/en/topics/nip-23/">NIP-23&lt;/a> (Long-form Content)의 &lt;code>published_at&lt;/code> 태그를 모든 replaceable 및 addressable event로 일반화합니다. 이 태그는 표시 전용입니다. &lt;code>published_at&lt;/code>이 &lt;code>created_at&lt;/code>과 같으면 클라이언트는 해당 시점을 &amp;ldquo;created&amp;quot;로 표시하고, 값이 다르면(이벤트가 업데이트되었기 때문) &amp;ldquo;updated&amp;quot;로 표시할 수 있습니다. 이를 통해 kind &lt;code>0&lt;/code> 프로필은 &amp;ldquo;joined at&amp;rdquo; 날짜를 표시할 수 있고, 다른 replaceable event도 업데이트를 거쳐도 원래의 게시 시점을 유지할 수 있습니다. 보완 제안으로 &lt;a href="https://nostrcompass.org/ko/topics/nip-51/">NIP-51&lt;/a> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2302">PR #2302&lt;/a>)은 동일한 태그를 list event에도 추가합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59&lt;/a> (Gift Wrap): Ephemeral gift wrap kind&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2245">PR #2245&lt;/a>): 기존 kind &lt;code>1059&lt;/code> gift wrap의 ephemeral 대응물로 kind &lt;code>21059&lt;/code>를 추가합니다. Ephemeral event(kinds &lt;code>20000&lt;/code>-&lt;code>29999&lt;/code>)는 &lt;a href="https://nostrcompass.org/ko/topics/nip-01/">NIP-01&lt;/a> semantics를 따르며, relay는 이를 저장할 것으로 기대되지 않고 전달 후 폐기할 수 있습니다. 이를 통해 애플리케이션은 일반 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> DM과 같은 3계층 암호화 모델을 유지하면서도, relay에서 전달 후 사라지는 gift-wrapped 메시지를 보낼 수 있어 대용량 메시징의 저장 요구를 줄일 수 있습니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="opensats-announces-sixteenth-wave-of-nostr-grants">OpenSats announces sixteenth wave of Nostr grants&lt;/h3>
&lt;p>&lt;a href="https://opensats.org">OpenSats&lt;/a>는 4월 8일 &lt;a href="https://opensats.org/blog/sixteenth-wave-of-nostr-grants">열여섯 번째 Nostr grants 물결&lt;/a>을 발표하며, 신규 4건과 갱신 1건을 지원했습니다. &lt;a href="https://github.com/vitorpamplona/amethyst/tree/main/desktopApp">Amethyst Desktop&lt;/a>는 기여자 Robert Nagy가 &lt;a href="https://nostrcompass.org/ko/topics/quartz/">Quartz&lt;/a>와 Commons 모듈 위에 독립형 데스크톱 앱을 구축하도록 자금을 받았고, 이를 통해 Android 클라이언트의 기능 세트를 지속적인 relay 연결을 갖춘 마우스 중심 인터페이스로 가져가게 됩니다. &lt;a href="https://github.com/nogringo/nostr-mail">Nostr Mail&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59&lt;/a> gift wrap에 싸인 kind &lt;code>1301&lt;/code> 이벤트를 사용해 Nostr 위에서 전체 이메일 시스템을 구축하기 위한 지원을 받았으며, Flutter 클라이언트와 Gmail/Outlook 호환용 SMTP bridge 서버도 포함됩니다. &lt;a href="https://github.com/Nostrord/nostrord">Nostrord&lt;/a>는 Discord 스타일의 그룹 메시징, moderation, thread를 갖춘 Kotlin Multiplatform &lt;a href="https://nostrcompass.org/en/topics/nip-29/">NIP-29&lt;/a> relay 기반 그룹 클라이언트를 위한 지원을 받았습니다. &lt;a href="https://github.com/tami1A84/null--nostr">Nurunuru&lt;/a>는 LINE과 유사한 친숙한 인터페이스를 모델로 한 일본어 중심 Nostr 클라이언트의 네이티브 iOS 버전을 만들기 위한 자금을 받았고, 온보딩에는 passkey 기반 biometric login이 포함됩니다. HAMSTR는 &lt;a href="https://opensats.org/blog/eleventh-wave-of-nostr-grants#hamstr">열한 번째 물결&lt;/a>에서 처음 지원된 뒤 이번에 갱신 지원을 받았습니다.&lt;/p>
&lt;h2 id="nip-deep-dive-nip-17-private-direct-messages">NIP Deep Dive: NIP-17 (Private Direct Messages)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/17.md">NIP-17&lt;/a>은 Nostr에서 private direct message를 위한 현재 표준을 정의합니다. 이 사양은 이전 &lt;a href="https://nostrcompass.org/ko/topics/nip-04/">NIP-04&lt;/a> (Encrypted Direct Messages) 방식을 대체합니다. NIP-04는 발신자, 수신자, 타임스탬프가 모두 relay에 노출되는 메타데이터 누출 문제가 있었고, 더 약한 암호화 구성을 사용했습니다. NIP-17은 암호화를 위해 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> (Encrypted Payloads)를 사용하고, 메타데이터 보호를 위해 &lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59&lt;/a> (Gift Wrap)를 결합해, relay가 누가 누구와 대화하는지 볼 수 없는 3계층 시스템을 만듭니다.&lt;/p>
&lt;p>이 프로토콜은 서로 안에 쌓인 세 가지 event kind를 사용합니다. 가장 안쪽 계층은 실제 메시지인 서명되지 않은 kind &lt;code>14&lt;/code> 이벤트입니다.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1744108800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">14&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;f1a2b3c4d5e6f7890123456789abcdef01234567890abcdef1234567890abcdef&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://inbox.example.com&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;subject&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Project update&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;The new relay config is deployed. Let me know if you see any issues.&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>kind &lt;code>14&lt;/code> 이벤트는 의도적으로 서명되지 않았습니다(&lt;code>sig&lt;/code>가 비어 있음). 사양은 이를 부인 가능성을 제공하는 것으로 설명하지만, 실제 보호 수준은 제한적입니다. rumor를 감싸는 kind &lt;code>13&lt;/code> seal은 발신자의 실제 키로 서명됩니다. 수신자는 메시지 내용을 공개하지 않더라도, 서명된 seal을 제3자에게 보여 주며 발신자가 자신과 통신했다는 사실을 증명할 수 있습니다. 영지식 증명을 사용하면 수신자는 자신의 개인 키를 드러내지 않고도 정확한 메시지 내용까지 증명할 수 있습니다. 서명되지 않은 rumor는 서명된 봉투 안에 들어 있는 서명 없는 편지와 비슷합니다. 봉투의 서명이 발신자를 내용물과 연결합니다. 진정한 부인 가능성은 Signal의 HMAC 같은 대칭 인증이 필요하지만, 메시지가 self-authenticating이어야 하는 Nostr의 탈중앙 relay 모델과는 맞지 않습니다. NIP-17의 진짜 강점은 부인 가능성이 아니라 메타데이터 프라이버시와 콘텐츠 기밀성입니다.&lt;/p>
&lt;p>이 서명되지 않은 메시지는 kind &lt;code>13&lt;/code> seal에 감싸지며, 이 seal은 실제 발신자가 서명하고 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a>로 수신자에게 암호화됩니다.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1744022400&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">13&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;nip44-encrypted kind 14 payload&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>seal에는 태그가 없으므로, 설령 복호화되더라도 수신자를 드러내지 않습니다. seal은 발신자의 실제 키로 서명되므로, 수신자는 seal의 &lt;code>pubkey&lt;/code>가 내부 kind &lt;code>14&lt;/code>의 &lt;code>pubkey&lt;/code>와 일치하는지 확인해 메시지를 인증할 수 있습니다.&lt;/p>
&lt;p>그다음 이 seal은 임의의 일회용 키로 서명되고 수신자 앞으로 지정된 kind &lt;code>1059&lt;/code> gift wrap에 다시 감싸집니다.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1744065600&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1059&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;f1a2b3c4d5e6f7890123456789abcdef01234567890abcdef1234567890abcdef&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;nip44-encrypted kind 13 payload&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>gift wrap의 &lt;code>pubkey&lt;/code>는 이 메시지만을 위해 생성된 임의의 키이며, &lt;code>created_at&lt;/code>은 최대 이틀 전까지 무작위화됩니다. relay가 실제로 보는 최외곽 계층은 이것입니다. 정체를 알 수 없는 pubkey에서 수신자 앞으로 온 메시지이지만, 타임스탬프는 실제 발송 시점을 반영하지 않습니다. 이 무작위 타임스탬프는 저장된 이벤트를 나중에 분석하는 공격에는 방어가 되지만, relay에 능동적으로 연결된 적대자는 gift wrap이 처음 나타난 시점을 여전히 관찰할 수 있으므로 이 방어는 나중에 relay 데이터를 조회하는 수동 관찰자에게만 제한적으로 유효합니다. pubkey는 임의이고 타임스탬프는 가짜이므로, relay는 실제 발신자를 판별할 수 없습니다. 메시지를 읽으려면 수신자가 자신의 키와 임의 pubkey를 사용해 gift wrap을 복호화하고, 그 안에서 seal을 찾은 뒤, 자신의 키와 seal 안의 발신자 pubkey를 사용해 seal을 복호화해, 마지막으로 안쪽의 kind &lt;code>14&lt;/code> 메시지를 찾아야 합니다.&lt;/p>
&lt;p>NIP-17은 forward secrecy를 제공하지 않습니다. 모든 메시지는 정적인 Nostr 키페어를 사용해 암호화됩니다(NIP-44는 발신자와 수신자 키로부터 키를 도출합니다). 개인 키가 손상되면, 그 키로 암호화된 과거와 미래의 모든 메시지를 복호화할 수 있습니다. 이는 의도된 절충입니다. 암호화가 nsec에만 의존하기 때문에, 사용자가 자신의 nsec를 백업해 두면 gift wrap을 여전히 저장하고 있는 어떤 relay에서든 전체 메시지 기록을 복구할 수 있습니다. &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a>에 사용되는 MLS 같은 프로토콜은 회전하는 키 재료를 통해 forward secrecy를 제공하지만, 그 대가로 상태 동기화가 필요하고 키 회전 이후에는 과거 메시지를 복구할 수 없게 됩니다.&lt;/p>
&lt;p>NIP-17은 또한 암호화된 파일 메시지를 위한 kind &lt;code>15&lt;/code>도 정의합니다. 이 kind는 &lt;code>file-type&lt;/code>, &lt;code>encryption-algorithm&lt;/code>, &lt;code>decryption-key&lt;/code>, &lt;code>decryption-nonce&lt;/code> 태그를 추가해, 수신자가 Blossom 서버에 업로드되기 전에 AES-GCM으로 암호화된 첨부 파일을 복호화할 수 있게 합니다. kind &lt;code>10050&lt;/code>은 사용자가 선호하는 DM relay 목록을 게시하는 데 사용되며, 발신자는 gift wrap을 어디로 전달해야 하는지 알 수 있습니다. 메시지 안의 &lt;code>pubkey&lt;/code>와 &lt;code>p&lt;/code> 태그 집합이 채팅방을 정의하며, 참가자를 추가하거나 제거하면 깔끔한 이력이 분리된 새 방이 만들어집니다.&lt;/p>
&lt;p>구현은 주요 클라이언트 대부분을 아우릅니다. &lt;a href="https://github.com/psic4t/nospeak">nospeak&lt;/a>는 모든 일대일 메시징에 NIP-17을 사용합니다. &lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a>는 proof-of-work DM에 NIP-17을 사용합니다. &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal&lt;/a>, &lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a>, &lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>, &lt;a href="https://github.com/hzrd149/nostrudel">noStrudel&lt;/a>, &lt;a href="https://github.com/coracle-social/coracle">Coracle&lt;/a>은 모두 NIP-17을 기본 DM 프로토콜로 구현하고 있습니다. 이 사양은 또한 gift wrap에 &lt;code>expiration&lt;/code> 태그를 설정해 사라지는 메시지도 지원합니다.&lt;/p>
&lt;h2 id="nip-deep-dive-nip-46-nostr-remote-signing">NIP Deep Dive: NIP-46 (Nostr Remote Signing)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/46.md">NIP-46&lt;/a>은 사용자의 개인 키를 클라이언트 애플리케이션과 분리하는 프로토콜을 정의합니다. 사용자가 웹 앱에 nsec를 붙여 넣는 대신, 개인 키를 보관하는 remote signer(&amp;ldquo;bunker&amp;quot;라고도 부름)를 실행하고, 이 signer가 Nostr relay를 통해 서명 요청에 응답합니다. 클라이언트는 개인 키를 절대 보지 못합니다. 이렇게 하면 공격 표면이 줄어듭니다. 손상된 클라이언트가 서명을 요청할 수는 있어도 키 자체를 빼내 갈 수는 없습니다.&lt;/p>
&lt;p>이 프로토콜은 요청과 응답 모두에 kind &lt;code>24133&lt;/code>을 사용하며, &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> (Encrypted Payloads)로 암호화됩니다. 클라이언트는 세션용 일회성 &lt;code>client-keypair&lt;/code>를 생성하고, 서로의 pubkey로 태그된 NIP-44 암호화 메시지를 통해 remote signer와 통신합니다. 아래는 클라이언트가 remote signer에 보내는 서명 요청 예시입니다.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;aa11bb22cc33dd44ee55ff6677889900aabbccdd11223344556677889900aabb&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;eff37350d839ce3707332348af4549a96051bd695d3223af4aabce4993531d86&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1744108800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">24133&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;nip44-encrypted JSON-RPC request&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;1122334455667788990011223344556677889900aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff0011223344556677&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>암호화된 &lt;code>content&lt;/code>는 JSON-RPC와 유사한 구조를 담고 있습니다.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;random-request-id-1&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;method&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;sign_event&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;params&amp;#34;&lt;/span>: [&lt;span style="color:#e6db74">&amp;#34;{\&amp;#34;kind\&amp;#34;:1,\&amp;#34;content\&amp;#34;:\&amp;#34;Hello from remote signing\&amp;#34;,\&amp;#34;tags\&amp;#34;:[],\&amp;#34;created_at\&amp;#34;:1744108800}&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>remote signer는 요청을 복호화하고, 사용자에게 승인을 요청하거나(또는 설정된 권한에 따라 자동 승인하거나), 사용자의 개인 키로 이벤트에 서명한 뒤, 응답으로 서명된 이벤트를 반환합니다.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;bb22cc33dd44ee55ff6677889900aabb11223344556677889900aabbccddeeff&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1744108801&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">24133&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;eff37350d839ce3707332348af4549a96051bd695d3223af4aabce4993531d86&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;nip44-encrypted JSON-RPC response&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>연결은 양쪽 어느 쪽에서든 시작할 수 있습니다. remote signer는 자신의 pubkey와 relay 정보를 담은 &lt;code>bunker://&lt;/code> URL을 제공합니다. 클라이언트는 자신의 client pubkey, relay, 연결 검증용 secret이 포함된 &lt;code>nostrconnect://&lt;/code> URL을 제공합니다. &lt;code>secret&lt;/code> 파라미터는 연결 스푸핑을 막습니다. 바깥 채널로 URL을 전달받은 당사자만 핸드셰이크를 완료할 수 있습니다.&lt;/p>
&lt;p>정의된 메서드는 여덟 가지입니다. 세션을 설정하는 &lt;code>connect&lt;/code>, 이벤트에 서명하는 &lt;code>sign_event&lt;/code>, 사용자의 pubkey를 알아내는 &lt;code>get_public_key&lt;/code>, keepalive용 &lt;code>ping&lt;/code>, 레거시 암호화를 위한 &lt;code>nip04_encrypt&lt;/code>/&lt;code>nip04_decrypt&lt;/code>, 현재 암호화를 위한 &lt;code>nip44_encrypt&lt;/code>/&lt;code>nip44_decrypt&lt;/code>, relay 관리를 위한 &lt;code>switch_relays&lt;/code>입니다. relay 마이그레이션은 remote signer가 처리하므로, 시간이 지나 새 relay로 연결을 옮겨도 세션은 끊기지 않습니다.&lt;/p>
&lt;p>클라이언트는 permission 시스템을 통해 연결 시점에 필요한 capability를 요청합니다. &lt;code>nip44_encrypt,sign_event:1,sign_event:14&lt;/code> 같은 permission 문자열은 NIP-44 암호화 접근과 kind &lt;code>1&lt;/code>, kind &lt;code>14&lt;/code> 이벤트에 대한 서명 접근만 요청합니다. remote signer는 이 권한을 수락, 거부, 수정할 수 있습니다. 이는 읽기와 노트 게시를 하는 웹 클라이언트가 &lt;code>sign_event:1&lt;/code> 권한만 받을 수 있고, DM 클라이언트는 여기에 &lt;code>sign_event:14&lt;/code>와 &lt;code>nip44_encrypt&lt;/code> 권한까지 추가로 받을 수 있음을 뜻합니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>는 Android에서 NIP-46을 구현하고 있으며, 이번 주의 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-08-newsletter/#amber-v600-pre1-adds-per-connection-nip-46-signing-keys">v6.0.0-pre1&lt;/a>은 클라이언트 간 격리를 위해 연결별 서명 키를 추가합니다. &lt;a href="https://github.com/nicktee/nsecapp">nsec.app&lt;/a> (이전 이름은 Nostr Connect)은 웹 기반 bunker를 제공합니다. &lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a>는 JavaScript 클라이언트를 위한 &lt;code>BunkerSigner&lt;/code>를 포함하고 있으며, &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-01-newsletter/#nostr-tools-adds-bunker-relay-control-and-fixes-nip-47-multi-relay-parsing">지난주 PR #530&lt;/a>은 수동 relay 관리를 위한 &lt;code>skipSwitchRelays&lt;/code>를 추가했습니다. 이 프로토콜은 auth challenge도 지원합니다. remote signer가 추가 인증(비밀번호, biometric, hardware token)을 요구할 때는, 클라이언트가 브라우저에서 열어 사용자가 완료할 수 있는 &lt;code>auth_url&lt;/code>로 응답합니다.&lt;/p>
&lt;hr>
&lt;p>이번 주는 여기까지입니다. 만들고 있는 것이 있거나 공유할 소식이 있다면 Nostr에서 DM을 보내 주세요. 아니면 &lt;a href="https://nostrcompass.org">nostrcompass.org&lt;/a>에서 저희를 찾아오셔도 됩니다.&lt;/p></content:encoded></item><item><title>Nostr Compass #16</title><link>https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/</link><pubDate>Wed, 01 Apr 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/</guid><description>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>가 고정 노트, &lt;a href="https://nostrcompass.org/ko/topics/nip-86/">NIP-86&lt;/a>을 통한 relay 관리, &lt;a href="https://nostrcompass.org/ko/topics/nip-62/">NIP-62&lt;/a> Request to Vanish 지원이 포함된 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/#amethyst-ships-pinned-notes-relay-management-and-request-to-vanish">v1.07.0&lt;/a>을 출시했습니다. &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/#nip-5a-merges-bringing-static-websites-to-nostr">NIP-5A&lt;/a> (Static Websites)가 NIPs 저장소에 병합되어 &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a> 스토리지를 사용해 Nostr 키페어 아래 웹사이트를 호스팅하는 방법을 정의합니다. &lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a>는 음성 방, 이메일/비밀번호 로그인, proof-of-work DM이 포함된 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/#flotilla-v170-adds-voice-rooms-and-email-login">v1.7.0&lt;/a>을 출시했습니다. &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/#white-noise-fixes-relay-churn-and-expands-client-controls">v2026.3.23&lt;/a>에서 relay churn을 수정했고, &lt;a href="https://github.com/psic4t/nospeak">nospeak&lt;/a>는 가입 없는 암호화 메신저로 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/#nospeak-launches-as-a-10-private-messenger">1.0.0&lt;/a>을 출시했습니다. &lt;a href="https://github.com/Spl0itable/NYM">Nymchat&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/#nymchat-ships-marmot-powered-group-chats">Marmot&lt;/a>를 채택해 MLS 암호화 그룹 채팅과 NIP-17 대체 경로를 제공합니다. &lt;a href="https://github.com/formstr-hq/nostr-calendar">Calendar by Form*&lt;/a>는 비공개 캘린더 목록과 ICS 가져오기가 포함된 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/#calendar-by-form-v100">v1.0.0&lt;/a>에 도달했고, &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/#amber-v502-through-v504">니모닉 복구와 NIP-42 relay 인증 화이트리스트&lt;/a>를 추가했으며, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/#marmot-moves-keypackages-to-addressable-events-and-tightens-push-notifications">Marmot 사양&lt;/a>은 KeyPackages를 주소 지정 가능 이벤트로 옮기고 MIP-05 푸시 알림 형식을 더 엄격하게 했습니다.&lt;/p></description><content:encoded>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>가 고정 노트, &lt;a href="https://nostrcompass.org/ko/topics/nip-86/">NIP-86&lt;/a>을 통한 relay 관리, &lt;a href="https://nostrcompass.org/ko/topics/nip-62/">NIP-62&lt;/a> Request to Vanish 지원이 포함된 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/#amethyst-ships-pinned-notes-relay-management-and-request-to-vanish">v1.07.0&lt;/a>을 출시했습니다. &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/#nip-5a-merges-bringing-static-websites-to-nostr">NIP-5A&lt;/a> (Static Websites)가 NIPs 저장소에 병합되어 &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a> 스토리지를 사용해 Nostr 키페어 아래 웹사이트를 호스팅하는 방법을 정의합니다. &lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a>는 음성 방, 이메일/비밀번호 로그인, proof-of-work DM이 포함된 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/#flotilla-v170-adds-voice-rooms-and-email-login">v1.7.0&lt;/a>을 출시했습니다. &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/#white-noise-fixes-relay-churn-and-expands-client-controls">v2026.3.23&lt;/a>에서 relay churn을 수정했고, &lt;a href="https://github.com/psic4t/nospeak">nospeak&lt;/a>는 가입 없는 암호화 메신저로 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/#nospeak-launches-as-a-10-private-messenger">1.0.0&lt;/a>을 출시했습니다. &lt;a href="https://github.com/Spl0itable/NYM">Nymchat&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/#nymchat-ships-marmot-powered-group-chats">Marmot&lt;/a>를 채택해 MLS 암호화 그룹 채팅과 NIP-17 대체 경로를 제공합니다. &lt;a href="https://github.com/formstr-hq/nostr-calendar">Calendar by Form*&lt;/a>는 비공개 캘린더 목록과 ICS 가져오기가 포함된 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/#calendar-by-form-v100">v1.0.0&lt;/a>에 도달했고, &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/#amber-v502-through-v504">니모닉 복구와 NIP-42 relay 인증 화이트리스트&lt;/a>를 추가했으며, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/#marmot-moves-keypackages-to-addressable-events-and-tightens-push-notifications">Marmot 사양&lt;/a>은 KeyPackages를 주소 지정 가능 이벤트로 옮기고 MIP-05 푸시 알림 형식을 더 엄격하게 했습니다.&lt;/p>
&lt;h2 id="뉴스">뉴스&lt;/h2>
&lt;h3 id="amethyst-ships-pinned-notes-relay-management-and-request-to-vanish">Amethyst ships pinned notes, relay management, and Request to Vanish&lt;/h3>
&lt;p>vitorpamplona가 유지 관리하는 Android 클라이언트 &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>가 3일 동안 &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.07.0">v1.07.0&lt;/a>부터 &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.07.5">v1.07.5&lt;/a>까지 여섯 개의 릴리스를 배포했습니다. 핵심 기능은 여섯 개의 프로토콜 표면에 걸쳐 있습니다. 고정 노트, 전용 투표 피드 화면, relay에 전체 이벤트 삭제를 요청하는 &lt;a href="https://nostrcompass.org/ko/topics/nip-62/">NIP-62&lt;/a> (Request to Vanish) 지원, 클라이언트 내부에서의 &lt;a href="https://nostrcompass.org/ko/topics/nip-86/">NIP-86&lt;/a> (Relay Management API), relay 정보 화면의 &lt;a href="https://nostrcompass.org/ko/topics/nip-66/">NIP-66&lt;/a> (Relay Discovery and Liveness Monitoring) 평가, 그리고 &lt;a href="https://nostrcompass.org/ko/topics/nip-43/">NIP-43&lt;/a> (Relay Access Metadata and Requests) 멤버 정보 표시입니다.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-86/">NIP-86&lt;/a>은 relay 운영자를 위한 JSON-RPC 인터페이스를 정의하여, 클라이언트가 pubkey 차단, pubkey 허용, 차단된 사용자 목록 조회 같은 관리 명령을 표준화된 API로 보낼 수 있게 합니다. Amethyst는 이제 이를 relay 관리 UI에 직접 노출하므로, 자신의 relay를 운영하는 사용자가 게시에 사용하는 동일한 클라이언트에서 relay를 관리할 수 있습니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2039">PR #2039&lt;/a>는 차단/허용 pubkey를 위한 기존 16진수 입력 대화상자를 대화형 사용자 검색 대화상자로 교체합니다.&lt;/p>
&lt;p>v1.07.2는 GIF 키보드 업로드를 추가하고, 이전 Amber 버전이 &lt;code>rejected&lt;/code> 필드에 빈 문자열을 반환해 Amber 거부 응답을 잘못 읽던 서명 회귀를 수정했습니다(&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2042">PR #2042&lt;/a>). v1.07.5는 이미지 업로드 충돌을 수정합니다. 이번 주 초의 &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.06.2">v1.06.2&lt;/a>와 &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.06.3">v1.06.3&lt;/a>은 단일/복수 선택 투표를 위한 poll type 선택기, 비디오 진행 막대 drag-to-seek, 익명 게시 개선을 추가했습니다.&lt;/p>
&lt;h3 id="nip-5a-merges-bringing-static-websites-to-nostr">NIP-5A merges, bringing static websites to Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/5A.md">NIP-5A&lt;/a> (Static Websites)가 &lt;a href="https://github.com/nostr-protocol/nips/pull/1538">PR #1538&lt;/a>을 통해 병합되며, Nostr 키페어 아래 정적 웹사이트를 호스팅하는 방법을 정의했습니다. 이 사양은 두 가지 이벤트 kind를 사용합니다. kind &lt;code>15128&lt;/code>은 pubkey당 하나의 루트 사이트용이고, kind &lt;code>35128&lt;/code>은 &lt;code>d&lt;/code> 태그로 식별되는 이름 있는 사이트용입니다. 각 매니페스트는 URL 경로를 SHA256 해시에 매핑하며, 실제 파일이 위치한 &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a> 스토리지 호스트를 가리키는 선택적 &lt;code>server&lt;/code> 태그를 가질 수 있습니다.&lt;/p>
&lt;p>호스팅 모델은 다음과 같이 동작합니다. 사이트 저자가 정적 사이트를 빌드하고, 파일을 하나 이상의 Blossom 서버에 업로드한 다음, 경로를 콘텐츠 해시에 매핑하는 서명된 매니페스트 이벤트를 게시합니다. 호스트 서버는 웹 요청을 수신하고, 서브도메인에서 저자의 pubkey를 해석하며, 저자의 &lt;a href="https://nostrcompass.org/ko/topics/nip-65/">NIP-65&lt;/a> relay 목록에서 매니페스트를 가져와, 일치하는 blob을 Blossom에서 다운로드해 파일을 제공합니다. 사이트는 업데이트된 매니페스트에 오직 해당 키만 서명할 수 있기 때문에 저자의 통제 아래에 머뭅니다. 어떤 NIP-5A 지원 서버라도 동일한 매니페스트에서 같은 사이트를 제공할 수 있기 때문에 호스트 서버는 대체 가능합니다.&lt;/p>
&lt;p>이 사양은 이미 존재하는 인프라 위에 세워졌습니다. lez가 만든 NIP-5A 참조 호스트 구현 &lt;a href="https://github.com/lez/nsite">nsite&lt;/a>와 hzrd149의 관리 UI &lt;a href="https://github.com/hzrd149/nsite-manager">nsite-manager&lt;/a>는 NIP 병합 이전부터 이미 돌아가고 있었습니다. 이번 병합은 이벤트 kind와 URL 해석 규칙을 공식화하여, 두 번째, 세 번째 구현이 겨냥할 수 있는 안정적인 목표를 제공합니다.&lt;/p>
&lt;h3 id="white-noise-fixes-relay-churn-and-expands-client-controls">White Noise fixes relay churn and expands client controls&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> 프로토콜 위에 구축된 개인 메신저 &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>가 3월 25일 &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v2026.3.23">v2026.3.23&lt;/a>을 출시했습니다. 핵심 작업은 relay 안정성입니다. relay 목록 게시가 quorum 로직을 사용하고 나머지는 백그라운드에서 재시도하도록 바뀌었기 때문에, 이제 로그인은 모든 relay 목록 게시가 끝날 때까지 기다리지 않고 진행됩니다. 단발성 fetch와 publish는 오래 살아남는 풀에 남아 있지 않고 범위가 한정된 임시 relay 세션을 사용하며, 복원된 세션은 시작 후 그룹 새로고침 경로를 회복하고, 앱은 &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/495">PR #495&lt;/a>, &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/502">PR #502&lt;/a>를 통해 relay 진단과 relay 상태 점검을 노출합니다.&lt;/p>
&lt;p>같은 릴리스는 대화 동작도 바꿉니다. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/468">PR #468&lt;/a>은 &lt;code>q&lt;/code> 태그와 &lt;code>nostr:nevent&lt;/code> 참조를 사용하는 NIP-C7 답글 스레딩을 추가하고, &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/471">PR #471&lt;/a>과 &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/512">PR #512&lt;/a>는 삭제된 메시지를 조용히 제거하지 않고 삭제된 자리표시자로 남겨 두며, &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/478">PR #478&lt;/a>은 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> (Encrypted Payloads) 익명 보고를 사용하는 인앱 버그 리포트 흐름을 추가하고, &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/486">PR #486&lt;/a>은 클라이언트 안에 직접 지원 채팅을 추가합니다. 같은 시기에 사용자 대면 메시지 제어도 들어왔습니다. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/532">PR #532&lt;/a>는 채팅 보관, &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/541">PR #541&lt;/a>는 기간 설정이 가능한 뮤트/언뮤트, &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/535">PR #535&lt;/a>는 알림 설정을 추가합니다. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/539">PR #539&lt;/a>는 준비 단계의 푸시 등록 작업으로, iOS의 APNs 등록과 Android의 Play Services 탐지를 연결해 그 위에 등록 기능을 구축할 수 있게 합니다. 백엔드 측에서는 &lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a>가 MIP-05 푸시 알림 프리미티브와 notification request builder를 추가했고(&lt;a href="https://github.com/marmot-protocol/mdk/pull/235">PR #235&lt;/a>, &lt;a href="https://github.com/marmot-protocol/mdk/pull/238">PR #238&lt;/a>), &lt;a href="https://github.com/marmot-protocol/whitenoise-rs">whitenoise-rs&lt;/a>는 푸시 알림 등록 영속화(&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/688">PR #688&lt;/a>), 백그라운드 작업 취소 수정(&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/696">PR #696&lt;/a>), 시작 시 key package 복구(&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/693">PR #693&lt;/a>)를 추가했습니다.&lt;/p>
&lt;h3 id="nostr-vpn-reaches-v030-with-roster-sync-and-invite-v2">Nostr VPN reaches v0.3.0 with roster sync and invite v2&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-25-newsletter/#nostr-vpn-launches-as-a-tailscale-alternative">지난주 출시 보도에 이어&lt;/a>, 신호에 Nostr relay를 사용하고 암호화 터널에 WireGuard를 사용하는 P2P VPN &lt;a href="https://github.com/mmalmi/nostr-vpn">nostr-vpn&lt;/a>이 빠른 릴리스 속도를 유지하며 &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.3.3">v0.3.3&lt;/a>까지 배포를 이어갔습니다. 버전 범프에는 두 가지 호환성 깨짐이 포함됩니다. invite 형식이 v2로 이동했고(0.3.0은 여전히 v1 invite를 가져올 수 있지만, 이전 빌드는 v2 invite를 가져올 수 없음), signaling 프로토콜에 관리자 서명 roster sync가 추가되었습니다. 버전이 섞인 피어도 메시 계층에서는 여전히 연결될 수 있지만, 이전 피어는 roster 동기화에는 참여하지 않습니다.&lt;/p>
&lt;p>roster sync 추가는 관리형 네트워크를 향한 첫걸음입니다. 이제 관리자 노드는 모든 피어에 멤버십 변경을 푸시할 수 있으므로, 메시에서 장치를 추가하거나 제거할 때 각 피어가 수동으로 구성을 업데이트할 필요가 없습니다. 같은 주의 v0.2.x 릴리스들은 구체적 배포 문제를 다뤘습니다. &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.22">v0.2.22&lt;/a>부터 &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.28">v0.2.28&lt;/a>까지는 Windows 서비스 관리 수정, Android 빌드 스크립트 추가, LAN pairing 흐름 정제가 있었습니다.&lt;/p>
&lt;h3 id="nospeak-launches-as-a-10-private-messenger">nospeak launches as a 1.0 private messenger&lt;/h3>
&lt;p>Nostr 기반 개인 메신저 &lt;a href="https://github.com/psic4t/nospeak">nospeak&lt;/a>가 3월 27일 &lt;a href="https://github.com/psic4t/nospeak/releases/tag/v1.0.0">1.0.0&lt;/a>을 출시했습니다. 이 프로젝트는 일대일 및 그룹 대화, 연락처 관리, 자체 호스팅 가능한 아키텍처를 포함합니다. 일대일 채팅은 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages)을 사용하며, 이는 &lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59&lt;/a> (Gift Wrap)와 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> (Encrypted Payloads)를 결합해 relay로부터 발신자를 숨깁니다. 미디어의 경우 파일은 Blossom 서버 업로드 전에 클라이언트 측에서 AES-256-GCM으로 암호화됩니다. 이 릴리스는 자체 호스팅을 위한 컨테이너 이미지로도 배포됩니다.&lt;/p>
&lt;h3 id="flotilla-v170-adds-voice-rooms-and-email-login">Flotilla v1.7.0 adds voice rooms and email login&lt;/h3>
&lt;p>&amp;ldquo;relay를 그룹으로&amp;rdquo; 모델을 중심으로 구축된 hodlbod의 Discord 유사 &lt;a href="https://nostrcompass.org/ko/topics/nip-29/">NIP-29&lt;/a> (Relay-based Groups) 클라이언트 &lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a>가 3월 30일과 31일 &lt;a href="https://gitea.coracle.social/coracle/flotilla/src/tag/1.7.0">v1.7.0&lt;/a>, &lt;a href="https://gitea.coracle.social/coracle/flotilla/src/tag/1.7.1">v1.7.1&lt;/a>을 출시했습니다. 핵심 기능은 mplorentz가 기여한 voice room입니다. 이제 사용자는 그룹 채널 안에서 음성 통화에 참여할 수 있으며, 오디오 입력 장치를 선택하고 음성 통화에 참여할지 아니면 텍스트 채팅만 볼지를 고를 수 있는 참가 대화상자(&lt;a href="https://gitea.coracle.social/coracle/flotilla/pulls/109">PR #109&lt;/a>)가 제공됩니다. 이 대화상자는 이전 버전의 UX 문제를 해결합니다. 이전에는 음성 지원 룸에 들어가면 사용자가 메시지만 읽거나 방 설정만 확인하고 싶어도 마이크가 강제로 켜졌습니다.&lt;/p>
&lt;p>같은 릴리스는 Nostr 키 기반 인증의 대안으로 이메일/비밀번호 로그인, DM에서의 proof-of-work, DM 편집, 재설계된 relay 온보딩 및 설정, &lt;code>supported_nips&lt;/code>를 통한 Blossom 지원 탐지, 개선된 알림 배지, Android 푸시 알림 대체 경로, Android 파일 업로드 수정도 추가합니다. 이어지는 v1.7.1은 오프라인 signer 사용 시 pomade registration fallback 문제를 수정합니다.&lt;/p>
&lt;p>Hodlbod는 또한 zooid relay를 위한 호스팅 관리자와 대시보드 &lt;a href="https://gitea.coracle.social/coracle/caravel">Caravel&lt;/a>도 구축 중이며, 초기 개발에서 이번 주 40개의 커밋을 기록했습니다.&lt;/p>
&lt;h3 id="nymchat-ships-marmot-powered-group-chats">Nymchat ships Marmot-powered group chats&lt;/h3>
&lt;p>Bitchat과 브리지된 일시적 채팅 클라이언트 &lt;a href="https://github.com/Spl0itable/NYM">Nymchat&lt;/a>(NYM, Nostr Ynstant Messenger라고도 함)은 이제 모든 새 그룹 채팅이 MLS 암호화 메시징을 위해 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> 프로토콜을 사용한다고 발표했습니다. 이 통합은 key package, welcome message, group message를 위해 각각 kinds &lt;code>443&lt;/code>, &lt;code>444&lt;/code>, &lt;code>445&lt;/code>를 사용하며, 순방향 비밀성, 사후 침해 보안성, 메타데이터 누출 제로를 제공합니다. 수신자가 MLS를 사용할 수 없는 경우 Nymchat은 이전 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages) 그룹 채팅 경로로 대체하며, 이 역시 종단간 암호화이지만 MLS의 ratchet-tree 속성은 없습니다.&lt;/p>
&lt;p>이번 주의 v3.55, v3.56 시리즈는 새 장치에서의 로딩, 나가기 동작, 알림 라우팅, 읽지 않음 배지 수 같은 그룹 채팅 엣지 케이스에 집중했습니다. 같은 주기에는 이스케이프되지 않은 HTML에서 비롯된 XSS 취약점도 수정했고, 사용자 닉네임까지 확장된 키워드 및 구문 차단 기능도 추가했습니다. 이로써 Nymchat은 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/#white-noise-fixes-relay-churn-and-expands-client-controls">White Noise&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/#openchat-v024-through-v030">OpenChat&lt;/a>과 함께 또 하나의 Marmot 클라이언트가 되었고, 동일한 프로토콜 위에서 MLS 암호화 그룹 메시지를 교환할 수 있는 앱 집합을 넓혔습니다.&lt;/p>
&lt;h2 id="릴리스">릴리스&lt;/h2>
&lt;h3 id="calendar-by-form-v100">Calendar by Form* v1.0.0&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-52/">NIP-52&lt;/a> (Calendar Events) 기반 탈중앙화 캘린더 앱 &lt;a href="https://github.com/formstr-hq/nostr-calendar">Calendar by Form*&lt;/a>가 3월 29일 &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.0.0">v1.0.0&lt;/a>에 도달했습니다. 이 릴리스는 암호화된 Nostr 이벤트(kind &lt;code>32123&lt;/code>)와 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> (Encrypted Payloads) 자기 암호화를 사용하는 비공개 캘린더 목록을 추가해, 사용자가 relay에 그룹 구조를 노출하지 않고 이벤트를 비공개 컬렉션으로 정리할 수 있게 합니다. 같은 릴리스는 다른 애플리케이션에서 캘린더 데이터를 가져오기 위한 ICS intent 처리와, 사용자 간 이벤트 공유를 위한 invitation request도 추가합니다.&lt;/p>
&lt;h3 id="amber-v502-through-v504">Amber v5.0.2 through v5.0.4&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> (Android Signer Application) 서명자 앱 &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>가 세 개의 포인트 릴리스를 배포했습니다. &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v5.0.2">v5.0.2&lt;/a>, &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v5.0.3">v5.0.3&lt;/a>, &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v5.0.4">v5.0.4&lt;/a>입니다. 가장 눈에 띄는 추가 사항은 mnemonic recovery phrase 로그인(&lt;a href="https://github.com/greenart7c3/Amber/pull/358">PR #358&lt;/a>)으로, 사용자가 원시 nsec 또는 ncryptsec 문자열을 요구받지 않고 BIP39 시드 문구로 signer를 복원할 수 있게 합니다. &lt;a href="https://github.com/greenart7c3/Amber/pull/357">PR #357&lt;/a>은 &lt;a href="https://nostrcompass.org/ko/topics/nip-42/">NIP-42&lt;/a> relay 인증 화이트리스트를 추가해, 어떤 relay가 클라이언트 인증을 요청할 수 있는지를 사용자가 제한할 수 있게 합니다. &lt;a href="https://github.com/greenart7c3/Amber/pull/353">PR #353&lt;/a>은 decrypt 권한을 위한 암호화 범위 선택을 추가해, 포괄적 권한 대신 NIP-04 전용 또는 NIP-44 전용 decrypt 접근을 부여할 수 있게 합니다. v5.0.4는 거부 처리에서 범위 지정 encrypt/decrypt 권한을 존중하지 않던 버그를 수정하고 여러 bunker 요청 수신 시 성능을 개선합니다.&lt;/p>
&lt;h3 id="aegis-v040">Aegis v0.4.0&lt;/h3>
&lt;p>크로스 플랫폼 signer &lt;a href="https://github.com/ZharlieW/Aegis">Aegis&lt;/a>가 3월 26일 &lt;a href="https://github.com/ZharlieW/Aegis/releases/tag/v0.4.0">v0.4.0&lt;/a>을 출시했습니다. 이 릴리스는 Settings에 Full 및 Selective authorization 모드를 추가하고 여러 QR 스캔 문제를 수정합니다. 후속 커밋 &lt;a href="https://github.com/ZharlieW/Aegis/commit/d4f799fe51dd82968d54f72ac77f2de29d0cfe6b">d4f799f&lt;/a>, &lt;a href="https://github.com/ZharlieW/Aegis/commit/3313af92e55e449ebc98fbd91a085bd444d716e7">3313af9&lt;/a>, &lt;a href="https://github.com/ZharlieW/Aegis/commit/3b214e4176f5dbe7f18690d0996e69dd151fe00f">3b214e4&lt;/a>, &lt;a href="https://github.com/ZharlieW/Aegis/commit/e4f40b6f1f48c2dae1bb5e4246df26c26dba419e">e4f40b6&lt;/a>은 같은 방향의 작업을 계속하며, 일괄 선택 제어, 재사용 가능한 batch selection 통계, set-all-groups 선택 API, 앱 권한 페이지의 권한별 사용 통계를 추가합니다.&lt;/p>
&lt;h3 id="schemata-v027-through-v030">Schemata v0.2.7 through v0.3.0&lt;/h3>
&lt;p>Nostr 이벤트 kind 검증용 JSON Schema 정의 &lt;a href="https://github.com/nostrability/schemata">Schemata&lt;/a>가 21개의 병합된 PR과 함께 &lt;a href="https://github.com/nostrability/schemata/releases/tag/v0.2.7">v0.2.7&lt;/a>부터 &lt;a href="https://github.com/nostrability/schemata/releases/tag/v0.3.0">v0.3.0&lt;/a>까지 네 개의 릴리스를 배포했습니다. v0.3.0은 relay URL, 16진수 ID, MIME 타입, BOLT-11 문자열 전반의 패턴 일관성 수정(&lt;a href="https://github.com/nostrability/schemata/pull/126">PR #126&lt;/a>), 중앙화된 relay URL 패턴(&lt;a href="https://github.com/nostrability/schemata/pull/117">PR #117&lt;/a>), &lt;a href="https://nostrcompass.org/ko/topics/nip-19/">NIP-19&lt;/a> bech32 기본 타입 스키마(&lt;a href="https://github.com/nostrability/schemata/pull/118">PR #118&lt;/a>), kind 777 spell 이벤트 검증(&lt;a href="https://github.com/nostrability/schemata/pull/125">PR #125&lt;/a>)을 포함합니다. 이제 릴리스 파이프라인은 각 릴리스 때 Nostr에 kind &lt;code>1&lt;/code> 노트를 게시합니다(&lt;a href="https://github.com/nostrability/schemata/pull/120">PR #120&lt;/a>). 즉, 프로젝트가 자신이 검증하는 프로토콜을 통해 스스로를 공지합니다. Schemata는 이제 정식 JS/TS 패키지 외에도 Rust, Go, Python, Kotlin, Java, Swift, Dart, PHP, C#/.NET, C++, Ruby, C 등 12개 이상의 언어를 지원합니다.&lt;/p>
&lt;p>Schemata와 함께 팀은 동일한 검증 문제에 대해 다른 접근을 취하는 실험적 코드 생성기 &lt;a href="https://github.com/nostrability/schemata-codegen">schemata-codegen&lt;/a>도 공개했습니다. Schemata의 validator 패키지가 JSON Schema 런타임 의존성을 요구하는 반면, schemata-codegen은 스키마를 타입 지정된 네이티브 언어 구조(typed tag tuples, kind interfaces, runtime validators)로 직접 옮겨 런타임에 validator 라이브러리가 필요하지 않게 만듭니다. &lt;a href="https://github.com/nostrability/schemata-codegen/blob/main/CODEGEN-VS-VALIDATORS.md">codegen-vs-validators 비교 문서&lt;/a>는 각 접근이 적합한 시점을 설명합니다.&lt;/p>
&lt;h3 id="bigbrotr-v650-through-v654">BigBrotr v6.5.0 through v6.5.4&lt;/h3>
&lt;p>relay 분석 플랫폼 &lt;a href="https://github.com/BigBrotr/bigbrotr">BigBrotr&lt;/a>가 &lt;a href="https://github.com/BigBrotr/bigbrotr/releases/tag/v6.5.0">v6.5.0&lt;/a>부터 &lt;a href="https://github.com/BigBrotr/bigbrotr/releases/tag/v6.5.4">v6.5.4&lt;/a>까지 다섯 개 릴리스를 배포했습니다. v6.5.0은 &lt;code>parse_relay_url()&lt;/code> 팩토리 함수를 사용해 relay URL 검증을 중앙화하고, URL 길이 검사와 경로 정제를 추가합니다. 모니터링 인프라도 수정되었습니다. 공지 이벤트는 이제 geohash 위치 태그를 포함하며(&lt;a href="https://nostrcompass.org/ko/topics/nip-52/">NIP-52&lt;/a>를 따름), 마감 시간이 없어 무기한 멈출 수 있던 Geo/Net &lt;a href="https://nostrcompass.org/ko/topics/nip-66/">NIP-66&lt;/a> 메타데이터 테스트에는 타임아웃 보호가 추가되었습니다. &lt;a href="https://github.com/BigBrotr/bigbrotr/pull/410">PR #410&lt;/a>은 PostgreSQL을 16에서 18로 업그레이드하여 비동기 I/O 서브시스템과 더 나은 WAL 처리량을 relay 분석 파이프라인에 가져옵니다.&lt;/p>
&lt;h3 id="vertex-lab-relay-adds-nip-50-profile-search">Vertex Lab relay adds NIP-50 profile search&lt;/h3>
&lt;p>&lt;a href="https://github.com/vertex-lab/npub.world">npub.world&lt;/a>와 &lt;a href="https://vertexlab.io/docs">Vertex&lt;/a> Web of Trust 엔진을 만드는 &lt;a href="https://vertexlab.io">Vertex Lab&lt;/a> 팀은 &lt;code>wss://relay.vertexlab.io&lt;/code>가 이제 프로필 쿼리에 대해 &lt;a href="https://nostrcompass.org/ko/topics/nip-50/">NIP-50&lt;/a> (Search)을 지원한다고 발표했습니다. NIP-50은 표준 Nostr &lt;code>REQ&lt;/code> 필터에 &lt;code>search&lt;/code> 필드를 확장하여, 클라이언트가 인덱싱을 지원하는 relay에 전체 텍스트 검색 쿼리를 보낼 수 있게 합니다. 이미 Web of Trust 데이터를 제공하는 relay에 프로필 검색을 추가함으로써, &lt;code>relay.vertexlab.io&lt;/code>에 연결된 클라이언트는 별도의 검색 서비스 없이 이름이나 설명으로 사용자를 발견할 수 있습니다.&lt;/p>
&lt;h3 id="hashtree-v0217-and-v0218-ship-webrtc-mesh-and-iris-desktop">Hashtree v0.2.17 and v0.2.18 ship WebRTC mesh and Iris Desktop&lt;/h3>
&lt;p>mmalmi의 콘텐츠 주소 지정 blob 저장 시스템으로 Merkle root를 Nostr에 게시하는 &lt;a href="https://github.com/mmalmi/hashtree">Hashtree&lt;/a>가 3월 31일 &lt;a href="https://github.com/mmalmi/hashtree/releases/tag/v0.2.17">v0.2.17&lt;/a>과 &lt;a href="https://github.com/mmalmi/hashtree/releases/tag/v0.2.18">v0.2.18&lt;/a>을 출시했습니다. 이 두 릴리스는 30개 커밋 질주의 정점으로, 세 가지 뚜렷한 기능을 추가합니다. 첫째, &lt;code>hashtree-webrtc&lt;/code> 크레이트(v0.2.18에서 &lt;code>hashtree-network&lt;/code>로 이름 변경)는 Rust CLI, 시뮬레이션 하네스, TypeScript 클라이언트 전반에 걸쳐 통합 메시 신호를 갖춘 WebRTC 기반 P2P blob 배포를 추가합니다. 둘째, 릴리스 파이프라인이 이제 Windows 아티팩트(CLI zip과 Iris 설치 프로그램)도 빌드하여 macOS, Linux, Windows까지 크로스 플랫폼 범위를 넓혔습니다. 셋째, 두 릴리스는 모두 mmalmi의 Nostr 소셜 클라이언트 Iris Desktop 0.1.0을 AppImage, .deb, Windows 설치 프로그램 자산으로 hashtree CLI와 함께 번들합니다. &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-18-newsletter/">Hashtree는 Blossom 호환 저장소로 출시되었을 때 뉴스레터 #10&lt;/a>에서 처음 다뤘습니다. WebRTC 계층은 중앙화된 Blossom 서버에 의존하지 않는 P2P 콘텐츠 배포를 향한 첫 단계입니다.&lt;/p>
&lt;h3 id="nostr-mail-client-v070-through-v072">Nostr Mail Client v0.7.0 through v0.7.2&lt;/h3>
&lt;p>Nostr 신원을 기반으로 한 Flutter 메일형 클라이언트 &lt;a href="https://github.com/nogringo/nostr-mail-client">Nostr Mail Client&lt;/a>가 3일 동안 &lt;a href="https://github.com/nogringo/nostr-mail-client/releases/tag/v0.7.0">v0.7.0&lt;/a>, &lt;a href="https://github.com/nogringo/nostr-mail-client/releases/tag/v0.7.1">v0.7.1&lt;/a>, &lt;a href="https://github.com/nogringo/nostr-mail-client/releases/tag/v0.7.2">v0.7.2&lt;/a>를 배포했습니다. 사용자에게 보이는 제품 작업은 온보딩(&lt;a href="https://github.com/nogringo/nostr-mail-client/pull/9">PR #9&lt;/a>)과 프로필 편집(&lt;a href="https://github.com/nogringo/nostr-mail-client/pull/10">PR #10&lt;/a>)에 집중되어 있었으며, 이는 Nostr를 메일박스로 제시하려는 어떤 클라이언트에게도 기본 요소입니다. 이후의 포인트 릴리스는 이 작업을 새 Android 및 Linux 빌드에 패키징했습니다.&lt;/p>
&lt;h3 id="wisp-v0140-through-v0161">Wisp v0.14.0 through v0.16.1&lt;/h3>
&lt;p>Android Nostr 클라이언트 &lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a>가 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.14.0-beta">v0.14.0-beta&lt;/a>부터 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.16.3-beta">v0.16.3-beta&lt;/a>까지 13개의 릴리스를 추가로 배포했습니다. 이번 주 작업에는 NIP-17 rumor JSON 수정(&lt;a href="https://github.com/barrydeen/wisp/pull/385">PR #385&lt;/a>), 갤러리 카드의 repost 배지(&lt;a href="https://github.com/barrydeen/wisp/pull/383">PR #383&lt;/a>), 확장 가능한 reaction 세부 정보(&lt;a href="https://github.com/barrydeen/wisp/pull/382">PR #382&lt;/a>), 영구 emoji 세트(&lt;a href="https://github.com/barrydeen/wisp/pull/381">PR #381&lt;/a>), 비디오 자동 재생 제어(&lt;a href="https://github.com/barrydeen/wisp/pull/380">PR #380&lt;/a>)가 포함됩니다. 최신 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.16.3-beta">v0.16.3-beta&lt;/a>는 하이픈이 포함된 커스텀 emoji shortcode와 누락된 emoji 태그도 수정합니다.&lt;/p>
&lt;h3 id="primal-android-3017">Primal Android 3.0.17&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a>가 3월 24일 &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.0.17">3.0.17&lt;/a>을 출시했습니다. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1000">PR #1000&lt;/a>은 WalletException 타입을 NWC 응답의 에러 코드에 매핑하여, &lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47&lt;/a> 클라이언트에 일반 오류 대신 구조화된 실패 정보를 제공합니다. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/995">PR #995&lt;/a>는 poll zap 투표가 Top Zaps로 보이는 문제를 수정하고, &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/998">PR #998&lt;/a>은 지갑이 설정되지 않았을 때 wallet balance와 action 버튼을 숨깁니다.&lt;/p>
&lt;h3 id="openchat-v024-through-v030">OpenChat v0.2.4 through v0.3.0&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> 스택 위에 구축된 Avalonia 기반 채팅 클라이언트 &lt;a href="https://github.com/DavidGershony/openChat">OpenChat&lt;/a>가 4일 동안 &lt;a href="https://github.com/DavidGershony/openChat/releases/tag/v0.2.4">v0.2.4&lt;/a>부터 &lt;a href="https://github.com/DavidGershony/openChat/releases/tag/v0.3.0">v0.3.0&lt;/a>까지 여섯 개의 릴리스를 배포했습니다. 커밋 로그는 &amp;ldquo;Marmot은 동작한다&amp;quot;에서 &amp;ldquo;누군가가 실제로 매일 사용할 수 있다&amp;rdquo; 사이의 간극을 메우는 클라이언트의 이야기를 보여줍니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-42/">NIP-42&lt;/a> relay 인증이 도입되었고, 이어서 relay picker UI와 중복 이벤트 필터링이 추가되었습니다. 음성 메시지는 pause, resume, seek, 시간 표시를 얻었습니다. signer 경로도 강화되었습니다. Amber 연결은 업데이트된 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> URI 형식으로 수정되었고, WebSocket은 요청 전 자동 재연결하며, 중복 Amber 요청은 재생된 응답을 확인해 잡아냅니다. 저장 측면에서는 Linux와 macOS가 파일 기반 키를 사용하는 AES-256-GCM 보안 저장소를 얻었고, 사용자 메타데이터 fetch는 이제 &lt;a href="https://nostrcompass.org/ko/topics/nip-65/">NIP-65&lt;/a> relay 발견을 사용하며 결과를 로컬 데이터베이스에 캐시합니다.&lt;/p>
&lt;h3 id="igloo-signer-11">Igloo Signer 1.1&lt;/h3>
&lt;p>FROSTR 프로젝트의 iOS용 &lt;a href="https://nostrcompass.org/ko/topics/frost/">FROST&lt;/a> threshold signer &lt;a href="https://github.com/FROSTR-ORG/igloo-ios-prototype">Igloo&lt;/a>가 3월 28일 &lt;a href="https://github.com/FROSTR-ORG/igloo-ios-prototype/releases/tag/v1.1">v1.1&lt;/a>을 출시했습니다. FROST(Flexible Round-Optimized Schnorr Threshold) 서명은 다수의 signer가 집단적으로 Nostr 키페어를 제어할 수 있게 하며, t-of-n 참여자만으로도 어느 한 당사자도 전체 개인 키를 보유하지 않은 상태에서 이벤트에 서명할 수 있습니다. Igloo는 Nostr를 위한 이 접근 방식의 최초 모바일 구현 중 하나입니다.&lt;/p>
&lt;h3 id="nak-v0193-and-v0194">nak v0.19.3 and v0.19.4&lt;/h3>
&lt;p>fiatjaf의 커맨드라인 Nostr 도구킷 &lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a>이 3월 26일과 30일 &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.3">v0.19.3&lt;/a>, &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.4">v0.19.4&lt;/a>를 출시했습니다. 두 릴리스 모두 panic 조건을 수정합니다. &lt;a href="https://github.com/fiatjaf/nak/pull/118">PR #118&lt;/a>은 잠재적 out-of-bounds 접근을 막기 위해 &lt;code>strings.Split&lt;/code>을 &lt;code>strings.Cut&lt;/code>으로 대체하고, &lt;a href="https://github.com/fiatjaf/nak/pull/119">PR #119&lt;/a>은 curl flag 파싱에서 같은 종류의 panic을 방지합니다.&lt;/p>
&lt;h3 id="flora-v030">Flora v0.3.0&lt;/h3>
&lt;p>Nostr에서 탈중앙화 화면 녹화와 공유를 위한 Chrome 확장 &lt;a href="https://github.com/shawnyeager/flora-extension">Flora&lt;/a>가 &lt;a href="https://github.com/shawnyeager/flora-extension/releases/tag/v0.3.0">v0.3.0&lt;/a>을 출시했습니다. 이 릴리스는 공개, 비공개 링크, 비공개 모드가 포함된 private encrypted video sharing을 추가합니다. 비공개 녹화본은 AES-256-GCM으로 암호화되며 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages)을 통해 수신자에게 전달되므로, 녹화물이 평문 상태로 서버에 닿지 않습니다.&lt;/p>
&lt;h3 id="yakihonne-mobile-203">YakiHonne Mobile 2.0.3&lt;/h3>
&lt;p>모바일 Nostr 클라이언트 &lt;a href="https://github.com/YakiHonne/mobile-app">YakiHonne&lt;/a>가 relay 리뷰와 가입 요청, 확장된 중첩 답글, 노트 자동 번역, NWC 다중 relay 지원이 포함된 &lt;a href="https://github.com/YakiHonne/mobile-app/releases/tag/YakiHonne-2.0.3">2.0.3&lt;/a>을 출시했습니다.&lt;/p>
&lt;h2 id="프로젝트-업데이트">프로젝트 업데이트&lt;/h2>
&lt;h3 id="zap-cooking-adds-zap-polls-and-branta-payment-verification">Zap Cooking adds zap polls and Branta payment verification&lt;/h3>
&lt;p>레시피 및 콘텐츠 플랫폼 &lt;a href="https://github.com/zapcooking/frontend">Zap Cooking&lt;/a>이 이번 주 상호작용 콘텐츠와 결제 흐름에 집중한 11개의 PR을 병합했습니다. &lt;a href="https://github.com/zapcooking/frontend/pull/277">PR #277&lt;/a>은 zap poll(kind 6969)을 추가하여, 사용자가 sats를 보내 투표하고 프로필 사진이 포함된 투표자 목록을 볼 수 있게 합니다. &lt;a href="https://github.com/zapcooking/frontend/pull/274">PR #274&lt;/a>는 투표 UX를 재설계해 투표 인터페이스가 피드 안에서 더 자연스럽게 놓이도록 만듭니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/zapcooking/frontend/pull/276">PR #276&lt;/a>은 Send Payment 흐름에 카메라 기반 QR 스캔을 추가하고, 전송 전에 결제 목적지가 합법적인지 확인하는 검증 서비스 &lt;a href="https://branta.pro/">Branta&lt;/a>를 통합합니다. Branta는 전송 전에 결제 목적지를 피싱, 주소 바꿔치기, 중간자 가로채기에 대해 검사합니다. Zap Cooking의 구현에서는 Branta 검증이 된 플랫폼 이름과 로고가 결제 흐름에 직접 나타나며, Branta 지원 QR 코드는 &lt;code>branta_id&lt;/code>, &lt;code>branta_secret&lt;/code> 파라미터를 담아 지갑이 스캔된 코드 자체로 목적지를 검증할 수 있게 합니다.&lt;/p>
&lt;h3 id="divine-lays-groundwork-for-unified-search-and-hardens-video-delivery">diVine lays groundwork for unified search and hardens video delivery&lt;/h3>
&lt;p>짧은 형식의 동영상 클라이언트 &lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>는 이번 주 검색, 피드 내비게이션, 재생 복구, 업로드 동작을 강화했습니다. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2540">PR #2540&lt;/a>은 Videos, People, Tags용 그룹화된 섹션이 있는 통합 검색 화면의 기반을 마련합니다. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2623">PR #2623&lt;/a>은 profile feed, inbox, notifications, discover list, classic vines, search, composable grid feed 전반의 pagination을 공유 pagination controller 위로 옮겨 강화합니다.&lt;/p>
&lt;p>비디오 전달도 여러 구체적 수정을 받았습니다. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2643">PR #2643&lt;/a>은 Divine 호스팅 파생 소스를 순서대로 재시도하고, 재생 오류를 노출하기 전에 원본 blob으로 대체하여, 한 소스의 일시적 실패가 즉시 재생을 죽이지 않게 합니다. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2634">PR #2634&lt;/a>는 capability probing이 일시적으로 실패해도 resumable upload를 Divine 소유 경로에 유지해, 짧은 네트워크 장애로 인한 업로드 실패를 줄입니다. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2637">PR #2637&lt;/a>은 또한 sensitive-content gate를 바꾸어, creator가 제공한 content warning label이 아니라 실제 경고 레이블이 있을 때만 비디오를 강하게 차단합니다.&lt;/p>
&lt;h3 id="shopstr-adds-custom-storefronts-and-milk-market-keeps-shipping-marketplace-work">Shopstr adds custom storefronts and Milk Market keeps shipping marketplace work&lt;/h3>
&lt;p>Nostr 기반 마켓플레이스 &lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a>가 &lt;a href="https://github.com/shopstr-eng/shopstr/pull/245">PR #245&lt;/a>를 병합해 custom storefronts를 추가했습니다. 이를 통해 판매자는 모든 목록이 같은 일반 프레젠테이션에 들어가도록 강제되는 대신, 더 뚜렷한 홈 화면을 가질 수 있습니다.&lt;/p>
&lt;p>우유 전용 마켓플레이스 &lt;a href="https://github.com/shopstr-eng/milk-market">Milk Market&lt;/a>은 storefront 최적화(&lt;a href="https://github.com/shopstr-eng/milk-market/pull/18">PR #18&lt;/a>), 계정 복구(&lt;a href="https://github.com/shopstr-eng/milk-market/pull/17">PR #17&lt;/a>), beef split(&lt;a href="https://github.com/shopstr-eng/milk-market/pull/15">PR #15&lt;/a>), MCP 도구 타이핑 수정(&lt;a href="https://github.com/shopstr-eng/milk-market/pull/16">PR #16&lt;/a>)을 계속 배포했습니다.&lt;/p>
&lt;h3 id="notedeck-adds-sound-effects-and-extends-its-updater-path-toward-android">Notedeck adds sound effects and extends its updater path toward Android&lt;/h3>
&lt;p>Damus 팀의 데스크톱 클라이언트 &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>가 rodio를 사용하는 UI 상호작용 사운드가 포함된 sound effects 서브시스템을 추가하는 &lt;a href="https://github.com/damus-io/notedeck/pull/1412">PR #1412&lt;/a>, 그리고 CLI title flag와 접을 수 있는 session folder가 포함된 Agentium 업데이트 &lt;a href="https://github.com/damus-io/notedeck/pull/1399">PR #1399&lt;/a>를 병합했습니다. 오픈 상태인 &lt;a href="https://github.com/damus-io/notedeck/pull/1417">PR #1417&lt;/a>은 Android에서 Nostr/Zapstore를 통한 APK 자체 업데이트를 제안하며, 이는 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-18-newsletter/#notedeck-moves-release-discovery-onto-nostr">뉴스레터 #14에서 다룬 Notedeck의 Nostr 네이티브 업데이터 작업&lt;/a>을 기반으로 합니다.&lt;/p>
&lt;h3 id="nostria-adds-repost-relay-hints-and-nip-98-alignment">Nostria adds repost relay hints and NIP-98 alignment&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a>가 kind 6 및 kind 16 이벤트의 repost &lt;code>e&lt;/code> 태그에 &lt;a href="https://nostrcompass.org/ko/topics/nip-18/">NIP-18&lt;/a> (Reposts) relay 힌트를 추가하는 &lt;a href="https://github.com/nostria-app/nostria/pull/583">PR #583&lt;/a>, Brainstorm HTTP 인증(kind 27235)을 &lt;a href="https://nostrcompass.org/ko/topics/nip-98/">NIP-98&lt;/a> (HTTP Auth) 필수 태그와 맞추는 &lt;a href="https://github.com/nostria-app/nostria/pull/582">PR #582&lt;/a>, Schemata 스키마 검증 테스트를 추가하는 &lt;a href="https://github.com/nostria-app/nostria/pull/576">PR #576&lt;/a>을 병합했습니다. NIP-98 변경은 Nostria가 다른 클라이언트와 동일한 HTTP 인증 형식을 사용해 외부 서비스에 인증할 수 있음을 의미합니다.&lt;/p>
&lt;h3 id="nostr-doc-adds-desktop-packaging-and-offline-first-work">Nostr-Doc adds desktop packaging and offline-first work&lt;/h3>
&lt;p>Form*의 협업 편집기 &lt;a href="https://github.com/formstr-hq/nostr-docs">Nostr-Doc&lt;/a>는 이번 주 패키징과 에디터 작업으로 분주했습니다. &lt;a href="https://github.com/formstr-hq/nostr-docs/commit/fcdc00a564c8d76f094c586b06efce07592a60e4">커밋 fcdc00a&lt;/a>는 데스크톱 앱을 추가하고, &lt;a href="https://github.com/formstr-hq/nostr-docs/commit/3977a8eb2e62b84a67de756c2776e14de8470927">커밋 3977a8e&lt;/a>는 네이티브 앱 작업을 시작하며, &lt;a href="https://github.com/formstr-hq/nostr-docs/commit/413a030f5b47fb8e32a5dff81bcef557ad9b5869">커밋 413a030&lt;/a>은 앱을 offline-first 동작 쪽으로 밀어붙입니다. 에디터 측면에서는 &lt;a href="https://github.com/formstr-hq/nostr-docs/commit/1855ce86ee83ad504e14e47d9c339baffb114786">커밋 1855ce8&lt;/a>이 Ctrl+S 저장, 저장 경고, 링크 미리보기 수정, 취소선 렌더링 수정 기능을 추가합니다.&lt;/p>
&lt;h3 id="rust-nostr-optimizes-nip-21-parsing-and-adds-relay-side-nip-62-support">rust-nostr optimizes NIP-21 parsing and adds relay-side NIP-62 support&lt;/h3>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a>가 여덟 개 PR을 병합했습니다. 가장 눈에 띄는 것은 &lt;a href="https://github.com/rust-nostr/nostr/pull/1308">PR #1308&lt;/a>로, &lt;code>PublicKey::parse&lt;/code>에서 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/21.md">NIP-21&lt;/a> URI 파싱을 표준 bech32 파싱 성능과 맞춰 최적화합니다. 이전에는 NIP-21 URI가 원시 bech32 키보다 대략 두 배 느리게 파싱되었습니다. 프로젝트에는 또한 메모리, LMDB, SQLite, 데이터베이스 테스트 백엔드 전반에 relay별 &lt;a href="https://nostrcompass.org/ko/topics/nip-62/">NIP-62&lt;/a> (Request to Vanish) 지원을 추가하는 네 개의 오픈 PR(&lt;a href="https://github.com/rust-nostr/nostr/pull/1315">PR #1315&lt;/a>, &lt;a href="https://github.com/rust-nostr/nostr/pull/1316">PR #1316&lt;/a>, &lt;a href="https://github.com/rust-nostr/nostr/pull/1317">PR #1317&lt;/a>, &lt;a href="https://github.com/rust-nostr/nostr/pull/1318">PR #1318&lt;/a>)도 열려 있습니다.&lt;/p>
&lt;h3 id="nostr-tools-adds-bunker-relay-control-and-fixes-nip-47-multi-relay-parsing">nostr-tools adds bunker relay control and fixes NIP-47 multi-relay parsing&lt;/h3>
&lt;p>&lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a>가 수동 relay 관리를 위한 &lt;code>skipSwitchRelays&lt;/code>를 BunkerSignerParams에 추가하는 &lt;a href="https://github.com/nbd-wtf/nostr-tools/pull/530">PR #530&lt;/a>, 그리고 사양이 허용하는 다중 relay를 지원하도록 &lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47&lt;/a> (Nostr Wallet Connect) 연결 문자열 파싱을 수정하는 &lt;a href="https://github.com/nbd-wtf/nostr-tools/pull/529">PR #529&lt;/a>를 병합했습니다.&lt;/p>
&lt;h3 id="nostrability-integrates-sherlock-audit-data-and-publishes-schemata-overview">Nostrability integrates Sherlock audit data and publishes Schemata overview&lt;/h3>
&lt;p>Nostr 클라이언트 상호운용성 추적기 &lt;a href="https://github.com/nostrability/nostrability">Nostrability&lt;/a>가 14개의 PR을 병합했습니다. &lt;a href="https://github.com/nostrability/nostrability/pull/306">PR #306&lt;/a>은 Sherlock 스캔 통계를 대시보드에 통합합니다. Sherlock은 Nostrability의 자동 감사 도구로, Nostr 클라이언트에 연결하고, 이들이 게시하는 이벤트를 수집하며, 각 이벤트를 Schemata JSON Schema 정의에 대조해 사양 위반을 탐지합니다. 이제 대시보드는 클라이언트별 schema fail rate(&lt;a href="https://github.com/nostrability/nostrability/pull/315">PR #315&lt;/a>)를 보여주어, 개발자가 자신의 클라이언트가 어떤 이벤트 kind를 잘못 생성하는지 볼 수 있습니다. &lt;a href="https://github.com/nostrability/nostrability/pull/323">PR #323&lt;/a>은 릴리스 공지가 이전 CI 단계에 의해 취소되지 않는 별도 작업으로 실행되도록 Nostr publish 워크플로를 전면 개편합니다.&lt;/p>
&lt;p>elsat는 또한 3월 30일 &lt;a href="https://njump.me/naddr1qvzqqqr4gupzq96n3hp2vfmf6z2y8uvvxl97xk86kkalnqghx4p25lzl79c76a7yqy2hwumn8ghj7un9d3shjtnyv9kh2uewd9hj7qgwwaehxw309ahx7uewd3hkctcqz4fnx4rkw3x57nrcwdn8zt22xd982jehfptsgqtrww">Schemata for nostr devs&lt;/a>를 게시해, schemata, schemata-codegen, Sherlock이 어떻게 맞물리는지 설명하고 현재 커버리지 수치 65개 NIP에 걸친 179개 이벤트 kind 스키마, 154개 태그 스키마, 13개 프로토콜 메시지, 310개 샘플 이벤트를 제시했습니다.&lt;/p>
&lt;h3 id="nalgorithm-adds-digest-generation-and-local-score-caching">Nalgorithm adds digest generation and local score caching&lt;/h3>
&lt;p>새로운 관련도 기반 Nostr 피드 프로젝트 &lt;a href="https://github.com/jooray/nalgorithm">Nalgorithm&lt;/a>이 이번 주 공개 개발을 시작했습니다. &lt;a href="https://github.com/jooray/nalgorithm/commit/cf6c501e754ef95a1b4fecc1a76288471a101f43">커밋 cf6c501&lt;/a>은 팔로우한 계정의 게시물을 가져와 사용자 정의 선호 프롬프트로 점수를 매기는 초기 웹 앱을 마련합니다. &lt;a href="https://github.com/jooray/nalgorithm/commit/8e931b6ae85d470e73603752134ff49b7ba4bb86">커밋 8e931b6&lt;/a>은 상위 랭크 게시물을 spoken-word 요약으로 바꾸는 CLI digest 도구를 추가하고, &lt;a href="https://github.com/jooray/nalgorithm/commit/4cb9c635489a9a3429e8d71f3861dc2a11624153">커밋 4cb9c63&lt;/a>은 파일 기반 score caching과 최근 좋아요를 바탕으로 한 점진적 learned-prompt evolution을 추가합니다. &lt;a href="https://github.com/jooray/nalgorithm/commit/c2edfb8b89fadbe0028c3f5729bda7e23b2e3c03">커밋 c2edfb8&lt;/a>은 또한 실패한 배치의 fallback score를 캐시하지 않도록 바꿔, 일시적 점수 실패가 게시물 순위를 영구히 평탄화하지 않게 합니다.&lt;/p>
&lt;h3 id="tenex-adds-rag-vector-store-and-targeted-mcp-startup">TENEX adds RAG vector store and targeted MCP startup&lt;/h3>
&lt;p>Telegram을 통해 AI 에이전트를 Nostr 채널에 연결하는 Nostr 네이티브 에이전트 프레임워크 &lt;a href="https://github.com/tenex-chat/tenex">TENEX&lt;/a>가 이번 주 7개의 PR을 병합했습니다. &lt;a href="https://github.com/tenex-chat/tenex/pull/101">PR #101&lt;/a>은 SQLite-vec, LanceDB, Qdrant 백엔드를 갖춘 플러그형 벡터 저장소 추상화를 추가해, 에이전트에 하나의 벡터 데이터베이스에 묶이지 않는 retrieval-augmented generation을 제공합니다. &lt;a href="https://github.com/tenex-chat/tenex/pull/102">PR #102&lt;/a>는 MCP 시작을 표적화합니다. 첫 실행 시 모든 서버를 미리 띄우는 대신, 에이전트가 실제로 사용하는 도구를 가진 MCP 서버만 시작합니다. &lt;a href="https://github.com/tenex-chat/tenex/pull/100">PR #100&lt;/a>은 Telegram 채널 바인딩이 있는 에이전트가 수신 메시지에만 응답하지 않고 능동적으로 메시지를 밀어 넣을 수 있도록 &lt;code>send_message&lt;/code> 도구를 추가합니다. &lt;a href="https://github.com/tenex-chat/tenex/pull/106">PR #106&lt;/a>은 &lt;code>.git/HEAD&lt;/code>를 직접 읽어 &lt;code>git branch&lt;/code>를 실행하지 않음으로써 9GB Bun/JSC 메모리 사전 할당을 유발하던 서브프로세스 spawn을 피합니다.&lt;/p>
&lt;h3 id="dart-ndk-moves-amber-signer-and-adds-alby-go-1-click">Dart NDK moves Amber signer and adds Alby Go 1-click&lt;/h3>
&lt;p>Flutter용 Nostr 개발 키트 &lt;a href="https://github.com/relaystr/ndk">Dart NDK&lt;/a>가 11개의 PR을 병합했습니다. &lt;a href="https://github.com/relaystr/ndk/pull/525">PR #525&lt;/a>는 Amber signer 지원을 ndk_flutter 패키지로 이동하고, &lt;a href="https://github.com/relaystr/ndk/pull/552">PR #552&lt;/a>는 샘플 앱에 Alby Go 원클릭 지갑 연결을 추가합니다. &lt;a href="https://github.com/relaystr/ndk/pull/502">PR #502&lt;/a>는 CLI용 install.sh 스크립트를 추가하고, &lt;a href="https://github.com/relaystr/ndk/pull/523">PR #523&lt;/a>은 Rust verifier 의존성을 네이티브 asset 처리로 대체하며 제거합니다.&lt;/p>
&lt;h2 id="protocol-and-spec-work">Protocol and Spec Work&lt;/h2>
&lt;h3 id="marmot-moves-keypackages-to-addressable-events-and-tightens-push-notifications">Marmot moves KeyPackages to addressable events and tightens push notifications&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/marmot">Marmot 사양&lt;/a>은 키 재료와 그룹 멤버십 처리 방식을 바꾸는 네 개의 PR을 병합했습니다. &lt;a href="https://github.com/marmot-protocol/marmot/pull/54">PR #54&lt;/a>는 KeyPackage 이벤트를 일반 &lt;code>kind:443&lt;/code>에서 &lt;code>d&lt;/code> 태그를 가진 주소 지정 가능 &lt;code>kind:30443&lt;/code>으로 마이그레이션하여, 키 회전 중 &lt;a href="https://nostrcompass.org/ko/topics/nip-09/">NIP-09&lt;/a> 이벤트 삭제가 필요하지 않게 합니다. 주소 지정 가능 이벤트는 제자리에서 덮어쓰므로 회전이 자기완결적이 됩니다. &lt;a href="https://github.com/marmot-protocol/marmot/pull/57">PR #57&lt;/a>은 비관리자 사용자도 SelfRemove 제안(자발적 그룹 탈퇴)을 커밋할 수 있게 하고, &lt;a href="https://github.com/marmot-protocol/marmot/pull/62">PR #62&lt;/a>는 관리자가 SelfRemove를 사용하기 전에 관리자 지위를 내려놓도록 요구해, 관리자 권한을 가진 채 사라지는 것을 막습니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/marmot-protocol/marmot/pull/61">PR #61&lt;/a>은 &lt;a href="https://nostrcompass.org/ko/topics/mip-05/">MIP-05&lt;/a> 푸시 알림 형식을 더 엄격하게 하여, 단일 blob base64 인코딩, 버전 관리, 토큰 wire 형식, x-only key 사용을 명시적으로 만듭니다. 결과적으로 사양, 클라이언트 라이브러리, 앱 백엔드 전반에서 token blob과 x-only key에 대해 하나의 정의된 wire 표현이 생깁니다. 이러한 사양 변경의 구현은 이번 주 White Noise 스택에 반영되었고, 위의 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/#white-noise-fixes-relay-churn-and-expands-client-controls">White Noise v2026.3.23 섹션&lt;/a>에서 다뤘습니다.&lt;/p>
&lt;h3 id="nip-updates">NIP Updates&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 저장소&lt;/a>의 최근 변경 사항:&lt;/p>
&lt;p>&lt;strong>병합됨:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/5A.md">NIP-5A&lt;/a>: Static Websites&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/1538">PR #1538&lt;/a>): Blossom 스토리지를 사용해 Nostr 키페어 아래 정적 웹사이트를 호스팅하기 위한 kind &lt;code>15128&lt;/code>(루트 사이트) 및 kind &lt;code>35128&lt;/code>(이름 있는 사이트) 매니페스트 이벤트를 정의합니다. 자세한 내용은 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/#nip-deep-dive-nip-5a-static-websites">아래 심층 분석&lt;/a>을 참조하십시오.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-30/">NIP-30&lt;/a> (Custom Emoji): shortcode에 하이픈 허용&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2297">PR #2297&lt;/a>): shortcode 설명을 하이픈을 포함하도록 업데이트합니다. 하이픈이 들어간 shortcode는 NIP 도입 이후 실제로 사용되어 왔기 때문에, 이제 사양이 현재 사용법을 문서화합니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>오픈 PR 및 논의:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>NIP-C1: Agent TUI Messages&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2295">PR #2295&lt;/a>): 에이전트가 암호화된 DM을 통해 상호작용 UI 요소를 전송하기 위한 구조화된 메시지 형식을 제안합니다. typed &lt;code>text&lt;/code>, &lt;code>buttons&lt;/code>, &lt;code>card&lt;/code>, &lt;code>table&lt;/code> payload가 포함됩니다. 초안은 모든 것을 기존 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> 및 &lt;a href="https://nostrcompass.org/ko/topics/nip-04/">NIP-04&lt;/a> 다이렉트 메시지 콘텐츠 안의 JSON으로 유지합니다. 새 이벤트 kind는 정의하지 않으며, 버튼 응답에는 단순한 callback string 형식을 사용합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-95: Hybrid Peer-to-Peer Relay Protocol&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2293">PR #2293&lt;/a>): relay가 권위적 위치를 유지하면서도 WebRTC를 통해 최근 이벤트의 P2P 배포를 조정할 수 있는 하이브리드 relay 모델을 제안합니다. 초안은 &lt;code>PEER_REGISTER&lt;/code>, &lt;code>PEER_REQUEST&lt;/code>, &lt;code>PEER_OFFER&lt;/code> 같은 relay 메시지를 도입하며, 안정적인 클라이언트가 Super Peer로 작동하고 relay가 시드 노드와 대체 경로 역할을 합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-B9: Zap Poll Events&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2284">PR #2284&lt;/a>): &lt;a href="https://github.com/nostr-protocol/nips/blob/master/88.md">NIP-88&lt;/a> (Polls)이 무료 투표를 다루고 있는 현재, 오래된 NIP-69 zap poll 아이디어를 다시 꺼냅니다. 초안은 kind &lt;code>6969&lt;/code> poll 정의와 kind &lt;code>9734&lt;/code> zap을 투표로 사용하여, 경제적 Sybil 저항을 가진 유료 투표 시스템을 만듭니다. 이는 무료 one-key-one-vote 투표를 보완합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-AD: Super Zap&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2289">PR #2289&lt;/a>): relay의 pubkey나 클라이언트의 pubkey로 전송된 zap이 특수 프로모션 노트처럼 표시되는 규약을 제안하며, 사실상 zap 영수증을 광고 표면으로 바꿉니다. relay 운영자와 클라이언트는 &lt;code>lud16&lt;/code>이 포함된 프로필을 게시하고, 해당 영수증을 가져오며, zap 설명 안의 콘텐츠를 추출하고, 선택적으로 최소 sats 임계값을 설정해 스팸을 억제할 수 있습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-XX: Agent Reputation Attestations&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2285">PR #2285&lt;/a>): Nostr 에이전트에 대한 구조화된 평판 attestations용 매개변수화된 대체 가능 이벤트로 kind &lt;code>30085&lt;/code>를 제안합니다. 초안은 평판을 관찰자 의존적으로 만들어 단일 글로벌 점수를 피하고, 오래된 attestation이 희미해지도록 시간 감쇠를 추가하며, 증거 요구가 있는 부정 평가를 지원하고, 더 나은 Sybil 저항을 위해 단순 가중 점수와 그래프 다양성 점수를 모두 개괄합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-XX: Paid API Service Announcements&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2291">PR #2291&lt;/a>): 유료 HTTP API 광고를 위한 kind &lt;code>31402&lt;/code> 주소 지정 가능 이벤트를 제안하며, Nostr는 발견을, HTTP 402는 결제를 처리합니다. 초안은 JSON 콘텐츠 파싱 없이 relay가 결제 방식, 가격, 기능으로 필터링할 수 있도록 태그 우선 설계를 취하고, 클라이언트나 에이전트가 호출을 자동 생성할 수 있게 선택적 요청/응답 스키마도 허용합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-XX: SplitSig를 통한 LNURL-auth 기반 키 파생&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2294">PR #2294&lt;/a>): LNURL-auth ECDSA 서명과 클라이언트 측 무작위 nonce를 결합해 Nostr 키페어를 파생하는 방식을 제안합니다. 파생 공식은 &lt;code>nsec = SHA256(ecdsa_signature || nonce)&lt;/code>입니다. 서버는 LNURL-auth 핸드셰이크에 내재된 ECDSA 서명을 보지만 nonce는 보지 못하고, 브라우저는 nonce를 생성하지만 서명을 제어하지 못합니다. 어느 한 조각만으로는 nsec를 파생할 수 없습니다. 의도된 결과는 동일한 Lightning 지갑이 여러 장치에서 동일한 Nostr 키를 만들어내고, 지갑이 복구 앵커가 되며, 어떤 서버도 개인 키를 재구성할 수 없게 하는 것입니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a>: rejected 필드 문서화&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2290">PR #2290&lt;/a>): intent 기반 signer 응답의 &lt;code>rejected&lt;/code> 필드를 문서화하여, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/#amethyst-ships-pinned-notes-relay-management-and-request-to-vanish">Amethyst의 v1.07.x 수정&lt;/a>이 우회해야 했던 동작을 공식화합니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-deep-dive-nip-5a-static-websites">NIP Deep Dive: NIP-5A (Static Websites)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/5A.md">NIP-5A&lt;/a>는 두 개의 이벤트 kind와 기존 blob storage 인프라를 사용해 Nostr 키페어 아래 정적 웹사이트를 호스팅하는 방법을 정의합니다. 이를 통해 서명된 이벤트가 제공 가능한 웹 페이지로 바뀝니다. &lt;a href="https://github.com/nostr-protocol/nips/blob/master/5A.md">사양&lt;/a>은 &lt;a href="https://github.com/nostr-protocol/nips/pull/1538">PR #1538&lt;/a>을 통해 3월 25일 병합되었습니다.&lt;/p>
&lt;p>모델은 루트 사이트에 kind &lt;code>15128&lt;/code>을 사용하며, pubkey당 하나입니다. 이름 있는 사이트는 &lt;code>d&lt;/code> 태그로 식별되는 kind &lt;code>35128&lt;/code>을 사용합니다. 각 매니페스트는 절대 URL 경로를 SHA256 해시에 매핑합니다. 다음은 루트 사이트 매니페스트 예시입니다.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;5324d695ed7abf7cdd2a48deb881c93b7f4e43de702989bbfb55a1b97b35a3de&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;266815e0c9210dfa324c6cba3573b14bee49da4209a9456f9484e5106cd408a5&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1743465600&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">15128&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;path&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;/index.html&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;186ea5fd14e88fd1ac49351759e7ab906fa94892002b60bf7f5a428f28ca1c99&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;path&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;/about.html&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;path&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;/favicon.ico&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;fedcba0987654321fedcba0987654321fedcba0987654321fedcba0987654321&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;server&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://blossom.primal.net&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;title&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;My Nostr Site&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;description&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;A static website hosted on Nostr&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;source&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://github.com/lez/nsite&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;f4e4a9e785f70e9fcaa855d769438fea10781e84cd889e3fcb823774f83d094cf2c05d5a3ac4aebc1227a4ebc3d56867286c15a6df92d55045658bb428fd5fb5&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>제공 흐름은 세 단계로 동작합니다. 호스트 서버가 HTTP 요청을 수신하고, 서브도메인에서 저자의 pubkey를 추출하며(루트 사이트는 npub, 이름 있는 사이트는 원시 pubkey의 base36 인코딩), &lt;a href="https://nostrcompass.org/ko/topics/nip-65/">NIP-65&lt;/a>를 통해 저자의 relay 목록을 가져오고, 사이트 매니페스트를 쿼리합니다. 매니페스트가 발견되면 서버는 요청된 경로를 콘텐츠 해시로 해석하고, &lt;code>server&lt;/code> 태그에 나열된 Blossom 서버들에서 일치하는 blob을 다운로드해 반환합니다.&lt;/p>
&lt;p>DNS 서브도메인 형식은 엄격하게 지정됩니다. 루트 사이트는 표준 npub을 서브도메인으로 사용합니다. 이름 있는 사이트는 원시 pubkey의 50자 base36 인코딩 뒤에 &lt;code>d&lt;/code> 태그 값을 이어 붙여 하나의 DNS 레이블을 만듭니다. DNS 레이블은 63자로 제한되고 base36 인코딩이 항상 50자를 차지하므로, &lt;code>d&lt;/code> 태그는 13자로 제한됩니다. 또한 사양은 &lt;code>d&lt;/code> 태그가 &lt;code>^[a-z0-9-]{1,13}$&lt;/code>와 일치하고 하이픈으로 끝나지 않도록 요구해, DNS 해석 모호성을 방지합니다.&lt;/p>
&lt;p>콘텐츠 해시를 사용하면 동일한 사이트를 서로 다른 호스트 서버가 제공할 수 있으며, 서버를 신뢰하지 않아도 파일 무결성을 검증할 수 있습니다. 호스트 서버는 파일을 직접 저장할 필요가 없습니다. 매니페스트의 해시를 사용해 Blossom에서 필요할 때마다 가져오면 됩니다. 즉, 저자는 무엇이 제공되는지를 통제하고, Blossom 서버는 원시 파일을 저장하며, 호스트 서버는 그 둘을 연결하는 역할만 합니다. 이 세 구성 요소는 서로 독립적으로 교체될 수 있습니다.&lt;/p>
&lt;p>기존 구현으로는 매니페스트를 해석하고 파일을 제공하는 호스트 서버 &lt;a href="https://github.com/lez/nsite">nsite&lt;/a>, 그리고 매니페스트를 만들고 게시하는 UI &lt;a href="https://github.com/hzrd149/nsite-manager">nsite-manager&lt;/a>가 있습니다. 이 사양은 사이트 소스 코드 저장소를 링크하기 위한 &lt;code>source&lt;/code> 태그도 추가했으며, &lt;a href="https://github.com/nostr-protocol/nips/pull/2286">PR #2286&lt;/a>에서 별도로 병합된 README 업데이트는 kind &lt;code>15128&lt;/code>과 &lt;code>35128&lt;/code>을 NIP kind 색인에 등록했습니다.&lt;/p>
&lt;h2 id="nip-deep-dive-nip-62-request-to-vanish">NIP Deep Dive: NIP-62 (Request to Vanish)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/62.md">NIP-62&lt;/a>는 요청하는 pubkey의 모든 이벤트를 삭제해 달라는 요청으로 kind &lt;code>62&lt;/code>를 정의합니다. &lt;a href="https://github.com/nostr-protocol/nips/blob/master/62.md">사양&lt;/a>은 법적 동기가 있습니다. 잊힐 권리 법이 있는 관할권에서, 표준화되고 서명된 삭제 요청은 relay 운영자에게 행동해야 할 명확한 신호를 제공합니다.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a7b8c9d0e1f23456789012345678901234567890abcdef1234567890abcdef12&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;f1e2d3c4b5a697887766554433221100ffeeddccbbaa99887766554433221100&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1743465600&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">62&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;relay&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Requesting deletion of all events from this relay.&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;11aa22bb33cc44dd55ee66ff77889900aabbccddeeff0011223344556677889911aa22bb33cc44dd55ee66ff77889900aabbccddeeff00112233445566778899&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>이 사양은 대상 지정 vanish 요청과 전역 vanish 요청을 구분합니다. 대상 지정 요청은 어떤 relay가 동작해야 하는지 식별하는 특정 &lt;code>relay&lt;/code> 태그를 포함합니다. 전역 요청은 relay 태그 값으로 리터럴 문자열 &lt;code>ALL_RELAYS&lt;/code>를 사용하여, 이 이벤트를 보는 모든 relay가 해당 pubkey의 모든 이벤트를 삭제하도록 요청합니다. 이를 준수하는 relay는 삭제된 이벤트가 다시 relay 안으로 재브로드캐스트되지 않도록 보장해야 하므로, 삭제는 지속성을 가집니다.&lt;/p>
&lt;p>NIP-62는 범위와 의도 모두에서 &lt;a href="https://nostrcompass.org/ko/topics/nip-09/">NIP-09&lt;/a> (Event Deletion)을 넘어섭니다. NIP-09는 개별 이벤트를 삭제할 수 있게 하고 relay는 따를 수도 있습니다. NIP-62는 모든 것의 삭제를 요청하며, 사양은 URL이 태그된 경우 relay가 반드시 따라야 한다고 말합니다. 또한 relay가 요청하는 pubkey를 p-tag한 &lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59&lt;/a> (Gift Wrap) 이벤트도 삭제하도록 요청하므로, 들어오는 DM도 사용자의 자체 이벤트와 함께 정리됩니다. NIP-62 vanish 요청을 대상으로 NIP-09 삭제를 게시해도 아무 효과가 없습니다. 한 번 vanish하면, vanish 요청을 삭제해도 vanish를 되돌릴 수 없습니다.&lt;/p>
&lt;p>이번 주 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-04-01-newsletter/#amethyst-ships-pinned-notes-relay-management-and-request-to-vanish">Amethyst v1.07.0&lt;/a>은 클라이언트 측 NIP-62 지원을 출시해 사용자가 앱에서 vanish 요청을 시작할 수 있게 했습니다. relay 측에서는 &lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a>가 메모리, LMDB, SQLite, 데이터베이스 테스트 백엔드 전반에 NIP-62 지원을 추가하는 네 개의 오픈 PR(&lt;a href="https://github.com/rust-nostr/nostr/pull/1315">PR #1315&lt;/a>, &lt;a href="https://github.com/rust-nostr/nostr/pull/1316">PR #1316&lt;/a>, &lt;a href="https://github.com/rust-nostr/nostr/pull/1317">PR #1317&lt;/a>, &lt;a href="https://github.com/rust-nostr/nostr/pull/1318">PR #1318&lt;/a>)을 보유하고 있습니다. 이로써 클라이언트 지원과 relay 지원 작업이 같은 주에 맞물렸습니다.&lt;/p>
&lt;p>프로토콜 설계는 하나의 실용적 긴장을 드러냅니다. Nostr의 가치 제안에는 censorship resistance가 포함되며, 이는 relay가 게시를 막아서는 안 된다는 뜻입니다. 그런데 NIP-62는 relay가 특정 pubkey의 재게시를 반드시 막아야 하는 경우를 도입합니다. 이 두 속성은 요청이 자기 지시적이라는 점에서 공존합니다. 당신이 요청하는 것은 타인의 이벤트 삭제가 아니라 자신의 이벤트 삭제입니다. censorship resistance 속성은, 명시적으로 빠지겠다고 선택한 당사자 자신을 제외하고는 그대로 유지됩니다.&lt;/p>
&lt;hr>
&lt;p>이번 주는 여기까지입니다. 무언가를 만들고 있거나 공유할 뉴스가 있다면 &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">&lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages) DM으로 연락하시거나&lt;/a> Nostr에서 찾아주세요.&lt;/p></content:encoded></item><item><title>Nostr Compass #15</title><link>https://nostrcompass.org/ko/newsletters/2026-03-25-newsletter/</link><pubDate>Wed, 25 Mar 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2026-03-25-newsletter/</guid><description>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a>가 3.0 지갑 릴리스에 이어 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-25-newsletter/#primal-adds-follow-packs-zap-enrichment-and-deep-links">Follow Packs, zap 보강, &lt;code>primalconnect://&lt;/code> 딥 링크&lt;/a>를 추가했습니다. &lt;a href="https://github.com/BigBrotr/bigbrotr">BigBrotr&lt;/a>는 1,085개의 relay에서 4,100만 개 이벤트를 스캔해 16,599개의 유효한 개인 키를 찾은 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-25-newsletter/#bigbrotr-maps-exposed-private-keys-across-the-relay-network">nsec 유출 분석&lt;/a>을 발표했고, &lt;a href="https://npub.world">npub.world&lt;/a>는 같은 주에 프로필 페이지에 유출 경고를 통합했습니다. Martti Malmi는 Nostr relay를 통해 신호를 주고받고 WireGuard 터널을 생성하는 Tailscale 대안 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-25-newsletter/#nostr-vpn-launches-as-a-tailscale-alternative">nostr-vpn&lt;/a>을 출시했고, 7일 동안 11개의 릴리스를 배포했습니다. &lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a> 팀은 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-25-newsletter/#open-source-doom-runs-peer-to-peer-over-nostr">Nostr 위에서 작동하는 P2P DOOM&lt;/a>을 오픈소스로 공개했고, &lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-25-newsletter/#fips-v020-ships-tor-transport-reproducible-builds-and-sidecar-examples">v0.2.0&lt;/a>을 출시했으며, &lt;a href="https://github.com/nostrability/schemata">Nostrability Schemata&lt;/a>는 한 주 만에 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-25-newsletter/#nostrability-schemata-goes-multilingual">6개 언어&lt;/a>로 확장되었습니다.&lt;/p></description><content:encoded>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a>가 3.0 지갑 릴리스에 이어 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-25-newsletter/#primal-adds-follow-packs-zap-enrichment-and-deep-links">Follow Packs, zap 보강, &lt;code>primalconnect://&lt;/code> 딥 링크&lt;/a>를 추가했습니다. &lt;a href="https://github.com/BigBrotr/bigbrotr">BigBrotr&lt;/a>는 1,085개의 relay에서 4,100만 개 이벤트를 스캔해 16,599개의 유효한 개인 키를 찾은 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-25-newsletter/#bigbrotr-maps-exposed-private-keys-across-the-relay-network">nsec 유출 분석&lt;/a>을 발표했고, &lt;a href="https://npub.world">npub.world&lt;/a>는 같은 주에 프로필 페이지에 유출 경고를 통합했습니다. Martti Malmi는 Nostr relay를 통해 신호를 주고받고 WireGuard 터널을 생성하는 Tailscale 대안 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-25-newsletter/#nostr-vpn-launches-as-a-tailscale-alternative">nostr-vpn&lt;/a>을 출시했고, 7일 동안 11개의 릴리스를 배포했습니다. &lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a> 팀은 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-25-newsletter/#open-source-doom-runs-peer-to-peer-over-nostr">Nostr 위에서 작동하는 P2P DOOM&lt;/a>을 오픈소스로 공개했고, &lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-25-newsletter/#fips-v020-ships-tor-transport-reproducible-builds-and-sidecar-examples">v0.2.0&lt;/a>을 출시했으며, &lt;a href="https://github.com/nostrability/schemata">Nostrability Schemata&lt;/a>는 한 주 만에 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-25-newsletter/#nostrability-schemata-goes-multilingual">6개 언어&lt;/a>로 확장되었습니다.&lt;/p>
&lt;h2 id="뉴스">뉴스&lt;/h2>
&lt;h3 id="primal-adds-follow-packs-zap-enrichment-and-deep-links">Primal adds Follow Packs, zap enrichment, and deep links&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-18-newsletter/">지난주 3.0.7 보도에 이어&lt;/a>, &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a>는 이번 주 온보딩, 작성기 UX, 지갑 컨텍스트에 관한 후속 작업을 진행했습니다. 새롭게 설계된 온보딩은 Follow Packs(&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/949">PR #949&lt;/a>)를 도입했고, 노트 작성기에 네이티브 GIF 버튼이 추가되었으며, zap 보강 서비스(&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/979">PR #979&lt;/a>)는 지갑 거래에 zap 컨텍스트를 주석으로 붙이고, &lt;code>primalconnect://&lt;/code> 딥 링크 프로토콜(&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/969">PR #969&lt;/a>)은 앱 간 내비게이션을 가능하게 합니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-ios-app">Primal iOS&lt;/a>도 같은 작업을 TestFlight를 통해 병렬로 배포하고 있으며, 지갑 전환(&lt;a href="https://github.com/PrimalHQ/primal-ios-app/pull/191">PR #191&lt;/a>), 투표 구현, 온보딩 리팩터링이 같은 시기에 반영되고 있습니다.&lt;/p>
&lt;h3 id="bigbrotr-maps-exposed-private-keys-across-the-relay-network">BigBrotr maps exposed private keys across the relay network&lt;/h3>
&lt;p>Nostr relay 분석 플랫폼 &lt;a href="https://github.com/BigBrotr/bigbrotr">BigBrotr&lt;/a>가 relay 네트워크의 노출된 개인 키에 대한 &lt;a href="https://bigbrotr.com/blog/exposed-nsec-analysis/">상세 분석&lt;/a>을 발표했습니다. 이 연구는 이벤트 콘텐츠에 포함된 유효한 nsec 문자열을 찾기 위해 1,085개 relay에서 4,100만 개 이벤트를 스캔했고, 16,599개의 유효한 개인 키를 발견했습니다. 이 수치는 경고처럼 보이지만, 일치 항목의 92%를 차지하는 &amp;ldquo;Mr.nsec&amp;quot;라는 봇을 제외하면 해석이 달라집니다. 봇 트래픽을 제거하면 2만 1천 명 이상의 총 팔로워를 가진 실제 계정은 38개뿐이었고, 어느 계정도 자신의 키가 공개되어 있다는 인식의 징후를 보이지 않았습니다.&lt;/p>
&lt;p>팀은 nsec-leak-checker를 &lt;a href="https://nostrcompass.org/ko/topics/nip-90/">NIP-90&lt;/a> (Data Vending Machine) 서비스로 구축하여, 사용자가 자신의 개인 키를 검사기에 노출하지 않고도 스캔된 데이터셋 어디에 나타나는지 확인할 수 있게 했습니다. &lt;a href="https://npub.world">npub.world&lt;/a>는 같은 주에 이 유출 데이터를 통합하여, 노출된 키가 탐지된 프로필 페이지에 경고 배너를 표시했습니다. 이 조합은 네트워크에 DVM과 에이전트를 위한 프로그래밍 인터페이스와 일반 사용자를 위한 사람이 읽을 수 있는 경고를 동시에 제공합니다. 이 기반 데이터셋은 또한 대체 가능 및 주소 지정 가능 이벤트 materialized view와 동기화 유휴 타임아웃 수정을 추가한 &lt;a href="https://github.com/BigBrotr/bigbrotr/releases/tag/v6.4.0">BigBrotr v6.4.0&lt;/a>에도 반영됩니다.&lt;/p>
&lt;h3 id="nostr-vpn-launches-as-a-tailscale-alternative">Nostr VPN launches as a Tailscale alternative&lt;/h3>
&lt;p>Iris의 제작자 Martti Malmi(mmalmi)는 Nostr relay를 신호용으로 사용하고 WireGuard(boringtun 경유)로 암호화 터널을 만드는 P2P VPN인 &lt;a href="https://github.com/mmalmi/nostr-vpn">nostr-vpn&lt;/a>을 만들고 출시했습니다. 동기는 직접적이었습니다. &amp;ldquo;Tailscale이 제3자 계정을 요구하는 게 짜증나서 Nostr VPN을 만들었다&amp;quot;는 설명 그대로입니다. 이 도구는 Nostr 키페어를 신원으로 사용하여 장치 간 메시 네트워크를 구성하며, 중앙 조정 서버가 없습니다.&lt;/p>
&lt;p>프로젝트는 &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.2">v0.2.2&lt;/a>부터 &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.13">v0.2.13&lt;/a>까지 7일 동안 11개의 릴리스를 배포했습니다. 이 질주는 Windows 지원, 로컬 네트워크 탐지를 위한 LAN 페어링, 모바일 장치를 위한 Android 사이드카를 추가했습니다. 아키텍처는 단순합니다. 두 장치가 Nostr relay를 통해 연결 메타데이터를 교환한 뒤 직접적인 WireGuard 터널을 수립합니다. Nostr는 탐색과 NAT 우회 신호를 담당하고, WireGuard는 실제 트래픽을 담당합니다. 신원은 Nostr 키페어입니다.&lt;/p>
&lt;p>Malmi는 또한 Signal 스타일 보안 메시지 채널 라이브러리인 &lt;a href="https://github.com/mmalmi/nostr-double-ratchet">nostr-double-ratchet&lt;/a> 작업도 계속 밀어붙였고, 같은 주에 &lt;a href="https://github.com/mmalmi/nostr-double-ratchet/releases/tag/v0.0.86">v0.0.86&lt;/a>부터 &lt;a href="https://github.com/mmalmi/nostr-double-ratchet/releases/tag/v0.0.93">v0.0.93&lt;/a>까지 6개의 릴리스를 배포했습니다.&lt;/p>
&lt;h3 id="open-source-doom-runs-peer-to-peer-over-nostr">Open-source DOOM runs peer-to-peer over Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a> 팀은 피어 탐색에 Nostr, 종단간 암호화에 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a>, 그리고 전송에 n0의 QUIC 네트워킹 라이브러리 &lt;a href="https://github.com/n0-computer/iroh">Iroh&lt;/a>를 사용하는 P2P 멀티플레이어 DOOM 구현을 오픈소스로 공개했습니다. 이 게임은 4.2 MB WebXDC 파일로 배포되며, 채팅 메시지 안에서 전송할 수 있고, 경기를 호스팅하거나 조정할 서버가 필요하지 않습니다.&lt;/p>
&lt;p>기술적 접근 방식은 원래 1993년식 lockstep 넷코드를 실시간 하이브리드 동기화 모델로 대체합니다. 플레이어는 Nostr relay 쿼리를 통해 서로를 발견하고, Marmot 암호화 채널을 통해 세션을 협상한 다음, 저지연 게임 트래픽을 위해 Iroh의 QUIC gossip 계층으로 넘깁니다. 이 스택은 탐색에 Nostr, 암호화에 Marmot, 전송에 Iroh를 사용합니다.&lt;/p>
&lt;p>Vector는 이번 주 보안 강화 작업도 배포했습니다. 릴리스에는 안티 디버그 보호와 민감한 키 재료를 위한 zeroize가 포함된 메모리 강화 키 볼트, 전체 DM 및 그룹 메시지 필터링이 포함된 사용자 차단, Mini Apps용 WebXDC 실시간 채널 수정이 포함됩니다.&lt;/p>
&lt;h3 id="fips-v020-ships-tor-transport-reproducible-builds-and-sidecar-examples">FIPS v0.2.0 ships Tor transport, reproducible builds, and sidecar examples&lt;/h3>
&lt;p>자유 인터넷 피어링 시스템이자 Nostr 인접 메시 네트워킹 프로젝트인 &lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a>가 &lt;a href="https://github.com/jmcorgan/fips/releases/tag/v0.2.0-rel">v0.2.0&lt;/a>을 출시했습니다. 이 릴리스는 익명화된 메시 링크를 위한 Tor 전송 지원, 재현 가능한 빌드, Nostr relay를 통해 연결하는 사이드카 예제, OpenWrt 패키지 워크플로의 Nostr 릴리스 게시를 추가합니다. 또한 drain-window 프레임으로 인해 발생하던 rekey 이후 지터 스파이크를 수정합니다. 와이어 형식은 v0.1.0에서 변경되었으므로, 기존 v0.1.0 노드는 업그레이드 없이는 v0.2.0과 상호운용할 수 없습니다.&lt;/p>
&lt;h3 id="nostrability-schemata-goes-multilingual">Nostrability Schemata goes multilingual&lt;/h3>
&lt;p>Nostr 이벤트 kind를 검증하기 위한 JSON Schema 정의를 유지하는 &lt;a href="https://github.com/nostrability/schemata">Nostrability Schemata&lt;/a> 프로젝트가 한 주 만에 JavaScript 전용에서 6개 언어로 확장되었습니다. Rust, Go, Dart, Swift, Python용 새 패키지가 각각 데이터 패키지와 검증기를 함께 제공합니다. &lt;a href="https://github.com/nostrability/schemata/releases/tag/v0.2.6">v0.2.6&lt;/a>은 17개의 새로운 이벤트 kind 스키마도 추가했습니다.&lt;/p>
&lt;p>&lt;a href="https://nostrability.github.io/nostrability/">Nostrability 상호운용성 추적기&lt;/a>도 병행해서 대대적인 개편을 받았습니다. 새로운 What&amp;rsquo;s New 탭은 Atom 피드와 Nostr 이벤트를 통해 업데이트를 게시하고, 앱 카테고리 필터링을 통해 방문자가 특정 클라이언트 유형으로 좁혀 볼 수 있으며, 이제 추적기는 GitHub 저장소 메타데이터에서 프로그래밍 언어를 자동 감지합니다. Nostrability는 이제 자체 npub도 갖게 되어, 프로젝트 자체가 자신이 문서화하는 프로토콜을 통해 발견될 수 있습니다. 여러 언어를 넘나드는 라이브러리 저자에게 다중 언어 스키마 패키지는 각 프로젝트가 별도의 스키마 복사본을 유지할 필요 없이 동일한 이벤트 kind 정의를 네이티브 import로 사용할 수 있음을 의미합니다.&lt;/p>
&lt;h2 id="릴리스">릴리스&lt;/h2>
&lt;h3 id="amethyst-v1060-and-v1061">Amethyst v1.06.0 and v1.06.1&lt;/h3>
&lt;p>vitorpamplona가 유지 관리하는 Android 클라이언트 &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>가 3월 23일 &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.06.0">v1.06.0&lt;/a>과 &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.06.1">v1.06.1&lt;/a>을 출시했습니다. 핵심 기능은 &lt;a href="https://nostrcompass.org/ko/topics/nip-85/">NIP-85&lt;/a> (Trusted Assertions) 데이터를 사용한 가중 투표 방식의 투표 지원이며, 재설계된 poll 및 zap poll 카드가 포함됩니다. 새 렌더링은 일반 투표와 zap 가중 투표 모두에 더 깔끔한 시각적 배치를 제공합니다. 이어지는 v1.06.1은 투표 렌더링 경로에서 도입된 안정성 회귀를 해결하는 동시 수정 충돌 수정을 포함합니다.&lt;/p>
&lt;h3 id="amber-v500-and-v501">Amber v5.0.0 and v5.0.1&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> (Android Signer Application) 서명자 앱 &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>가 최근 4.1.x 프리릴리스 작업을 안정 버전으로 승격해 3월 18일 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v5.0.0">v5.0.0&lt;/a>을 출시했습니다. 이 안정 릴리스에는 지난주 다뤘던 &lt;a href="https://nostrcompass.org/ko/topics/nip-42/">NIP-42&lt;/a> relay 인증, 내장 Tor, 콘텐츠 타입별 권한, 암호화 PIN 저장 변경이 포함됩니다. 이어서 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v5.0.1">v5.0.1&lt;/a>은 오프라인 빌드 flavor에서 인터넷 권한을 제거하여, 해당 빌드가 Android 권한 계층에서 네트워크 요청을 할 수 없게 합니다.&lt;/p>
&lt;h3 id="mostro-v0170-and-mostro-mobile-v122">Mostro v0.17.0 and Mostro Mobile v1.2.2&lt;/h3>
&lt;p>Nostr 기반 P2P Bitcoin 거래소 &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a>가 3월 18일 &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.17.0">v0.17.0&lt;/a>을 출시했습니다. 서버 릴리스는 v0.16.x 주기의 분쟁 및 평판 작업을 이어가며, 구매자와 판매자에 대한 더 완전한 거래 평판 데이터를 Nostr 이벤트로 추가합니다. Flutter 클라이언트 &lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a>는 3월 23일 &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.2">v1.2.2&lt;/a>로 뒤따르며 최신 프로토콜 변경과 모바일 인터페이스를 맞추고 있습니다.&lt;/p>
&lt;h3 id="shosho-v0140">Shosho v0.14.0&lt;/h3>
&lt;p>Nostr 라이브 스트리밍 앱 &lt;a href="https://github.com/r0d8lsh0p/shosho-releases">Shosho&lt;/a>가 3월 19일 Shosho Shop 출시와 함께 &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.14.0">v0.14.0&lt;/a>을 배포했습니다. 이 릴리스는 프로필에 Shop 탭, Browse 내 Shop, 라이브 및 클립에 In-Live Shop 버튼을 추가합니다. 릴리스 노트에 따르면 기존 &amp;ldquo;Nostr products&amp;quot;가 자동으로 표시되고 구매자는 구매를 위해 판매자의 Plebeian Market 페이지로 이동합니다. 다만 Shosho의 릴리스 노트는 목록 이벤트 kind를 식별하지 않으므로, Shosho Shop이 &lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a>가 README에서 명시적으로 지원하는 것과 동일한 &lt;a href="https://nostrcompass.org/ko/topics/nip-99/">NIP-99&lt;/a> 분류 광고 목록을 읽는지 아직 확인할 수 없습니다.&lt;/p>
&lt;h3 id="applesauce-v520">Applesauce v5.2.0&lt;/h3>
&lt;p>hzrd149의 Nostr 애플리케이션용 헬퍼 패키지 모음 &lt;a href="https://github.com/hzrd149/applesauce">Applesauce&lt;/a>가 3월 22일 &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-core@5.2.0">v5.2.0&lt;/a>을 출시했습니다. 이 릴리스는 여섯 개 패키지에 걸쳐 있습니다. SQLite 패키지는 중복 삽입을 일으키던 이벤트 태그의 UNIQUE 제약 충돌을 수정합니다. signers 패키지는 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> 네이티브 Android signer 인터페이스를 감싸는 &lt;code>AndroidNativeSigner&lt;/code>를 추가하여, 웹뷰 기반 앱이 커스텀 브리지 코드 없이 하드웨어 기반 서명을 사용할 수 있게 합니다. relay 패키지는 relay와 pool 상태 객체에 &lt;code>challenge&lt;/code> 필드를 추가해 &lt;a href="https://nostrcompass.org/ko/topics/nip-42/">NIP-42&lt;/a> 인증 상태를 추적하므로, 앱이 relay가 인증을 요청하는 시점을 감지하고 프로그램적으로 대응할 수 있습니다. core 패키지는 이벤트 참조 중복 제거를 위한 &lt;code>isEventPointerSame&lt;/code>과 &lt;code>isAddressPointerSame&lt;/code> 메서드를 얻고, common 패키지는 사용자의 Blossom 미디어 서버를 해석하는 &lt;code>user.blossomServers$&lt;/code>를 추가합니다. Applesauce는 noStrudel, Satellite, 그 외 여러 웹 클라이언트를 구동하므로, 이 수정은 웹 클라이언트 계층 전체에 전파됩니다.&lt;/p>
&lt;h3 id="wisp-ships-16-releases-in-one-week">Wisp ships 16 releases in one week&lt;/h3>
&lt;p>Android Nostr 클라이언트 &lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a>가 이번 주 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.9.3-beta">v0.9.3-beta&lt;/a>부터 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.13.1-beta">v0.13.1-beta&lt;/a>까지 16개의 릴리스를 배포했습니다. 추가된 기능에는 다중 계정 지원, 방해를 줄이는 zen 알림 모드, 초안 및 예약 게시, 안전 콘텐츠 필터, 새 flame 아이콘이 포함됩니다.&lt;/p>
&lt;h3 id="manent-v120">Manent v1.2.0&lt;/h3>
&lt;p>비공개 암호화 노트 및 파일 저장 앱 &lt;a href="https://github.com/dtonon/manent">Manent&lt;/a>가 3월 20일 &lt;a href="https://github.com/dtonon/manent/releases/tag/v1.2.0">v1.2.0&lt;/a>을 출시했습니다. 이 릴리스는 앱에서 직접 카메라 촬영, 저장 비용을 줄이기 위한 업로드 전 이미지 크기 조정, 저장된 이미지를 검토하기 위한 pinch-to-zoom을 추가합니다. Manent는 사용자의 키페어를 사용해 노트와 파일을 Nostr relay에 암호화 저장하므로, 휴대폰이나 데스크톱 앱은 relay 데이터에서 전체 상태를 재구성할 수 있는 얇은 클라이언트가 됩니다.&lt;/p>
&lt;h3 id="divine-107">diVine 1.0.7&lt;/h3>
&lt;p>짧은 형식의 동영상 클라이언트 &lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>가 3월 21일 &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.7">1.0.7&lt;/a>을 출시하며, 멈춘 동영상을 자동 재개하는 비디오 재생 watchdog을 추가했습니다. &lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/#divine-ships-v106-with-e2e-test-infrastructure-and-nip-49-import">v1.0.6&lt;/a>의 E2E 테스트 인프라와 직접 MP4 로딩 이후, 이 릴리스는 오류를 던지지 않고 중간에 멈추는 동영상이라는 남은 재생 실패 경로를 겨냥합니다.&lt;/p>
&lt;h3 id="alby-extension-v3142">Alby Extension v3.14.2&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-07/">NIP-07&lt;/a> (Browser Extension Signer) 브라우저 확장인 &lt;a href="https://github.com/getAlby/lightning-browser-extension">Alby Extension&lt;/a>이 3월 18일 &lt;a href="https://github.com/getAlby/lightning-browser-extension/releases/tag/v3.14.2">v3.14.2&lt;/a>를 출시하며 Lightning 주소 QR 코드 표시와 Schnorr 서명을 추가했습니다. Schnorr 추가는 브라우저 확장을 Nostr가 기본적으로 사용하는 secp256k1 서명 체계와 맞춥니다.&lt;/p>
&lt;h3 id="noornote-v065-through-v0611">NoorNote v0.6.5 through v0.6.11&lt;/h3>
&lt;p>노트 작성 앱 &lt;a href="https://github.com/77elements/noornote">NoorNote&lt;/a>가 &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.6.5">v0.6.5&lt;/a>부터 &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.6.11">v0.6.11&lt;/a>까지 7개의 릴리스를 배포했습니다. 핵심 추가 사항은 Follow Packs입니다. 이는 사용자가 대량으로 탐색하고 구독할 수 있는 큐레이션된 계정 묶음으로, Twitter Lists와 유사하지만 온보딩을 위해 설계되었습니다. 사용자는 사용자 정의 제목, 설명, 커버 이미지를 갖춘 Follow Packs를 만들고, 편집하고, 공유할 수 있습니다. 이 시리즈는 또한 기본 Nostr 라이브러리를 NDK v2에서 v3로 업그레이드하여 relay 연결 처리와 구독 관리가 개선되었습니다. Picture notes와 재설계된 relay 연결 경험이 나머지를 채웁니다.&lt;/p>
&lt;h3 id="nak-v0191-and-v0192">nak v0.19.1 and v0.19.2&lt;/h3>
&lt;p>relay 상호작용, &lt;a href="https://nostrcompass.org/ko/topics/nip-19/">NIP-19&lt;/a> (Bech32-Encoded Entities) 식별자 인코딩과 디코딩, 이벤트 서명, relay 데이터 쿼리를 위한 fiatjaf의 커맨드라인 Nostr 도구킷 &lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a>이 3월 17일과 20일 &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.1">v0.19.1&lt;/a>, &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.2">v0.19.2&lt;/a>를 출시했습니다. 이 두 포인트 릴리스는 지난주 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-18-newsletter/">v0.19.0&lt;/a>의 그룹 포럼 UI 추가 이후를 잇습니다.&lt;/p>
&lt;h3 id="calendar-by-form-v021">Calendar by Form* v0.2.1&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-52/">NIP-52&lt;/a> (Calendar Events) 기반 탈중앙화 캘린더 앱 &lt;a href="https://github.com/formstr-hq/nostr-calendar">Calendar by Form*&lt;/a>가 3월 20일 &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v0.2.1">v0.2.1&lt;/a>을 출시했습니다. 이 릴리스는 이벤트 알림에 영향을 주던 알림 템플릿 문제를 수정합니다. Calendar는 이벤트를 Nostr kind 31922(날짜 기반) 및 kind 31923(시간 기반) 이벤트로 저장하므로, 이 kind를 지원하기로 선택한 어떤 Nostr 클라이언트도 캘린더 데이터를 렌더링할 수 있습니다. 이 앱은 탈중앙화 폼 Formstr와 투표 앱 Pollerama도 유지하는 Formstr 팀이 구축했습니다.&lt;/p>
&lt;h3 id="nym-v350-through-v353">NYM v3.50 through v3.53&lt;/h3>
&lt;p>Bitchat과 브리지된 경량 일시적 채팅 클라이언트 &lt;a href="https://github.com/Spl0itable/NYM">NYM&lt;/a>이 v3.50부터 v3.53까지 28개의 릴리스를 배포했습니다. 가장 눈에 띄는 기능은 채널에서 &lt;code>@nymbot&lt;/code> 멘션에 응답하고 relay 상태 및 관리 기능을 제공하는 내장 챗봇 Nymbot입니다. &amp;ldquo;hardcore mode&amp;quot;는 전송되는 각 메시지마다 새 키페어를 생성하여 대화 스레드를 신원 수준에서 연결할 수 없게 만듭니다. 대가도 분명합니다. 지속적 신원은 잃지만 메시지 단위 익명성을 얻습니다. relay 프록시 계층도 작업을 받았으며, 더 나은 연결성을 위한 샤딩 relay 프록시 워커, geohash 채널 지원, 시스템 시계가 부정확한 노드를 위한 clock skew 허용이 포함됩니다.&lt;/p>
&lt;h2 id="프로젝트-업데이트">프로젝트 업데이트&lt;/h2>
&lt;h3 id="ditto-adds-bluesky-bridge-and-wikipedia-integration">Ditto adds Bluesky bridge and Wikipedia integration&lt;/h3>
&lt;p>Soapbox 팀의 커스터마이즈 가능한 Nostr 소셜 클라이언트 &lt;a href="https://github.com/soapbox-pub/ditto">Ditto&lt;/a>가 이번 주 세 가지 뚜렷한 기능 트랙에 걸쳐 300개 이상의 커밋을 기록했습니다. 첫 번째는 Bluesky 브리지(19개 커밋)입니다. Bluesky 게시물을 전체 피드 스타일 스레드로 인라인 렌더링하고, 공식 Discover(whats-hot) 피드를 기반으로 하는 Bluesky 탐색 페이지에 사이드바 내비게이션을 추가하며, 댓글, 공유, 리액션, 링크 복사용 액션 버튼을 연결합니다. 사용자가 Ditto 내부에서 Bluesky 게시물에 답글을 달면 작성 모달은 이 상호작용의 크로스 프로토콜 성격을 알리는 면책 안내를 표시합니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-73/">NIP-73&lt;/a> (External Content IDs) kind 17 리액션이 이 크로스 프로토콜 모델을 구동합니다. Nostr 사용자가 Bluesky 게시물에 반응하면, 그 리액션은 외부 콘텐츠 식별자를 참조하는 표준 Nostr 이벤트로 저장됩니다. 이는 Bluesky 게시물에서 YouTube 동영상, 웹페이지에 이르기까지 어떤 외부 콘텐츠에 대한 반응도 브리지할 수 있는 동일한 NIP-73 패턴입니다.&lt;/p>
&lt;p>두 번째 트랙은 Wikipedia 통합(9개 커밋)입니다. Ditto는 이제 일반 링크 미리보기 대신 세부 페이지에서 풍부한 Wikipedia 문서 콘텐츠를 렌더링하고, 문서 썸네일이 포함된 검색 자동완성을 추가하며, Wikipedia API에서 추천 콘텐츠를 끌어오는 &lt;code>/wikipedia&lt;/code> 페이지를 제공합니다. Wikipedia와 Archive.org 결과도 일반 검색 자동완성 드롭다운에 나타납니다. 세 번째 트랙은 Capacitor를 통한 iOS 플랫폼 지원으로, 원격 빌드 스크립트와 플랫폼 구성이 UI 전면 개편(55개 커밋)과 함께 반영되었습니다. 이 개편은 앱의 모든 페이지에서 backdrop-blur 헤더를 새로운 arc 기반 내비게이션 디자인으로 대체합니다. 총 314개의 커밋은 Ditto를 Nostr 전용 클라이언트에서, Bluesky와 Wikipedia를 Nostr 피드와 나란한 일급 콘텐츠 소스로 취급하는 다중 프로토콜 집계기로 옮겨갑니다.&lt;/p>
&lt;h3 id="pika-builds-a-nip-34-forge-ci-pipeline">Pika builds a NIP-34 forge CI pipeline&lt;/h3>
&lt;p>Marmot 기반 암호화 메시징 앱 &lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>가 사전 병합 CI가 포함된 자체 호스팅 &lt;a href="https://nostrcompass.org/ko/topics/nip-34/">NIP-34&lt;/a> forge에 집중한 33개의 PR을 이번 주 병합했습니다. 이 forge는 NIP-34 이벤트로 패치를 수신하고, 병합 전에 CI 검사를 실행하며, 구조화된 상태를 Nostr 이벤트를 통해 다시 보고하는 git 호스팅 계층입니다. &lt;a href="https://github.com/sledtools/pika/pull/701">PR #701&lt;/a>은 lane 기반 사전 병합 및 야간 CI를 추가하며, 각 코드 경로(Rust, TypeScript, Apple 빌드)가 독립적인 성공/실패 상태를 가진 자체 lane에서 실행됩니다. &lt;a href="https://github.com/sledtools/pika/pull/715">PR #715&lt;/a>은 격리를 위해 관리형 CI 에이전트를 Incus OpenClaw 컨테이너로 전환하고, &lt;a href="https://github.com/sledtools/pika/pull/733">PR #733&lt;/a>은 커맨드라인에서 호스팅된 forge와 상호작용하기 위한 &lt;code>ph forge&lt;/code> CLI를 추가합니다. 지원 PR은 병합용 저장소 쓰기 권한(&lt;a href="https://github.com/sledtools/pika/pull/736">PR #736&lt;/a>), 라이브 상태 배지가 포함된 구조화된 CI 메타데이터(&lt;a href="https://github.com/sledtools/pika/pull/722">PR #722&lt;/a>), Apple 야간 빌드 분리(&lt;a href="https://github.com/sledtools/pika/pull/738">PR #738&lt;/a>), forge 인증 및 브랜치 조회 수정(&lt;a href="https://github.com/sledtools/pika/pull/734">PR #734&lt;/a>)을 처리합니다. 이는 NIP-34 git 이벤트 위에 구축된 최초의 실동 CI/CD 시스템 중 하나로, Nostr 기반 소스 코드 호스팅을 기본 패치 교환에서 개발자가 GitHub나 GitLab에서 기대하는 병합 및 테스트 워크플로로 확장합니다.&lt;/p>
&lt;h3 id="nostria-adds-communities-code-snippets-and-voice-event-handling">Nostria adds communities, code snippets, and voice event handling&lt;/h3>
&lt;p>sondreb가 유지 관리하는 크로스 플랫폼 Nostr 클라이언트 &lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a>는 #14에서 다룬 Web of Trust 필터링을 넘어 이번 주 앱 표면을 확장했습니다. 핵심 추가 사항은 커뮤니티 생성, 모더레이터 및 relay 구성, 이미지 미리보기가 포함된 게시 승인 추적, Posts와 Moderators 탭이 있는 전용 커뮤니티 페이지를 포함한 완전한 &lt;a href="https://nostrcompass.org/ko/topics/nip-72/">NIP-72&lt;/a> (Moderated Communities) 구현입니다.&lt;/p>
&lt;p>같은 기간에는 구문 강조 편집기가 포함된 코드 스니펫 렌더링 및 편집, 오디오 대화를 위한 음성 이벤트 답글 지원, 다이렉트 메시지용 채팅 relay 설정, Web Share API를 통한 채널 공유, 미디어 플레이어용 툴바 도킹 시스템, 최신 Brainstorm Web of Trust 서비스용 인앱 가입, NWC와 BOLT-11 인보이스를 사용한 DM 내 송금 및 수금 흐름, Nostr 네이티브 GIF 처리, 팟캐스트 피드의 기존 Lightning 분할을 가져올 수 있는 더 강력한 음악가용 RSS 임포트 경로도 추가되었습니다.&lt;/p>
&lt;h3 id="nostr-vpn-rapid-iteration">nostr-vpn rapid iteration&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-25-newsletter/#nostr-vpn-launches-as-a-tailscale-alternative">초기 출시&lt;/a>를 넘어서, &lt;a href="https://github.com/mmalmi/nostr-vpn">nostr-vpn&lt;/a>의 커밋 로그는 실제 배포 중 맞닥뜨린 구체적 문제를 보여줍니다. &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.3">v0.2.3&lt;/a>부터 &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.5">v0.2.5&lt;/a>까지는 초기 설치 스크립트와 크로스 플랫폼 CLI를 추가했습니다. &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.6">v0.2.6&lt;/a>과 &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.7">v0.2.7&lt;/a>은 Windows 지원을 도입했고, 그 과정에서 설정 쓰기를 위한 UAC 경로 인용과 데몬 소유 설정 업데이트가 필요했습니다. &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.8">v0.2.8&lt;/a>부터 &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.10">v0.2.10&lt;/a>까지는 Windows GUI 서비스 동작, CLI 서브프로세스 처리, 머신 범위 서비스 구성 문제를 수정했습니다. &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.12">v0.2.12&lt;/a>는 LAN 탐색을 timed LAN pairing으로 대체했습니다. 이는 동일한 로컬 네트워크에 있는 두 장치가 relay 신호 없이 사용자 주도로 페어링하는 흐름입니다. 패턴은 전형적인 초기 단계 현장 테스트입니다. 각 릴리스가 특정 배포 실패를 겨냥하고, 사용자 기반이 일일 반복이 가능할 만큼 작으며, 개발자 자신이 릴리스 사이에 이 도구를 직접 사용하고 있습니다.&lt;/p>
&lt;h3 id="comet-automated-builds">Comet automated builds&lt;/h3>
&lt;p>Nodetec의 Nostr 네이티브 장문 작성 도구 &lt;a href="https://github.com/nodetec/comet">Comet&lt;/a>(구 Captain&amp;rsquo;s Log)가 이번 주 40개가 넘는 자동화된 알파 빌드를 생성했습니다. Comet은 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/23.md">NIP-23&lt;/a> 장문 글을 작성하고 게시하기 위한 데스크톱 앱으로, 로컬 초안 저장, 마크다운 편집, 사용자의 relay 세트로 원클릭 게시를 제공합니다. 자동 빌드 파이프라인은 main 브랜치의 모든 커밋에 대해 태그된 릴리스를 생성하므로, 순수 릴리스 수는 기능 속도를 측정하는 지표로는 오해의 소지가 있습니다. 40개의 빌드가 보여주는 것은 앱이 매일 활발히 개발되고 있으며, 각 커밋이 몇 분 안에 테스트, 패키징, 다운로드 가능 상태가 된다는 점입니다.&lt;/p>
&lt;h2 id="nip-업데이트">NIP 업데이트&lt;/h2>
&lt;p>3월 17일부터 24일까지 &lt;a href="https://github.com/nostr-protocol/nips">NIPs 저장소&lt;/a>의 최근 변경 사항:&lt;/p>
&lt;p>3월 18일부터 3월 24일까지 병합된 NIP는 없었습니다.&lt;/p>
&lt;p>&lt;strong>해당 기간 동안 업데이트된 오픈 PR 및 논의:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>NIP-AA: Nostr 위의 자율 에이전트&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2259">PR #2259&lt;/a>): Nostr 네트워크에서 동작하는 자율 에이전트를 위한 규약을 제안합니다. 이 PR은 에이전트가 자신을 식별하고, 서비스를 발견하며, Nostr 이벤트를 통해 다른 에이전트 및 인간과 조율하는 방법을 정의합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-50/">NIP-50&lt;/a> (검색): 정렬 확장&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2283">PR #2283&lt;/a>): NIP-50 검색 쿼리에 top, hot, zaps, new를 포함한 정렬 파라미터를 추가합니다. 이를 통해 클라이언트는 전체 텍스트 검색을 지원하는 relay에서 결과를 클라이언트 측 정렬 대신 순위화된 형태로 요청할 수 있습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-A5: WASM 프로그램&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2281">PR #2281&lt;/a>): Nostr 위에서 WebAssembly 프로그램을 게시하고 발견하기 위한 규약을 제안합니다. WASM 바이너리는 Nostr 이벤트로 배포될 수 있으며, relay는 이식 가능한 실행 코드의 탐색 계층 역할을 할 수 있습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-CF: Combine Forces 상호운용 가능한 napps&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2277">PR #2277&lt;/a>): 서로 다른 클라이언트와 서비스 전반에서 기능을 조합할 수 있는 상호운용 가능한 Nostr 애플리케이션(&amp;ldquo;napps&amp;rdquo;)을 위한 규약을 정의합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Snapshots NIP&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2279">PR #2279&lt;/a>): relay 동기화와 백업을 위한 relay 상태 스냅샷 메커니즘을 제안합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Checkpoints NIP&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2278">PR #2278&lt;/a>): snapshots 제안을 보완하는, 알려진 양호한 relay 상태를 표시하는 checkpoint 이벤트를 제안합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-58/">NIP-58&lt;/a> (Badges): Badge Sets 리팩터링&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2276">PR #2276&lt;/a>): 배지 컬렉션이 조직되고 참조되는 방식을 재구성합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-11/">NIP-11&lt;/a> (Relay Information Document): 확장&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2280">PR #2280&lt;/a>): 더 풍부한 기계 판독 가능한 relay 메타데이터를 위해 relay 정보 문서에 추가 필드를 넣습니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="five-years-of-nostr-marches">Five Years of Nostr Marches&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-04-newsletter/#five-years-of-nostr-februaries">지난달 뉴스레터&lt;/a>는 NIP-01(기본 프로토콜 흐름) 재작성부터 Damus App Store 물결, 메시 네트워킹, 에이전트 제안까지 Nostr의 2월이 어떻게 전개되었는지 다뤘습니다. 이번 회고는 2021년부터 2026년까지 각 3월에 무슨 일이 일어났는지 추적합니다.&lt;/p>
&lt;h3 id="march-2021-two-commits">March 2021: Two Commits&lt;/h3>
&lt;p>존재한 지 네 달째이던 Nostr의 2021년 3월은 프로토콜 저장소에 단 두 개의 커밋만 남겼고, 둘 다 3월 4일에 이루어졌습니다. fiatjaf는 &lt;a href="https://github.com/nostr-protocol/nostr/commit/dcd8cc3">nostwitter 인스턴스 링크를 추가&lt;/a>해 초기 방문자를 실제 배포 지점으로 안내했고, &lt;a href="https://github.com/nostr-protocol/nostr/commit/54dfb46">기본 필터 정의에 kind를 추가&lt;/a>했습니다. 두 번째 커밋은 특히 의미심장합니다. 2021년 3월에는 Nostr 이벤트를 kind별로 필터링할 수조차 없었습니다. 프로토콜은 그만큼 원시적이었습니다. 네트워크는 두세 개 relay로 운영되었고, Telegram 그룹이 유일한 조정 채널이었습니다. NIPs 저장소는 아직 존재하지 않았으며, 프로토콜 제안은 메인 nostr 저장소의 파일로 존재했습니다. 그달 커미터는 fiatjaf 한 명뿐이었습니다. 5년 뒤 VPN, 멀티플레이어 게임, 메시 네트워킹을 지원하게 될 프로토콜의 2021년 3월 전체 산출물이 하나의 git diff에 들어갑니다.&lt;/p>
&lt;h3 id="march-2022-pre-damus-building">March 2022: Pre-Damus Building&lt;/h3>
&lt;p>메인 프로토콜 저장소는 2022년 3월에 커밋이 0개였습니다. 개발은 도구 저장소로 완전히 이동해 있었습니다. 당시 주요 Nostr 인터페이스였던 fiatjaf의 Vue.js 웹 클라이언트 &lt;a href="https://github.com/fiatjaf/branle">Branle&lt;/a>은 Docker 배포 지원과 &lt;a href="https://nostrcompass.org/ko/topics/nip-05/">NIP-05&lt;/a> (DNS-Based Verification) 표시 이름 수정처럼 &lt;code>_@&lt;/code> 접두사를 제거하는 검증 배지 개선을 포함해 5개의 커밋을 받았습니다. Robert C. Martin의 Clojure 데스크톱 클라이언트 &lt;a href="https://github.com/unclebob/more-speech">more-speech&lt;/a>는 스레딩, 키보드 내비게이션, 편집 창을 추가하며 13개 이상의 커밋을 기록했습니다. 그달 Nostr 위에서 적극적으로 개발한 가장 유명한 소프트웨어 저자는 암호화폐 개발자가 아니라, 수백만 부가 팔린 &amp;ldquo;Clean Code&amp;quot;의 저자였습니다. 그는 Clojure로 Nostr 클라이언트를 쓰고 있었습니다. 이 언어 선택은 초기 커뮤니티의 성격을 거의 그대로 보여줍니다. 자기 자신을 위해 만드는 고집 있는 프로그래머들의 집합이었습니다.&lt;/p>
&lt;p>relay 네트워크는 약 15개 relay와 수백 명 수준의 활성 사용자 기반으로 확장되어 있었습니다. Damus는 아직 존재하지 않았고 2022년 4월이 되어서야 만들어집니다. Nostream도 아직 나타나지 않았습니다. 그달의 작업은 인프라였습니다. 이미 매일 이 도구를 사용하고 있던 작은 커뮤니티를 위해 기존 도구를 더 신뢰성 있게 만드는 작업이었습니다.&lt;/p>
&lt;h3 id="march-2023-post-explosion-infrastructure">March 2023: Post-Explosion Infrastructure&lt;/h3>
&lt;p>Damus App Store 물결과 30만 개 공개 키를 넘긴 급증 이후 한 달이 지난 2023년 3월은 그 성장 충격을 흡수하는 달이었습니다. &lt;a href="https://github.com/nostr-protocol/nips">NIPs 저장소&lt;/a>는 프로토콜 역사상 두 번째로 많은 28개의 pull request를 병합했습니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-51/">NIP-51&lt;/a> (Lists)이 병합되어 클라이언트에 구조화된 팔로우, 뮤트, 북마크 컬렉션을 제공했고, &lt;a href="https://nostrcompass.org/ko/topics/nip-39/">NIP-39&lt;/a> (External Identities in Profiles)가 도입되었으며, NIP-78(Application-Specific Data)은 비공개 상태가 필요한 앱에 범용 저장 kind를 제공했고, &lt;a href="https://nostrcompass.org/ko/topics/nip-57/">NIP-57&lt;/a> (Lightning Zaps)의 재작성(&lt;a href="https://github.com/nostr-protocol/nips/pull/392">PR #392&lt;/a>)은 zap 흐름을 통합하고 용어를 명확히 했습니다. 그달 가장 많이 논의된 PR은 50개가 넘는 댓글이 달린 대체 멘션 처리 제안(&lt;a href="https://github.com/nostr-protocol/nips/pull/381">PR #381&lt;/a>)이었습니다.&lt;/p>
&lt;p>그달 가장 영향력이 컸던 새 프로젝트는 relay 연결, 이벤트 서명, 캐싱, 구독 관리를 위한 TypeScript 라이브러리 &lt;a href="https://github.com/nostr-dev-kit/ndk">NDK&lt;/a>였습니다. pablof7z는 2023년 3월 16일 &lt;a href="https://github.com/nostr-dev-kit/ndk/commit/09e5e03">초기 커밋&lt;/a>을 만들었고, 11일 뒤인 3월 27일에는 이를 처음부터 다시 썼으며(&amp;ldquo;basically another initial commit&amp;rdquo;), 3월 31일까지 LNURL과 zap 지원을 동작시키고 있었습니다. NDK는 15일 만에 아무것도 없는 상태에서 zap 가능 상태로 갔습니다. NDK가 만들어진 지 5일 뒤인 3월 21일, Alby 팀은 &lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47&lt;/a>의 참조 구현인 &lt;a href="https://github.com/getAlby/nostr-wallet-connect">NWC&lt;/a> (Nostr Wallet Connect)를 만들었고, 이는 Lightning 지갑을 Nostr 애플리케이션에 연결했습니다. 이후 3년간 웹 기반 Nostr 개발을 떠받치게 될 두 프로젝트가 같은 30일 창 안에서 태어났습니다. OpenSats는 아직 Nostr 펀드를 시작하지 않았으며, 첫 번째 물결은 NDK가 만들어진 지 네 달 뒤인 &lt;a href="https://opensats.org/blog/nostr-grants-july-2023">2023년 7월&lt;/a>에 도착합니다.&lt;/p>
&lt;p>그달의 다른 주목할 만한 생성물로는 NostrGit, NostrChat, LNbits의 nostr-signing-device 프로젝트, nostrmo가 있었습니다. 지능형 relay 선택에 초점을 둔 Rust 데스크톱 클라이언트 &lt;a href="https://github.com/mikedilger/gossip">Gossip&lt;/a>은 세 번의 릴리스를 냈습니다. 프로토콜은 빌드 모드에 있었고, 2023년 3월에 만들어진 도구들은 3년이 지난 지금도 여전히 사용되고 있습니다.&lt;/p>
&lt;h3 id="march-2024-protocol-maturation">March 2024: Protocol Maturation&lt;/h3>
&lt;p>2024년 3월은 프로토콜을 장기 사용에 맞게 다듬는 시기였습니다. NIPs 저장소는 12개의 pull request를 병합했습니다. 가장 중요한 것은 130개 이상의 댓글과 44일의 검토 끝에 3월 5일 병합된 &lt;a href="https://nostrcompass.org/ko/topics/nip-34/">NIP-34&lt;/a> (Git Stuff), &lt;a href="https://github.com/nostr-protocol/nips/pull/997">PR #997&lt;/a>였습니다. 논의 스레드는 탈중앙화 GitHub를 어떻게 만들 것인지에 대한 커뮤니티 토론의 타임캡슐입니다. jb55는 &lt;code>git send-email&lt;/code>과의 유사성을 언급했고, Giszmo는 교차 포크 탐색을 위해 루트 커밋 해시를 사용하자고 제안했으며(&amp;ldquo;GitHub는 하지 않는 것이고 우리는 할 수 있다&amp;rdquo;), mikedilger는 SSH 키 대신 &lt;a href="https://nostrcompass.org/ko/topics/nip-98/">NIP-98&lt;/a> (HTTP Auth) 이벤트 서명 인증을 제안했고, fiatjaf는 버전 관리 일반성의 필요성을 단호하게 부인했습니다. &amp;ldquo;각 버전 관리 시스템을 위한 게 아니라 git만을 위한 것이다. 다른 건 아무도 쓰지 않는다.&amp;rdquo; PR을 연 지 몇 시간 안에 fiatjaf는 이미 nak, go-nostr, gitstr이 Nostr를 통한 패치를 수용하도록 바꿨습니다. 당시 이미 OpenSats 그랜티였던 ngit의 DanConwayDev는 토론에서 가장 활발한 기여자 중 하나였습니다. 프로필 메타데이터용 봇 필드도 병합되어, 클라이언트가 자동 계정과 인간 계정을 기계적으로 구분할 수 있게 되었습니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>는 git 이벤트 지원, 위키 문서, 의료 데이터 렌더링, 콘텐츠 편집을 하나의 릴리스에 담은 v0.85.0을 배포했습니다. &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a>는 v0.10.0에 도달했습니다. Cloudflare Workers 위에서 구동되는 서버리스 Nostr relay &lt;a href="https://github.com/Spl0itable/nosflare">Nosflare&lt;/a>는 relay 로직이 edge에서 돌아갈 수 있음을 보여주었습니다. OpenSats는 Amethyst 클라이언트에 대한 지속적인 기여를 위해 Bruno Garcia에게 &lt;a href="https://opensats.org/blog/bruno-garcia-receives-lts-grant">Long-Term Support grant&lt;/a>를 발표했습니다.&lt;/p>
&lt;h3 id="march-2025-infrastructure-expansion">March 2025: Infrastructure Expansion&lt;/h3>
&lt;p>2025년 3월에는 10개의 NIP가 병합되었습니다. 핵심은 &lt;a href="https://nostrcompass.org/ko/topics/nip-66/">NIP-66&lt;/a> (Relay Discovery and Liveness Monitoring), &lt;a href="https://github.com/nostr-protocol/nips/pull/230">PR #230&lt;/a>로, 25개월 여정 끝에 3월 3일 병합되었습니다. dskvr는 2023년 2월에 relay 모니터링을 처음 제안했고, 클라이언트 측에서 처리할 수 있다는 반응을 받았으며, 개별 클라이언트가 수천 개 relay에 동시에 연결하는 것이 왜 비현실적인지 설명했고, 일곱 번의 완전한 초안을 거쳤으며, 미국 북동부, 브라질, 미국 서부, 미국 동부, 호주, 인도, 한국, 남아프리카의 여덟 지역에 모니터링 노드를 구축했고, relay 도구 체인이 따라오기를 기다렸습니다. 병합될 무렵에는 이미 nostr.watch, relaypag.es, monitorlizard, Snort, noStrudel, Jumble에 구현이 존재했습니다. NIP-66 데이터는 나중에 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-04-newsletter/#outbox-%EB%AA%A8%EB%8D%B8-%EB%B6%84%EC%84%9D">뉴스레터 #12&lt;/a>에서 다룬 Nostrability outbox 벤치마크를 구동하게 됩니다. NIP-C0(Code Snippets)도 병합(&lt;a href="https://github.com/nostr-protocol/nips/pull/1852">PR #1852&lt;/a>, 댓글 63개)되어 소스 코드 공유를 위한 kind 1337 이벤트를 추가했습니다.&lt;/p>
&lt;p>이달에는 Nostr용 첫 MCP 서버들도 등장했습니다. &lt;a href="https://github.com/AustinKelsay/nostr-mcp-server">nostr-mcp-server&lt;/a>는 3월 23일, &lt;a href="https://github.com/getAlby/nwc-mcp-server">nwc-mcp-server&lt;/a>는 3월 14일에 나타났으며, 이는 Anthropic이 2024년 11월 Model Context Protocol을 발표한 지 불과 4개월 뒤였습니다. 이 초기 브리지는 2025년 말과 2026년 초에 이어진 완전한 &lt;a href="https://nostrcompass.org/ko/topics/contextvm/">ContextVM&lt;/a> SDK와 에이전트 상거래 작업에 앞섰습니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/mikedilger/gossip">Gossip&lt;/a>은 v0.14.0을 배포했습니다. relay 인지형 피드 관리에 초점을 둔 hodlbod의 웹 클라이언트 &lt;a href="https://github.com/coracle-social/coracle">Coracle&lt;/a>은 세 차례 릴리스를 냈습니다. OpenSats는 &lt;a href="https://opensats.org/blog/10th-wave-of-nostr-grants">열 번째 Nostr grants 물결&lt;/a>을 발표하며 2023년 중반부터 이어진 자금 흐름을 계속했습니다.&lt;/p>
&lt;h3 id="march-2026-convergence">March 2026: Convergence&lt;/h3>
&lt;p>&lt;em>2026년 3월 활동은 Nostr Compass &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-04-newsletter/">#12&lt;/a>부터 &lt;a href="">#15&lt;/a>호(이번 호)까지의 이슈에서 가져왔습니다.&lt;/em>&lt;/p>
&lt;p>2026년 3월은 서로 흩어져 있던 흐름이 실동 시스템으로 수렴한 달입니다. &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-04-newsletter/#marmot-development-kit-%EC%B2%AB-%EA%B3%B5%EA%B0%9C-%EB%A6%B4%EB%A6%AC%EC%8A%A4-%EC%B6%9C%EC%8B%9C">Marmot Development Kit&lt;/a>은 암호화 미디어, 다중 언어 바인딩, 그리고 사양, Rust, TypeScript 전반의 조율된 업데이트가 필요했던 ChaCha20-Poly1305 마이그레이션과 함께 첫 공개 릴리스를 냈습니다. &lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/#shopstr-and-milk-market-open-mcp-commerce-surfaces">Shopstr와 Milk Market&lt;/a>는 에이전트 주도 구매를 위한 MCP 상거래 인터페이스를 추가했습니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-42/">NIP-42&lt;/a> relay 인증은 &lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/#nip-42-relay-auth-across-bunker-signer-and-relay">Amber&lt;/a>, strfry, OAuth Bunker에 동시에 도입되어 signer, relay, bunker 소프트웨어 사이의 고리를 닫았습니다. &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-18-newsletter/#notedeck-moves-release-discovery-onto-nostr">Notedeck&lt;/a>은 &lt;a href="https://nostrcompass.org/ko/topics/nip-94/">NIP-94&lt;/a> (File Metadata) 릴리스 이벤트를 사용한 Nostr 네이티브 소프트웨어 업데이트를 출시했습니다.&lt;/p>
&lt;p>이번 주에는 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-25-newsletter/#bigbrotr-maps-exposed-private-keys-across-the-relay-network">BigBrotr&lt;/a>가 유출된 개인 키를 찾기 위해 전체 relay 네트워크를 스캔하고 분석과 DVM 검사기를 모두 공개했습니다. &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-25-newsletter/#nostr-vpn-launches-as-a-tailscale-alternative">Nostr VPN&lt;/a>은 Nostr의 키 모델이 소셜 미디어만이 아니라 네트워크 인프라에도 작동함을 보여주었습니다. &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-25-newsletter/#open-source-doom-runs-peer-to-peer-over-nostr">DOOM&lt;/a>은 Nostr 탐색, Marmot 암호화, QUIC 전송이 실시간 멀티플레이어 게임을 구동할 수 있음을 입증했습니다. &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-25-newsletter/#amber-v500-and-v501">Amber&lt;/a>는 v5.0.0으로 도약했고, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-25-newsletter/#wisp-ships-16-releases-in-one-week">Wisp&lt;/a>는 7일 동안 16개의 릴리스를 냈습니다. 한 주 동안 주요 프로젝트에서 25개가 넘는 태그 릴리스가 나왔습니다.&lt;/p>
&lt;p>그달 첫 24일 동안 7개의 NIP가 병합되었습니다. 프로토콜은 &lt;a href="https://nostrcompass.org/ko/topics/nip-54/">NIP-54&lt;/a> (Wiki) Djot 마크업, &lt;a href="https://nostrcompass.org/ko/topics/nip-19/">NIP-19&lt;/a> (Bech32-Encoded Entities) 입력 제한, &lt;a href="https://nostrcompass.org/ko/topics/nip-91/">NIP-91&lt;/a> (AND Operator for Filters) 불리언 쿼리 로직, &lt;a href="https://nostrcompass.org/ko/topics/nip-85/">NIP-85&lt;/a> (Trusted Assertions) Web of Trust assertions를 추가했습니다. 오픈 제안은 자율 에이전트(NIP-AA)부터 WASM 프로그램(NIP-A5), &lt;a href="https://nostrcompass.org/ko/topics/nip-50/">NIP-50&lt;/a>용 검색 정렬 확장까지 걸쳐 있습니다.&lt;/p>
&lt;h3 id="looking-ahead">Looking Ahead&lt;/h3>
&lt;p>Nostr의 다섯 번의 3월은 분명한 궤적을 그립니다. 2021년에는 한 사람이 kind별 이벤트 필터링조차 안 되던 프로토콜에 두 개의 커밋을 남겼습니다. 2023년에는 Damus 이후의 폭증을 흡수하기 위해 NDK와 NWC가 5일 간격으로 탄생했습니다. 2024년에는 141개 댓글이 달린 PR 스레드가 소셜 프로토콜 위에서 git 협업이 어떻게 작동해야 하는지를 토론했습니다. 2025년에는 25개월 동안 일곱 번 다시 쓰인 relay 모니터링 사양이 마침내 병합되었습니다. 2026년에는 누군가 Tailscale이 계정을 요구하는 데 질려서 Nostr 키페어를 사용하는 VPN을 만들었고, 또 다른 누군가는 Nostr relay를 통해 피어를 발견하고 Marmot로 게임 플레이를 암호화하는 멀티플레이어 DOOM을 배포했습니다. 1,085개 relay에서 4,100만 개 이벤트를 스캔한 BigBrotr의 결과는 네트워크가 얼마나 성장했는지에 대한 구체적인 측정치를 제공합니다. 2026년 3월의 프로토콜 표면적은 2021년 3월의 눈으로 보면 거의 알아볼 수 없을 정도로 넓어졌지만, secp256k1 키로 서명된 이벤트를 relay를 통해 배포한다는 기본 모델은 변하지 않았습니다.&lt;/p>
&lt;hr>
&lt;p>이번 주는 여기까지입니다. 무언가를 만들고 있거나 공유할 뉴스가 있다면 &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">&lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages) DM으로 연락하시거나&lt;/a> Nostr에서 찾아주세요.&lt;/p></content:encoded></item><item><title>Nostr Compass #14</title><link>https://nostrcompass.org/ko/newsletters/2026-03-18-newsletter/</link><pubDate>Wed, 18 Mar 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2026-03-18-newsletter/</guid><description>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>가 완전한 &lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47&lt;/a> (Nostr Wallet Connect) 메서드 지원을 완성했고, &lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a>이 &lt;a href="https://github.com/getAlby/hub/releases/tag/v1.21.6">v1.21.6&lt;/a>에서 다중 relay 지원을 추가했으며, &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>가 내장 Tor와 더 세밀한 서명자 권한이 포함된 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.3">v4.1.3&lt;/a>을 출시했고, &lt;a href="https://github.com/ZeusLN/zeus">Zeus&lt;/a>가 &lt;a href="https://github.com/ZeusLN/zeus/pull/3835">PR #3835&lt;/a>에서 위험한 NWC keysend 경로를 제거했습니다. &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>이 &lt;a href="https://nostrcompass.org/ko/topics/nip-94/">NIP-94&lt;/a> (File Metadata) 이벤트를 통해 릴리스를 발견하는 서명된 업데이터가 포함된 &lt;a href="https://github.com/damus-io/notedeck/releases/tag/v0.8.0-rc2">v0.8.0-rc2&lt;/a>를 출시했고, &lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>가 오래된 &lt;a href="https://nostrcompass.org/ko/topics/nip-65/">NIP-65&lt;/a> (Relay List Metadata) 상태를 수정했으며, &lt;a href="https://github.com/nostrability/outbox">Nostrability Outbox&lt;/a>가 수정된 데이터로 벤치마크 결과를 개정했고, &lt;a href="https://github.com/PrimalHQ/primal-ios-app">Primal iOS&lt;/a>가 DM용 직접 relay 구독을 테스트하고 있습니다. &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a>가 &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.0.7">3.0.7&lt;/a>을, &lt;a href="https://github.com/v0l/route96">Route96&lt;/a>이 &lt;a href="https://github.com/v0l/route96/releases/tag/v0.6.0">v0.6.0&lt;/a>을, &lt;a href="https://github.com/DavidGershony/openChat">OpenChat&lt;/a>이 &lt;a href="https://github.com/DavidGershony/openChat/releases/tag/v0.1.0-alpha.11">v0.1.0-alpha.11&lt;/a>에서 Marmot 상호운용성을 강화했고, &lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>가 &lt;a href="https://github.com/sledtools/pika/releases/tag/pika/v1.1.1">pika/v1.1.1&lt;/a>에서 런타임을 통합했으며, &lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a>가 &lt;a href="https://nostrcompass.org/ko/topics/nip-85/">NIP-85&lt;/a> (Trusted Assertions) Web of Trust 필터링을 추가했습니다. NIPs 저장소는 &lt;a href="https://nostrcompass.org/ko/topics/nip-54/">NIP-54&lt;/a> (Wiki) Djot 마크업과 &lt;a href="https://nostrcompass.org/ko/topics/nip-19/">NIP-19&lt;/a> (Bech32-Encoded Entities) 5000자 입력 제한을 병합했습니다.&lt;/p></description><content:encoded>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>가 완전한 &lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47&lt;/a> (Nostr Wallet Connect) 메서드 지원을 완성했고, &lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a>이 &lt;a href="https://github.com/getAlby/hub/releases/tag/v1.21.6">v1.21.6&lt;/a>에서 다중 relay 지원을 추가했으며, &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>가 내장 Tor와 더 세밀한 서명자 권한이 포함된 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.3">v4.1.3&lt;/a>을 출시했고, &lt;a href="https://github.com/ZeusLN/zeus">Zeus&lt;/a>가 &lt;a href="https://github.com/ZeusLN/zeus/pull/3835">PR #3835&lt;/a>에서 위험한 NWC keysend 경로를 제거했습니다. &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>이 &lt;a href="https://nostrcompass.org/ko/topics/nip-94/">NIP-94&lt;/a> (File Metadata) 이벤트를 통해 릴리스를 발견하는 서명된 업데이터가 포함된 &lt;a href="https://github.com/damus-io/notedeck/releases/tag/v0.8.0-rc2">v0.8.0-rc2&lt;/a>를 출시했고, &lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>가 오래된 &lt;a href="https://nostrcompass.org/ko/topics/nip-65/">NIP-65&lt;/a> (Relay List Metadata) 상태를 수정했으며, &lt;a href="https://github.com/nostrability/outbox">Nostrability Outbox&lt;/a>가 수정된 데이터로 벤치마크 결과를 개정했고, &lt;a href="https://github.com/PrimalHQ/primal-ios-app">Primal iOS&lt;/a>가 DM용 직접 relay 구독을 테스트하고 있습니다. &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a>가 &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.0.7">3.0.7&lt;/a>을, &lt;a href="https://github.com/v0l/route96">Route96&lt;/a>이 &lt;a href="https://github.com/v0l/route96/releases/tag/v0.6.0">v0.6.0&lt;/a>을, &lt;a href="https://github.com/DavidGershony/openChat">OpenChat&lt;/a>이 &lt;a href="https://github.com/DavidGershony/openChat/releases/tag/v0.1.0-alpha.11">v0.1.0-alpha.11&lt;/a>에서 Marmot 상호운용성을 강화했고, &lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>가 &lt;a href="https://github.com/sledtools/pika/releases/tag/pika/v1.1.1">pika/v1.1.1&lt;/a>에서 런타임을 통합했으며, &lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a>가 &lt;a href="https://nostrcompass.org/ko/topics/nip-85/">NIP-85&lt;/a> (Trusted Assertions) Web of Trust 필터링을 추가했습니다. NIPs 저장소는 &lt;a href="https://nostrcompass.org/ko/topics/nip-54/">NIP-54&lt;/a> (Wiki) Djot 마크업과 &lt;a href="https://nostrcompass.org/ko/topics/nip-19/">NIP-19&lt;/a> (Bech32-Encoded Entities) 5000자 입력 제한을 병합했습니다.&lt;/p>
&lt;h2 id="뉴스">뉴스&lt;/h2>
&lt;h3 id="wallet-connect-지원이-확대되고-지갑-클라이언트가-장애-경로를-강화">Wallet Connect 지원이 확대되고, 지갑 클라이언트가 장애 경로를 강화&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, vitorpamplona가 유지 관리하는 Android 클라이언트가 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1828">PR #1828&lt;/a>을 병합하여 &lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47&lt;/a> 구현을 거의 완전한 프로토콜 커버리지에 도달시켰습니다. 이 패치는 &lt;code>make_invoice&lt;/code>, &lt;code>lookup_invoice&lt;/code>, &lt;code>list_transactions&lt;/code>, &lt;code>get_balance&lt;/code>, &lt;code>get_info&lt;/code>, 보류 인보이스 메서드, TLV 레코드가 포함된 keysend 지원, kind &lt;code>13194&lt;/code>를 통한 기능 검색, &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> (Encrypted Payloads)가 포함된 kind &lt;code>23197&lt;/code> 알림 이벤트를 추가합니다. 이로써 클라이언트는 앱별 확장에 의존하지 않고 훨씬 넓은 NWC 인터페이스를 확보했습니다.&lt;/p>
&lt;p>주변 지갑 스택도 같은 방향으로 움직였습니다. 많은 NWC 배포 뒤에 있는 자체 보관 Lightning 노드이자 지갑 서비스인 &lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a>이 다중 relay 지원과 더 간단한 연결 및 스왑 흐름이 포함된 &lt;a href="https://github.com/getAlby/hub/releases/tag/v1.21.6">v1.21.6&lt;/a>을 출시했습니다. 모바일 Lightning 지갑 &lt;a href="https://github.com/ZeusLN/zeus">Zeus&lt;/a>는 해당 흐름에서 무소음 자금 유출 경로를 확인한 후 NWC keysend 지원을 제거하는 &lt;a href="https://github.com/ZeusLN/zeus/pull/3835">PR #3835&lt;/a>를 병합했으며, 동시에 대기 중인 이벤트 및 Cashu 활동 처리도 수정했습니다. Nostr에서의 지갑 연결은 더 넓어지고 있으며, 구현자들은 보안이 어려운 흐름을 제거하고 있습니다.&lt;/p>
&lt;h3 id="notedeck-릴리스-검색을-nostr로-이전">Notedeck, 릴리스 검색을 Nostr로 이전&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/">지난 주 Notedeck 보도에 이어&lt;/a>, Damus 팀의 네이티브 데스크톱 클라이언트 &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>이 &lt;a href="https://github.com/damus-io/notedeck/pull/1326">PR #1326&lt;/a> 병합 후 &lt;a href="https://github.com/damus-io/notedeck/releases/tag/v0.8.0-rc2">v0.8.0-rc2&lt;/a>를 출시했습니다. 새 업데이터는 서명된 kind &lt;code>1063&lt;/code> 릴리스 이벤트를 구독하고, 로컬 플랫폼을 매칭하며, 참조된 바이너리를 다운로드하고, 설치 전에 SHA256 해시를 검증합니다. 릴리스 메타데이터는 더 이상 GitHub API나 프로젝트 웹사이트에서 가져올 필요가 없습니다. 신뢰할 수 있는 릴리스 pubkey와 relay 연결이면 충분합니다.&lt;/p>
&lt;p>같은 패치에 GitHub 릴리스 아티팩트에서 해당 이벤트를 게시하는 &lt;code>notedeck-release&lt;/code> CLI도 추가되어, 릴리스 파이프라인에 Nostr 네이티브 게시 경로와 검색 경로가 모두 생겼습니다. 이는 또한 Damus와 Notedeck 업데이터 모델을 Zapstore의 relay 게시 서명 릴리스 흐름에 훨씬 더 가깝게 만듭니다: Zapstore의 &lt;code>zsp&lt;/code> 도구는 이미 소프트웨어 자산을 kind &lt;code>1063&lt;/code> 또는 &lt;code>3063&lt;/code> 이벤트로 처리하므로, 이 경로는 하나의 클라이언트나 하나의 게시자에 잠겨 있지 않습니다. 나머지 릴리스 후보는 실용적인 데스크톱 작업으로, 팔로우 칼럼, 프로필 &amp;ldquo;View As User&amp;rdquo;, &lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59&lt;/a> (Gift Wrap) 지원, 실시간 노트 통계, &lt;a href="https://nostrcompass.org/ko/topics/nip-11/">NIP-11&lt;/a> (Relay Information Document) 제한 처리가 포함되지만, 업데이터가 이 릴리스 주기 이후에도 살아남을 부분입니다.&lt;/p>
&lt;h3 id="relay-상태가-런타임-동작에-더-가까워지고-있음">Relay 상태가 런타임 동작에 더 가까워지고 있음&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>가 &lt;a href="https://github.com/damus-io/damus/pull/3665">PR #3665&lt;/a>를 병합하여, 오래된 저장 relay 목록 이벤트 ID를 최신 kind &lt;code>10002&lt;/code> 이벤트에 대한 직접 데이터베이스 쿼리로 대체했습니다. 이전 값이 오래되면, relay 추가 및 제거 작업이 부트스트랩이나 1년 전 목록으로 대체되어 일부 relay 변경이 성공한 것처럼 보이면서 활성 상태는 변하지 않는 경우가 있었습니다. &lt;a href="https://github.com/damus-io/damus/pull/3690">PR #3690&lt;/a>은 LMDB 압축 시 오래된 &lt;code>lock.mdb&lt;/code> 상태를 삭제하여 다음 실행 시 &lt;code>SIGBUS&lt;/code>로 앱이 충돌하지 않도록 두 번째 장애 경로를 수정합니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-ios-app">Primal iOS&lt;/a>가 &lt;a href="https://github.com/PrimalHQ/primal-ios-app/pull/194">PR #194&lt;/a>를 열어, 대화가 열려 있는 동안 채팅 상대의 &lt;a href="https://nostrcompass.org/ko/topics/nip-04/">NIP-04&lt;/a> (Encrypted Direct Messages) 쓰기 relay에 직접 구독하면서 캐시 서버를 대체 수단으로 유지합니다. &lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a>가 &lt;a href="https://github.com/nostur-com/nostur-ios-public/pull/53">PR #53&lt;/a>을 열어, 무작위 relay 점수, nostr.watch의 &lt;a href="https://nostrcompass.org/ko/topics/nip-66/">NIP-66&lt;/a> 활성 필터링, Thompson 샘플링을 결합하여 relay 선택을 고정 휴리스틱에서 학습된 정책으로 변경합니다. 클라이언트들은 오랫동안 relay 선택을 설정 데이터로 취급했습니다. 이제 더 많은 앱이 측정과 복구 로직이 필요한 라이브 상태로 취급하고 있습니다.&lt;/p>
&lt;h2 id="릴리스">릴리스&lt;/h2>
&lt;h3 id="primal-android-307">Primal Android 3.0.7&lt;/h3>
&lt;p>Primal의 Android 클라이언트 &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a>가 새로운 투표 및 지갑 사이클이 포함된 &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.0.7">3.0.7&lt;/a>을 출시했습니다. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/945">PR #945&lt;/a>는 zap 기반 투표를 추가하고, &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/948">PR #948&lt;/a>은 대규모 투표에서도 사용성을 유지하도록 투표 로딩을 페이지네이션하며, &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/965">PR #965&lt;/a>는 모든 거래에 대한 zap 영수증을 가져옵니다. 같은 릴리스는 &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/968">PR #968&lt;/a>에서 지원되는 이벤트에 &lt;a href="https://nostrcompass.org/ko/topics/nip-89/">NIP-89&lt;/a> (Recommended Application Handlers) 클라이언트 메타데이터를 태그하여, 다운스트림 클라이언트가 이벤트 출처를 더 깔끔하게 귀속할 수 있게 합니다.&lt;/p>
&lt;h3 id="amber-v413">Amber v4.1.3&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/">지난 주 Amber 보도에 이어&lt;/a>, &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> 흐름을 위한 Android 서명자 앱 &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>가 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.3">v4.1.3&lt;/a>을 출시했습니다. 이 릴리스는 최근의 &lt;a href="https://nostrcompass.org/ko/topics/nip-42/">NIP-42&lt;/a> relay 인증 작업 위에 더 많은 운영 강화를 수행합니다: &lt;a href="https://github.com/greenart7c3/Amber/pull/327">PR #327&lt;/a>은 Orbot 지원과 함께 내장 Tor를 추가하고, &lt;a href="https://github.com/greenart7c3/Amber/pull/324">PR #324&lt;/a>는 거친 NIP 기반 암호화 권한을 콘텐츠 타입별 규칙으로 대체하며, &lt;a href="https://github.com/greenart7c3/Amber/pull/336">PR #336&lt;/a>은 오프라인 버전에서 네트워크 권한을 제거하고 &lt;a href="https://github.com/greenart7c3/Amber/pull/335">PR #335&lt;/a>는 이를 유지하기 위한 CI 검사를 추가합니다. &lt;a href="https://github.com/greenart7c3/Amber/pull/322">PR #322&lt;/a>는 또한 PIN 저장을 암호화된 DataStore로 이동합니다.&lt;/p>
&lt;p>이 릴리스는 서명자 경계 자체를 강화합니다. 이는 실제 키나 relay 인증 결정을 Amber에 넘기는 모든 Android 흐름에 유용합니다. 어려운 부분은 서명자가 무엇을 할 수 있느냐만이 아니기 때문입니다. 얼마나 좁게 범위를 한정할 수 있느냐이기도 합니다.&lt;/p>
&lt;h3 id="route96-v060">Route96 v0.6.0&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/">지난 주 Route96 보도에 이어&lt;/a>, Blossom과 &lt;a href="https://nostrcompass.org/ko/topics/nip-96/">NIP-96&lt;/a> (HTTP File Storage)를 지원하는 미디어 서버 &lt;a href="https://github.com/v0l/route96">Route96&lt;/a>이 &lt;a href="https://github.com/v0l/route96/releases/tag/v0.6.0">v0.6.0&lt;/a>을 릴리스했습니다. 이 릴리스는 구성과 화이트리스트 상태를 핫 리로드가 가능한 데이터베이스로 이동하고 오래되거나 접근이 적은 파일에 대한 보존 정책을 추가합니다. 또한 더 풍부한 &lt;code>GET /user/files&lt;/code> 엔드포인트와 다운로드 및 트래픽에 대한 파일 통계 추적을 추가하여, 운영자가 스토리지 서버가 어떻게 사용되고 있는지 더 잘 파악할 수 있게 합니다.&lt;/p>
&lt;h3 id="openchat-v010-alpha11">OpenChat v0.1.0-alpha.11&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/">지난 주 OpenChat 보도에 이어&lt;/a>, Marmot 스택 위에 구축된 Avalonia 기반 채팅 클라이언트 &lt;a href="https://github.com/DavidGershony/openChat">OpenChat&lt;/a>이 빠른 프로토콜 작업 후 &lt;a href="https://github.com/DavidGershony/openChat/releases/tag/v0.1.0-alpha.11">v0.1.0-alpha.11&lt;/a>을 출시했습니다. &lt;a href="https://github.com/DavidGershony/openChat/commit/c33895d6b1a198f01b9b01a7be974bdce033fb9c">커밋 c33895d&lt;/a>는 Welcome 이벤트를 &lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59&lt;/a> gift wrap으로 래핑하고 이전 MIP-00 태그 정규화 심을 제거하며, &lt;a href="https://github.com/DavidGershony/openChat/commit/2738ff428154f60f50debb8f2a53662d427b28f1">커밋 2738ff4&lt;/a>는 MIP-02 준수 감사를 완료하고, &lt;a href="https://github.com/DavidGershony/openChat/commit/8e470cf7945bced010168c8229d73d67db638b9f">커밋 8e470cf&lt;/a>는 MIP-03 그룹 메시지 암호화에 대해 동일한 작업을 수행합니다. &lt;a href="https://github.com/DavidGershony/openChat/commit/129ca37e264efaa2d1a8b04fe95cd72e5e212547">커밋 129ca37&lt;/a>은 또한 NIP-44 처리를 공유 marmot-cs 구현으로 통합하여, 클라이언트 측 암호화 드리프트의 위험을 줄입니다.&lt;/p>
&lt;h3 id="nak-v0190-및-v0191">nak v0.19.0 및 v0.19.1&lt;/h3>
&lt;p>fiatjaf의 커맨드라인 Nostr 도구킷 &lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a>이 &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.0">v0.19.0&lt;/a>과 &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.1">v0.19.1&lt;/a>을 출시했습니다. 0.19 시리즈는 &lt;a href="https://github.com/fiatjaf/nak/commit/5f4efdbc69a36fc80ea3f97b2cdee1db6a7c5b47">커밋 5f4efdb&lt;/a>에서 그룹 포럼 UI를 추가하고, &lt;a href="https://github.com/fiatjaf/nak/commit/da0b75337198010687aceb6a07bbae67407faee3">커밋 da0b753&lt;/a>에서 그룹 메타데이터 편집을 전체 교체 흐름으로 전환하며, &lt;a href="https://github.com/fiatjaf/nak/commit/bef67d35d259e0450debf0fd870e1a937a2406bf">커밋 bef67d3&lt;/a>에서 이전 &lt;code>no-text&lt;/code> 처리를 &lt;code>supported_kinds&lt;/code>로 대체합니다. 그룹 구현자에게 이는 CLI를 그룹 사양과 클라이언트가 나아가는 방향에 맞추는 것입니다.&lt;/p>
&lt;h2 id="프로젝트-업데이트">프로젝트 업데이트&lt;/h2>
&lt;h3 id="amethyst">Amethyst&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/">지난 주 Amethyst 보도에 이어&lt;/a>, Nostr에서 가장 넓은 프로토콜 표면을 가진 Android 클라이언트 &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>가 NIP-47 패치 이후 지갑 및 relay 작업을 계속했습니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1853">PR #1853&lt;/a>은 relay 관리 화면에 &lt;a href="https://nostrcompass.org/ko/topics/nip-45/">NIP-45&lt;/a> (Event Counting) COUNT 쿼리를 추가하여, 사용자가 각 relay가 홈 피드, 알림, DM, 인덱스 데이터에 대해 실제로 보유하고 있는 이벤트 수를 볼 수 있게 합니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1849">PR #1849&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages) 채팅을 위한 암호화 파일 업로드를 추가하며, 스토리지 호스트가 암호화 버전을 거부할 때 비암호화 업로드로의 재시도 경로도 포함합니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1791">PR #1791&lt;/a>은 또한 하트비트 표시기가 포함된 완전한 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> (Nostr Connect) 데스크톱 벙커 로그인을 제공합니다. 이는 원격 서명 실패가 사용자 측에서 무작위 UI 오류처럼 느껴지는 경우가 많기 때문에 중요합니다. 클라이언트는 서명자가 활성 상태인지와 가장 최근에 응답한 시점을 표시하며, 현재 세션이 벙커를 사용할 때 이를 명확하게 보여줍니다.&lt;/p>
&lt;h3 id="nostria">Nostria&lt;/h3>
&lt;p>로컬 우선 스택으로 구축된 멀티 플랫폼 클라이언트 &lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a>가 피드와 스레드 답글에 대한 Web of Trust 필터링을 추가하는 &lt;a href="https://github.com/nostria-app/nostria/pull/561">PR #561&lt;/a>을 병합했습니다. 이 기능은 기존 신뢰 서비스 순위 데이터를 사용하며, 피드 필터와 답글 필터 모두로 노출하여 임계값을 통과하지 못하는 저자를 숨기면서도 신뢰할 수 있는 하위 항목이 있을 때 스레드 구조를 보존합니다. 이를 통해 사용자는 &amp;ldquo;모두 보기&amp;quot;와 하드코딩된 목록 기반 큐레이션 사이의 중간 레이어를 얻습니다.&lt;/p>
&lt;p>같은 주에 요약 페이지에 콘텐츠 필터링과 리포스트 지원을 추가하는 &lt;a href="https://github.com/nostria-app/nostria/pull/563">PR #563&lt;/a>도 도착했습니다. 추적된 PR 목록 외에도, Nostria는 파워 유저 인터페이스를 더 많이 채워왔습니다. 이제 인앱 가입이 가능한 최신 Brainstorm Web of Trust 서비스, NWC와 BOLT-11 인보이스를 사용한 DM 내 송금 및 수금 흐름, 이모지 NIP을 통한 Nostr 네이티브 GIF 처리, 팟캐스트 피드에서 기존 Lightning 분할을 가져올 수 있는 더 강력한 RSS 임포트 경로를 지원합니다. Nostria는 랭킹, 미디어, 결제, 게시를 하나의 연결된 앱 표면으로 취급하고 있습니다.&lt;/p>
&lt;h3 id="nostur">Nostur&lt;/h3>
&lt;p>nostur-com이 유지 관리하는 iOS 클라이언트 &lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a>가 outbox 라우팅을 고정 계획에서 점수화된 정책으로 변경하는 &lt;a href="https://github.com/nostur-com/nostur-ios-public/pull/53">PR #53&lt;/a>을 열었습니다. 이 패치는 무작위 relay 점수, 캐시된 nostr.watch 피드를 사용한 &lt;a href="https://nostrcompass.org/ko/topics/nip-66/">NIP-66&lt;/a> relay 활성 필터링, Thompson 샘플링을 추가하여 relay 성공 및 실패 데이터가 이후 선택에 반영됩니다. 설계는 너무 많은 relay가 필터링될 때의 안전 밸브를 유지하고 &lt;code>.onion&lt;/code> relay를 보존합니다. 이는 클라이언트가 relay 선택을 적응형 시스템으로 취급하는 가장 명확한 현재 사례 중 하나입니다.&lt;/p>
&lt;h3 id="nostrability-outbox">Nostrability Outbox&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-04-newsletter/">이전 Outbox 벤치마크 보고서에 이어&lt;/a>, &lt;a href="https://nostrcompass.org/ko/topics/nip-65/">NIP-65&lt;/a>와 &lt;a href="https://nostrcompass.org/ko/topics/nip-66/">NIP-66&lt;/a> 클라이언트 라우팅에 초점을 맞춘 벤치마크 및 분석 프로젝트 &lt;a href="https://github.com/nostrability/outbox">Nostrability Outbox&lt;/a>가 이번 주 자체 주장을 강화하는 데 시간을 보냈습니다. &lt;a href="https://github.com/nostrability/outbox/pull/35">PR #35&lt;/a>는 부풀린 Thompson 샘플링 결과를 1,511회 실행에 걸친 전면 재벤치마크로 대체하고 NDK 스타일 라우팅을 위한 &lt;code>CG3&lt;/code> 변형을 권장합니다. &lt;a href="https://github.com/nostrability/outbox/pull/43">PR #43&lt;/a>은 감쇠 및 사용 사례 비교를 추가하고, &lt;code>0 follows&lt;/code> 캐시 오염 버그를 수정한 후 캐시 TTL을 고정하고 Telluride 데이터셋을 재실행합니다.&lt;/p>
&lt;p>이것은 일반적인 의미의 제품 작업은 아니지만, 프로젝트의 수치가 이제 더 날카롭고 이전에 과대 주장한 부분에서 덜 화려하기 때문에 클라이언트 저자에게 중요합니다. 수정된 결과는 여전히 유용합니다. 무작위 선택은 Outbox가 관심을 가지는 사례에서 순수하게 결정론적인 라우팅을 지속적으로 능가하며, Thompson 스타일 학습은 클라이언트가 유용한 relay 이력을 유지할 때 커버리지를 실질적으로 향상시킬 수 있고, &lt;a href="https://nostrcompass.org/ko/topics/nip-66/">NIP-66&lt;/a> 활성 필터링은 죽은 relay에 대한 낭비 시간을 줄입니다. 이 작업은 또한 구체적인 구현 제안으로 전환되고 있으며, &lt;a href="https://github.com/nostr-dev-kit/ndk/pull/387">NDK #387&lt;/a>, &lt;a href="https://github.com/nostur-com/nostur-ios-public/pull/53">Nostur #53&lt;/a>, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1833">Amethyst #1833&lt;/a>, &lt;a href="https://github.com/rust-nostr/nostr/pull/1282">rust-nostr #1282&lt;/a>, &lt;a href="https://github.com/coracle-social/welshman/pull/53">welshman #53&lt;/a>, &lt;a href="https://github.com/hzrd149/applesauce/pull/54">applesauce #54&lt;/a> 및 &lt;a href="https://github.com/hzrd149/applesauce/pull/55">applesauce #55&lt;/a>가 포함됩니다.&lt;/p>
&lt;h3 id="white-noise-백엔드">White Noise 백엔드&lt;/h3>
&lt;p>White Noise와 기타 Marmot 도구에서 사용하는 Rust 백엔드 &lt;a href="https://github.com/marmot-protocol/whitenoise-rs">whitenoise-rs&lt;/a>가 Blossom 미디어 처리 주변에 두 개의 경계 강화 패치를 병합했습니다. &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/637">PR #637&lt;/a>은 Blossom URL에 HTTPS를 강제하고 업로드 타임아웃을 추가하며, &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/642">PR #642&lt;/a>는 blob 다운로드를 &lt;code>100 MiB&lt;/code>로 제한하여 과대한 미디어 풀이 서비스 거부 경로로 변하는 것을 차단합니다. 개인 메시징 소프트웨어의 경우 미디어 URL은 암호화된 애플리케이션 로직과 신뢰할 수 없는 네트워크 인프라 사이의 가장 날카로운 인터페이스 중 하나입니다. 이번 주 팀은 그 경계를 강화했습니다.&lt;/p>
&lt;h3 id="rust-nostr">rust-nostr&lt;/h3>
&lt;p>Rust 프로토콜 라이브러리 &lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a>가 &lt;code>LocalRelayBuilderNip42&lt;/code>에 편의 생성자를 추가하는 &lt;a href="https://github.com/rust-nostr/nostr/pull/1280">PR #1280&lt;/a>을 병합했습니다. 새로운 읽기 및 쓰기 헬퍼는 임베디드 relay와 테스트 설정에 &lt;a href="https://nostrcompass.org/ko/topics/nip-42/">NIP-42&lt;/a> 인증 정책을 코드로 변환하는 더 명확한 방법을 제공합니다. 이는 작은 라이브러리 패치이지만, 매번 보일러플레이트를 반복하지 않고 인증이 활성화된 로컬 또는 앱 번들 relay를 구축하는 팀에게 중요합니다.&lt;/p>
&lt;h3 id="pika">Pika&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-04-newsletter/">이전 Pika 보도에 이어&lt;/a>, Marmot 기반 메시징 앱 &lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>가 런타임 통합에 초점을 맞춘 릴리스 주기로 &lt;a href="https://github.com/sledtools/pika/releases/tag/pika/v1.1.1">pika/v1.1.1&lt;/a>과 &lt;a href="https://github.com/sledtools/pika/releases/tag/pikachat-v1.1.1">pikachat-v1.1.1&lt;/a>을 출시했습니다. &lt;a href="https://github.com/sledtools/pika/pull/542">PR #542&lt;/a>는 CLI와 사이드카를 위한 공유 Marmot 런타임 파사드를 도입하며, 앱 호스트가 동일한 표면으로 이동합니다. &lt;a href="https://github.com/sledtools/pika/pull/556">PR #556&lt;/a>은 OpenClaw 에이전트 수명 주기와 프로비저닝 상태를 강화하고, &lt;a href="https://github.com/sledtools/pika/pull/600">PR #600&lt;/a>은 관리 환경을 위한 백업에서 복원과 더 엄격한 복구 안전성을 추가합니다.&lt;/p>
&lt;p>여기서 직접적인 사용자 대면 표면은 지난 Pika 기사보다 작지만, 아키텍처 변경은 의미가 있습니다. 그룹, 미디어, 통화, 세션 로직을 하나의 공유 런타임 뒤로 가져오면 Marmot 스택이 성장함에 따라 앱과 데몬이 서로 엇나갈 가능성이 줄어듭니다.&lt;/p>
&lt;h2 id="nip-업데이트">NIP 업데이트&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 저장소&lt;/a>의 최근 변경 사항:&lt;/p>
&lt;p>&lt;strong>병합됨:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-54/">NIP-54&lt;/a> (Wiki): Asciidoc에서 Djot으로 전환&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2242">PR #2242&lt;/a>): kind &lt;code>30818&lt;/code>의 위키 콘텐츠가 이제 Djot을 정규 마크업 형식으로 사용합니다. 병합된 텍스트는 명시적 위키링크 동작, kind &lt;code>818&lt;/code>에 대한 병합 요청 예제, kind &lt;code>30819&lt;/code>에 대한 리디렉트 예제, &lt;code>d&lt;/code> 태그에 대한 비라틴 정규화 예제를 추가합니다. 이는 구현자에게 Asciidoc보다 더 깔끔한 파싱 대상을 제공하고 Ruby 중심 도구 체인에 의존하는 사양 경로 하나를 더 제거합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-19/">NIP-19&lt;/a> (Bech32-Encoded Entities): 입력 제한 추가&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2264">PR #2264&lt;/a>): 사양이 이제 Bech32 인코딩된 엔티티 문자열을 5000자로 제한할 것을 권장합니다. 이는 작은 변경이지만 실질적인 파서 가치가 있습니다. NIP-19 문자열이 이제 많은 클라이언트에서 QR 흐름, 딥 링크, 공유 시트, 사용자 입력 전반에 나타나기 때문입니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>오픈 PR 및 논의:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-49/">NIP-49&lt;/a> (Private Key Encryption)를 위한 Nostr Key File&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2269">PR #2269&lt;/a>): 비밀번호로 암호화된 키 내보내기 및 가져오기를 위한 &lt;code>.nostrkey&lt;/code> 파일 형식을 제안합니다. 병합되면 클라이언트에 원시 &lt;code>ncryptsec&lt;/code> 문자열을 복사하는 것보다 더 일반적인 파일 기반 백업 경로를 제공할 것입니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-43/">NIP-43&lt;/a> (Relay Access Metadata and Requests)의 멤버십 상태 일관성&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2267">PR #2267&lt;/a>): relay가 pubkey당 하나의 권위 있는 멤버십 상태를 유지해야 한다는 섹션을 추가합니다. 이를 통해 멤버십 변경과 재생된 기록에 대한 그룹 클라이언트 로직이 단순화됩니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages)에 대한 삭제 안내&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2260">PR #2260&lt;/a>): gift wrap된 삭제 이벤트를 통한 개인 메시지 편집 및 삭제의 구체적인 경로를 제안합니다. 작업은 아직 진행 중이지만, NIP-17이 이전 DM 흐름을 완전히 대체하려면 클라이언트 저자에게 답이 필요합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-222/">NIP-222&lt;/a>를 위한 공유 인텐트 URI&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2266">PR #2266&lt;/a>): 모바일 및 데스크톱 앱이 공유 콘텐츠를 Nostr 클라이언트에 전달하는 방법을 표준화하는 초안입니다. 이는 현재 앱 간 흐름에서 가장 거친 상호운용성 경계 중 하나입니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-심층-분석-nip-94-file-metadata">NIP 심층 분석: NIP-94 (File Metadata)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-94/">NIP-94&lt;/a>는 kind &lt;code>1063&lt;/code>을 파일의 일급 메타데이터 이벤트로 정의합니다. &lt;a href="https://github.com/nostr-protocol/nips/blob/master/94.md">사양&lt;/a>은 이벤트에 사람이 읽을 수 있는 &lt;code>content&lt;/code>와 다운로드 URL, MIME 타입, 해시, 크기, 미리보기, 대체 소스, 스토리지 서비스 힌트를 위한 기계 판독 가능 태그를 제공합니다. 이것이 중요한 이유는 파일이 relay에서 자체 객체로 쿼리 가능해지기 때문입니다. 클라이언트가 파일이 무엇인지 이해하기 위해 주변 콘텐츠에서 메타데이터를 추출할 필요가 없습니다.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;6a92ef8d7c3a1b5d4e8f9a0b1c2d3e4f567890abcdef1234567890abcdef1234&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;f1e2d3c4b5a697887766554433221100ffeeddccbbaa99887766554433221100&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1742342400&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1063&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;url&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://downloads.example.org/notedeck/v0.8.0-rc2/notedeck-macos-universal.tar.gz&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;m&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;application/gzip&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;x&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;4a5b6c7d8e9f00112233445566778899aabbccddeeff00112233445566778899&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;ox&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;4a5b6c7d8e9f00112233445566778899aabbccddeeff00112233445566778899&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;size&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;48392011&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;dim&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;0x0&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;magnet&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;magnet:?xt=urn:btih:00112233445566778899aabbccddeeff00112233&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;i&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;00112233445566778899aabbccddeeff00112233&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;blurhash&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;LEHV6nWB2yk8pyo0adR*.7kCMdnj&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;thumb&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://downloads.example.org/notedeck/v0.8.0-rc2/thumb.png&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;bbccddeeff00112233445566778899aabbccddeeff0011223344556677889900&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;image&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://downloads.example.org/notedeck/v0.8.0-rc2/screenshot.png&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;ccddeeff00112233445566778899aabbccddeeff001122334455667788990011&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;summary&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Signed macOS release artifact for Notedeck v0.8.0-rc2&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;alt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Notedeck desktop release archive&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;fallback&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://mirror.example.net/notedeck/v0.8.0-rc2/notedeck-macos-universal.tar.gz&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;service&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nip96&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Notedeck macOS universal build&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;11aa22bb33cc44dd55ee66ff77889900aabbccddeeff0011223344556677889911aa22bb33cc44dd55ee66ff77889900aabbccddeeff00112233445566778899&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>태그는 처음 보이는 것보다 더 많은 작업을 수행합니다. &lt;code>x&lt;/code>는 제공된 파일을 식별하고, &lt;code>ox&lt;/code>는 서버 측 변환 전의 원본 파일을 식별합니다. 미리보기 태그는 클라이언트가 전체 자산을 다운로드하지 않고 탐색 가능한 파일 인덱스를 구축할 수 있게 하며, &lt;code>summary&lt;/code>는 그 옆에 짧은 발췌문을 제공할 수 있습니다. &lt;code>fallback&lt;/code>은 메인 URL이 실패할 때 두 번째 소스를 제공하고, &lt;code>service&lt;/code>는 &lt;a href="https://nostrcompass.org/ko/topics/nip-96/">NIP-96&lt;/a> 또는 다른 호스트와 같은 파일 뒤의 스토리지 프로토콜을 암시합니다. 따라서 NIP-94는 소셜 게시 아래, 원시 스토리지 위에 위치합니다. 파일 주변의 대화가 아닌 파일을 설명합니다.&lt;/p>
&lt;p>그래서 이번 주의 Notedeck 업데이터가 흥미롭습니다. &lt;a href="https://github.com/damus-io/notedeck/pull/1326">PR #1326&lt;/a>은 소프트웨어 릴리스 검색에 서명된 kind &lt;code>1063&lt;/code> 이벤트를 사용한 다음 게시된 SHA256에 대해 다운로드된 바이너리를 검증합니다. 동일한 이벤트 형태가 소프트웨어 아티팩트나 미디어 업로드를 설명할 수 있습니다. NIP-94는 안정적일 만큼 오래되었지만, 더 많은 프로젝트가 메타데이터 이벤트를 사람을 위한 장식이 아닌 기계를 위한 전송으로 취급하고 있기 때문에 성장할 여지가 아직 있습니다.&lt;/p>
&lt;h2 id="nip-심층-분석-nip-54-wiki">NIP 심층 분석: NIP-54 (Wiki)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-54/">NIP-54&lt;/a>는 kind &lt;code>30818&lt;/code>을 위키 문서 이벤트로 정의합니다. &lt;a href="https://github.com/nostr-protocol/nips/blob/master/54.md">사양&lt;/a>은 &lt;code>d&lt;/code> 태그를 정규화된 문서 주제로 취급하고 많은 저자가 같은 주제에 대한 항목을 게시할 수 있게 합니다. 문서 본문은 &lt;code>content&lt;/code>에 들어가고, 태그는 정규화된 신원, 표시 제목, 요약, 이전 버전에 대한 참조를 처리합니다. 이는 NIP-54가 단순한 콘텐츠 형식이 아님을 의미합니다. 각 클라이언트가 여전히 어떤 문서 버전을 보여줄지 결정해야 하므로, 검색 및 랭킹 문제이기도 합니다.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;8c94e5d1f2a300112233445566778899aabbccddeeff00112233445566778899&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1742342400&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30818&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nostr-wiki&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;title&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Nostr Wiki&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;summary&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Djot-formatted reference article about Nostr wiki events&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;30818:11223344556677889900aabbccddeeff00112233445566778899aabbccddeeff:nostr-wiki&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.org&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;fork&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;11223344556677889900aabbccddeeff00112233445566778899aabbccddeeff&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.org&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;fork&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Nostr is a [protocol][] for carrying events across relays.\n\n[protocol]: nostr:nevent1example&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;33cc44dd55ee66ff77889900aabbccddeeff0011223344556677889900112233cc44dd55ee66ff77889900aabbccddeeff00112233445566778899001122&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>이번 주 병합은 &lt;a href="https://github.com/nostr-protocol/nips/pull/2242">PR #2242&lt;/a>에서 정규 마크업을 Asciidoc에서 Djot으로 변경합니다. 이것이 구현자에게 중요한 이유는 Djot이 더 타이트한 독립 사양과 언어 간 더 단순한 파서 이야기를 가지고 있기 때문입니다. 병합된 텍스트는 또한 참조 스타일 위키링크가 해석되는 방법, 병합 요청이 kind &lt;code>818&lt;/code>을 사용하는 방법, 리디렉트가 kind &lt;code>30819&lt;/code>를 사용하는 방법, 비라틴 스크립트에 대해 &lt;code>d&lt;/code> 태그 정규화가 어떻게 동작해야 하는지를 명확히 합니다. 이것들이 두 개의 독립적인 클라이언트가 링크가 가리키는 문서에 동의하게 만드는 부분입니다.&lt;/p>
&lt;p>NIP-54는 또한 프로토콜에서 특이한 위치에 있습니다. 위키 클라이언트는 콘텐츠 렌더링이 필요하지만, 랭킹 정책도 필요합니다. 리액션, relay 목록, 연락처 목록, 명시적 존중 신호가 모두 주어진 주제에 대해 어떤 문서가 승리하는지에 영향을 줍니다. Djot 전환이 랭킹 문제를 해결하지는 않지만, 그 아래에 있던 파서 모호성 중 하나를 제거합니다. 그래서 이 병합이 지금 중요합니다: 변경은 더 나은 산문 형식보다는 다중 클라이언트 위키 동작을 일관되게 구현하기 쉽게 만드는 것에 더 관련됩니다.&lt;/p>
&lt;p>무언가를 만들고 있거나 보도를 원하시나요? Nostr에서 &lt;code>npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923&lt;/code>으로 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> DM을 통해 연락해 주세요.&lt;/p></content:encoded></item><item><title>Nostr Compass #13</title><link>https://nostrcompass.org/ko/newsletters/2026-03-11-newsletter/</link><pubDate>Wed, 11 Mar 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2026-03-11-newsletter/</guid><description>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> &lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a>와 &lt;a href="https://github.com/shopstr-eng/milk-market">Milk Market&lt;/a>이 에이전트 기반 상거래를 위한 MCP 인터페이스를 추가했습니다. &lt;a href="https://github.com/flox1an/oauth-bunker">OAuth Bunker&lt;/a>, &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>, &lt;a href="https://github.com/hoytech/strfry">strfry&lt;/a>는 앱, 서명자, relay 소프트웨어 전반에 걸쳐 &lt;a href="https://nostrcompass.org/ko/topics/nip-42/">NIP-42&lt;/a>(클라이언트의 relay 인증) relay-auth와 protected-event 지원을 더했습니다. &lt;a href="https://github.com/v0l/route96">Route96&lt;/a>는 AI 라벨링, moderation queue, perceptual hash, 기계 판독 가능한 서버 문서를 둘러싼 두 개의 릴리스를 냈습니다. 이미 웹에서 동작 중인 &lt;a href="https://github.com/satsdisco/samizdat">Samizdat&lt;/a>는 첫 Android alpha를 공개했고, 이후 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a>(Android 서명자 애플리케이션) 지원도 추가했습니다. &lt;a href="https://github.com/formstr-hq/nostr-forms">Formstr&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/topics/nip-49/">NIP-49&lt;/a>(개인 키 암호화)를 통한 가입 기능을 넣었고, &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>는 Namecoin 기반 &lt;a href="https://nostrcompass.org/ko/topics/nip-05/">NIP-05&lt;/a>(도메인 검증) 해석 작업을 출시했습니다. &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a>는 &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.16.4">v0.16.4&lt;/a>를 출시했고, NIPs 저장소는 &lt;a href="https://nostrcompass.org/ko/topics/nip-91/">NIP-91&lt;/a>(필터용 AND 연산자)과 &lt;a href="https://nostrcompass.org/ko/topics/nip-66/">NIP-66&lt;/a>(relay 발견 및 가용성 모니터링)에 대한 방어적 가이드를 병합했습니다.&lt;/p></description><content:encoded>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> &lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a>와 &lt;a href="https://github.com/shopstr-eng/milk-market">Milk Market&lt;/a>이 에이전트 기반 상거래를 위한 MCP 인터페이스를 추가했습니다. &lt;a href="https://github.com/flox1an/oauth-bunker">OAuth Bunker&lt;/a>, &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>, &lt;a href="https://github.com/hoytech/strfry">strfry&lt;/a>는 앱, 서명자, relay 소프트웨어 전반에 걸쳐 &lt;a href="https://nostrcompass.org/ko/topics/nip-42/">NIP-42&lt;/a>(클라이언트의 relay 인증) relay-auth와 protected-event 지원을 더했습니다. &lt;a href="https://github.com/v0l/route96">Route96&lt;/a>는 AI 라벨링, moderation queue, perceptual hash, 기계 판독 가능한 서버 문서를 둘러싼 두 개의 릴리스를 냈습니다. 이미 웹에서 동작 중인 &lt;a href="https://github.com/satsdisco/samizdat">Samizdat&lt;/a>는 첫 Android alpha를 공개했고, 이후 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a>(Android 서명자 애플리케이션) 지원도 추가했습니다. &lt;a href="https://github.com/formstr-hq/nostr-forms">Formstr&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/topics/nip-49/">NIP-49&lt;/a>(개인 키 암호화)를 통한 가입 기능을 넣었고, &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>는 Namecoin 기반 &lt;a href="https://nostrcompass.org/ko/topics/nip-05/">NIP-05&lt;/a>(도메인 검증) 해석 작업을 출시했습니다. &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a>는 &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.16.4">v0.16.4&lt;/a>를 출시했고, NIPs 저장소는 &lt;a href="https://nostrcompass.org/ko/topics/nip-91/">NIP-91&lt;/a>(필터용 AND 연산자)과 &lt;a href="https://nostrcompass.org/ko/topics/nip-66/">NIP-66&lt;/a>(relay 발견 및 가용성 모니터링)에 대한 방어적 가이드를 병합했습니다.&lt;/p>
&lt;h2 id="뉴스">뉴스&lt;/h2>
&lt;h3 id="shopstr와-milk-market이-mcp-상거래-인터페이스를-개방">Shopstr와 Milk Market이 MCP 상거래 인터페이스를 개방&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a>는 Lightning과 Cashu 결제를 지원하는 P2P 마켓플레이스로, &lt;a href="https://github.com/shopstr-eng/shopstr/pull/234">PR #234&lt;/a>(&lt;a href="https://github.com/shopstr-eng/shopstr/commit/94ef7d1a4519e8e0158668d13c8cb8684b1d46e2">commit 94ef7d1&lt;/a>)를 병합하며 에이전트 계정 관리를 위한 API key 인증 MCP 서버를 추가했습니다. 이 변경은 에이전트 발견용 &lt;code>.well-known/agent.json&lt;/code>, MCP 온보딩과 상태 엔드포인트, 주문 생성 및 결제 검증 경로, 전용 구매 및 조회 도구, API key 설정 화면을 포함합니다. &lt;a href="https://github.com/shopstr-eng/shopstr/pull/236">PR #236&lt;/a>은 이를 확장해 판매자 측 메시지, 주소, 주문 업데이트, 제품 사양 선택 작업까지 제공합니다. &lt;a href="https://github.com/shopstr-eng/shopstr/pull/235">PR #235&lt;/a>의 보안 수정은 단일 반복 SHA-256 API key 해싱을 100,000회 salted PBKDF2로 교체했습니다.&lt;/p>
&lt;p>에이전트는 페이지 스크래핑이나 클라이언트 동작 역공학 없이도 기존 &lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47&lt;/a>(Nostr Wallet Connect)와 &lt;a href="https://nostrcompass.org/ko/topics/nip-60/">NIP-60&lt;/a>(Cashu Wallet) 결제 흐름을 이용해 &lt;a href="https://nostrcompass.org/ko/topics/nip-99/">NIP-99&lt;/a>(Classified Listings) 리스팅을 읽고 결제 단계까지 이동할 수 있습니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/shopstr-eng/milk-market">Milk Market&lt;/a>은 &lt;a href="https://milk.market">milk.market&lt;/a>에서 운영되는 Nostr 기반 식품 마켓플레이스로, &lt;a href="https://github.com/shopstr-eng/milk-market/commit/da6c0b499494b4e4861c4ff8a220e066c46285b3">commit da6c0b4&lt;/a>에서 동일한 MCP 및 API key 기반 구조를 도입했습니다. &lt;a href="https://github.com/shopstr-eng/milk-market/pull/10">PR #10&lt;/a>은 구독 주문, 구매 후 배송지 변경, Stripe를 포함한 법정화폐 결제 경로를 위한 다중 판매자 및 다중 통화 체크아웃 처리를 추가합니다. 이어진 &lt;a href="https://github.com/shopstr-eng/milk-market/pull/11">PR #11&lt;/a>은 신규 설치에서 failed relay publishes 테이블이 생성되지 않아 첫 로드 시 500 오류를 내던 데이터베이스 초기화 버그를 고쳤습니다. 이 에이전트 인터페이스는 Shopstr에서는 Bitcoin 네이티브 결제와, Milk Market에서는 법정화폐와 Bitcoin을 섞은 결제 흐름과 함께 동작합니다.&lt;/p>
&lt;h3 id="bunker-서명자-relay-전반의-nip-42-relay-auth">Bunker, 서명자, relay 전반의 NIP-42 relay auth&lt;/h3>
&lt;p>&lt;a href="https://github.com/flox1an/oauth-bunker">OAuth Bunker&lt;/a>는 OAuth 제공자와 Nostr 서명을 연결하는 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a>(Nostr Connect) bunker로, &lt;a href="https://nostrcompass.org/ko/topics/nip-07/">NIP-07&lt;/a>(브라우저 확장 서명자) 로그인, 자동 단일 신원 선택, 삭제된 신원의 정리 기능을 추가했습니다(&lt;a href="https://github.com/flox1an/oauth-bunker/commit/f0c7683cb2374fd9a3ebd1b186055da8abd2c2ff">commit f0c7683&lt;/a>). 신원이 하나뿐이면 더 이상 선택을 묻지 않고 자동으로 그 신원을 선택합니다. 신원을 삭제할 때는 매달린 할당과 연결도 함께 제거합니다. &lt;a href="https://github.com/flox1an/oauth-bunker/commit/6b8796c6c59c7d48dc1ede92d6de6bf54feb56cc">commit 6b8796c&lt;/a>는 할당된 사용자를 위한 &lt;code>ALWAYS_ALLOWED_KINDS&lt;/code> 설정 경로를 추가했고, 기본값으로 앱 전용 데이터인 kind &lt;code>30078&lt;/code>을 허용합니다. 덕분에 위임된 신원은 각 event마다 별도 승인을 요구하지 않고 앱 전용 저장소에 쓸 수 있습니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>는 Android용 대표적인 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> 서명자로, 한 주 동안 네 번의 프리릴리스를 거쳐 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.3-pre4">v4.1.3-pre4&lt;/a>를 공개했습니다. &lt;a href="https://github.com/greenart7c3/Amber/pull/317">PR #317&lt;/a>은 kind &lt;code>22242&lt;/code> 요청에 대한 &lt;a href="https://nostrcompass.org/ko/topics/nip-42/">NIP-42&lt;/a> relay 인증 처리를 추가합니다. 구현은 relay별 권한을 추적하는 새 데이터베이스 컬럼과 &lt;code>(pkKey, type, kind, relay)&lt;/code>에 대한 고유 인덱스를 도입합니다. 사용자는 relay별 또는 와일드카드 &lt;code>*&lt;/code> 범위로 모든 relay에 대해 허용 또는 거부를 선택할 수 있는 전용 인증 화면을 보게 되며, 그 선택은 영속화됩니다. 와일드카드 권한은 특정 kind에 대한 개별 relay 권한을 모두 정리합니다. &lt;a href="https://github.com/greenart7c3/Amber/pull/318">PR #318&lt;/a>은 이어서 다중 event 요청 화면을 별도 화면 이동 대신 composable 카드 안에 세부 정보를 바로 표시하도록 리팩터링했습니다. 이번 릴리스는 기본 프로필 relay 업데이트, bottom-sheet 요청 표시, StrongBox keystore를 비활성화해 MediaTek 기기에서 발생하던 충돌 수정도 포함합니다.&lt;/p>
&lt;p>relay 측에서는 &lt;a href="https://github.com/hoytech/strfry/pull/156">strfry PR #156&lt;/a>이 &lt;a href="https://nostrcompass.org/ko/topics/nip-70/">NIP-70&lt;/a>(Protected Events)을 위한 NIP-42 인증 처리를 구현했고, &lt;a href="https://github.com/hoytech/strfry/pull/176">PR #176&lt;/a>은 protected event를 포함한 repost를 거부합니다.&lt;/p>
&lt;h3 id="notedeck이-nip-11-relay-제한과-agentium-기능을-추가">Notedeck이 NIP-11 relay 제한과 Agentium 기능을 추가&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>는 Damus 팀이 만드는 네이티브 데스크톱 클라이언트로, 이번 주 14개의 PR을 병합했습니다. &lt;a href="https://github.com/damus-io/notedeck/pull/1316">PR #1316&lt;/a>은 &lt;a href="https://nostrcompass.org/ko/topics/nip-11/">NIP-11&lt;/a>(Relay Information Document)의 relay 제한 정보를 가져오는 기능을 추가해, 모든 outbox relay가 이제 relay 정보 문서의 &lt;code>max_message_length&lt;/code>와 &lt;code>max_subscriptions&lt;/code>를 존중합니다. 구현에는 백그라운드 작업 처리, 연결 재시도를 위한 지터가 있는 지수 백오프, 맞춤형 HTTP Accept 헤더가 포함됩니다. &lt;a href="https://github.com/damus-io/notedeck/pull/1312">PR #1312&lt;/a>는 계정 전환 후 DM이 가끔 로드되지 않던 버그를 고쳤고, &lt;a href="https://github.com/damus-io/notedeck/pull/1333">PR #1333&lt;/a>은 에러 시 relay 멀티캐스트 통신이 브로드캐스트 스팸이 되지 않도록 백오프 메커니즘을 추가했습니다.&lt;/p>
&lt;p>Agentium 하위 시스템(Notedeck 내부의 코딩 에이전트 UI, 내부 명칭은 &amp;ldquo;Dave&amp;rdquo;)에는 클립보드 이미지 붙여넣기, kind &lt;code>31991&lt;/code> event를 통한 기기 간 동기화가 가능한 named run configuration(&lt;a href="https://nostrcompass.org/ko/topics/nip-33/">NIP-33&lt;/a>(매개변수화된 교체 가능 event)), git worktree 생성기, 세션별 백엔드 선택을 위한 모델 선택기가 추가됐습니다(&lt;a href="https://github.com/damus-io/notedeck/pull/1336">PR #1336&lt;/a>). &lt;a href="https://github.com/damus-io/notedeck/pull/1338">PR #1338&lt;/a>은 헤드리스 UI 테스트를 위해 &lt;code>egui_kittest&lt;/code>를 통합했고, &lt;a href="https://github.com/damus-io/notedeck/pull/1339">PR #1339&lt;/a>은 클라이언트별 새 contact list 생성 수를 추적하는 대시보드 카드를 추가했습니다. 열린 &lt;a href="https://github.com/damus-io/notedeck/pull/1314">PR #1314&lt;/a>는 ElectrumX 조회, SOCKS5 Tor 라우팅, 검색창 통합을 포함해 Amethyst의 Namecoin NIP-05 해석 기능을 Notedeck으로 이식합니다.&lt;/p>
&lt;h3 id="divine-v106-e2e-테스트-인프라와-nip-49-가져오기-포함">diVine v1.0.6, E2E 테스트 인프라와 NIP-49 가져오기 포함&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>은 &lt;a href="https://divine.video">divine.video&lt;/a>에서 Vine 아카이브를 복원하는 짧은 루프형 비디오 클라이언트로, 127개의 병합된 PR과 함께 &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.6">v1.0.6&lt;/a>을 출시했습니다. 이 릴리스는 &lt;a href="https://nostrcompass.org/ko/topics/nip-49/">NIP-49&lt;/a> 계정 가져오기, 외부 &lt;a href="https://nostrcompass.org/ko/topics/nip-05/">NIP-05&lt;/a> 지원, 다중 계정 처리, macOS 및 실험적 Linux 빌드, 로컬 스토리지 기반으로 다시 설계된 초안 및 클립 라이브러리를 추가합니다.&lt;/p>
&lt;p>엔지니어링 측면에서 &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1928">PR #1928&lt;/a>은 relay, API, Blossom, Postgres, Redis, ClickHouse로 구성된 Docker 백엔드 스택을 대상으로 Patrol을 이용한 네이티브 UI 자동화 기반의 완전한 E2E 통합 테스트 인프라를 추가합니다. 다섯 개의 인증 여정 테스트가 등록, 검증, 비밀번호 재설정, 세션 만료, 토큰 갱신을 다룹니다. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2105">PR #2105&lt;/a>은 비디오 로딩을 HLS 우선 방식에서 직접 MP4 우선 방식으로 바꾸고 자동 HLS fallback을 추가해, 로딩 시간을 30~60초에서 거의 즉시 수준으로 줄였습니다. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2076">PR #2076&lt;/a>은 홈 피드 API 응답을 SharedPreferences에 캐시해 콜드 스타트 시 즉시 표시되게 하고, &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2104">PR #2104&lt;/a>는 &lt;code>ai-generated&lt;/code> 콘텐츠 라벨이 붙은 항목을 피드에서 숨김 처리하며, &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2100">PR #2100&lt;/a>은 diVine 호스팅 비디오만 보이게 하는 안전 설정을 추가합니다. Hive에서 Drift로의 프로필 캐시 마이그레이션도 &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1881">PR #1881&lt;/a>, &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1883">PR #1883&lt;/a>, &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1903">PR #1903&lt;/a>에 걸쳐 계속 진행되며, 약 1,074줄의 Hive 코드를 Drift DAO로 대체하고 있습니다.&lt;/p>
&lt;h3 id="vector-v032-nip-77-negentropy-동기화와-mls-개선-포함">Vector v0.3.2, NIP-77 negentropy 동기화와 MLS 개선 포함&lt;/h3>
&lt;p>&lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a>(개인 다이렉트 메시지)과 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a>(암호화 payload)를 사용하는 MLS 그룹 암호화 기반의 프라이버시 중심 데스크톱 메신저로, &lt;a href="https://github.com/VectorPrivacy/Vector/releases/tag/v0.3.2">v0.3.2&lt;/a>를 출시했습니다. 핵심 변경은 MLS 그룹 동기화를 위한 NIP-77 negentropy(&lt;a href="https://github.com/VectorPrivacy/Vector/commit/b06adf4af2673fb5ac5add01356999ea70628eac">commit b06adf4&lt;/a>)입니다. 이를 통해 parallel boot를 사용해 놓친 메시지를 훨씬 더 빠르게 따라잡을 수 있습니다. 이 릴리스는 Linux 전체 지원이 포함된 재구축된 오디오 엔진, 흐림 미리보기가 있는 이미지 spoiler, 풍부한 링크 미리보기를 갖춘 클릭 가능한 하이퍼링크, 그룹 관리자용 &lt;code>@everyone&lt;/code>을 포함한 &lt;code>@mention&lt;/code> 알림, 이모지 shortcode 자동완성, 그룹 음소거, 기존 리액션에 대한 탭 반응, 취소 가능한 파일 업로드도 추가합니다. Vector는 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> 그룹 채팅 event를 명시적으로 필터링하며(&lt;a href="https://github.com/VectorPrivacy/Vector/commit/2179a51c0449b3a70663a1573195b7945adf58ba">commit 2179a51&lt;/a>), 그룹 암호화에는 MLS만 사용합니다.&lt;/p>
&lt;h2 id="릴리스">릴리스&lt;/h2>
&lt;h3 id="route96-v050-및-v051">Route96 v0.5.0 및 v0.5.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/v0l/route96">Route96&lt;/a>는 Blossom과 &lt;a href="https://nostrcompass.org/ko/topics/nip-96/">NIP-96&lt;/a>(HTTP 파일 저장)를 지원하는 미디어 서버로, &lt;a href="https://github.com/v0l/route96/releases/tag/v0.5.0">v0.5.0&lt;/a>과 &lt;a href="https://github.com/v0l/route96/releases/tag/v0.5.1">v0.5.1&lt;/a>을 출시했습니다. v0.5.0은 자동 AI 라벨링, 라벨이 없는 기존 업로드에 대한 소급 백필, 문제 있는 파일을 위한 moderation queue, EXIF 기반 프라이버시 거부, 금지된 해시 처리 기능을 추가합니다.&lt;/p>
&lt;p>v0.5.1은 perceptual image hash, 유사 이미지 조회를 위한 locality-sensitive hashing, 배치 관리자 엔드포인트, 에이전트 도구용 서버의 Blossom 및 NIP-96 API 표면을 설명하는 공개 &lt;a href="https://github.com/v0l/route96/releases/tag/v0.5.1">&lt;code>SKILL.md&lt;/code>&lt;/a>를 추가합니다. &lt;a href="https://github.com/v0l/route96/pull/58">PR #58&lt;/a>은 백그라운드 워커를 완전 비동기 Tokio task로 옮기고, &lt;a href="https://github.com/v0l/route96/commit/97b00a39e27b07053c2ad335dbf475bacba57bf8">commit 97b00a3&lt;/a>은 hot loop를 피하기 위한 백오프를 추가합니다.&lt;/p>
&lt;h3 id="samizdat-v100-alpha">Samizdat v1.0.0-alpha&lt;/h3>
&lt;p>&lt;a href="https://github.com/satsdisco/samizdat">Samizdat&lt;/a>는 &lt;a href="https://samizdat.press">samizdat.press&lt;/a>에서 제공되는 장문 리더 및 퍼블리셔로, 첫 Android 빌드인 &lt;a href="https://github.com/satsdisco/samizdat/releases/tag/v1.0.0-alpha">v1.0.0-alpha&lt;/a>를 공개했습니다. 앱은 장문 Nostr 글이 큐레이션된 Press 페이지로 시작하며, Press, Feed, Saved, Write 보기를 오가는 하단 탭 내비게이션을 갖춥니다. Android 빌드는 Android Keystore 암호화를 통한 네이티브 키 저장과 생체 잠금 해제를 추가했고, &lt;code>nostr:&lt;/code> URI와 &lt;code>samizdat.press&lt;/code> 딥링크를 처리하며, 직접 키 가져오기 대신 Android 앱 chooser를 통한 서명자 handoff(Amber, Primal 등)를 지원합니다. pull-to-refresh, 다양한 화면 크기에서의 safe-area 처리, 네이티브 공유, 클립보드, 햅틱, 스플래시 화면 통합도 웹 래퍼가 아니라 Android 셸에 포함됩니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/satsdisco/samizdat/commit/d17308f3c2e6020e14074fbb1c03a8f60f29a3e6">commit d17308f&lt;/a>은 Amber와 Primal 흐름을 위한 intent 기반 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> 서명을 추가했고, &lt;a href="https://github.com/satsdisco/samizdat/commit/e29dab84f7b58edd621f7b86ed7ca6458f965614">commit e29dab8&lt;/a>은 JavaScript bridge 우회 코드를 &lt;code>startActivityForResult&lt;/code>를 사용하는 네이티브 Capacitor 플러그인으로 교체했습니다. 앱은 Android 7.0 이상(API 24)을 요구하고, 이 alpha에서는 debug APK로 배포되며, 아직 푸시 알림은 없습니다. 현재 게시 기능은 서명자 앱에 의존하고, &lt;code>nsec&lt;/code> 로그인은 로컬 읽기와 계정 접근만 다룹니다.&lt;/p>
&lt;h3 id="calendar-by-form-v020">Calendar by Form* v0.2.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-calendar">Calendar by Form*&lt;/a>는 &lt;a href="https://calendar.formstr.app">calendar.formstr.app&lt;/a>에서 제공되는 탈중앙화 캘린더 앱으로, &lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59&lt;/a>(Gift Wrap) 기반 비공개 event 공유를 지원합니다. 이번에 &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/38">PR #38&lt;/a>와 함께 &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v0.2.0">v0.2.0&lt;/a>을 출시했습니다. 이 릴리스는 &lt;a href="https://nostrcompass.org/ko/topics/nip-52/">NIP-52&lt;/a>(Calendar Events)의 반복 event 처리를 확장하며, v0.1.0의 단일 event 기반을 넘어섭니다. 하부 변경은 로컬 event 저장소, 서명자 처리, Android 알림 배선에도 영향을 줍니다. Formstr 조직에서 지난달 저장소 이전에 이어 두 번째로 활발히 개발되는 애플리케이션입니다.&lt;/p>
&lt;h3 id="mostro-v0164">Mostro v0.16.4&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a>는 Nostr 기반 P2P Bitcoin 거래소로, &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.16.4">v0.16.4&lt;/a>를 출시했습니다. &lt;a href="https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/">지난주&lt;/a> 다뤘던 dispute-session restore(&lt;a href="https://github.com/MostroP2P/mostro/pull/599">PR #599&lt;/a>)와 auto-close(&lt;a href="https://github.com/MostroP2P/mostro/pull/606">PR #606&lt;/a>) 수정이 포함됩니다. 이번 릴리스의 새로운 내용은 kind &lt;code>38384&lt;/code> 사용자 평점 event에 &lt;code>days&lt;/code> 필드를 추가하는 &lt;a href="https://github.com/MostroP2P/mostro/pull/625">PR #625&lt;/a>, 해당 평점 event에 만료를 더하는 &lt;a href="https://github.com/MostroP2P/mostro/pull/612">PR #612&lt;/a>, 주문 event를 하드코딩된 24시간 창 대신 구성 가능한 만료 설정으로 전환하는 &lt;a href="https://github.com/MostroP2P/mostro/pull/614">PR #614&lt;/a>, 그리고 중복 개발 수수료 지급을 막는 idempotency 검사 &lt;a href="https://github.com/MostroP2P/mostro/pull/622">PR #622&lt;/a>입니다.&lt;/p>
&lt;h3 id="mostro-mobile-v121">Mostro Mobile v1.2.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a>은 Mostro P2P 거래소의 Flutter 클라이언트로, 11개의 신규 기능과 11개의 버그 수정을 포함한 &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.1">v1.2.1&lt;/a>을 출시했습니다. 이번 릴리스는 분쟁 채팅의 암호화 멀티미디어 렌더링(&lt;a href="https://github.com/MostroP2P/mobile/pull/514">PR #514&lt;/a>), 주문이 종료 상태에 도달했을 때 분쟁 UI를 자동으로 닫는 기능(&lt;a href="https://github.com/MostroP2P/mobile/pull/503">PR #503&lt;/a>), NWC 지갑 가져오기를 위한 QR 스캔(&lt;a href="https://github.com/MostroP2P/mobile/commit/12eaee4d154fa31b07f82b96819de520e825aee6">commit 12eaee4&lt;/a>), 프랑스어 번역, FCM 푸시 알림 처리를 추가합니다. &lt;a href="https://github.com/MostroP2P/mobile/pull/496">PR #496&lt;/a>은 bip340 의존성을 v0.2.0으로 고정해 Schnorr 서명 패딩 버그를 수정합니다.&lt;/p>
&lt;h3 id="0xchat-v154">0xchat v1.5.4&lt;/h3>
&lt;p>&lt;a href="https://github.com/0xchat-app/0xchat-app-main">0xchat&lt;/a>은 Cashu를 지원하는 Telegram 스타일 메시징 클라이언트로, Linux 데스크톱 수정에 초점을 둔 &lt;a href="https://github.com/0xchat-app/0xchat-app-main/releases/tag/v1.5.4-release">v1.5.4&lt;/a>를 출시했습니다. AppImage dock 아이콘, 이모지 렌더링, 컨텍스트 메뉴 멈춤, 답글 및 복사 UI 정지 문제가 고쳐졌고, 이미지 업로드와 npub.cash 통합 관련 수정도 포함됐습니다. &lt;a href="https://github.com/0xchat-app/0xchat-app-main/pull/49">PR #49&lt;/a>는 아무 일도 하지 않으면서 glassmorphic 리페인트를 강제하던 3초 폴링 타이머를 제거해 불필요한 UI 재구성을 없앴고, event cache 로딩을 동시 실행으로 바꿔 relay, 연락처, 채널 초기화를 막던 로그인 정체도 해결했습니다.&lt;/p>
&lt;h3 id="keep-v060">Keep v0.6.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a>은 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a>와 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a>을 지원하는 Android용 FROST threshold 서명자로, &lt;a href="https://github.com/privkeyio/keep-android/releases/tag/v0.6.0">v0.6.0&lt;/a>과 &lt;a href="https://github.com/privkeyio/keep-android/releases/tag/v0.6.1">v0.6.1&lt;/a>을 출시했습니다. v0.6.0은 지갑 descriptor 조정과 관리 UI, 생체 인증이 포함된 백업/복원 흐름(&lt;a href="https://github.com/privkeyio/keep-android/pull/184">PR #184&lt;/a>), threshold share로부터의 &lt;code>nsec&lt;/code> 복구(&lt;a href="https://github.com/privkeyio/keep-android/pull/187">PR #187&lt;/a>), Rust UniFFI 기반의 크로스플랫폼 애니메이션 QR 프레임 생성(&lt;a href="https://github.com/privkeyio/keep-android/pull/188">PR #188&lt;/a>), chain verification을 포함한 서명 감사 추적(&lt;a href="https://github.com/privkeyio/keep-android/pull/189">PR #189&lt;/a>)을 추가합니다. v0.6.1은 라이선스를 AGPL-3.0에서 MIT로 전환합니다(&lt;a href="https://github.com/privkeyio/keep-android/pull/191">PR #191&lt;/a>).&lt;/p>
&lt;h3 id="njump-v030">njump v0.3.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/njump">njump&lt;/a>은 &lt;a href="https://njump.me">njump.me&lt;/a>에서 Nostr 콘텐츠를 보여주는 정적 게이트웨이로, &lt;code>note1&lt;/code> 코드 파싱의 호환성 깨뜨리는 변경과 기반 nostr 라이브러리 업데이트를 포함한 &lt;a href="https://github.com/fiatjaf/njump/releases/tag/v0.3.0">v0.3.0&lt;/a>을 출시했습니다.&lt;/p>
&lt;h3 id="roadstr-v011">Roadstr v0.1.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/jooray/roadstr">Roadstr&lt;/a>는 Nostr를 이용한 탈중앙화 도로 이벤트 신고 앱으로, 초기 데모 릴리스 &lt;a href="https://github.com/jooray/roadstr/releases/tag/v0.1.1">v0.1.1&lt;/a>을 공개했습니다. 앱은 openfreemap.org의 vector tile을 사용해 지도 위에 도로 이벤트를 표시합니다.&lt;/p>
&lt;h3 id="bitcredit-v053">Bitcredit v0.5.3&lt;/h3>
&lt;p>&lt;a href="https://github.com/BitcreditProtocol/Bitcredit-Core">Bitcredit&lt;/a>는 Nostr 전송 계층과 전용 relay를 갖춘 e-bill 애플리케이션으로, &lt;a href="https://github.com/BitcreditProtocol/Bitcredit-Core/releases/tag/v0.5.3">v0.5.3&lt;/a>을 출시했습니다. &lt;a href="https://github.com/BitcreditProtocol/Bitcredit-Core/pull/846">PR #846&lt;/a>은 결제 및 수락 상태를 위한 &lt;code>payment_actions&lt;/code>와 &lt;code>bill_state&lt;/code> 필드를 API에 추가했고, &lt;a href="https://github.com/BitcreditProtocol/Bitcredit-Core/pull/849">PR #849&lt;/a>는 익명 서명자의 signing address 처리를 고쳤습니다.&lt;/p>
&lt;h3 id="openchat-v010-alpha3">OpenChat v0.1.0-alpha.3&lt;/h3>
&lt;p>&lt;a href="https://github.com/DavidGershony/openChat">OpenChat&lt;/a>은 Marmot 프로토콜의 .NET MLS 및 C# 라이브러리 위에 구축된 채팅 애플리케이션으로, &lt;a href="https://github.com/DavidGershony/openChat/releases/tag/v0.1.0-alpha.3">v0.1.0-alpha.3&lt;/a>를 출시했습니다. 이번 릴리스는 Amber와 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> 흐름을 위한 외부 서명자 지원(&lt;a href="https://github.com/DavidGershony/openChat/commit/e568d979fe15eead19172f2eb6f8cf26ca845247">commit e568d97&lt;/a>), 충돌 사이 데이터 유실 가능성을 없애기 위해 MLS 상태 영속성을 MLS 서비스 내부로 옮긴 변경(&lt;a href="https://github.com/DavidGershony/openChat/commit/4720bc8625136a0d5b0e23322bc0c50cd80577e8">commit 4720bc8&lt;/a>), 새 CI 파이프라인을 통한 Windows, Linux, Android 빌드 공개를 포함합니다.&lt;/p>
&lt;h3 id="opensignal-v100">OpenSignal v1.0.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/turizspace/opensignal">OpenSignal&lt;/a>은 Nostr용 Kotlin Multiplatform 트레이딩 copilot으로, &lt;a href="https://github.com/turizspace/OpenSignal/releases/tag/v1.0.0">v1.0.0&lt;/a>을 출시했습니다. 이 릴리스는 도메인 로직, 차트 렌더링, Nostr 인증과 게시, Blossom &lt;a href="https://nostrcompass.org/ko/topics/nip-96/">NIP-96&lt;/a> 업로드 지원, ONNX 기반 AI 추론 훅을 Desktop과 Android 셸 전반에서 공유하는 KMP 모듈을 패키징합니다. 공개된 아키텍처에는 차트 스크린샷 분석용 FastAPI AI 서비스, 모델 학습 파이프라인, 규모와 경고를 포함한 구조화된 거래 계획을 생성하는 리스크 엔진도 포함됩니다. 로그인은 원시 &lt;code>nsec&lt;/code> 키 또는 외부 서명자를 지원하며, 출력 흐름은 로컬 분석에 머무르지 않고 Nostr event 게시로 끝납니다.&lt;/p>
&lt;h2 id="프로젝트-업데이트">프로젝트 업데이트&lt;/h2>
&lt;h3 id="formstr">Formstr&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-forms">Formstr&lt;/a>는 Nostr 기반의 Google Forms 대안으로, &lt;a href="https://github.com/formstr-hq/nostr-forms/pull/434">PR #434&lt;/a>(&lt;a href="https://github.com/formstr-hq/nostr-forms/commit/e9c4fd5dadfa0b83f1e87d7596eaf35f9fdb7da8">commit e9c4fd5&lt;/a>)를 병합해 &lt;a href="https://nostrcompass.org/ko/topics/nip-49/">NIP-49&lt;/a>(개인 키 암호화) 기반 가입 흐름을 추가했습니다. 이전에는 Formstr를 쓰려면 &lt;a href="https://nostrcompass.org/ko/topics/nip-07/">NIP-07&lt;/a> 브라우저 확장 또는 원시 &lt;code>nsec&lt;/code> 붙여넣기가 필요했습니다. 새 흐름은 클라이언트 측에서 키페어를 만들고, 사용자가 고른 비밀번호로 NIP-49의 scrypt + XChaCha20-Poly1305 스킴을 사용해 개인 키를 암호화한 뒤, 결과 &lt;code>ncryptsec&lt;/code> 문자열을 저장합니다. 사용자는 서명자 확장을 설치하지 않고도 비밀번호만으로 다시 로그인할 수 있습니다. 키 관리는 전 과정에서 클라이언트 측에 머뭅니다.&lt;/p>
&lt;h3 id="amethyst">Amethyst&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>는 지난주 오픈 상태였던 Namecoin 기반 &lt;a href="https://nostrcompass.org/ko/topics/nip-05/">NIP-05&lt;/a> 해석 작업을 실제로 배포한 네 개의 PR을 병합했습니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1734">PR #1734&lt;/a>는 &lt;code>.bit&lt;/code>, &lt;code>d/&lt;/code>, &lt;code>id/&lt;/code> 식별자에 대해 ElectrumX를 사용한 검열 저항형 NIP-05 검증을 추가합니다. Amethyst가 NIP-05 필드에서 이러한 접미사를 감지하면 ElectrumX-NMC 서버에서 이름의 거래 이력을 조회하고, 최신 출력의 &lt;code>NAME_UPDATE&lt;/code> 스크립트를 파싱해 Nostr pubkey를 추출하며, 36,000블록(Namecoin 만료 기간)보다 오래된 이름은 거부합니다. ElectrumX 연결은 Tor가 켜져 있으면 SOCKS5를 통해 라우팅되고, clearnet과 &lt;code>.onion&lt;/code> 엔드포인트 사이를 동적으로 선택합니다. 1시간 TTL의 LRU 캐시가 반복적인 블록체인 조회를 방지합니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1771">PR #1771&lt;/a>은 이 흐름의 경쟁 상태와 resolver 정확도를 수정합니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1785">PR #1785&lt;/a>는 신규 사용자가 일반 NIP-05 식별자나 Namecoin 기반 식별자에서 팔로우 목록을 가져와 가입할 수 있게 하며, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1786">PR #1786&lt;/a>은 어떤 ElectrumX 서버를 사용할지 사용자가 직접 고를 수 있는 설정을 추가합니다.&lt;/p>
&lt;h3 id="nostr-idb">nostr-idb&lt;/h3>
&lt;p>&lt;a href="https://github.com/hzrd149/nostr-idb">nostr-idb&lt;/a>는 IndexedDB에 Nostr event를 저장하는 도우미 라이브러리로, &lt;a href="https://nostrcompass.org/ko/topics/nip-91/">NIP-91&lt;/a> AND 태그 필터 지원을 추가하는 &lt;a href="https://github.com/hzrd149/nostr-idb/pull/6">PR #6&lt;/a>을 병합했습니다. 이 변경은 클라이언트 측 필터 매칭에 교집합 의미론을 추가해, IndexedDB 조회가 주어진 태그 값 중 하나가 아니라 모두를 요구할 수 있게 합니다. &lt;a href="https://github.com/hzrd149/nostr-idb/pull/8">PR #8&lt;/a>은 라이브러리를 최신 NIP-DB 인터페이스로 업데이트했고, 후속 &lt;a href="https://github.com/hzrd149/nostr-idb/commit/b49b3d32c575ff8214dc3fb07675109c2a971972">commit b49b3d3&lt;/a>은 subscribe deadlock을 수정하고 nostr-tools를 프로덕션 의존성에서 제거합니다.&lt;/p>
&lt;h3 id="pensieve">Pensieve&lt;/h3>
&lt;p>&lt;a href="https://github.com/andotherstuff/pensieve">Pensieve&lt;/a>는 ClickHouse 분석을 제공하는 archive-first Nostr 인덱서로, &lt;a href="https://github.com/andotherstuff/pensieve/pull/8">PR #8&lt;/a>을 병합해 항목별 캐시 TTL 강제와 키별 miss coalescing을 추가했습니다. 가장 비용이 높은 시계열 엔드포인트(engagement stats, 시간대별 활동, kind별 활동)는 이제 동기식 재계산 폭주를 유발하는 대신 10분 서버 측 TTL을 사용합니다.&lt;/p>
&lt;h3 id="blossom">Blossom&lt;/h3>
&lt;p>&lt;a href="https://github.com/hzrd149/blossom">Blossom&lt;/a>은 탈중앙화 미디어 호스팅 프로토콜 및 서버 스택으로, BUD-11 인증 관련 두 가지 업데이트를 병합했습니다. &lt;a href="https://github.com/hzrd149/blossom/pull/91">PR #91&lt;/a>은 선택적 인증을 별도 BUD로 분리하고 &lt;code>x&lt;/code> 및 &lt;code>server&lt;/code> 태그의 역할을 명확히 합니다. &lt;a href="https://github.com/hzrd149/blossom/pull/93">PR #93&lt;/a>은 엔드포인트별 인증 동작을 정리하고 업로드 검증을 위한 &lt;code>X-SHA-256&lt;/code> 헤더를 공식화합니다. 이 두 PR은 인증 로직을 BUD-11로 통합하고 업로드, 삭제, 미디어 관리 흐름의 요청 해시 처리에 있던 모호성을 없앱니다.&lt;/p>
&lt;h2 id="nip-업데이트">NIP 업데이트&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 저장소&lt;/a>의 최근 변경 사항:&lt;/p>
&lt;p>&lt;strong>병합됨:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-91/">NIP-91&lt;/a> (필터용 AND 연산자)&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/1365">PR #1365&lt;/a>): 태그 필터에 교집합 의미론을 추가해 relay가 나열된 모든 태그 값을 요구하는 질의를 처리할 수 있게 합니다. 태그가 많은 질의에서 클라이언트 측 후처리와 대역폭을 줄여줍니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-66/">NIP-66&lt;/a> (Relay Discovery and Liveness Monitoring): 방어 조치&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2240">PR #2240&lt;/a>): &lt;a href="https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/">지난주&lt;/a> 다룬 outbox 벤치마크 작업에 이어, 이 사양은 relay 모니터링 데이터의 불리한 경로에 대한 경고를 추가합니다. 클라이언트는 동작을 위해 kind &lt;code>30166&lt;/code> 모니터링 event를 필수로 요구해서는 안 됩니다. 모니터는 틀릴 수도, 오래됐을 수도, 악의적일 수도 있습니다. 따라서 클라이언트는 여러 출처를 교차 검증해야 하며, 단일 피드만 보고 사용자의 relay 그래프 중 큰 부분을 끊어내면 안 됩니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-39/">NIP-39&lt;/a> (프로필의 외부 신원): kind 10011 레지스트리 정리&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2256">PR #2256&lt;/a>): kind &lt;code>10011&lt;/code> 참조를 사양에 직접 추가해, &lt;a href="https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/">지난주&lt;/a> 다룬 Amethyst 구현과 사양을 정렬합니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>열린 PR 및 논의:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-70/">NIP-70&lt;/a> (Protected Events): protected event를 포함한 repost 거부&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2251">PR #2251&lt;/a>): relay가 원본 event에는 NIP-70을 적용하면서 같은 콘텐츠를 담은 repost를 허용하면 &lt;code>-&lt;/code> 태그는 사실상 효력이 없습니다. 이 PR은 relay가 protected event를 담은 kind 6 및 kind 16 repost도 거부해야 한다는 규칙을 추가합니다. &lt;a href="https://github.com/hoytech/strfry/pull/176">strfry PR #176&lt;/a>은 이미 이를 구현했습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-71/">NIP-71&lt;/a> (Video Events): 다중 오디오 트랙&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2255">PR #2255&lt;/a>): 대체 트랙, 언어 변형, 오디오 전용 스트림을 위한 오디오 &lt;code>imeta&lt;/code> 태그를 추가합니다. 클라이언트는 비디오 파일은 그대로 유지한 채 오디오 언어만 바꾸거나, 팟캐스트 같은 콘텐츠를 위해 오디오를 별도 트랙으로 제공할 수 있습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-11/">NIP-11&lt;/a> (Relay Information Document) 및 &lt;a href="https://nostrcompass.org/ko/topics/nip-66/">NIP-66&lt;/a> relay 속성&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2257">PR #2257&lt;/a>): relay 정보 문서에 구조화된 &lt;code>attributes&lt;/code> 필드를 추가해, 클라이언트와 discovery 도구가 현재의 자유 형식 설명문을 넘어서는 기계 판독 가능한 메타데이터를 활용할 수 있게 합니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-심층-분석-nip-49-개인-키-암호화">NIP 심층 분석: NIP-49 (개인 키 암호화)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-49/">NIP-49&lt;/a>는 클라이언트가 개인 키를 비밀번호로 암호화하고 그 결과를 &lt;code>ncryptsec&lt;/code> bech32 문자열로 인코딩하는 방법을 정의합니다. &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-11-newsletter/#formstr">Formstr&lt;/a>는 새 가입 흐름에서 NIP-49를 사용합니다.&lt;/p>
&lt;p>이 형식은 전용 event kind에 묶여 있지 않습니다. 클라이언트는 원시 32바이트 secp256k1 개인 키에서 시작해, scrypt로 사용자의 비밀번호에서 대칭 키를 파생하고, XChaCha20-Poly1305로 키를 암호화한 뒤, 결과를 bech32 &lt;code>ncryptsec&lt;/code> 문자열로 감쌉니다. 1바이트 플래그는 암호화 전에 그 키가 안전하지 않은 방식으로 취급된 적이 있는지 여부를 기록합니다.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;4d47f4f0a6f6edbc1bbd7f4e2a45ec68f27cba91d6c6ab5cf28d8d87b0f3d57e&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;1f8b4c3e7b0f9451d4f9b8a7c6e5d4c3b2a1908f7e6d5c4b3a29181716151413&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1741699200&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30078&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;encrypted-key-backup&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;format&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;ncryptsec&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;encryption&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nip49&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;ncryptsec1qgg9947rlpvqu76pj5ecreduf9jxhselq2nae2kghhvd5g7dgjtcxfqtd67p9m0w57lspw8gsq6yphnm8623nsl8xn9j4jdzz84zm3frztj3z7s35vpzmqf6ksu8r89qk5z2zxfmu5gv8th8wclt0h4p&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;6a8f6e4b2d1901735f0ad4b6e8c1f3a579d0e2b4c6f8a1d3e5f7091b2c3d4e5f11223344556677889900aabbccddeeff00112233445566778899aabbccddeeff&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>위 JSON event는 애플리케이션 수준의 예시일 뿐 NIP-49 요구 사항은 아닙니다. NIP는 암호화된 키 형식 자체를 표준화합니다. 클라이언트는 &lt;code>ncryptsec&lt;/code>를 로컬에 저장하거나, 앱별 스토리지로 동기화하거나, 백업 문자열로 내보낼 수 있습니다. 비밀번호는 키 파생 전에 Unicode NFKC로 정규화되어, 동일한 비밀번호가 클라이언트와 플랫폼 전반에서 일관되게 복호화되도록 합니다.&lt;/p>
&lt;p>1바이트 키 보안 플래그에는 세 가지 값이 정의됩니다. &lt;code>0x00&lt;/code>은 키 처리 이력이 알 수 없음을 의미하고, &lt;code>0x01&lt;/code>은 암호화 전에 평문 웹 폼에 붙여넣는 식으로 안전하지 않게 취급된 것이 알려졌음을 의미하며, &lt;code>0x02&lt;/code>는 키가 안전한 환경에서 생성되고 암호화되어 한 번도 노출된 적이 없음을 뜻합니다. 클라이언트는 이를 이용해 안전하지 않은 이력이 있는 키를 가져올 때 경고를 띄울 수 있습니다.&lt;/p>
&lt;p>NIP-49는 평문 &lt;code>nsec&lt;/code> 내보내기보다 키를 더 잘 보호하지만, 암호화 강도는 비밀번호와 구성된 scrypt 비용에 달려 있습니다. &lt;code>LOG_N&lt;/code> 값이 높을수록 오프라인 추측은 어려워지지만, 정당한 복호화 작업도 느려집니다. 사양은 암호화된 키를 공개 relay에 게시하지 말라고 경고합니다. 공격자가 오프라인 크래킹용 암호문을 수집하는 데 유리해지기 때문입니다. 비교하자면 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> 원격 서명은 키를 아예 노출하지 않고, &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> Android 서명은 전용 서명자 앱 안에 키를 보관합니다. NIP-49는 다른 자리를 채웁니다. 자기 키를 직접 관리하는 사용자를 위한 이동 가능한 암호화 백업입니다.&lt;/p>
&lt;p>구현 사례로는 가입 흐름의 &lt;a href="https://github.com/formstr-hq/nostr-forms/pull/434">Formstr PR #434&lt;/a>, ncryptsec 백업 및 복원을 지원하는 &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>, 계정 가져오기를 지원하는 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-11-newsletter/#divine-v106-e2e-%ed%85%8c%ec%8a%a4%ed%8a%b8-%ec%9d%b8%ed%94%84%eb%9d%bc%ec%99%80-nip-49-%ea%b0%80%ec%a0%b8%ec%98%a4%ea%b8%b0-%ed%8f%ac%ed%95%a8">diVine v1.0.6&lt;/a>, FROST share 내보내기를 지원하는 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-11-newsletter/#keep-v060">Keep v0.6.0&lt;/a>, 그리고 &lt;a href="https://nsec.app">nsec.app&lt;/a>, &lt;a href="https://github.com/getAlby/hub">Alby&lt;/a> 같은 키 관리 도구가 있습니다.&lt;/p>
&lt;h2 id="nip-심층-분석-nip-70-protected-events">NIP 심층 분석: NIP-70 (Protected Events)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-70/">NIP-70&lt;/a>은 protected event를 정의합니다. event가 &lt;code>[&amp;quot;-&amp;quot;]&lt;/code> 태그를 갖고 있으면, relay는 &lt;a href="https://nostrcompass.org/ko/topics/nip-42/">NIP-42&lt;/a> 인증을 요구하고 인증된 pubkey가 event 작성자와 일치하는 경우가 아니면 이를 거부해야 합니다.&lt;/p>
&lt;p>NIP-42 인증 흐름은 다음과 같습니다. relay가 무작위 문자열이 담긴 &lt;code>AUTH&lt;/code> challenge를 보내고, 클라이언트는 relay URL과 challenge를 태그에 포함한 서명된 kind &lt;code>22242&lt;/code> event로 응답합니다. relay는 서명을 검증하고, auth event의 pubkey가 게시 중인 protected event의 pubkey와 일치하는지 확인합니다. 일치하지 않으면 relay는 &lt;code>restricted&lt;/code> 메시지 접두사와 함께 event를 거부합니다.&lt;/p>
&lt;p>event 내용 자체는 공개일 수 있습니다. &lt;code>-&lt;/code> 태그는 그 태그를 존중하는 relay에 누가 event를 게시할 수 있는지만 제어합니다. 이는 &lt;a href="https://nostrcompass.org/ko/topics/nip-29/">NIP-29&lt;/a> 반폐쇄형 피드, 멤버 전용 relay 공간, 기타 작성자가 relay 그래프를 통한 재배포를 제한하고 싶은 상황에 적용됩니다. NIP-70은 새로운 event kind가 아니라 단일 태그 규약이므로, 기존 어떤 event kind에도 붙을 수 있습니다.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;cb8feca582979d91fe90455867b34dbf4d65e4b86e86b3c68c368ca9f9eef6f2&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1707409439&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;-&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;hello members of the secret group&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;fa163f5cfb75d77d9b6269011872ee22b34fb48d23251e9879bb1e4ccbdd8aaaf4b6dc5f5084a65ef42c52fbcde8f3178bac3ba207de827ec513a6aa39fa684c&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>relay가 원본 event의 제3자 게시를 막더라도, 누군가는 내용을 repost 안에 다시 담을 수 있습니다. &lt;a href="https://github.com/nostr-protocol/nips/pull/2251">PR #2251&lt;/a>은 relay가 protected event를 포함한 kind 6 및 kind 16 repost도 거부하도록 요구해 이 문제를 해결합니다. &lt;a href="https://github.com/hoytech/strfry/pull/156">strfry PR #156&lt;/a>은 protected event용 NIP-42 인증 처리를 추가하고, &lt;a href="https://github.com/hoytech/strfry/pull/176">strfry PR #176&lt;/a>은 protected 콘텐츠를 담은 repost를 막습니다.&lt;/p>
&lt;p>NIP-70은 relay 동작을 제어합니다. 수신자가 내용을 다른 곳에 복사하는 것 자체는 막지 못하며, 사양도 이를 명시합니다. &lt;code>-&lt;/code> 태그는 relay가 재게시를 거부할 수 있도록 하는 기계 판독 가능한 신호입니다. 비교하자면 &lt;a href="https://nostrcompass.org/ko/topics/nip-62/">NIP-62&lt;/a>(Request to Vanish)는 사후에 relay에 삭제를 요청하고, NIP-70은 수집 시점에서 권한 없는 게시를 막습니다. 두 방식은 상호보완적입니다. 작성자는 확산을 제한하기 위해 event를 protected로 표시하고, 이후 이를 수용한 relay에서 내용을 제거하고 싶다면 삭제를 요청할 수 있습니다.&lt;/p>
&lt;hr>
&lt;p>이번 주는 여기까지입니다. 뭔가를 만들고 있거나 공유할 소식이 있나요? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">&lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> DM으로 연락&lt;/a>하시거나 Nostr에서 찾아주세요.&lt;/p></content:encoded></item><item><title>Nostr Compass #12</title><link>https://nostrcompass.org/ko/newsletters/2026-03-04-newsletter/</link><pubDate>Wed, 04 Mar 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2026-03-04-newsletter/</guid><description>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> &lt;a href="https://github.com/marmot-protocol/mdk">Marmot Development Kit&lt;/a>이 암호화 미디어와 다중 언어 바인딩을 포함한 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-04-newsletter/#marmot-development-kit-%ec%b2%ab-%ea%b3%b5%ea%b0%9c-%eb%a6%b4%eb%a6%ac%ec%8a%a4-%ec%b6%9c%ec%8b%9c">첫 공개 릴리스&lt;/a>를 출시했습니다. &lt;a href="https://github.com/nostrability/outbox">Nostrability&lt;/a>가 14개 relay 선택 알고리즘에 대한 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-04-newsletter/#outbox-%eb%aa%a8%eb%8d%b8-%eb%b6%84%ec%84%9d">outbox 모델 벤치마크&lt;/a>를 발표했습니다. &lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a>가 8일 만에 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-04-newsletter/#wisp-%ec%95%8c%ed%8c%8c%ec%97%90%ec%84%9c-%eb%b2%a0%ed%83%80%ea%b9%8c%ec%a7%80">첫 알파에서 베타&lt;/a>로 Tor와 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> (Android 서명자 애플리케이션) 서명을 추가했습니다. &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-04-newsletter/#nip-%ec%97%85%eb%8d%b0%ec%9d%b4%ed%8a%b8">NIP-91&lt;/a> (AND 필터)이 병합되었습니다. &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-04-newsletter/#vector-v031">Vector v0.3.1&lt;/a>이 15배 성능 향상과 함께 negentropy 동기화를 제공합니다. 이번 호에는 프로토콜이 세 개의 relay를 서비스하는 사양 재작성에서 Damus App Store 폭발, 메시 네트워킹과 AI 에이전트 제안까지 추적하는 Nostr 2월의 5년 회고도 포함됩니다.&lt;/p></description><content:encoded>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> &lt;a href="https://github.com/marmot-protocol/mdk">Marmot Development Kit&lt;/a>이 암호화 미디어와 다중 언어 바인딩을 포함한 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-04-newsletter/#marmot-development-kit-%ec%b2%ab-%ea%b3%b5%ea%b0%9c-%eb%a6%b4%eb%a6%ac%ec%8a%a4-%ec%b6%9c%ec%8b%9c">첫 공개 릴리스&lt;/a>를 출시했습니다. &lt;a href="https://github.com/nostrability/outbox">Nostrability&lt;/a>가 14개 relay 선택 알고리즘에 대한 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-04-newsletter/#outbox-%eb%aa%a8%eb%8d%b8-%eb%b6%84%ec%84%9d">outbox 모델 벤치마크&lt;/a>를 발표했습니다. &lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a>가 8일 만에 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-04-newsletter/#wisp-%ec%95%8c%ed%8c%8c%ec%97%90%ec%84%9c-%eb%b2%a0%ed%83%80%ea%b9%8c%ec%a7%80">첫 알파에서 베타&lt;/a>로 Tor와 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> (Android 서명자 애플리케이션) 서명을 추가했습니다. &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-04-newsletter/#nip-%ec%97%85%eb%8d%b0%ec%9d%b4%ed%8a%b8">NIP-91&lt;/a> (AND 필터)이 병합되었습니다. &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-04-newsletter/#vector-v031">Vector v0.3.1&lt;/a>이 15배 성능 향상과 함께 negentropy 동기화를 제공합니다. 이번 호에는 프로토콜이 세 개의 relay를 서비스하는 사양 재작성에서 Damus App Store 폭발, 메시 네트워킹과 AI 에이전트 제안까지 추적하는 Nostr 2월의 5년 회고도 포함됩니다.&lt;/p>
&lt;h2 id="뉴스">뉴스&lt;/h2>
&lt;h3 id="outbox-모델-분석">Outbox 모델 분석&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrability/outbox">Nostrability&lt;/a>가 탈중앙화 relay 네트워크에서 다양한 relay 선택 알고리즘이 event를 얼마나 잘 검색하는지 테스트하는 일련의 outbox 모델 벤치마크를 발표했습니다. 프로젝트는 10일 동안 16개의 PR과 76개의 커밋을 병합하여, &lt;a href="https://nostrcompass.org/ko/topics/nip-65/">NIP-65&lt;/a> (Relay List Metadata) 구현 전략에 대한 가장 철저한 실증 분석을 만들어냈습니다.&lt;/p>
&lt;p>벤치마크는 5개 언어의 15개 클라이언트 및 라이브러리에서 실제 팔로우 목록을 대상으로 14개 relay 선택 알고리즘을 테스트합니다. 인기 relay만 쿼리하는 기준선 접근법은 대략 26%의 event를 검색합니다. Thompson Sampling을 사용한 탐욕적 집합 커버는 80-90% 재현율에 도달합니다. 쌍곡선 할인과 EWMA relay 지연 추적을 사용하는 지연 인식 변형을 추가하면 6개 테스트 프로필에서 2초 시점의 완전성이 62-80%에서 72-96%로 향상되었습니다.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-66/">NIP-66&lt;/a> (Relay Monitoring) 죽은 relay 필터링이 중요한 역할을 했습니다. &lt;a href="https://nostr.watch">nostr.watch&lt;/a> 활성 데이터를 기반으로 relay 후보를 사전 필터링하면 죽은 relay가 40-64% 제거되고 relay 성공률이 30%에서 75-85%로 두 배 증가했습니다. 피드 로딩 시간은 39% 감소했습니다(10개 프로필에서 40초에서 24초로). EOSE 레이스 시뮬레이션에서는 첫 relay가 완료될 때 중단하는 것보다 EOSE에 200ms 유예 기간을 더해 기다리는 것이 완전성을 향상시켰습니다.&lt;/p>
&lt;p>relay 라우팅을 완전히 다시 작성할 수 없는 클라이언트의 경우, &amp;ldquo;하이브리드 outbox 강화&amp;rdquo; 접근법은 기존의 하드코딩된 앱 relay 위에 저자별 outbox 쿼리를 추가합니다. 이 하이브리드는 26% 기준선 대비 80%의 1년 event 재현율을 달성하여, 레거시 relay 아키텍처를 가진 클라이언트에게 마이그레이션 경로를 제공합니다.&lt;/p>
&lt;h3 id="contextvm-mcp-nip-제출-및-임시-gift-wrap-출시">ContextVM, MCP NIP 제출 및 임시 Gift Wrap 출시&lt;/h3>
&lt;p>Nostr와 &lt;a href="https://modelcontextprotocol.io/">Model Context Protocol&lt;/a>을 연결하는 프로토콜 &lt;a href="https://contextvm.org">ContextVM&lt;/a>이 이번 주 &lt;a href="https://github.com/nostr-protocol/nips">NIPs 저장소&lt;/a>에 두 개의 제안을 제출했습니다. &lt;a href="https://github.com/nostr-protocol/nips/pull/2246">PR #2246&lt;/a>은 임시 kind 25910 event를 사용하여 Nostr를 통해 MCP JSON-RPC 메시지를 전송하는 규약으로 CVM을 공식화합니다. &lt;a href="https://github.com/nostr-protocol/nips/pull/2245">PR #2245&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59&lt;/a> (Gift Wrap)를 &lt;a href="https://nostrcompass.org/ko/topics/nip-01/">NIP-01&lt;/a> (Basic Protocol Flow) 임시 의미론을 따르는 임시 kind(21059)로 확장하여, relay가 전달 후 래핑된 메시지를 폐기할 수 있게 합니다.&lt;/p>
&lt;p>임시 gift wrap 규약은 ContextVM SDK v0.6.x 릴리스 계열에서 &lt;a href="https://docs.contextvm.org/spec/ceps/cep-19/">CEP-19&lt;/a>로 출시되었습니다. &lt;a href="https://github.com/ContextVM/sdk">SDK 구현&lt;/a>은 세 가지 설정을 가진 &lt;code>GiftWrapMode&lt;/code> 열거형을 추가합니다: OPTIONAL(두 kind 모두 수락하고 피어 기능을 자동 감지), EPHEMERAL(kind 21059만), PERSISTENT(kind 1059만). AI 도구 호출의 경우, 임시 모드는 relay에 중간 요청-응답 트래픽을 저장하는 것을 피하여 저장 비용과 프라이버시 노출을 모두 줄입니다.&lt;/p>
&lt;p>독립 운영자로부터 Wolfram Alpha 쿼리 서버를 포함한 새로운 공개 MCP 서버가 네트워크에 등장했습니다. ContextVM 팀은 v0.6.x 릴리스 주기와 함께 CEP-15(공통 도구 스키마)와 CEP-17(서버 relay 목록 게시)을 발표했습니다.&lt;/p>
&lt;h3 id="marmot-development-kit-첫-공개-릴리스-출시">Marmot Development Kit 첫 공개 릴리스 출시&lt;/h3>
&lt;p>&lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>와 &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>에서 &lt;a href="https://nostrcompass.org/ko/topics/mls/">Marmot&lt;/a> 암호화 메시징을 구동하는 Rust 라이브러리 &lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a> (Marmot Development Kit)가 첫 공개 릴리스로 &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.6.0">v0.6.0&lt;/a>을 출시했습니다. 200개 이상의 PR이 이 버전에 병합되었으며, 6명의 새 기여자가 참여했습니다.&lt;/p>
&lt;p>이 릴리스에는 HKDF 시드 파생(MIP-01 v2)을 사용한 암호화 미디어 지원(MIP-04), 결정론적 커밋 경합 해결(MIP-03), 암호화된 로컬 저장소, Marmot 커밋 및 제안을 위한 관리자 인증 검증, 프로토콜 확장성을 위한 GREASE 지원이 포함됩니다. Kotlin, Python, Ruby, Windows용 바인딩과 Android 크로스 컴파일이 함께 제공됩니다. 라이브러리는 보안 권고 수정과 메모리에서 민감한 값을 제로화하는 &lt;code>Secret&amp;lt;T&amp;gt;&lt;/code> 타입이 포함된 OpenMLS 0.8.0으로 업그레이드됩니다.&lt;/p>
&lt;p>동반 프로토콜 변경(&lt;a href="https://github.com/marmot-protocol/marmot/pull/48">MIP-03&lt;/a>)은 kind 445 메시지의 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> (Encrypted Payloads) 암호화를 ChaCha20-Poly1305로 대체했습니다. NIP-44는 사양상 UTF-8 문자열 입력을 요구하여 표준 TypeScript Nostr 라이브러리를 통해 원시 Marmot 메시지 바이트를 전달하는 것이 불가능했습니다. 대체 방식은 Marmot exporter secret에서 직접 키를 파생합니다. 이 호환성 깨뜨리는 변경은 &lt;a href="https://github.com/marmot-protocol/marmot/pull/48">코어 사양&lt;/a>, &lt;a href="https://github.com/marmot-protocol/mdk/pull/208">MDK&lt;/a>, &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/54">TypeScript SDK&lt;/a> 전반에 걸친 조율된 업데이트가 필요했습니다.&lt;/p>
&lt;p>hzrd149가 유지 관리하는 TypeScript 구현 &lt;a href="https://github.com/marmot-protocol/marmot-ts">marmot-ts&lt;/a>는 자체적으로 호환성을 깨뜨리는 API 변경이 포함된 4개의 PR을 병합했습니다. &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/52">종합 업데이트&lt;/a>에는 생성/게시/순환 라이프사이클을 위한 키 패키지 관리자, &lt;code>sendChatMessage&lt;/code> 편의 메서드, 가입 없이 초대 미리보기(&lt;code>readInviteGroupInfo&lt;/code>), 순방향 비밀성 순환을 위한 자기 업데이트, 구조화된 디버그 로깅이 추가되었습니다. 그룹 복호화 API는 &lt;code>readGroupMessage&lt;/code>에서 &lt;code>decryptGroupMessage&lt;/code>로 이름이 변경되었으며 더 풍부한 결과 변형(processed/skipped/rejected/unreadable)이 제공됩니다. gzuuus는 NIP-65 relay 지원과 MIP-00에 따른 최후의 수단 키 패키지 처리가 포함된 예제 정리에 기여했습니다.&lt;/p>
&lt;p>모바일 앱과 새로운 TUI를 모두 구동하는 Rust 백엔드 &lt;a href="https://github.com/marmot-protocol/whitenoise-rs">White Noise CLI&lt;/a>(&lt;code>wn&lt;/code>)는 10일 동안 16개의 PR을 병합했습니다. 서명자 라이프사이클 처리가 RAII 스코프 가드를 통한 취소 안전성을 확보하여(&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/538">PR #538&lt;/a>), 중단된 작업이 서명자 상태를 누출할 수 있는 부류의 버그를 수정했습니다. 로그인은 이제 필수 relay 목록(kind 10002/10050/10051)이 누락되면 차단되며(&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/515">PR #515&lt;/a>), giftwrap 구독은 inbox 목록이 없을 때 &lt;a href="https://nostrcompass.org/ko/topics/nip-65/">NIP-65&lt;/a> relay로 대체됩니다(&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/518">PR #518&lt;/a>). 디버그 모드(&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/528">PR #528&lt;/a>)는 데이터베이스 쿼리와 MLS 래칫 트리 검사를 JSON 출력으로 노출합니다. 기타 수정 사항으로 서명자 재등록 후 구독 복구, welcome 메시지 캐치업 타이밍, relay 필터 검증, 사용자 검색 반경 제한이 처리되었습니다.&lt;/p>
&lt;p>Marmot은 이번 주 핵심 Rust 스택을 넘어 크게 확장되었습니다. White Noise 메시징 스택에 대한 터미널 기반 인터페이스 &lt;a href="https://github.com/marmot-protocol/wn-tui">White Noise TUI&lt;/a>가 3월 3일 출시되었습니다. &lt;code>wn&lt;/code> CLI를 서브프로세스로 래핑하고 Elm에서 영감을 받은 단방향 아키텍처를 통해 JSON 출력을 렌더링하며, 읽지 않음 표시기가 있는 다중 대화 탐색, 그룹 생성 및 멤버 검색, 실시간 메시지 스트리밍, 터미널에서의 이모지 리액션을 제공합니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/DavidGershony">DavidGershony&lt;/a>가 Rust 도구 체인의 계층화된 아키텍처를 반영하는 완전한 C# Marmot 스택을 발표했습니다. &lt;a href="https://github.com/DavidGershony/dotnet-mls">dotnet-mls&lt;/a>는 C#로 MLS RFC 9420 암호화 프리미티브를 구현합니다. &lt;a href="https://github.com/DavidGershony/marmot-cs">marmot-cs&lt;/a>는 이를 기반으로 Nostr relay 전송을 추가하며, MDK의 C# 동등물로 기능합니다. &lt;a href="https://github.com/DavidGershony/openChat">OpenChat&lt;/a>은 .NET 9와 Avalonia UI로 구축된 크로스 플랫폼 데스크톱 앱으로, NIP-44 DM, Marmot 그룹 암호화, &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> (Nostr Connect) 원격 서명, 다중 relay 상태 표시기를 갖춘 작동하는 채팅 클라이언트로 통합합니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/zerosats/mdk-pwa-reference">MDK PWA Reference&lt;/a>는 Marmot 암호화 애플리케이션 구축을 위한 Progressive Web App 템플릿을 제공하며, AI 에이전트의 그룹 채팅 참여와 Arkade 지갑 인프라를 통한 Bitcoin 결제에 대한 실험적 지원이 포함됩니다.&lt;/p>
&lt;h3 id="wisp-알파에서-베타까지">Wisp, 알파에서 베타까지&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a>는 2월 24일 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.1.0-alpha">첫 알파&lt;/a>에서 3월 3일 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.3.4-beta">v0.3.4-beta&lt;/a>까지, 8일 동안 19개의 릴리스, 115개의 병합된 PR, 276개의 커밋을 생산한 새로운 Android Nostr 클라이언트입니다.&lt;/p>
&lt;p>기능 궤적은 대부분의 클라이언트가 수개월이 걸리는 영역을 커버합니다. v0.1.0은 outbox/inbox relay 모델 지원과 온보딩 흐름과 함께 출시되었습니다. v0.1.3까지 클라이언트는 Amber를 위한 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> intent 기반 서명, &lt;code>.onion&lt;/code> relay 연결을 위한 내장 Tor SOCKS5 프록시, &lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47&lt;/a> (Nostr Wallet Connect)를 갖추었습니다. v0.2.0은 뮤트 목록 필터링과 커스텀 이모지 지원으로 베타로 승격했으며, v0.2.4는 콘텐츠 경고 오버레이를 추가했습니다. v0.3.x 시리즈에서는 노트에 대한 &lt;a href="https://nostrcompass.org/ko/topics/nip-13/">NIP-13&lt;/a> proof-of-work, 영구 설정이 있는 백그라운드 PoW 마이닝, &lt;code>.onion&lt;/code> relay 저장, 뮤트 스레드 알림이 도입되었습니다.&lt;/p>
&lt;p>Google ML Kit을 통한 온디바이스 번역은 초기 모델 다운로드 후 네트워크 접근 없이 로컬에서 실행됩니다. 대화형 소셜 그래프 시각화는 약 30fps의 velocity Verlet 물리 시뮬레이션과 핀치-투-줌 내비게이션 및 프로필 검사를 사용합니다.&lt;/p>
&lt;h2 id="릴리스">릴리스&lt;/h2>
&lt;h3 id="vector-v031">Vector v0.3.1&lt;/h3>
&lt;p>Marmot 암호화 메시징 앱 &lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a>가 그룹 관리 개선과 성능 작업이 포함된 &lt;a href="https://github.com/VectorPrivacy/Vector/releases/tag/v0.3.1">v0.3.1&lt;/a>을 출시했습니다. 다중 관리자 그룹, 일괄 초대, npub으로 초대, 그룹 아바타가 협업 기능을 확장합니다. Android 백그라운드 알림은 이제 인라인 답장 및 읽음 표시 액션을 지원합니다.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/negentropy/">Negentropy&lt;/a> 기반 결정론적 동기화는 오프라인 기간 동안 놓친 메시지를 포함한 전체 대화 기록을 검색합니다. 음성-텍스트 변환은 Android에서 GPU 가속으로 재구축되었습니다. 파일 첨부 처리가 다운로드 진행률, 재시도 상태, 디렉토리 압축 및 전송, 전반적 실시간 진행 표시기와 함께 전면 개편되었습니다. 부팅 시간, 이미지 처리, 오디오 재생, 전반적 UI 반응성에서 15배 이상의 성능 향상이 이루어졌습니다. 앱 설치 크기는 3분의 1 이상 줄었으며, 프런트엔드는 대략 절반으로 감소했습니다. 32비트 ARM Android 지원이 추가되었습니다.&lt;/p>
&lt;h3 id="alby-hub-v1215">Alby Hub v1.21.5&lt;/h3>
&lt;p>Nostr Wallet Connect(&lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47&lt;/a>) 지원이 포함된 자체 보관 Lightning 노드 &lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a>이 &lt;a href="https://github.com/getAlby/hub/releases/tag/v1.21.5">v1.21.5&lt;/a>를 출시했습니다. 기본 NWC 구성에 두 번째 relay가 추가되어 relay 재시작 시 안정성이 향상되었습니다. 거래 목록의 잘못된 zap 데이터 수정은 잘못된 형식의 &lt;a href="https://nostrcompass.org/ko/topics/nip-57/">NIP-57&lt;/a> (Lightning Zaps) event에 대한 표시 문제를 해결합니다. 새 앱 스토어 항목에는 Alby CLI와 LNVPS가 포함됩니다.&lt;/p>
&lt;h3 id="nospeak-v012x">nospeak v0.12.x&lt;/h3>
&lt;p>텍스트 기반 Nostr 메시징 클라이언트 &lt;a href="https://github.com/psic4t/nospeak">nospeak&lt;/a>이 해당 기간 동안 3개의 릴리스를 출시했습니다. &lt;a href="https://github.com/psic4t/nospeak/releases/tag/v0.12.0">v0.12.0&lt;/a>은 4자리 키패드 PIN 앱 잠금과 벵골어, 태국어, 베트남어, 힌디어, 아랍어, 히브리어, 우르두어, 터키어, 일본어, 중국어, 한국어, 네덜란드어, 폴란드어, 러시아어, 페르시아어를 포함한 15개 이상의 새 언어 번역과 RTL 지원을 추가했습니다. &lt;a href="https://github.com/psic4t/nospeak/releases/tag/v0.12.1">v0.12.1&lt;/a>은 순수 검정 배경과 시안 악센트의 Cypher 테마와 Android 동영상 포스터 생성을 도입했습니다. &lt;a href="https://github.com/psic4t/nospeak/releases/tag/v0.12.2">v0.12.2&lt;/a>는 채팅 내보내기와 연락처 메뉴의 프로필 보기를 추가했습니다.&lt;/p>
&lt;h3 id="citrine-v200-pre2">Citrine v2.0.0-pre2&lt;/h3>
&lt;p>greenart7c3의 Android 개인 relay &lt;a href="https://github.com/greenart7c3/Citrine">Citrine&lt;/a>이 새 데이터베이스 인덱스와 재구성된 Kotlin 코루틴을 통한 relay 성능 개선이 포함된 &lt;a href="https://github.com/greenart7c3/Citrine/releases/tag/v2.0.0-pre2">v2.0.0-pre2&lt;/a>를 출시했습니다. 각 호스팅 웹 앱은 이제 자체 포트에서 시작됩니다. 전문 검색과 event 확장이 가능한 재설계된 event 화면이 변경 사항을 완성합니다.&lt;/p>
&lt;h3 id="noornote-v05x">NoorNote v0.5.x&lt;/h3>
&lt;p>Nostr 기반 노트 작성 애플리케이션 &lt;a href="https://github.com/77elements/noornote">NoorNote&lt;/a>가 &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.5.0">v0.5.0&lt;/a>부터 &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.5.7">v0.5.7&lt;/a>까지 8개의 릴리스를 출시했습니다. v0.5.0의 Android 출시에는 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> Amber 서명자 지원과 &lt;a href="https://nostrcompass.org/ko/topics/nip-71/">NIP-71&lt;/a> (Video Events) 노트 게시가 추가되었습니다. v0.5.1의 재설계된 환영 페이지에는 공개 타임라인 미리보기가 포함되었으며 APK가 15 MB로 축소되었습니다. v0.5.2의 Relay Browser는 공유 가능한 URL을 통한 공개 relay 타임라인 탐색과 함께 미디어 다운로드 및 &lt;a href="https://nostrcompass.org/ko/topics/nip-30/">NIP-30&lt;/a> 커스텀 이모지 리액션을 지원합니다. v0.5.7까지의 후속 릴리스에서는 협업 &amp;ldquo;tribes&amp;rdquo; 노트 공유 시스템의 동기화 경합 조건이 해결되었습니다.&lt;/p>
&lt;h3 id="noscall-v051">NosCall v0.5.1&lt;/h3>
&lt;p>Nostr 음성 및 영상 통화 앱 &lt;a href="https://github.com/sanah9/noscall">NosCall&lt;/a>이 음성 메시지 지원, 그룹 입장이 포함된 최적화된 데스크톱 경험, 데스크톱 연락처 즐겨찾기, 연락처 메모 및 필터링, 데이터 내보내기 및 정리 옵션, 시스템 글꼴 크기 접근성 지원이 포함된 &lt;a href="https://github.com/sanah9/noscall/releases/tag/v0.5.1-release">v0.5.1&lt;/a>을 출시했습니다.&lt;/p>
&lt;h3 id="shosho-v0130">Shosho v0.13.0&lt;/h3>
&lt;p>Nostr 라이브 스트리밍 앱 &lt;a href="https://github.com/r0d8lsh0p/shosho-releases">Shosho&lt;/a>가 스트림 카드 메뉴에서 MP4 리플레이 다운로드와 프로필용 &lt;a href="https://nostrcompass.org/ko/topics/nip-05/">NIP-05&lt;/a> (DNS-Based Verification)이 포함된 &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.13.0">v0.13.0&lt;/a>을 출시했습니다. RTMP 퍼블리셔가 Expo Modules API로 마이그레이션되었습니다. 저대역폭 연결에서의 스트리밍 성능이 향상되었으며, 구형 기기의 충돌과 iOS의 &lt;a href="https://zap.stream">Zap.Stream&lt;/a> 스트리밍 문제가 수정되었습니다.&lt;/p>
&lt;h3 id="nostr-java-v200">nostr-java v2.0.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/tcheeric/nostr-java">nostr-java&lt;/a>가 구성 가능한 WebSocket 버퍼 크기를 포함한 &lt;a href="https://github.com/tcheeric/nostr-java/releases/tag/v2.0.0">v2.0.0&lt;/a>을 출시하여, 애플리케이션이 잘림 없이 더 큰 Nostr event를 처리할 수 있게 되었습니다. 메이저 버전 범프는 연결 API의 호환성을 깨뜨리는 변경을 반영합니다.&lt;/p>
&lt;h3 id="prism-110">Prism 1.1.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/hardran3/Prism">Prism&lt;/a>이 장문 콘텐츠 지원(kind 30023 문서)과 앱에서 직접 작성할 수 있는 Markdown 편집기가 포함된 &lt;a href="https://github.com/hardran3/Prism/releases/tag/1.1.0">1.1.0&lt;/a>을 출시했으며, &lt;a href="https://github.com/hardran3/Prism/releases/tag/1.1.1">1.1.1&lt;/a> 버그 수정 릴리스가 뒤따랐습니다.&lt;/p>
&lt;h3 id="angor-v026">Angor v0.2.6&lt;/h3>
&lt;p>Bitcoin 크라우드펀딩 플랫폼 &lt;a href="https://github.com/block-core/angor">Angor&lt;/a>가 Boltz 통합과 1-클릭 투자 흐름이 포함된 &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.6">v0.2.6&lt;/a>을 출시했습니다. 투자와 펀드 프로젝트 유형 모두 testnet에서 종단 간 작동합니다. 팀은 UI가 대략 70% 완성되었다고 언급합니다.&lt;/p>
&lt;h2 id="nip-업데이트">NIP 업데이트&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 저장소&lt;/a>의 최근 변경 사항:&lt;/p>
&lt;p>&lt;strong>병합됨:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1365">NIP-91: 필터용 AND 연산자&lt;/a>&lt;/strong>: relay 구독에서 태그 배열에 대한 AND 필터 의미론을 추가합니다. 현재 태그 필터에 여러 값을 지정하면(예: 여러 &lt;code>p&lt;/code> 태그) 그 중 하나라도 포함하는 event와 일치합니다. NIP-91은 클라이언트가 지정된 모든 태그 값을 동시에 일치하는 event를 요구할 수 있게 하여, 대역폭을 줄이고 더 빠른 인덱스 작업을 가능하게 합니다. nostr-rs-relay, satellite-node, worker-relay, applesauce를 포함한 여러 relay 구현이 이미 존재합니다. 이전에는 NIP-119로 번호가 매겨졌습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2247">NIP-30: 태그에 이모지 세트 주소&lt;/a>&lt;/strong>: &lt;a href="https://nostrcompass.org/ko/topics/nip-30/">NIP-30&lt;/a>의 커스텀 이모지 태그에 이제 선택적 이모지 세트 주소를 포함할 수 있습니다. 클라이언트에서 이모지를 클릭하면 해당 이모지가 속한 세트를 열어 북마크하거나 탐색할 수 있습니다. &lt;a href="https://github.com/purrgrammer/chachi">Chachi&lt;/a> 클라이언트에서 시작되었습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2111">NIP-29: unallowpubkey 및 unbanpubkey 추가&lt;/a>&lt;/strong>: &lt;a href="https://nostrcompass.org/ko/topics/nip-29/">NIP-29&lt;/a> 그룹 채팅을 위한 두 가지 새 관리자 명령입니다. &lt;code>unallowpubkey&lt;/code>는 pubkey를 차단하지 않고 허용 목록에서 제거합니다. &lt;code>unbanpubkey&lt;/code>는 pubkey를 멤버 목록에 다시 추가하지 않고 차단을 해제합니다. 이전에는 허용 목록에서 제거하는 유일한 방법이 동시에 차단하는 것이었고, 차단 해제 시 사용자를 멤버로 다시 추가해야 했습니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>오픈 PR 및 논의:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2244">NIP-A7: Spells&lt;/a>&lt;/strong> (2월 27일 제출): purrgrammer가 제안한 spells는 kind 777 event로 게시되는 이동 가능한 저장된 Nostr 쿼리입니다. spell은 구조화된 태그(&lt;code>k&lt;/code>는 kind, &lt;code>authors&lt;/code>는 pubkey, &lt;code>tag&lt;/code>는 임의 태그 필터)로 REQ 또는 COUNT 필터를 인코딩하며 런타임 변수를 지원합니다: &lt;code>$me&lt;/code>는 로그인한 사용자의 pubkey로 해석되고, &lt;code>$contacts&lt;/code>는 사용자의 kind 3 팔로우 목록으로 확장됩니다. 상대 타임스탬프(&lt;code>7d&lt;/code>, &lt;code>2w&lt;/code>, &lt;code>1mo&lt;/code>)로 하드코딩된 날짜 없이 롤링 시간 윈도우를 정의할 수 있습니다. &lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a>과 &lt;a href="https://github.com/purrgrammer/grimoire">Grimoire&lt;/a>에서 이미 구현되어 있으며, spells로 사용자는 클라이언트 간에 이동하는 큐레이션된 피드를 생성, 공유, 구독할 수 있습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2245">NIP-59: 임시 Gift Wrap (kind 21059)&lt;/a>&lt;/strong> (2월 27일 제출): &lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59&lt;/a> gift wrap의 임시 변형을 추가합니다. Kind 21059는 NIP-01 임시 의미론을 따르므로, relay가 전달 후 event를 폐기합니다. 메시지 지속성이 불필요한 MCP 전송을 위해 ContextVM이 제안했습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2246">ContextVM: Nostr를 통한 MCP JSON-RPC&lt;/a>&lt;/strong> (2월 27일 제출): 주소 지정 및 상관 관계를 위한 &lt;code>p&lt;/code>와 &lt;code>e&lt;/code> 태그가 있는 임시 kind 25910 event를 사용하여 Nostr를 통해 Model Context Protocol 메시지를 전송하는 방법을 명시합니다. 의도적으로 간결하며, 프로토콜 세부 사항은 &lt;a href="https://docs.contextvm.org">ContextVM 사양&lt;/a>에 위임합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2238">NIP-29: 오디오/비디오 라이브 스페이스&lt;/a>&lt;/strong> (2월 25일 제출, 초안): fiatjaf의 초안으로 &lt;a href="https://nostrcompass.org/ko/topics/nip-29/">NIP-29&lt;/a> 그룹에 라이브 오디오 및 비디오를 확장합니다. 그룹 메타데이터 event에 선택적 &lt;code>livekit&lt;/code>과 &lt;code>no-text&lt;/code> 태그를 추가합니다. 사용자가 음성 스페이스에 참여하려면, 클라이언트가 relay의 &lt;code>/.well-known/nip29/livekit/{groupId}&lt;/code>에서 JWT를 요청합니다. relay는 그룹 멤버십을 확인하고 사용자의 16진수 pubkey를 &lt;code>sub&lt;/code> 클레임으로 토큰을 발급하며, 이를 &lt;a href="https://livekit.io/">LiveKit&lt;/a>에 전달하여 미디어 전송을 처리합니다. 음성 방 접근은 그룹의 기존 권한 모델을 상속하므로, relay 측 멤버십 규칙이 누가 말할 수 있는지를 결정합니다. Pyramid과 Chachi에서 테스트 중입니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2235">협업 Event 소유권&lt;/a>&lt;/strong> (2월 24일 제출): pablof7z가 &lt;code>p&lt;/code> 태그에 공동 소유자 pubkey를 나열하고 &lt;code>k&lt;/code> 태그에 대상 event kind를 포함하는 포인터 event(kind 39382)를 제안합니다. 나열된 모든 소유자는 동일한 &lt;code>d&lt;/code> 태그로 해당 kind의 event를 게시할 수 있으며, 클라이언트는 모든 소유자를 쿼리하고 가장 최근 event를 취하여 현재 상태를 해석합니다. 공저 귀속은 검증 가능한 &lt;code>a&lt;/code> 태그가 포인터를 역참조하고 저자가 &lt;code>p&lt;/code> 태그에 나타날 때만 표시되어, 위조된 주장을 방지합니다. 이를 통해 단일 키페어에 제어권을 할당하지 않고도 공유 위키 페이지와 공동 작성 리소스가 가능합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2234">NIP-09: 리포스트의 연쇄 삭제&lt;/a>&lt;/strong> (2월 24일 제출): 원저자가 노트를 삭제할 때, relay는 이를 참조하는 kind 6 또는 kind 16 리포스트도 삭제해야 합니다. 리포스트가 저자가 원본을 삭제한 후에도 실수로 유출된 정보를 보존할 수 있다는 프라이버시 우려에 의해 동기 부여되었습니다. 이 변경은 relay 측만 해당되며, 클라이언트 수정이 필요하지 않습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2233">NIP-07: peekPublicKey&lt;/a>&lt;/strong> (2월 23일 제출): &lt;a href="https://nostrcompass.org/ko/topics/nip-07/">NIP-07&lt;/a> 브라우저 확장에 &lt;code>peekPublicKey()&lt;/code> 메서드를 추가합니다. &lt;code>getPublicKey()&lt;/code>와 달리 사용자 확인 프롬프트 없이 현재 pubkey를 반환하여, 사용자가 자동 로그인을 활성화했을 때 무음 자동 로그인을 가능하게 합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2248">NIP-BB: Book&lt;/a>&lt;/strong> (2월 28일 제출, 초안): Nostr에서 구조화된 도서 출판을 위한 4개의 주소 지정 가능 event kind(30300-30303)를 정의합니다. Cover event는 제목, 표지 이미지, &lt;a href="https://nostrcompass.org/ko/topics/nip-32/">NIP-32&lt;/a> (Labeling) 레이블을 통한 라이선스, 언어 코드를 포함하는 루트 메타데이터를 보유합니다. Index event는 base62 분수 인덱싱을 사용하여 각 챕터를 위치에 매핑하며, 저자가 번호를 다시 매기지 않고 기존 챕터 사이에 새 챕터를 삽입할 수 있습니다. Chapter event는 선택적 이미지가 있는 구조적 헤더로 작동하고, Episode event는 위치 지정 이미지 태그와 함께 최대 30,000자의 실제 산문을 담습니다. 리뷰는 Zap 설명을 리뷰 텍스트로 사용하여 Cover event에 대한 Zap으로 이루어집니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2242">NIP-54: Asciidoc에서 Djot으로 전환&lt;/a>&lt;/strong> (2월 26일 제출): 12월의 &lt;a href="https://nostrcompass.org/ko/newsletters/2025-12-31-newsletter/">d-tag 국제화 수정&lt;/a>에 이어, 이 PR은 &lt;a href="https://nostrcompass.org/ko/topics/nip-54/">NIP-54&lt;/a> 위키의 Asciidoc 마크업 형식을 &lt;a href="https://djot.net/">Djot&lt;/a>으로 대체하고 비라틴 문자를 위한 근거 섹션과 위키링크 예제를 추가할 것을 제안합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2240">NIP-66: 방어 조치&lt;/a>&lt;/strong> (2월 26일 제출): &lt;a href="https://nostrcompass.org/ko/newsletters/2026-03-04-newsletter/#outbox-%eb%aa%a8%eb%8d%b8-%eb%b6%84%ec%84%9d">nostrability/outbox&lt;/a> 벤치마크에서 얻은 교훈을 바탕으로, &lt;a href="https://nostrcompass.org/ko/topics/nip-66/">NIP-66&lt;/a> 엣지 케이스에 대한 명시적 안내를 추가합니다. 동반 &lt;a href="https://github.com/nostr-protocol/nips/pull/2241">PR #2241&lt;/a>은 SSL, 지리적 위치, 네트워크, 연결성 검사를 위한 출력 태그를 정의합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-C1: 암호화 신원 증명&lt;/strong> (위키 항목, kind 30817): APK 서명 인증서를 Nostr 프로필에 암호화적으로 연결하는 kind 30509 event를 제안합니다. 증명은 인증서의 개인 키(ECDSA, RSA PKCS1v15, Ed25519 및 기타 표준 알고리즘 지원)로 Nostr pubkey를 포함하는 정규 메시지에 서명한 다음, Nostr 키로 서명된 kind 30509 event에 서명을 게시하는 방식으로 작동합니다. 검증자는 앱의 Android 서명 인증서를 제어하는 사람이 게시를 주장하는 Nostr pubkey도 제어하는지 확인할 수 있습니다. 증명은 기본적으로 1년 후 만료되며 명시적으로 취소할 수 있습니다. &lt;a href="https://github.com/zapstore/zapstore">Zapstore&lt;/a> 도구 체인에서 구현되었습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-31402: SARA 수익 공유 오퍼링 레지스트리&lt;/strong> (위키 항목, kind 30817): Nostr relay에 Simple Autonomous Revenue Agreement (SARA) 오퍼링을 게시하기 위한 kind 31402 주소 지정 가능 event를 정의합니다. 발행자는 풀 지분 백분율, 지급 트리거, sats 기준 임계값, 기간 길이, 단계별 가격 책정을 포함하는 Lightning 정산 수익 공유 조건을 알립니다. 에이전트와 인간은 중앙 플랫폼 없이 relay 전반에서 오퍼링을 발견하고 자율적으로 구독할 수 있습니다. kind 번호는 SARA가 L402 결제 관계의 반환 구간을 나타내므로 kind 30402(같은 저자가 동반 위키 항목으로 게시한 L402 Service Registry)를 반영합니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="오픈-pr-및-프로젝트-업데이트">오픈 PR 및 프로젝트 업데이트&lt;/h2>
&lt;h3 id="damus-nip-89kotopicsnip-89-recommended-application-handlers">Damus: &lt;a href="https://nostrcompass.org/ko/topics/nip-89/">NIP-89&lt;/a> (Recommended Application Handlers)&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus/pull/3337">PR #3337&lt;/a>은 &lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>에 NIP-89 클라이언트 태그 지원을 구현합니다. 앱은 이제 모든 게시 경로(메인 앱, 공유 확장, 하이라이터, 초안)에서 클라이언트 태그를 발행하며, 다른 앱이 태그를 포함할 때 타임스탬프 옆에 &amp;ldquo;via ClientName&amp;quot;을 표시합니다. 외관 설정의 프라이버시 토글로 태그 발행을 비활성화할 수 있습니다. &lt;a href="https://github.com/damus-io/damus/pull/3652">PR #3652&lt;/a>는 설정에 NostrDB와 Kingfisher 캐시 디스크 사용량을 내보내기 지원과 함께 대화형 파이 차트로 분류하는 저장 공간 섹션을 추가합니다.&lt;/p>
&lt;p>오픈: &lt;a href="https://github.com/damus-io/damus/pull/3657">PR #3657&lt;/a>는 인용된 노트에 대한 &lt;a href="https://nostrcompass.org/ko/topics/nip-65/">NIP-65&lt;/a> relay 대체를 추가합니다. 인라인 &lt;code>nevent&lt;/code>에 저자 pubkey가 포함되어 있지만 relay 힌트가 없고 사용자 풀에서 노트가 누락된 경우, Damus는 저자의 kind 10002 relay 목록을 가져와 쓰기 relay에서 다시 시도합니다.&lt;/p>
&lt;h3 id="amethyst-nip-39kotopicsnip-39-external-identities-nip-c0-nip-66kotopicsnip-66">Amethyst: &lt;a href="https://nostrcompass.org/ko/topics/nip-39/">NIP-39&lt;/a> (External Identities), NIP-C0, &lt;a href="https://nostrcompass.org/ko/topics/nip-66/">NIP-66&lt;/a>&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>가 28개의 PR에 걸쳐 대규모 NIP 구현을 병합했습니다. 외부 신원 주장이 이제 &lt;a href="https://nostrcompass.org/ko/topics/nip-39/">NIP-39&lt;/a>에 따라 전용 kind 10011 event로 게시되며(&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1747">PR #1747&lt;/a>), 역호환 대체와 함께 소셜 신원을 kind 0 메타데이터에서 분리합니다. NIP-C0을 통한 코드 스니펫 지원(&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1744">PR #1744&lt;/a>)은 언어, 확장자, 런타임, 라이선스, 의존성에 대한 접근자가 있는 kind 1337 event를 추가합니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-66/">NIP-66&lt;/a> relay 모니터링 구현(&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1742">PR #1742&lt;/a>)은 RTT 메트릭, 네트워크 유형, 지원되는 NIP, geohash에 대한 전체 태그 파싱을 포함하는 두 event kind를 모두 다룹니다.&lt;/p>
&lt;p>Amethyst Desktop에 암호화 DM이 도착했으며(&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1710">PR #1710&lt;/a>), &lt;a href="https://nostrcompass.org/ko/topics/nip-04/">NIP-04&lt;/a> (Encrypted Direct Messages)와 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages)를 모두 지원하는 분할 창 채팅 레이아웃이 제공됩니다. 새로운 relay 피드 화면(&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1733">PR #1733&lt;/a>)은 팔로우/언팔로우 기능과 함께 특정 relay의 게시물을 탐색할 수 있게 합니다. 오픈: 검열 저항 NIP-05 검증(&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1734">PR #1734&lt;/a>)은 HTTP DNS 대신 Namecoin 블록체인을 대상으로 해석하는 &lt;code>.bit&lt;/code> 식별자에 대한 병렬 검증 경로를 추가합니다. Amethyst가 NIP-05 필드에서 &lt;code>.bit&lt;/code> 접미사를 감지하면, ElectrumX-NMC 서버에서 이름의 거래 내역을 쿼리하고, 최신 출력에서 &lt;code>NAME_UPDATE&lt;/code> 스크립트를 파싱하여 Nostr pubkey를 추출하며, 36,000 블록(Namecoin의 만료 기간)보다 오래된 이름은 거부합니다. ElectrumX 연결은 Tor가 활성화되면 SOCKS5를 통해 라우팅되며, clearnet과 &lt;code>.onion&lt;/code> 엔드포인트 간 동적 서버 선택이 이루어집니다. 1시간 TTL의 LRU 캐시가 반복적인 블록체인 쿼리를 방지합니다.&lt;/p>
&lt;h3 id="notedeck-outbox-아키텍처">Notedeck: Outbox 아키텍처&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck/pull/1303">PR #1303&lt;/a>은 &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>을 임시 relay 풀 관리에서 계정 범위 구독을 가진 중앙화된 outbox 모델로 마이그레이션합니다. Messages 모듈은 이제 기본 DM relay 목록이 없으면 이를 게시하고 kind 10050에 따라 수신자가 선호하는 relay로 DM을 라우팅합니다.&lt;/p>
&lt;h3 id="pika-그룹별-프로필-및-튜토리얼-피드">Pika: 그룹별 프로필 및 튜토리얼 피드&lt;/h3>
&lt;p>iOS, Android, 데스크톱 빌드를 제공하는 Marmot 암호화 메시징 앱 &lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>에 그룹별 프로필(&lt;a href="https://github.com/sledtools/pika/pull/368">PR #368&lt;/a>)이 추가되었습니다. 사용자는 이제 각 그룹 채팅에 대해 별도의 표시 이름, 사진, 커스텀 자기소개를 설정할 수 있습니다. 이 프로필은 Marmot 그룹 내부에서 암호화된 kind 0 event로 게시되어, 그룹 외부의 누구에게도 보이지 않으며, 그룹별 프로필이 설정되지 않은 경우 사용자의 글로벌 Nostr 프로필로 대체됩니다. 새 멤버가 가입하면 관리자가 모든 저장된 그룹 프로필을 재방송하고 각 멤버가 커밋 시 자신의 프로필을 재게시합니다. 프로필 사진은 Blossom 업로드 전에 Marmot 미디어 암호화됩니다. 이 PR에는 16개의 새 단위 테스트가 포함되며, CLI 명령(&lt;code>update-group-profile&lt;/code>)과 UI를 통해 기능이 노출됩니다.&lt;/p>
&lt;p>새로운 &lt;code>pika-news&lt;/code> 웹 앱(&lt;a href="https://github.com/sledtools/pika/pull/401">PR #401&lt;/a>)은 Pika의 자체 GitHub PR을 모니터링하고 PR diff에서 단계별 튜토리얼 안내를 자동 생성하여, &lt;a href="https://nostrcompass.org/ko/topics/nip-07/">NIP-07&lt;/a> 인증이 포함된 서버 렌더링 페이지로 게시합니다. 사용자는 Nostr 인증 채팅을 통해 특정 튜토리얼에 대해 실시간으로 토론할 수 있습니다.&lt;/p>
&lt;h3 id="divine-임베더블-위젯-및-비디오-답글">diVine: 임베더블 위젯 및 비디오 답글&lt;/h3>
&lt;p>Nostr 네이티브 동영상 공유 플랫폼 &lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>이 10일 동안 132개의 PR을 병합했습니다. 임베더블 iframe 위젯(&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1843">PR #1843&lt;/a>)은 사용자의 프로필과 최신 동영상을 렌더링하는 독립적인 &lt;code>/embed?npub=...&lt;/code> 페이지를 제공합니다. 기능 플래그 뒤에 위치한 비디오 답글 기능(&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1915">PR #1915&lt;/a>)은 &lt;a href="https://nostrcompass.org/ko/topics/nip-92/">NIP-92&lt;/a> (Media Attachments) imeta 메타데이터와 함께 Kind 1111 댓글(&lt;a href="https://nostrcompass.org/ko/topics/nip-22/">NIP-22&lt;/a>)을 사용합니다. Bluesky에서 영감을 받은 3방향 콘텐츠 필터(&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1797">PR #1797&lt;/a>)는 17개 &lt;a href="https://nostrcompass.org/ko/topics/nip-32/">NIP-32&lt;/a> 콘텐츠 경고 카테고리에 걸쳐 표시/경고/숨기기 제어를 제공합니다.&lt;/p>
&lt;h3 id="strfry-req-필터-검증">strfry: REQ 필터 검증&lt;/h3>
&lt;p>&lt;a href="https://github.com/hoytech/strfry/pull/163">PR #163&lt;/a>은 C++ Nostr relay &lt;a href="https://github.com/hoytech/strfry">strfry&lt;/a>에 구성 가능한 REQ 필터 검증을 추가합니다. 운영자는 REQ당 최대 필터 수, 필수 저자 또는 태그 존재, 허용 kind 화이트리스트, 필터당 kind 제한을 설정할 수 있습니다. 이 기능은 엄격한 필터 적용이 필요한 NWC relay 배포를 대상으로 합니다. 오픈: &lt;a href="https://github.com/hoytech/strfry/pull/173">PR #173&lt;/a>은 수집 시 event 페이로드에 대한 선택적 zstd 압축을 추가합니다.&lt;/p>
&lt;h3 id="rust-nostr-nip-62kotopicsnip-62-request-to-vanish">rust-nostr: &lt;a href="https://nostrcompass.org/ko/topics/nip-62/">NIP-62&lt;/a> Request to Vanish&lt;/h3>
&lt;p>Rust Nostr 프로토콜 라이브러리 &lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a>가 세 가지 데이터베이스 백엔드 전반에 &lt;a href="https://nostrcompass.org/ko/topics/nip-62/">NIP-62&lt;/a> (Request to Vanish) 지원을 추가했습니다: &lt;a href="https://github.com/rust-nostr/nostr/pull/1268">LMDB&lt;/a>, &lt;a href="https://github.com/rust-nostr/nostr/pull/1270">SQLite&lt;/a>, &lt;a href="https://github.com/rust-nostr/nostr/pull/1272">인메모리&lt;/a>. LMDB 구현에는 배포별로 &lt;a href="https://nostrcompass.org/ko/topics/nip-09/">NIP-09&lt;/a>와 NIP-62 적용을 활성화 또는 비활성화할 수 있는 구성 가능 옵션이 포함됩니다.&lt;/p>
&lt;h3 id="ndk-협업-event-및-nip-46-타임아웃">NDK: 협업 Event 및 NIP-46 타임아웃&lt;/h3>
&lt;p>JavaScript/TypeScript용 Nostr Development Kit &lt;a href="https://github.com/nostr-dev-kit/ndk">NDK&lt;/a>가 인가된 저자를 정의하는 주소 지정 가능 포인터 event(kind 39382)를 사용하는 다중 저자 협업 문서를 위한 &lt;code>NDKCollaborativeEvent&lt;/code>를 도입하는 &lt;a href="https://github.com/nostr-dev-kit/ndk/pull/380">PR #380&lt;/a>을 병합했습니다. &lt;code>NDKNip46Signer&lt;/code>에 대한 구성 가능한 타임아웃(&lt;a href="https://github.com/nostr-dev-kit/ndk/pull/381">PR #381&lt;/a>)은 bunker가 응답하지 않을 때 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> 원격 서명 작업이 무한정 중단되는 것을 방지합니다.&lt;/p>
&lt;h3 id="tenex-에이전트-분류-및-pubkey-게이팅">TENEX: 에이전트 분류 및 Pubkey 게이팅&lt;/h3>
&lt;p>Nostr 네이티브 AI 에이전트 오케스트레이션 플랫폼 &lt;a href="https://github.com/tenex-chat/tenex">TENEX&lt;/a>가 보안 관련 2개의 PR을 병합했습니다. TIP-01 역할 기반 에이전트 분류(&lt;a href="https://github.com/tenex-chat/tenex/pull/91">PR #91&lt;/a>)는 에이전트 카테고리(principal, orchestrator, worker, advisor, auditor)를 거부 도구 맵을 통한 자동화된 도구 제한에 매핑합니다. 프론트 도어 pubkey 게이팅(&lt;a href="https://github.com/tenex-chat/tenex/pull/87">PR #87&lt;/a>)은 화이트리스트 또는 백엔드 서명된 pubkey의 event만 알려진 에이전트와 함께 라우팅되도록 보장하며, 알 수 없는 pubkey는 감사를 위한 OpenTelemetry 스팬과 함께 자동으로 삭제됩니다.&lt;/p>
&lt;h3 id="zap-cooking-멤버십-대시보드">Zap Cooking: 멤버십 대시보드&lt;/h3>
&lt;p>Nostr 기반 레시피 공유 플랫폼 &lt;a href="https://github.com/zapcooking/frontend">Zap Cooking&lt;/a>이 10일 동안 25개의 PR과 85개의 커밋을 병합했습니다. 멤버십 대시보드(&lt;a href="https://github.com/zapcooking/frontend/pull/228">PR #228&lt;/a>)는 만료일과 관리/업그레이드 옵션이 있는 구독 상태를 표시하고, 클라이언트 측 및 서버 측 검사와 함께 Sous Chef와 Zappy 등급에 대한 기능 게이트를 다시 활성화하며, 26개 파일에 걸쳐 등급 명명을 표준화합니다. 2단계 그룹 메시지 로딩(&lt;a href="https://github.com/zapcooking/frontend/pull/227">PR #227&lt;/a>)은 즉시 표시를 위한 빠른 3일 초기 가져오기와 백그라운드 40일 백필을 제공합니다.&lt;/p>
&lt;p>지갑 니모닉 저장이 pubkey 파생 암호화에서 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> 자기 암호화로 이동했으며(&lt;a href="https://github.com/zapcooking/frontend/pull/224">PR #224&lt;/a>), 이전 방식이 &lt;code>SHA-256(pubkey)&lt;/code>에서 키를 파생하여 pubkey가 공개이므로 사실상 비암호화된 취약점을 수정합니다. 기존 지갑은 첫 로드 시 자동으로 마이그레이션됩니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-29/">NIP-29&lt;/a> 그룹 채팅에 빨간 점 뱃지의 읽지 않음 표시기와 kind 9009 초대 코드로 초대 전용 접근이 추가되었습니다(&lt;a href="https://github.com/zapcooking/frontend/pull/213">PR #213&lt;/a>). 링크 미리보기와 Nostr event 임베드가 이제 DM과 그룹 메시지에서 렌더링됩니다(&lt;a href="https://github.com/zapcooking/frontend/pull/218">PR #218&lt;/a>). 설정의 Nostr 백업 섹션(&lt;a href="https://github.com/zapcooking/frontend/pull/210">PR #210&lt;/a>)은 순환 3슬롯 버전 관리와 함께 &lt;a href="https://nostrcompass.org/ko/topics/nip-78/">NIP-78&lt;/a> (Application-specific Data) 암호화 저장소를 통해 팔로우 및 뮤트 목록을 저장합니다. 알림 서비스 지연, IntersectionObserver를 통한 지연 DOM 렌더링(200 event 피드에서 DOM 노드를 ~15,000개에서 ~3,000개로 감소), 확장된 outbox 캐시 TTL을 통해 시작 성능이 향상되었습니다(&lt;a href="https://github.com/zapcooking/frontend/pull/208">PR #208&lt;/a>). 사용자 정의 가능한 인쇄 레시피 모달(&lt;a href="https://github.com/zapcooking/frontend/pull/205">PR #205&lt;/a>)은 실시간 미리보기와 함께 포함할 섹션을 토글할 수 있게 합니다. &lt;a href="https://github.com/BrantaOps/branta-core">Branta SDK&lt;/a> 통합(&lt;a href="https://github.com/zapcooking/frontend/pull/222">PR #222&lt;/a>)은 POST 및 GET 요청에 대한 검증 가드레일을 추가합니다.&lt;/p>
&lt;h3 id="keep-rust-기반-상태-마이그레이션">Keep: Rust 기반 상태 마이그레이션&lt;/h3>
&lt;p>Android용 Nostr 기반 개인 키 관리자 &lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a>이 4개의 Kotlin 구성 저장소를 삭제하고 keep-mobile 레이어의 Rust 기반 공유 상태로 대체하는 &lt;a href="https://github.com/privkeyio/keep-android/pull/178">PR #178&lt;/a>을 병합했습니다. 10초 폴링 루프가 Rust의 푸시 기반 &lt;code>KeepStateCallback&lt;/code>으로 대체되었습니다. &lt;a href="https://github.com/privkeyio/keep-android/pull/179">PR #179&lt;/a>는 암호 보호가 포함된 암호화 백업 및 복원을 추가합니다.&lt;/p>
&lt;h3 id="mostro-mobile-분쟁-채팅-암호화">Mostro Mobile: 분쟁 채팅 암호화&lt;/h3>
&lt;p>Mostro P2P Bitcoin 거래 플랫폼의 모바일 클라이언트 &lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a>이 분쟁 채팅 암호화의 2단계 마이그레이션을 출시했습니다. 첫 번째 단계(&lt;a href="https://github.com/MostroP2P/mobile/pull/495">PR #495&lt;/a>)는 mostro 전용 래핑에서 관리자의 pubkey에서 파생된 공유 키 암호화로 전환합니다. 이를 기반으로 &lt;a href="https://github.com/MostroP2P/mobile/pull/501">PR #501&lt;/a>은 &lt;code>NostrEvent&lt;/code>로 메시지 모델을 통합하고 gift wrap event를 디스크에 암호화 저장하여, P2P 채팅 패턴과 일관성을 유지합니다. BIP-340 서명 수정(&lt;a href="https://github.com/MostroP2P/mobile/pull/496">PR #496&lt;/a>)은 bip340 의존성을 0.2.0으로 오버라이드하여, 1-2%의 Schnorr 서명이 무효화되고 공개 키가 &lt;code>0x00&lt;/code>으로 시작하는 키에 대해 100% 실패를 유발하는 &lt;code>bigToBytes()&lt;/code> 패딩 버그를 해결합니다. Order Details는 이제 영어, 스페인어, 이탈리아어, 프랑스어로 현지화된 사람이 읽을 수 있는 상태 레이블을 원시 프로토콜 값 대신 표시합니다(&lt;a href="https://github.com/MostroP2P/mobile/pull/502">PR #502&lt;/a>). HalCash가 추가되고 SEPA가 결제 방법에서 제거되었습니다(&lt;a href="https://github.com/MostroP2P/mobile/pull/493">PR #493&lt;/a>). SEPA 이체가 24시간을 초과할 수 있기 때문입니다(SEPA Instant는 유지).&lt;/p>
&lt;p>서버 측에서는 &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a>가 개시자 필드를 포함하도록 분쟁 세션 복원을 수정했으며(&lt;a href="https://github.com/MostroP2P/mostro/pull/599">PR #599&lt;/a>), 판매자가 자금을 해제하면 활성 분쟁을 자동으로 닫아 관리자 클라이언트가 해결을 확인할 수 있도록 결제된 Nostr event를 게시합니다(&lt;a href="https://github.com/MostroP2P/mostro/pull/606">PR #606&lt;/a>).&lt;/p>
&lt;h2 id="nostr-2월의-5년">Nostr 2월의 5년&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/ko/newsletters/2026-01-28-newsletter/#nostr-1%EC%9B%94%EC%9D%98-5%EB%85%84">지난 달 뉴스레터&lt;/a>는 초기 개발부터 Damus 폭발, 2026년 보안 인프라까지 Nostr의 1월 이정표를 추적했습니다. 이번 회고는 2021년부터 2026년까지 각 2월에 일어난 일을 다룹니다.&lt;/p>
&lt;h3 id="2021년-2월-재작성">2021년 2월: 재작성&lt;/h3>
&lt;p>존재한 지 3개월 된 Nostr의 2월은 프로토콜의 가장 중요한 초기 변경을 만들어냈습니다. 2월 14-15일, fiatjaf가 &lt;a href="https://github.com/nostr-protocol/nostr/commit/33a1a70">NIP-01을 재작성&lt;/a>하여 원래의 메시지 형식을 현재까지 프로토콜이 사용하는 EVENT/REQ/CLOSE 모델로 대체했습니다. 이 재작성 전에는 클라이언트와 relay가 더 단순한 구조를 통해 통신했습니다. event 게시(EVENT)와 구독 관리(REQ/CLOSE)를 분리하면서 확장에 필수적인 relay 측 필터링이 가능해졌습니다.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-04/">NIP-04&lt;/a>도 같은 달에 등장하여, secp256k1을 통한 Diffie-Hellman 키 교환에서 파생된 공유 비밀을 사용한 암호화 다이렉트 메시지를 추가했습니다. 암호화는 기본적(AES-256-CBC)이었으며 나중에 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a>의 감사된 암호화로 대체되었지만, 소수의 초기 사용자에게 프로토콜 위의 첫 개인 통신 채널을 제공했습니다.&lt;/p>
&lt;p>도구가 &lt;a href="https://github.com/fiatjaf/noscl">noscl&lt;/a>(터미널 기반 relay 상호작용을 위한 Go 커맨드라인 클라이언트)로 확장되었고, futurepaul이 초기 Rust 구현인 &lt;a href="https://github.com/futurepaul/nostr-rs">nostr-rs&lt;/a>를 시작했습니다. 전체 네트워크는 2~3개의 relay에서 운영되었고, &lt;a href="https://t.me/nostr_protocol">텔레그램 그룹&lt;/a>을 통해 조율되었으며, 약 7명의 활동적인 기여자가 있었습니다.&lt;/p>
&lt;h3 id="2022년-2월-모멘텀-구축">2022년 2월: 모멘텀 구축&lt;/h3>
&lt;p>2021년 12월 31일의 &lt;a href="https://news.ycombinator.com/item?id=29749061">Hacker News 게시물&lt;/a>이 계속해서 개발자를 2월까지 끌어들였습니다. &lt;a href="https://github.com/nostr-protocol/nostr">nostr-protocol/nostr&lt;/a> 저장소(공식 &lt;a href="https://github.com/nostr-protocol/nips">NIPs 저장소&lt;/a>는 2022년 5월까지 존재하지 않았음)는 2월에 vinliao의 NIP-13 (Proof of Work), fiatjaf의 NIP-14 (Reputation), Cameri의 NIP-15 (Resource Relations), melvincarvalho의 &lt;a href="https://github.com/nostr-protocol/nostr/pull/75">NIP-17&lt;/a> (Git Updates Over Nostr)을 포함한 6개의 pull request를 받았습니다. NIP 번호는 나중에 Private Direct Messages로 재할당되었으며, Nostr에서의 git 협업은 &lt;a href="https://gitworkshop.dev">gitworkshop.dev&lt;/a>로 발전하는 것을 통해 별도로 계속되었습니다.&lt;/p>
&lt;p>Greg Heartsfield의 &lt;a href="https://github.com/scsibug/nostr-rs-relay">nostr-rs-relay&lt;/a>가 그 달의 주역으로 34개의 커밋과 3개의 릴리스를 기록했습니다. 2월 12일 버전 0.5.0은 &lt;a href="https://nostrcompass.org/ko/topics/nip-05/">NIP-05&lt;/a> 검증 사용자 게시 제한을 추가했습니다. 버전 0.5.1과 0.5.2가 이후 2주에 걸쳐 뒤따랐으며, 이 relay가 단독으로 네트워크 트래픽의 대부분을 처리했습니다.&lt;/p>
&lt;p>Robert C. Martin(Uncle Bob)은 Clojure 데스크톱 클라이언트 &lt;a href="https://github.com/unclebob/more-speech">more-speech&lt;/a>를 구축하며 1월 18일부터 2월 말까지 69개의 커밋을 기록했습니다. 그의 참여는 더 넓은 소프트웨어 엔지니어링 커뮤니티의 관심을 끌었습니다. fiatjaf의 &lt;a href="https://github.com/fiatjaf/nos2x">nos2x&lt;/a> 브라우저 확장이 2월에 &lt;a href="https://nostrcompass.org/ko/topics/nip-04/">NIP-04&lt;/a> 복호화 지원과 relay 선호 정책을 출시하여, 웹 클라이언트가 키 위임에 여전히 사용하는 &lt;code>window.nostr&lt;/code> 인터페이스(&lt;a href="https://nostrcompass.org/ko/topics/nip-07/">NIP-07&lt;/a>)를 구현했습니다.&lt;/p>
&lt;p>여전히 주요 웹 클라이언트였던 &lt;a href="https://github.com/fiatjaf/branle">Branle&lt;/a>이 2월 13일에 &lt;code>web+nostr&lt;/code> 프로토콜 핸들러 등록을 추가하여, Nostr 애플리케이션 간 딥 링킹의 초기 시도를 보여주었습니다. &lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a>는 NIP-05 검증을 강화했습니다. &lt;a href="https://github.com/nbd-wtf/go-nostr">go-nostr&lt;/a>는 11개 커밋에 걸쳐 NIP-04 암호화 DM 지원과 NIP-12 (Generic Tag Queries) 파싱을 추가했습니다. 네트워크는 대략 7-15개의 relay에서 운영되었으며, 활동적인 사용자 기반은 수백 명 수준이었을 것으로 추정됩니다. Damus와 Nostream은 아직 존재하지 않았으며 2022년 4월까지 등장하지 않았습니다.&lt;/p>
&lt;h3 id="2023년-2월-국제적-관심">2023년 2월: 국제적 관심&lt;/h3>
&lt;p>2023년 2월은 Nostr에 가장 큰 대중적 관심을 가져왔습니다. William Casarin의 iOS 클라이언트 &lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>가 반복된 거절 후 &lt;a href="https://www.coindesk.com/tech/2023/02/01/decentralized-social-media-project-nostrs-damus-gets-listed-on-apple-app-store">1월 31일 Apple App Store에 승인&lt;/a>되었습니다. 2월 1일까지 미국 소셜 네트워킹 부문 10위에 올랐습니다. 이틀 후인 2월 2일, 보도에 따르면 중국 사이버공간관리국의 요청으로 &lt;a href="https://techcrunch.com/2023/02/02/damus-pulled-from-apples-app-store-in-china-after-two-days/">Apple이 중국 App Store에서 Damus를 삭제&lt;/a>했습니다.&lt;/p>
&lt;p>TechCrunch와 CoinDesk를 포함한 주요 매체가 삭제를 보도하면서 앱과 프로토콜 모두에 대한 인식을 증폭시켰습니다. nostr.directory의 메타데이터가 있는 고유 공개 키는 2월 3일까지 300,000개를 넘었습니다. 모든 relay는 자비를 들여 운영하는 열성적인 이들이 운영했으며, 인프라는 부하를 처리하기 위해 분주했습니다. 2월 초까지 약 289개의 relay가 추적되었으며, 이 수치는 계속 증가했습니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 저장소&lt;/a>는 그 달에 29개의 병합된 pull request를 기록하여, 프로토콜 역사상 최고의 월간 수치를 달성했습니다. &lt;a href="https://github.com/nostr-protocol/nips/pull/224">NIP-57&lt;/a> (Lightning Zaps)과 &lt;a href="https://github.com/nostr-protocol/nips/pull/220">NIP-23&lt;/a> (Long-form Content)이 모두 2월 13일에 병합되어, 하루 만에 Bitcoin 소액 결제를 추가하고 Nostr를 짧은 게시물 너머로 확장했습니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-65/">NIP-65&lt;/a> (Relay List Metadata)는 1주일 전인 2월 7일에 병합되어 이후의 outbox 모델을 가능하게 했습니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> (Nostr Connect)과 &lt;a href="https://nostrcompass.org/ko/topics/nip-58/">NIP-58&lt;/a> (Badges)도 월말 전에 도입되었습니다.&lt;/p>
&lt;p>Human Rights Foundation이 2월 21일 &lt;a href="https://hrf.org/devfund2023q1">Nostr와 Damus 개발을 위해 William Casarin에게 $50,000를 지원&lt;/a>했으며, 이는 Nostr 프로젝트에 대한 최초의 기관 지원금 중 하나였습니다. OpenSats는 아직 Nostr 펀드를 시작하지 않았습니다(이는 &lt;a href="https://opensats.org/blog/nostr-grants-july-2023">2023년 7월&lt;/a>에 이루어졌습니다).&lt;/p>
&lt;h3 id="2024년-2월-프로토콜-내구성">2024년 2월: 프로토콜 내구성&lt;/h3>
&lt;p>2024년 2월은 성장에서 프로토콜 내구성으로 초점이 전환되었습니다. 전년도 7월부터 열려 있던 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages)은 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a>의 감사된 암호화와 &lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59&lt;/a> gift wrapping을 사용하여 노후화된 &lt;a href="https://nostrcompass.org/ko/topics/nip-04/">NIP-04&lt;/a> 암호화를 대체하기 위해 작업 중이었습니다. NIP-04는 relay 운영자에게 메타데이터를 노출하여, 발신자-수신자 쌍을 볼 수 있었습니다. NIP-17은 일회용 키페어 뒤에 발신자 신원을 숨기며, 3월의 마지막 검토 라운드 후 봄에 병합되었습니다.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-29/">NIP-29&lt;/a> (Simple Groups)가 수개월의 논의 끝에 &lt;a href="https://github.com/nostr-protocol/nips/pull/566">2월 28일 병합&lt;/a>되어, relay가 관리자 역할과 접근 제어가 있는 모더레이션된 그룹 채팅을 호스팅하는 방법을 정의했습니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-92/">NIP-92&lt;/a> (imeta 태그)가 2월 1일 병합되어, 클라이언트가 미디어 event에 이미지 크기와 blurhash 미리보기를 첨부하는 방법을 표준화했습니다.&lt;/p>
&lt;p>2월 16일, NIPs 저장소에 프로토콜 사양의 하위 호환성을 깨뜨리는 변경을 추적하는 파일 &lt;a href="https://github.com/nostr-protocol/nips/commit/62c48eff">BREAKING.md&lt;/a>가 추가되었습니다. 이 파일의 생성은 Nostr가 호환성을 깨뜨리는 변경에 공식 문서가 필요한 성숙도 수준에 도달했음을 인정했습니다.&lt;/p>
&lt;p>그 달 22개의 pull request가 병합되었습니다. &lt;a href="https://github.com/cashubtc/npubcash-server">npub.cash&lt;/a>가 서버 운영 없이 모든 npub이 결제를 받을 수 있는 Lightning 주소 서비스로 출시되었습니다. 2월 8일에 발표된 &lt;a href="https://arxiv.org/abs/2402.05709">학술 논문&lt;/a>은 무료 relay의 95%가 기부로 운영 비용을 충당할 수 없으며, 유료 relay의 35%가 1,000 sats(당시 약 $0.45) 미만의 입장료를 부과하고 있다고 밝혔습니다.&lt;/p>
&lt;h3 id="2025년-2월-인프라-성장">2025년 2월: 인프라 성장&lt;/h3>
&lt;p>2025년 2월은 NIPs 저장소에 28개의 병합된 pull request를 기록했습니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-62/">삭제권&lt;/a> NIP이 2월 19일 병합되어, 데이터 이동성과 사용자 제어에 관한 규제 질문에 대응하여 사용자가 relay에 자신의 데이터 삭제를 요청하는 방법을 정의했습니다.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-60/">NIP-60&lt;/a> (Cashu Wallet)과 NIP-61 (Nutzaps)이 단순화 업데이트를 받아 ecash 토큰 저장 형식을 간소화했습니다. q-tag(인용 태그) 도입이 여러 NIP에 걸쳐 계속되어, event가 인용과 스레딩을 위해 다른 event를 참조하는 방법을 표준화했습니다.&lt;/p>
&lt;p>클라이언트 릴리스는 꾸준한 진전을 보여주었습니다. &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> v0.3.0 알파가 1월 마지막 날 출시되었으며, 채택이 2월까지 계속되었습니다. Primal v2.1이 2월 7일에, Go relay 구현 &lt;a href="https://github.com/0ceanSlim/grain">GRAIN&lt;/a> v0.3.0이 2월 21일에 릴리스되었습니다.&lt;/p>
&lt;p>NOSTRLDN v5가 런던 Nostr 커뮤니티를 다섯 번째 밋업으로 모았습니다. DVMCP 브리지가 Nostr의 Data Vending Machines(&lt;a href="https://nostrcompass.org/ko/topics/nip-90/">NIP-90&lt;/a>)를 Model Context Protocol과 연결하여, 다음 달에 도착할 AI 에이전트 통합 작업을 예고했습니다.&lt;/p>
&lt;h3 id="2026년-2월-소셜-미디어를-넘어">2026년 2월: 소셜 미디어를 넘어&lt;/h3>
&lt;p>&lt;em>2026년 2월 활동은 Nostr Compass 호 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-04-newsletter/">#8&lt;/a>부터 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-25-newsletter/">#11&lt;/a>에서 가져왔습니다.&lt;/em>&lt;/p>
&lt;p>2026년 2월은 단일 Nostr 월 중 가장 광범위한 애플리케이션 레이어 개발을 보여주었습니다. &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a>가 탈중앙화 P2P Bitcoin 거래를 위한 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-11-newsletter/#mostro-%EC%B2%AB-%EA%B3%B5%EA%B0%9C-%EB%B2%A0%ED%83%80-%EC%B6%9C%EC%8B%9C">첫 공개 베타&lt;/a>를 출시했고, &lt;a href="https://github.com/zapstore/zapstore">Zapstore&lt;/a>가 수개월의 릴리스 후보 테스트 후 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-11-newsletter/#zapstore-v100">1.0 안정 버전&lt;/a>에 도달했습니다. &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-25-newsletter/#white-noise-v030">White Noise v0.3.0&lt;/a>이 Amber 서명자 지원과 160개 이상의 병합된 개선 사항과 함께 실시간 &lt;a href="https://nostrcompass.org/ko/topics/mls/">Marmot&lt;/a> 암호화 메시징을 제공했습니다.&lt;/p>
&lt;p>pablof7z의 경쟁 AI 에이전트 제안(에이전트 워크플로를 위한 NIP-AE, MCP 서버 공지를 위한 NIP-AD)과 joelklabo의 AI Agent Messages가 &lt;a href="https://nostrcompass.org/ko/topics/nip-90/">NIP-90&lt;/a>을 확장하는 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-25-newsletter/#nip-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8">DVM Agent Coordination 제안&lt;/a>과 함께 등장했습니다. &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-25-newsletter/#contextvm-nostr%EB%A5%BC-%ED%86%B5%ED%95%9C-mcp">ContextVM&lt;/a>이 Model Context Protocol을 Nostr 전송에 연결하는 SDK 개선을 출시했습니다. &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-25-newsletter/#burrow-ai-%EC%97%90%EC%9D%B4%EC%A0%84%ED%8A%B8%EB%A5%BC-%EC%9C%84%ED%95%9C-mls-%EB%A9%94%EC%8B%9C%EC%A7%80">Burrow&lt;/a>가 AI 에이전트와 인간 모두를 위한 &lt;a href="https://nostrcompass.org/ko/topics/mls/">Marmot&lt;/a> 암호화 메시징을 추가하여, Nostr의 신원 및 relay 인프라를 기계 간 통신으로 확장했습니다.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-25-newsletter/#fips-nostr-%EB%84%A4%EC%9D%B4%ED%8B%B0%EB%B8%8C-%EB%A9%94%EC%8B%9C-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%82%B9">FIPS&lt;/a>가 secp256k1 키페어를 노드 신원으로 사용하고 UDP, 이더넷, 블루투스, LoRa 라디오를 통한 transport 불가지론 라우팅을 제공하는 Nostr 네이티브 메시 네트워킹의 작동하는 Rust 구현을 출시했습니다. 이 설계는 Nostr의 키 모델이 소셜 미디어를 넘어 물리적 네트워크 인프라로 확장됨을 보여주었습니다.&lt;/p>
&lt;p>&lt;a href="https://opensats.org/blog/fifteenth-wave-of-nostr-grants">OpenSats가 열다섯 번째 Nostr 보조금 물결을 발표&lt;/a>하여, ContextVM과 Nostube를 포함한 프로젝트에 자금을 지원했습니다. 프로토콜 변경에는 Nostr Wallet Connect를 위한 &lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47&lt;/a> 보류 인보이스 지원과 relay 측 카운트 추정을 위한 &lt;a href="https://nostrcompass.org/ko/topics/nip-45/">NIP-45&lt;/a> (Counting Results) HyperLogLog가 포함되었습니다. &lt;a href="https://nostrcompass.org/ko/topics/web-of-trust/">Web of Trust&lt;/a> 점수를 위한 &lt;a href="https://nostrcompass.org/ko/topics/nip-85/">NIP-85&lt;/a> (Trusted Assertions) 서비스 제공자 검색 가능성도 병합되었습니다. &lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a>가 전면적인 API 재설계를 시작했으며, Nostria 3.0과 &lt;a href="https://github.com/FROSTR-ORG">Frostr&lt;/a> (iOS TestFlight)가 모두 출시되었습니다. &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a>의 로컬 캐시 레이어가 relay 간 미디어 가용성 문제를 해결했습니다.&lt;/p>
&lt;h3 id="전망">전망&lt;/h3>
&lt;p>5년간의 2월 프로토콜 역사는 기반 작업에서 애플리케이션 레이어 다양화까지 일관된 진행을 보여주며, 2023년 사용자 유입이 전환점이었습니다. 2021년에 7명의 기여자가 3개의 relay에서 작업했습니다. 2026년에는 동일한 프로토콜이 프로덕션 인프라에서 실행되는 메시 네트워킹과 자율 에이전트 제안을 지원했습니다.&lt;/p>
&lt;hr>
&lt;p>이번 주는 여기까지입니다. 무언가를 만들고 있거나 공유할 뉴스가 있다면 &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">&lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> DM으로 연락하시거나&lt;/a> Nostr에서 찾아주세요.&lt;/p></content:encoded></item><item><title>Nostr Compass #11</title><link>https://nostrcompass.org/ko/newsletters/2026-02-25-newsletter/</link><pubDate>Wed, 25 Feb 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2026-02-25-newsletter/</guid><description>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v0.3.0">White Noise v0.3.0&lt;/a>이 160개 이상의 개선 사항과 함께 실시간 메시지 전송과 Amber 서명자 지원을 도입했습니다. &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.5">diVine 1.0.5&lt;/a>는 동영상 재생 문제를 수정하고 크리에이터 애널리틱스를 위한 Kind 22236 view event를 추가했습니다. &lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>, &lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a>, &lt;a href="https://github.com/dmcarrington/unfiltered">Unfiltered&lt;/a>가 업데이트를 출시했습니다. &lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a>는 Nostr 네이티브 메시 네트워킹의 작동하는 Rust 구현을 공개했습니다. Notecrumbs는 damus.io 링크 미리보기의 안정성 수정을 받았습니다. &lt;a href="https://contextvm.org">ContextVM&lt;/a>은 Nostr와 Model Context Protocol을 연결합니다. 새 프로젝트로는 AI 에이전트와 인간 간 MLS 암호화 메시지를 위한 &lt;a href="https://github.com/CentauriAgent/burrow">Burrow&lt;/a>와 브라우저 기반 볼트 및 신원 관리를 위한 &lt;a href="https://github.com/nostria-app/nostria-signer-extension">Nostria Signer&lt;/a>가 있습니다. 심층 분석은 NIP-55 Android 서명과 NIP-60 Cashu 지갑 동기화를 다룹니다.&lt;/p></description><content:encoded>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v0.3.0">White Noise v0.3.0&lt;/a>이 160개 이상의 개선 사항과 함께 실시간 메시지 전송과 Amber 서명자 지원을 도입했습니다. &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.5">diVine 1.0.5&lt;/a>는 동영상 재생 문제를 수정하고 크리에이터 애널리틱스를 위한 Kind 22236 view event를 추가했습니다. &lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>, &lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a>, &lt;a href="https://github.com/dmcarrington/unfiltered">Unfiltered&lt;/a>가 업데이트를 출시했습니다. &lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a>는 Nostr 네이티브 메시 네트워킹의 작동하는 Rust 구현을 공개했습니다. Notecrumbs는 damus.io 링크 미리보기의 안정성 수정을 받았습니다. &lt;a href="https://contextvm.org">ContextVM&lt;/a>은 Nostr와 Model Context Protocol을 연결합니다. 새 프로젝트로는 AI 에이전트와 인간 간 MLS 암호화 메시지를 위한 &lt;a href="https://github.com/CentauriAgent/burrow">Burrow&lt;/a>와 브라우저 기반 볼트 및 신원 관리를 위한 &lt;a href="https://github.com/nostria-app/nostria-signer-extension">Nostria Signer&lt;/a>가 있습니다. 심층 분석은 NIP-55 Android 서명과 NIP-60 Cashu 지갑 동기화를 다룹니다.&lt;/p>
&lt;h2 id="뉴스">뉴스&lt;/h2>
&lt;h3 id="notecrumbs-안정성-개선">Notecrumbs 안정성 개선&lt;/h3>
&lt;p>damus.io 링크 미리보기를 구동하는 Nostr API 및 웹 서버 &lt;a href="https://github.com/damus-io/notecrumbs">Notecrumbs&lt;/a>가 안정성 문제를 해결하는 일련의 수정을 받았습니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/damus-io/notecrumbs/commit/3f201f63ea49">동시성 수정&lt;/a>은 inflight 중복 제거 메커니즘을 watch 채널로 교체했습니다. 동일한 노트를 요청하는 두 호출자가 모두 fetcher가 되어, 한쪽이 다른 쪽이 알림을 구독하기 전에 완료되면 데드락이 발생할 수 있었습니다. 원자적 연산과 함께 watch 채널을 사용하면 오직 하나의 fetcher만 실행되고 나머지는 결과를 기다립니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/damus-io/notecrumbs/commit/b0d0bf5a2f17">속도 제한&lt;/a>은 relay 과부하에 대한 2단계 방어를 구현합니다. 사용자가 동일한 노트에 반복적으로 접근하면 시스템이 5분 쿨다운 윈도우로 relay 요청을 디바운스합니다. 이 보호는 모든 &lt;a href="https://nostrcompass.org/ko/topics/nip-19/">NIP-19&lt;/a> 유형과 프로필 피드에 적용되어 트래픽이 많을 때 relay로의 비례적 스팸을 방지합니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/damus-io/notecrumbs/commit/38670b3972b6">성능 개선&lt;/a>은 보조 데이터 가져오기를 백그라운드 tokio 작업으로 이동했습니다. 페이지가 7.5초까지 누적될 수 있던 순차적 relay 타임아웃을 기다리지 않고 캐시된 데이터로 즉시 렌더링됩니다. nostrdb 0.10.0 업그레이드가 이 수정들과 함께 이루어졌습니다.&lt;/p>
&lt;h3 id="contextvm-nostr를-통한-mcp">ContextVM: Nostr를 통한 MCP&lt;/h3>
&lt;p>&lt;a href="https://contextvm.org">ContextVM&lt;/a>은 Nostr와 &lt;a href="https://modelcontextprotocol.io/">Model Context Protocol&lt;/a> (MCP)을 연결하는 도구 모음입니다. 최근 커밋으로 결제를 지원하는 새로운 &lt;a href="https://docs.contextvm.org/spec/ceps/cep-8/">CEP-8&lt;/a> 명세가 도입되었으며, 2월 내내 &lt;a href="https://github.com/ContextVM/sdk">SDK&lt;/a> 개선이 이루어지고 있습니다.&lt;/p>
&lt;p>SDK는 Nostr를 통한 MCP용 TypeScript 클라이언트 및 서버 transport를 제공합니다. 개발자는 Nostr 네트워크 전반에 MCP 서버를 노출할 수 있고, 클라이언트는 이에 연결할 수 있습니다. Relay는 암호화된 event를 맹목적으로 라우팅하는 메시지 버스 역할을 합니다. 네이티브 Nostr 지원이 없는 클라이언트는 프록시 레이어를 통해 연결합니다. 라이브러리는 relay 관리와 event 인증을 위한 암호화 서명을 처리하며, Node.js와 브라우저 환경 모두에서 작동합니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/ContextVM/cvmi">CVMI&lt;/a>는 서버 검색과 메서드 호출을 위한 CLI를 제공합니다. &lt;a href="https://github.com/ContextVM/relatr">Relatr&lt;/a>는 소셜 그래프 거리와 프로필 검증을 결합하여 개인화된 신뢰 점수를 계산합니다.&lt;/p>
&lt;p>ContextVM은 브리지 레이어로 자리매김하고 있습니다. 기존 MCP 서버는 기존 transport를 유지하면서 Nostr 상호운용성을 얻습니다.&lt;/p>
&lt;h3 id="white-noise-탈중앙화-사용자-검색-문서화">White Noise, 탈중앙화 사용자 검색 문서화&lt;/h3>
&lt;p>&lt;a href="https://blog.jgmontoya.com/2026/02/22/user-search.html">jgmontoya의 블로그 게시물&lt;/a>은 &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>가 탈중앙화 relay 네트워크 전반에서 사용자 검색을 처리하는 방식을 자세히 설명합니다.&lt;/p>
&lt;p>프로필 배포가 핵심 과제입니다. 통합 데이터베이스를 갖춘 중앙화 메신저와 달리, Nostr 프로필은 중앙 인덱스 없이 수십 개의 relay에 분산됩니다. White Noise는 병렬로 실행되는 생산자-소비자 아키텍처로 이를 해결합니다.&lt;/p>
&lt;p>생산자 프로세스는 사용자의 팔로우에서 출발하여 소셜 그래프를 지속적으로 확장하고, 증가하는 거리에서 팔로우 목록을 가져와 발견된 pubkey를 프로필 해석 큐에 추가합니다. 소비자는 점점 비용이 증가하는 5단계로 일치를 해석합니다. 로컬 사용자 테이블(가장 빠름), 이전 검색에서 캐시된 프로필, 연결된 relay, &lt;a href="https://nostrcompass.org/ko/topics/nip-65/">NIP-65&lt;/a>에 따른 사용자 relay 목록, 사용자가 선언한 relay에 대한 직접 쿼리(가장 느림) 순입니다.&lt;/p>
&lt;p>콜드 검색은 약 3초가 걸리고, 캐시에서의 웜 검색은 약 10밀리초로 줄어듭니다. 확립된 소셜 그래프가 없는 신규 사용자의 경우 시스템이 잘 연결된 부트스트랩 노드를 주입하며, 그룹 멤버십은 명시적 팔로우 외에 암묵적 소셜 신호로도 작용합니다.&lt;/p>
&lt;p>저자는 계측이 최적화에 결정적이었다고 언급하며, 메트릭 없이는 개선이 추측에 불과했다고 말합니다.&lt;/p>
&lt;h3 id="fips-nostr-네이티브-메시-네트워킹">FIPS: Nostr 네이티브 메시 네트워킹&lt;/h3>
&lt;p>&lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a>(Free Internetworking Peering System)는 Nostr 키쌍(secp256k1)을 노드 신원으로 사용하는 자기 조직 메시 네트워크의 작동하는 Rust 구현으로, &lt;a href="https://github.com/jmcorgan/fips/blob/master/docs/design/fips-intro.md">설계 문서&lt;/a>가 기능하는 코드와 함께 제공됩니다.&lt;/p>
&lt;p>이 프로토콜은 인프라 독립성을 다룹니다. 노드는 중앙 서버나 인증 기관 없이 자동으로 서로를 발견하며, 스패닝 트리가 좌표 기반 라우팅을 제공하고 bloom filter가 도달 가능성 정보를 전파하여 노드가 로컬 지식만으로 포워딩 결정을 내릴 수 있게 합니다. Transport 불가지론성은 같은 프로토콜이 UDP, 이더넷, 블루투스, LoRa 라디오, 또는 데이터그램 가능한 어떤 매체에서도 작동한다는 의미입니다.&lt;/p>
&lt;p>두 암호화 레이어가 트래픽을 보호합니다. 링크 계층 암호화(Noise IK 패턴)는 상호 인증과 순방향 비밀성으로 이웃 간 홉별 통신을 보호합니다. 세션 계층 암호화(Noise XK 패턴)는 중간 라우터에 대한 종단 간 보호를 제공하며, 목적지만이 페이로드를 복호화할 수 있습니다. 이는 TLS가 신뢰할 수 없는 네트워크를 통과할 때도 HTTP 트래픽을 보호하는 방식과 유사합니다.&lt;/p>
&lt;p>아키텍처는 라우팅에 &amp;ldquo;탐욕적 임베딩&amp;rdquo; 스패닝 트리를 사용합니다. 각 노드는 트리 루트와 부모에 대한 상대적 위치를 기반으로 좌표를 받습니다. 패킷은 목적지에 더 가까운 좌표를 향해 탐욕적으로 라우팅되며, bloom filter가 도달 가능한 엔드포인트를 알립니다. 탐욕적 라우팅이 실패하면(로컬 최솟값), 노드는 트리 기반 경로로 대체할 수 있습니다.&lt;/p>
&lt;p>Rust 구현은 이미 bloom filter 검색을 갖춘 UDP transport를 포함합니다. 향후 작업은 피어 부트스트래핑을 위한 Nostr relay 통합을 목표로 합니다.&lt;/p>
&lt;h2 id="릴리스">릴리스&lt;/h2>
&lt;p>이번 주에는 relay 인프라와 클라이언트 애플리케이션 전반에 걸친 릴리스가 있었으며, 새 프로젝트도 등장했습니다.&lt;/p>
&lt;h3 id="haven-v120">HAVEN v1.2.0&lt;/h3>
&lt;p>네 가지 relay 기능과 &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a> 미디어 서버를 번들로 제공하는 올인원 개인 relay &lt;a href="https://github.com/bitvora/haven">HAVEN&lt;/a>이 &lt;a href="https://github.com/bitvora/haven/releases/tag/v1.2.0">v1.2.0&lt;/a>을 출시했습니다. 이 릴리스는 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-18-newsletter/#haven-v120-rc3">지난주 다룬&lt;/a> RC 단계를 벗어납니다.&lt;/p>
&lt;p>다중 npub 지원으로 단일 HAVEN 인스턴스가 화이트리스트를 통해 여러 Nostr 신원을 서비스할 수 있으며, 접근 제어를 위한 새 블랙리스트 기능도 추가되었습니다. 다시 작성된 백업 시스템은 이식 가능한 JSONL 형식을 사용하며, JSONL 파일에서 노트를 가져오는 &lt;code>haven restore&lt;/code> 명령이 제공됩니다. 클라우드 스토리지 통합으로 원격 백업 관리를 위한 &lt;code>--to-cloud&lt;/code> 및 &lt;code>--from-cloud&lt;/code> 플래그가 추가되었습니다.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/web-of-trust/">Web of Trust&lt;/a> 개선 사항으로는 신뢰 계산을 위한 구성 가능한 깊이 수준과 메모리 오버헤드를 줄이는 잠금 없는 최적화를 갖춘 자동 24시간 새로 고침 간격이 포함됩니다. relay 요청을 위한 사용자 에이전트 구성과 구성 가능한 Blastr 타임아웃 설정, 압축된 JSONL로의 데이터 내보내기가 릴리스를 완성합니다.&lt;/p>
&lt;h3 id="white-noise-v030">White Noise v0.3.0&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/mls/">MLS&lt;/a> 기반 암호화 메시징 앱으로 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> 프로토콜을 구현하는 &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>가 160개 이상의 개선 사항과 함께 &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v0.3.0">v0.3.0&lt;/a>을 출시했습니다.&lt;/p>
&lt;p>이 릴리스는 폴링 대신 스트리밍 연결을 통한 실시간 메시지 전송을 도입하여 메시지가 즉시 도착합니다. Amber 지원(&lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a>)으로 개인 키가 앱에 닿을 필요가 없습니다. 이미지 공유는 이제 업로드 진행 추적과 로딩 중 blurhash 자리 표시자와 함께 작동하며, 전체 화면 보기는 핀치-투-줌을 지원합니다.&lt;/p>
&lt;p>그룹 메시지는 채팅 목록에 발신자 이름이 표시되고 &lt;a href="https://nostrcompass.org/ko/topics/mls/">MLS&lt;/a> 암호화가 순방향 비밀성을 보장하는 안정성 개선을 받았습니다. 사용자 검색은 팔로우에서 최대 4단계 거리까지 확장되며, 결과가 발견되는 대로 스트리밍됩니다.&lt;/p>
&lt;p>Marmot 프로토콜 변경과 암호화된 로컬 스토리지로의 전환으로 인해 업그레이드 시 모든 로컬 데이터가 초기화되는 중단 변경이 있습니다. 업그레이드 전에 nsec 키를 백업하시기 바랍니다.&lt;/p>
&lt;h3 id="divine-105">diVine 1.0.5&lt;/h3>
&lt;p>복원된 Vine 아카이브를 기반으로 한 단편 루프 동영상 클라이언트 &lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>이 광범위한 동영상 재생 수정과 새로운 탈중앙화 애널리틱스 시스템을 담은 &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.5">1.0.5&lt;/a>를 출시했습니다.&lt;/p>
&lt;p>팬텀 일시 정지, 동영상 간 이중 오디오, 썸네일과 첫 프레임 사이의 검은 화면, 처리된 플레이어 충돌이 모두 해결되었으며, 풀링된 동영상 플레이어가 홈 피드의 일관된 재생을 담당합니다.&lt;/p>
&lt;p>Kind 22236 임시 view event가 크리에이터 애널리틱스와 추천을 지원합니다. 시스템은 홈, 검색, 프로필, 공유 등 트래픽 소스별로 루프 수를 추적하면서 자기 조회를 필터링합니다. Nostr event imeta 태그의 로컬 파일 경로 누출이 BUD-01 명세에 따라 클라이언트 측에서 구성된 표준 Blossom URL로 수정되었습니다.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> 원격 서명자 개선에는 병렬화된 relay 연결과 콜백 URL 지원이 포함됩니다. Android는 서명자 승인 후 앱 재개 시 WebSocket 연결을 재연결합니다.&lt;/p>
&lt;h3 id="coracle-0630">Coracle 0.6.30&lt;/h3>
&lt;p>relay 관리와 &lt;a href="https://nostrcompass.org/ko/topics/web-of-trust/">Web of Trust&lt;/a> 모더레이션에 집중한 웹 기반 Nostr 클라이언트 &lt;a href="https://github.com/coracle-social/coracle">Coracle&lt;/a>이 피드의 미디어 탐색을 개선하는 동영상 썸네일 지원과 함께 &lt;a href="https://github.com/coracle-social/coracle/releases/tag/0.6.30">0.6.30&lt;/a>을 출시했습니다. iOS 클라이언트 측에서는 Nostur도 업데이트를 받았습니다.&lt;/p>
&lt;h3 id="nostur-v1260">Nostur v1.26.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a>가 새로운 라이브 스트림 피드 섹션과 재설계된 설정 화면을 담은 &lt;a href="https://github.com/nostur-com/nostur-ios-public/releases/tag/1.26.0">v1.26.0&lt;/a>을 출시했습니다. GIF는 이제 Blossom 미디어 서버에 호스팅할 수 있어 중앙화 서비스 의존도를 줄입니다. Klipy GIF 통합은 Tenor를 사용할 수 없을 때 백업을 제공합니다. DM 대화의 연도 헤더와 언급 수 표시가 사용자 향 변경 사항을 완성합니다.&lt;/p>
&lt;p>개발자 도구와 CLI 앱도 이번 주 업데이트를 받았습니다.&lt;/p>
&lt;h3 id="nak-v0185">nak v0.18.5&lt;/h3>
&lt;p>fiatjaf의 Nostr용 커맨드라인 도구 &lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a>이 사용자 프로필 가져오기 및 표시를 위한 새 &lt;code>nak profile&lt;/code> 서브커맨드와 함께 &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.18.5">v0.18.5&lt;/a>를 출시했습니다. &lt;code>git clone&lt;/code> 명령은 이제 &lt;code>nostr://&lt;/code> URI에서 &lt;a href="https://nostrcompass.org/ko/topics/nip-05/">NIP-05&lt;/a> 이름을 지원하여 사람이 읽을 수 있는 식별자로 저장소 복제가 가능합니다.&lt;/p>
&lt;h3 id="pika-v053">Pika v0.5.3&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> 프로토콜을 기반으로 iOS, Android, 데스크톱용으로 구축된 &lt;a href="https://nostrcompass.org/ko/topics/mls/">MLS&lt;/a> 암호화 메신저 &lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>가 &lt;a href="https://github.com/sledtools/pika/releases/tag/pikachat-v0.5.3">v0.5.3&lt;/a>을 출시했습니다. 최근 커밋은 데스크톱 앱에 파일 업로드와 드래그 앤 드롭 미디어 지원을 추가하고, Cloudflare Workers 배포 수정이 이루어졌습니다.&lt;/p>
&lt;p>Pika는 모든 비즈니스 로직을 소유하는 Rust 코어를 사용하며, iOS(SwiftUI)와 Android(Kotlin)는 상태 스냅샷을 렌더링하는 얇은 UI 레이어 역할을 합니다. MDK(Marmot Development Kit)가 MLS 구현을 제공합니다. 프로젝트는 알파 상태임을 명시하며 민감한 작업에 사용하지 말 것을 권고합니다.&lt;/p>
&lt;h3 id="ridestr-v026">Ridestr v0.2.6&lt;/h3>
&lt;p>Cashu 결제가 포함된 탈중앙화 차량 공유 플랫폼 &lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a>이 &lt;a href="https://github.com/variablefate/ridestr/releases/tag/v0.2.6">v0.2.6&lt;/a>을 출시했습니다. 이 릴리스는 TalkBack 접근성 문제를 수정하고, 결제 수단 전환 시 드라이버가 근처 목록에서 사라지거나 드라이버가 오프라인 상태가 될 때 선택된 드라이버 수가 업데이트되지 않는 버그를 해결합니다.&lt;/p>
&lt;p>&amp;ldquo;전체에 전송&amp;rdquo; 기능이 이제 &amp;ldquo;Broadcast RoadFlare&amp;quot;로 변경되었으며, 새 드라이버 설치 시 발생하는 자동 실패 문제가 수정되었습니다. Ridestr은 신뢰 없는 차량 결제를 위한 HTLC 에스크로와 기기 전반의 &lt;a href="https://nostrcompass.org/ko/topics/nip-60/">NIP-60&lt;/a> 지갑 동기화를 구현합니다.&lt;/p>
&lt;h3 id="unfiltered-v106">Unfiltered v1.0.6&lt;/h3>
&lt;p>Android용 Instagram 유사 사진 공유 앱 &lt;a href="https://github.com/dmcarrington/unfiltered">Unfiltered&lt;/a>가 개선된 사용자 검색과 60초마다 자동 relay 재연결을 담은 &lt;a href="https://github.com/dmcarrington/unfiltered/releases/tag/v1.0.6">v1.0.6&lt;/a>을 출시했습니다.&lt;/p>
&lt;p>Kotlin과 Jetpack Compose로 구축된 Unfiltered는 rust-nostr 바인딩과 Blossom 호환 서버를 이미지 호스팅에 사용합니다. Amber 통합(&lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a>)이 안전한 키 관리를 처리합니다. 앱은 알고리즘이나 광고 없이 팔로우한 계정의 게시물을 시간 순으로 표시합니다.&lt;/p>
&lt;p>이번 주에는 두 개의 새 메시지 및 서명 프로젝트도 출시되었습니다.&lt;/p>
&lt;h3 id="burrow-ai-에이전트를-위한-mls-메시지">Burrow: AI 에이전트를 위한 MLS 메시지&lt;/h3>
&lt;p>&lt;a href="https://github.com/CentauriAgent/burrow">Burrow&lt;/a>는 전화번호나 중앙화 서버 없이 MLS 암호화 통신을 위한 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> 프로토콜을 구현하는 메신저입니다. 인간 사용자와 AI 에이전트 모두 참여할 수 있습니다.&lt;/p>
&lt;p>자동화 시스템 통합을 위한 JSONL 출력 모드가 있는 순수 Rust CLI 데몬이 제공됩니다. Flutter 크로스 플랫폼 앱은 Android, iOS, Linux, macOS, Windows를 지원합니다. 미디어 첨부파일은 메시지와 함께 암호화되고, WebRTC가 구성 가능한 TURN 서버로 음성 및 영상 통화를 처리합니다.&lt;/p>
&lt;p>Burrow는 Nostr 인프라 위에 MLS 암호화를 레이어링합니다. 신원은 Nostr 키쌍(secp256k1)을 사용하고 MLS KeyPackage는 kind 443 event로 게시됩니다. 메시지는 kind 445 event로 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a>로 암호화되며, 초대는 &lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59&lt;/a> 선물 포장을 사용합니다.&lt;/p>
&lt;p>&lt;a href="https://openclaw.ai">OpenClaw&lt;/a> 통합으로 AI 에이전트가 전체 도구 접근권으로 참여할 수 있습니다. 감사 로깅이 있는 접근 제어 목록이 연락처와 그룹 권한을 관리합니다. 이 조합으로 Burrow는 탈중앙화 인프라에서 Signal 수준 암호화가 필요한 에이전트 간 및 에이전트-인간 메시지 시나리오에 적합합니다.&lt;/p>
&lt;h3 id="nostria-signer-extension">Nostria Signer Extension&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria-signer-extension">Nostria Signer&lt;/a>는 Nostr 사용자를 위한 볼트와 신원 관리를 제공하는 Chromium 기반 브라우저 확장 프로그램입니다.&lt;/p>
&lt;p>여러 계정을 담은 여러 볼트로 사용자가 다양한 맥락에 맞는 신원을 정리할 수 있습니다. 국제화에는 RTL 언어 지원이 포함됩니다. Angular와 TypeScript(코드베이스의 79.2%)로 구축되어 브라우저 확장 프로그램과 Progressive Web App 모두로 작동합니다.&lt;/p>
&lt;p>Nostria Signer는 브라우저 확장 서명을 위한 &lt;a href="https://nostrcompass.org/ko/topics/nip-07/">NIP-07&lt;/a>을 구현하여 웹 기반 Nostr 클라이언트가 개인 키에 직접 접근하지 않고 event 서명을 요청할 수 있게 합니다. 자동화된 지갑 마이그레이션이 Chrome 웹 스토어를 통해 배포되는 업데이트를 처리합니다. 사용자는 &lt;code>dist/extension&lt;/code> 폴더에서 사이드로드할 수도 있습니다.&lt;/p>
&lt;p>개발자들은 실험적 상태를 강조합니다. 개발자가 분실된 키에 대한 접근을 복원할 수 없으므로 사용자가 직접 비밀 복구 문구를 관리해야 합니다.&lt;/p>
&lt;h2 id="프로젝트-업데이트">프로젝트 업데이트&lt;/h2>
&lt;h3 id="formstr-새-조직으로-이전">Formstr, 새 조직으로 이전&lt;/h3>
&lt;p>Nostr 위의 Google Forms 대안인 &lt;a href="https://github.com/formstr-hq/nostr-forms">Formstr&lt;/a>가 저장소를 &lt;code>abh3po/nostr-forms&lt;/code>에서 &lt;code>formstr-hq&lt;/code> 조직으로 이전했습니다. 이 OpenSats 보조금 수혜 프로젝트는 새 위치에서 개발을 계속합니다.&lt;/p>
&lt;h3 id="주목할-만한-오픈-pr">주목할 만한 오픈 PR&lt;/h3>
&lt;p>Nostr 프로젝트 전반에서 진행 중인 작업:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Damus Outbox 모델&lt;/strong> (&lt;a href="https://github.com/damus-io/damus/pull/3602">PR #3602&lt;/a>): iOS에서 gossip/outbox relay 모델 구현 계획. 이 아키텍처 변경은 수신자가 실제로 읽는 relay에 게시하여 메시지 전달을 개선합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Notedeck 크로스 플랫폼 알림&lt;/strong> (&lt;a href="https://github.com/damus-io/notedeck/pull/1296">PR #1296&lt;/a>): Android FCM, macOS, Linux를 지원하는 Damus 데스크톱 클라이언트용 네이티브 알림 시스템.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NDK Cashu v3 업그레이드&lt;/strong> (&lt;a href="https://github.com/nostr-dev-kit/ndk/pull/370">PR #370&lt;/a>): Nostr Development Kit의 지갑 통합을 cashu-ts v3으로 업데이트.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Zeus Cashu 오프라인&lt;/strong> (&lt;a href="https://github.com/ZeusLN/zeus/pull/3742">PR #3742&lt;/a>): Zeus Lightning 지갑의 오프라인 ecash 전송 및 수신.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Shopstr 암호화 디지털 전달&lt;/strong> (&lt;a href="https://github.com/shopstr-eng/shopstr/pull/231">PR #231&lt;/a>): 디지털 상품의 암호화 전달과 물리적 상품을 위한 동적 무게 지원 추가.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-업데이트">NIP 업데이트&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 저장소&lt;/a>의 최근 변경 사항:&lt;/p>
&lt;p>&lt;strong>이번 주 병합됨:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2223">NIP-85 서비스 제공자 검색 가능성&lt;/a>&lt;/strong>: &lt;a href="https://nostrcompass.org/ko/topics/nip-85/">NIP-85&lt;/a> 명세에 이제 클라이언트가 신뢰할 수 있는 어서션 제공자를 발견하는 방법에 대한 안내가 포함됩니다. 클라이언트가 &lt;a href="https://nostrcompass.org/ko/topics/web-of-trust/">Web of Trust&lt;/a> 점수나 기타 계산된 메트릭이 필요할 때, 사용자가 이미 팔로우하거나 신뢰하는 제공자의 kind 30085 공지를 relay에 쿼리할 수 있습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2229">NIP-29 비관리 그룹 제거&lt;/a>&lt;/strong>: &lt;a href="https://nostrcompass.org/ko/topics/nip-29/">NIP-29&lt;/a> 그룹 채팅 명세에서 비관리 그룹(어떤 멤버든 다른 사람을 추가할 수 있는) 지원이 삭제되었습니다. 모든 NIP-29 그룹은 이제 명시적 관리자 역할을 갖춘 relay 측 관리가 필요하여, 구현을 단순화하고 스팸 경로를 줄입니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2231">NIP-11 사용 중단된 필드 제거&lt;/a>&lt;/strong>: &lt;a href="https://nostrcompass.org/ko/topics/nip-11/">NIP-11&lt;/a> relay 정보 문서에 더 이상 사용 중단된 &lt;code>software&lt;/code> 및 &lt;code>version&lt;/code> 필드가 포함되지 않습니다. 구현체는 응답에서 이를 제거해야 합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2227">NIP-39 신원 태그 이동&lt;/a>&lt;/strong>: 외부 신원 주장(&lt;a href="https://nostrcompass.org/ko/topics/nip-39/">NIP-39&lt;/a> GitHub, Twitter 등의 &lt;code>i&lt;/code> 태그)이 kind 0 프로필에서 전용 kind 30382 event로 이동되었습니다. 이로써 신원 검증이 프로필 메타데이터에서 분리됩니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>AI 에이전트 NIP 진행 상황:&lt;/strong>&lt;/p>
&lt;p>네 개의 AI 관련 NIP이 활발한 개발을 계속하고 있습니다. &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-18-newsletter/#ai-%EC%97%90%EC%9D%B4%EC%A0%84%ED%8A%B8-nip-%EB%93%B1%EC%9E%A5">지난주 보도&lt;/a> 이후:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2220">NIP-AE: 에이전트&lt;/a>&lt;/strong> (2월 19일 업데이트): 에이전트 정의를 위한 kind 4199와 프롬프팅(&amp;ldquo;넛지&amp;rdquo;)을 위한 kind 4201로 에이전트 신원을 정의합니다. 에이전트는 확장된 설명을 위해 &lt;a href="https://nostrcompass.org/ko/topics/nip-94/">NIP-94&lt;/a> 파일 메타데이터를 참조할 수 있습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2226">NIP-XX: AI 에이전트 메시지&lt;/a>&lt;/strong> (2월 18일 업데이트): 상태, 스트리밍 델타, 프롬프트, 응답, 도구 호출, 오류, 취소를 위한 7개의 임시 event kind(25800-25806)로 대화형 메시지를 표준화합니다. Kind 31340 &amp;ldquo;AI Info&amp;rdquo; event로 에이전트가 지원하는 모델과 기능을 알릴 수 있습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2228">NIP-AC: DVM 에이전트 조정&lt;/a>&lt;/strong> (2월 18일 공개): 자율 에이전트 워크플로를 위해 &lt;a href="https://nostrcompass.org/ko/topics/nip-90/">NIP-90&lt;/a>을 확장합니다. 에이전트 검색을 위한 하트비트, 품질 추적을 위한 작업 리뷰, 결과 커밋을 위한 데이터 에스크로, 다단계 파이프라인을 위한 워크플로 체인, 경쟁적 제공자 선택을 위한 스웜 입찰이 추가됩니다. 참조 구현이 2020117.xyz에서 실행됩니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2221">NIP-AD: MCP 서버 공지&lt;/a>&lt;/strong> (2월 12일 공개): Nostr에서 Model Context Protocol 서버와 스킬의 공지를 표준화합니다. 이미 TENEX 플랫폼에서 사용 중입니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>기타 오픈 PR:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2232">NIP-144: 서비스 인증 프로토콜&lt;/a>&lt;/strong>: 클라이언트가 Nostr의 서비스 제공자에게 신원과 권한을 증명하는 방법을 정의합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2230">NIP-DC: Nostr Webxdc&lt;/a>&lt;/strong>: alexgleason이 Webxdc(탈중앙화 웹 애플리케이션)를 Nostr event와 통합하는 것을 제안합니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-심층-분석-nip-55-android-서명자-애플리케이션">NIP 심층 분석: NIP-55 (Android 서명자 애플리케이션)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/55.md">NIP-55&lt;/a>는 Android Nostr 클라이언트가 전용 서명자 애플리케이션에 암호화 작업을 요청하는 방법을 정의합니다. 이번 주 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-25-newsletter/#white-noise-v030">White Noise v0.3.0&lt;/a>과 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-25-newsletter/#unfiltered-v106">Unfiltered v1.0.6&lt;/a> 모두 Amber 지원을 추가함에 따라, Android 서명 프로토콜을 살펴봅니다.&lt;/p>
&lt;p>&lt;strong>통신 채널:&lt;/strong>&lt;/p>
&lt;p>NIP-55는 두 가지 메커니즘으로 앱 간 서명을 지원합니다. Intent는 일회성 작업에 시각적 피드백과 함께 수동 사용자 승인을 제공합니다. Content Resolver는 사용자가 지속적 권한을 부여할 때 자동화된 서명을 지원하여, 반복 프롬프트 없이 백그라운드에서 앱이 서명할 수 있게 합니다.&lt;/p>
&lt;p>통신은 커스텀 &lt;code>nostrsigner:&lt;/code> URI 체계를 사용합니다. 클라이언트는 다음과 같이 접촉을 시작합니다:&lt;/p>
&lt;pre tabindex="0">&lt;code>nostrsigner:&amp;lt;base64-encoded-event&amp;gt;?type=sign_event&amp;amp;callbackUrl=myapp://callback
&lt;/code>&lt;/pre>&lt;p>&lt;strong>지원되는 작업:&lt;/strong>&lt;/p>
&lt;p>명세는 일곱 가지 암호화 메서드를 정의합니다. event 서명(&lt;code>sign_event&lt;/code>), 공개 키 가져오기(&lt;code>get_public_key&lt;/code>), &lt;a href="https://nostrcompass.org/ko/topics/nip-04/">NIP-04&lt;/a> 암호화/복호화, &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> 암호화/복호화, zap event 복호화(&lt;code>decrypt_zap_event&lt;/code>)입니다.&lt;/p>
&lt;p>&lt;strong>권한 모델:&lt;/strong>&lt;/p>
&lt;p>클라이언트는 신뢰 관계를 확립하기 위해 &lt;code>get_public_key&lt;/code>를 한 번 호출하여 서명자의 패키지 이름과 사용자 pubkey를 받습니다. 명세는 클라이언트가 이 값들을 저장하고 &lt;code>get_public_key&lt;/code>를 다시 호출하지 않도록 요구하여 핑거프린팅 공격을 방지합니다.&lt;/p>
&lt;p>서명 요청의 경우 사용자는 한 번 승인하거나 백그라운드 작업에 대해 &amp;ldquo;내 선택 기억&amp;quot;을 부여할 수 있습니다. 사용자가 작업을 지속적으로 거부하면 서명자는 &amp;ldquo;rejected&amp;rdquo; 상태를 반환하여 반복 프롬프트를 방지합니다.&lt;/p>
&lt;p>&lt;strong>구현:&lt;/strong>&lt;/p>
&lt;p>&lt;a href="https://github.com/greenart7c3/amber">Amber&lt;/a>가 Android의 주요 NIP-55 서명자입니다. NIP-55를 지원하는 클라이언트로는 &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-25-newsletter/#white-noise-v030">White Noise&lt;/a>, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-25-newsletter/#unfiltered-v106">Unfiltered&lt;/a> 등이 있습니다. 웹 애플리케이션은 서명자 응답을 직접 받을 수 없어 콜백 URL이나 클립보드 작업을 사용해야 합니다.&lt;/p>
&lt;p>&lt;strong>다른 서명 NIP과의 관계:&lt;/strong>&lt;/p>
&lt;p>NIP-55는 &lt;a href="https://nostrcompass.org/ko/topics/nip-07/">NIP-07&lt;/a>(브라우저 확장)과 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a>(relay를 통한 원격 서명)을 보완합니다. NIP-07이 데스크톱 브라우저를 처리하고 NIP-46이 크로스 기기 서명을 처리하는 동안, NIP-55는 최소 지연으로 네이티브 Android 통합을 제공합니다.&lt;/p>
&lt;h2 id="nip-심층-분석-nip-60-cashu-지갑">NIP 심층 분석: NIP-60 (Cashu 지갑)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/60.md">NIP-60&lt;/a>은 &lt;a href="https://nostrcompass.org/ko/topics/cashu/">Cashu&lt;/a> ecash 지갑이 Nostr relay에 상태를 저장하여 애플리케이션 간 지갑 동기화를 지원하는 방법을 정의합니다. &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-25-newsletter/#ridestr-v026">Ridestr v0.2.6&lt;/a>이 기기 전반의 지갑 동기화에 NIP-60을 사용함에 따라, 이 프로토콜을 살펴봅니다.&lt;/p>
&lt;p>&lt;strong>Event Kind:&lt;/strong>&lt;/p>
&lt;p>NIP-60은 네 가지 event 유형을 사용합니다. 교체 가능한 kind 17375는 민트 URL과 P2PK ecash 결제 수신을 위한 전용 개인 키를 포함하는 지갑 구성을 저장합니다. 토큰 event(kind 7375)는 미사용 암호화 증명을 담고, 지출 내역(kind 7376)은 사용자 투명성을 위해 거래를 기록합니다. 선택적 kind 7374는 민트 결제 견적을 추적합니다.&lt;/p>
&lt;p>&lt;strong>지갑 아키텍처:&lt;/strong>&lt;/p>
&lt;p>지갑 상태는 relay에 저장되어 애플리케이션 전반에서 접근 가능합니다. 사용자의 지갑 event는 Cashu 민트에 대한 암호화된 참조와 사용자의 Nostr 신원과 별개인 지갑 전용 개인 키를 담습니다. 이 분리가 중요합니다. 지갑 키는 ecash 작업을 처리하고 Nostr 키는 소셜 기능을 처리합니다.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">17375&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;nip44-encrypted-wallet-config&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [[&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;cashu-wallet&amp;#34;&lt;/span>]]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>증명 관리:&lt;/strong>&lt;/p>
&lt;p>Cashu 증명은 소지자 증권입니다. 한번 사용되면 증명이 무효화됩니다. NIP-60은 롤오버 메커니즘으로 이를 관리합니다. 지출 시 클라이언트는 나머지 미사용 증명으로 새 토큰 event를 생성하고 &lt;a href="https://nostrcompass.org/ko/topics/nip-09/">NIP-09&lt;/a>를 통해 원본을 삭제합니다. 삭제된 토큰 ID는 상태 추적을 위해 &lt;code>del&lt;/code> 필드에 들어갑니다.&lt;/p>
&lt;p>클라이언트는 주기적으로 민트에 대해 증명을 검증하여 이미 사용된 자격 증명을 감지해야 합니다. 민트당 여러 토큰 event가 허용되며, 지출 내역 event는 선택적이지만 사용자가 거래를 추적하는 데 도움이 됩니다.&lt;/p>
&lt;p>&lt;strong>보안 모델:&lt;/strong>&lt;/p>
&lt;p>모든 민감한 데이터는 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> 암호화를 사용합니다. 지갑 개인 키는 평문으로 나타나지 않습니다. relay가 내용을 이해하지 못하고 암호화된 블롭을 저장하기 때문에, 신뢰할 수 없는 relay에서도 지갑 상태는 비공개를 유지합니다.&lt;/p>
&lt;p>&lt;strong>구현:&lt;/strong>&lt;/p>
&lt;p>NIP-60을 지원하는 지갑으로는 &lt;a href="https://github.com/gandlafbtc/nutsack">Nutsack&lt;/a>과 &lt;a href="https://github.com/cashubtc/eNuts">eNuts&lt;/a>가 있습니다. &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-25-newsletter/#ridestr-v026">Ridestr&lt;/a> 같은 클라이언트는 NIP-60을 크로스 기기 동기화에 사용하여, 사용자가 데스크톱에서 충전하고 모바일에서 수동 이체 없이 지출할 수 있게 합니다.&lt;/p>
&lt;hr>
&lt;p>이번 주는 여기까지입니다. 무언가를 만들고 있거나 공유할 뉴스가 있다면 &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">&lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> DM으로 연락하시거나&lt;/a> Nostr에서 찾아주세요.&lt;/p></content:encoded></item><item><title>Nostr Compass #10</title><link>https://nostrcompass.org/ko/newsletters/2026-02-18-newsletter/</link><pubDate>Wed, 18 Feb 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2026-02-18-newsletter/</guid><description>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> 독립적인 프로젝트들이 Android 오프라인 미디어 접근 문제에 수렴하면서 Blossom 로컬 캐시 레이어가 형태를 갖춰가고 있습니다. Alby가 실제 자금 위험 없이 Nostr Wallet Connect 통합을 구축하고 테스트할 수 있는 &lt;a href="https://sandbox.albylabs.com">NWC 개발자 샌드박스&lt;/a>를 출시했습니다. AI 에이전트의 Nostr 통신을 위한 경쟁적인 제안들이 같은 주에 두 저자로부터 도착했습니다. fiatjaf가 relay 운영자들이 채택하지 않은 보존 정책, 국가 코드, 개인정보 처리방침, 커뮤니티 환경설정 tag를 제거하며 &lt;a href="https://github.com/nostr-protocol/nips/pull/1946">NIP-11&lt;/a>에서 사용되지 않는 필드를 제거했습니다. &lt;a href="https://github.com/nostr-protocol/nips/pull/2223">NIP-85&lt;/a>가 Trusted Assertions의 서비스 제공자 검색 안내를 포함하며 병합되었습니다. &lt;a href="https://github.com/nostr-protocol/nips/pull/1752">NIP-52&lt;/a>의 새로운 &lt;code>D&lt;/code> tag가 캘린더 event의 일 단위 타임스탬프 인덱싱을 가능하게 합니다. 새 프로젝트로는 탈중앙화 지도 타일 배포를 위한 &lt;a href="https://github.com/zeSchlausKwab/mapnolia">Mapnolia&lt;/a>, MLS 암호화 메시징을 위한 &lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>, Android용 FROST 임계값 서명을 위한 &lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a>, Nostr 통합 콘텐츠 주소 지정 저장소인 &lt;a href="https://files.iris.to/#/npub1xndmdgymsf4a34rzr7346vp8qcptxf75pjqweh8naa8rklgxpfqqmfjtce/hashtree">Hashtree&lt;/a>, Android 어떤 앱에서든 Nostr로 콘텐츠를 공유할 수 있는 &lt;a href="https://github.com/hardran3/Prism">Prism&lt;/a>이 있습니다. &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a>가 듀얼 지갑 지원과 자동 서비스 수명 주기를 추가하는 11개의 NWC PR을 병합했습니다. &lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a>이 NWC 통합을 통한 &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.0%2B2">내장 Lightning 지갑&lt;/a>을 출시했습니다. &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>이 Android 앱 스토어 릴리스를 준비하는 동안, HAVEN은 다중 npub 지원과 클라우드 백업을 갖춘 &lt;a href="https://github.com/bitvora/haven/releases/tag/v1.2.0-rc3">v1.2.0-rc3&lt;/a>에 도달했습니다. 이번 주 심층 분석은 Web of Trust 계산을 서비스 제공자에게 위임하는 NIP-85의 Trusted Assertions 시스템과, 일 단위 인덱싱 업데이트 이후의 NIP-52 캘린더 Events 프로토콜을 다룹니다.&lt;/p></description><content:encoded>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> 독립적인 프로젝트들이 Android 오프라인 미디어 접근 문제에 수렴하면서 Blossom 로컬 캐시 레이어가 형태를 갖춰가고 있습니다. Alby가 실제 자금 위험 없이 Nostr Wallet Connect 통합을 구축하고 테스트할 수 있는 &lt;a href="https://sandbox.albylabs.com">NWC 개발자 샌드박스&lt;/a>를 출시했습니다. AI 에이전트의 Nostr 통신을 위한 경쟁적인 제안들이 같은 주에 두 저자로부터 도착했습니다. fiatjaf가 relay 운영자들이 채택하지 않은 보존 정책, 국가 코드, 개인정보 처리방침, 커뮤니티 환경설정 tag를 제거하며 &lt;a href="https://github.com/nostr-protocol/nips/pull/1946">NIP-11&lt;/a>에서 사용되지 않는 필드를 제거했습니다. &lt;a href="https://github.com/nostr-protocol/nips/pull/2223">NIP-85&lt;/a>가 Trusted Assertions의 서비스 제공자 검색 안내를 포함하며 병합되었습니다. &lt;a href="https://github.com/nostr-protocol/nips/pull/1752">NIP-52&lt;/a>의 새로운 &lt;code>D&lt;/code> tag가 캘린더 event의 일 단위 타임스탬프 인덱싱을 가능하게 합니다. 새 프로젝트로는 탈중앙화 지도 타일 배포를 위한 &lt;a href="https://github.com/zeSchlausKwab/mapnolia">Mapnolia&lt;/a>, MLS 암호화 메시징을 위한 &lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>, Android용 FROST 임계값 서명을 위한 &lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a>, Nostr 통합 콘텐츠 주소 지정 저장소인 &lt;a href="https://files.iris.to/#/npub1xndmdgymsf4a34rzr7346vp8qcptxf75pjqweh8naa8rklgxpfqqmfjtce/hashtree">Hashtree&lt;/a>, Android 어떤 앱에서든 Nostr로 콘텐츠를 공유할 수 있는 &lt;a href="https://github.com/hardran3/Prism">Prism&lt;/a>이 있습니다. &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a>가 듀얼 지갑 지원과 자동 서비스 수명 주기를 추가하는 11개의 NWC PR을 병합했습니다. &lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a>이 NWC 통합을 통한 &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.0%2B2">내장 Lightning 지갑&lt;/a>을 출시했습니다. &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>이 Android 앱 스토어 릴리스를 준비하는 동안, HAVEN은 다중 npub 지원과 클라우드 백업을 갖춘 &lt;a href="https://github.com/bitvora/haven/releases/tag/v1.2.0-rc3">v1.2.0-rc3&lt;/a>에 도달했습니다. 이번 주 심층 분석은 Web of Trust 계산을 서비스 제공자에게 위임하는 NIP-85의 Trusted Assertions 시스템과, 일 단위 인덱싱 업데이트 이후의 NIP-52 캘린더 Events 프로토콜을 다룹니다.&lt;/p>
&lt;h2 id="뉴스">뉴스&lt;/h2>
&lt;h3 id="blossom-로컬-캐시-레이어-등장">Blossom 로컬 캐시 레이어 등장&lt;/h3>
&lt;p>여러 독립 프로젝트가 같은 문제, 즉 모바일 기기에서 &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a> 미디어에 오프라인으로 접근하는 문제에 수렴하고 있습니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/greenart7c3/Morganite">Morganite&lt;/a>는 &lt;a href="https://github.com/greenart7c3/amber">Amber&lt;/a>와 &lt;a href="https://github.com/greenart7c3/Citrine">Citrine&lt;/a>을 만든 greenart7c3의 새 Android 앱으로, Blossom 미디어를 위한 클라이언트 측 캐싱을 구현합니다. 사용자는 네트워크 연결 없이 이전에 본 이미지와 파일에 접근할 수 있습니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/hardran3/Aerith">Aerith&lt;/a>가 이미지 라벨링, 대량 미러/태그/삭제 작업, 라벨과 파일 유형별 필터링, 초기 로컬 Blossom 캐시 지원을 갖춘 &lt;a href="https://github.com/hardran3/Aerith/releases/tag/v0.2">v0.2&lt;/a>를 출시했습니다. Aerith는 여러 Blossom 서버에 미디어를 저장하고 blob을 정리하고 미러링해야 하는 사용자를 위한 관리 인터페이스입니다.&lt;/p>
&lt;p>Blossom 명세의 새로운 &lt;a href="https://github.com/hzrd149/blossom/blob/master/implementations/local-blossom-cache.md">로컬 캐시 구현 가이드&lt;/a>가 클라이언트 측 blob 저장소를 문서화하고, Aerith와 같은 개발자가 만든 &lt;a href="https://github.com/hardran3/Prism">Prism&lt;/a>이 Android 공유-Nostr 흐름에 Blossom 업로드 통합을 추가합니다. 이번 주 네 개의 독립 프로젝트가 같은 문제에 수렴했습니다: 전용 캐싱 앱, 미디어 관리자, 참조 명세, Blossom 통합 공유 도구가 모두 단순 업로드-검색을 넘어선 영구 로컬 저장소를 구현하고 있습니다.&lt;/p>
&lt;h3 id="alby-nwc-개발자-샌드박스">Alby NWC 개발자 샌드박스&lt;/h3>
&lt;p>&lt;a href="https://sandbox.albylabs.com">Alby&lt;/a>가 &lt;a href="https://nostrcompass.org/ko/topics/nip-47/">Nostr Wallet Connect (NIP-47)&lt;/a>로 개발하는 개발자를 위한 샌드박스 환경을 출시했습니다. 이 샌드박스는 개발자가 실제 Lightning 지갑에 연결하지 않고 테스트 연결을 생성하고 시뮬레이션 결제를 보내면서 NWC event의 전체 요청/응답 사이클을 실시간으로 관찰할 수 있는 호스팅 NWC 지갑 서비스를 제공합니다. 개발자가 샌드박스에서 &lt;code>nostr+walletconnect://&lt;/code> 연결 문자열을 생성하여 클라이언트에 전달하면, 샌드박스가 클라이언트와 지갑 서비스 사이를 오가는 kind 23194 요청과 kind 23195 응답 event를 보여줍니다.&lt;/p>
&lt;p>이로써 새로운 NWC 통합의 진입 장벽이 낮아집니다. 이전에는 테스트를 위해 개인 Lightning 지갑이나 자체 호스팅 NWC 서비스가 필요했습니다. 샌드박스는 이를 추상화하여 개발자에게 라이브 NWC 엔드포인트에 대한 &lt;code>pay_invoice&lt;/code>, &lt;code>get_balance&lt;/code>, &lt;code>make_invoice&lt;/code>, &lt;code>lookup_invoice&lt;/code>, &lt;code>list_transactions&lt;/code> 메서드를 구현하기 위한 즉각적인 피드백 루프를 제공합니다.&lt;/p>
&lt;h3 id="ai-에이전트-nip-등장">AI 에이전트 NIP 등장&lt;/h3>
&lt;p>Nostr에서의 AI 에이전트 통신을 위한 제안들이 며칠 간격으로 서로 다른 접근 방식으로 등장했습니다.&lt;/p>
&lt;p>joelklabo의 &lt;a href="https://github.com/nostr-protocol/nips/pull/2226">NIP-XX: AI 에이전트 메시지&lt;/a>는 AI 에이전트 상호작용을 위한 완전한 프로토콜을 정의합니다: 프롬프트, 응답, 스트리밍 델타, 상태 업데이트, 도구 텔레메트리, 오류, 취소, 기능 검색을 위한 event kind들입니다. &lt;code>ai.info&lt;/code> 검색 event (kind 31340, 교체 가능)는 에이전트가 지원하는 모델, 스키마가 있는 도구, 스트리밍 지원, 속도 제한을 알릴 수 있게 합니다. joelklabo의 제안에는 프롬프트 ID를 통한 실행 상관관계, 세션 관리, 시퀀스 순서를 갖춘 스트림 조정, 메타데이터 프라이버시를 위한 &lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59&lt;/a> 안내가 포함됩니다.&lt;/p>
&lt;p>pablof7z의 &lt;a href="https://github.com/nostr-protocol/nips/pull/2220">NIP-AE: 에이전트&lt;/a>는 다른 접근 방식을 취하며, 에이전트 인스턴스화를 위한 kind인 정의와 레슨을 정의합니다. 이는 Nostr 위에 구축된 자율 학습 시스템인 &lt;a href="https://github.com/tenex-chat/tenex">TENEX&lt;/a>에서 pablof7z가 사용하는 event 유형입니다. pablof7z의 또 다른 제안인 &lt;a href="https://github.com/nostr-protocol/nips/pull/2221">NIP-AD: MCP 서버 및 스킬 공지&lt;/a>는 Nostr에서 &lt;a href="https://modelcontextprotocol.io/">Model Context Protocol&lt;/a> 서버와 스킬을 알리는 event를 정의합니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-22/">NIP-22&lt;/a> 댓글이 지원되므로 커뮤니티가 Nostr에서 직접 MCP 서버를 논의하고 평가할 수 있습니다.&lt;/p>
&lt;p>NIP-XX는 완전한 에이전트 통신을 다루고 NIP-AE와 NIP-AD는 신원과 도구 검색을 다룹니다. 이 제안들은 통합된 표준으로 수렴되거나 보완적인 레이어로 공존할 수 있습니다.&lt;/p>
&lt;h2 id="릴리스">릴리스&lt;/h2>
&lt;h3 id="haven-v120-rc3">HAVEN v1.2.0-rc3&lt;/h3>
&lt;p>네 가지 relay 기능과 &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a> 미디어 서버를 번들로 제공하는 올인원 개인 relay인 &lt;a href="https://github.com/bitvora/haven">HAVEN&lt;/a>이 &lt;a href="https://github.com/bitvora/haven/releases/tag/v1.2.0-rc3">v1.2.0-rc3&lt;/a>에 도달했습니다. 이 릴리스 후보는 여러 npub 지원을 추가하여 단일 HAVEN 인스턴스가 여러 Nostr 신원을 서비스할 수 있게 합니다. 이전 RC들은 클라우드 백업을 위한 &lt;code>--from-cloud&lt;/code> 및 &lt;code>--to-cloud&lt;/code> 플래그 (RC2)와 Web of Trust 이중 카운팅 버그 수정 (RC1)을 추가했습니다.&lt;/p>
&lt;h3 id="mostro-mobile-v120-내장-lightning-지갑">Mostro Mobile v1.2.0: 내장 Lightning 지갑&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> P2P Bitcoin 거래소의 모바일 클라이언트인 &lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a> (&lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-11-newsletter/#mostro-%EC%B2%AB-%ED%8D%BC%EB%B8%94%EB%A6%AD-%EB%B2%A0%ED%83%80-%EC%B6%9C%EC%8B%9C">v1.1.0은 지난주 다뤘습니다&lt;/a>)이 완전한 &lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NWC (NIP-47)&lt;/a> 통합을 통한 내장 Lightning 지갑으로 &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.0%2B2">v1.2.0&lt;/a>을 출시했습니다. 이제 구매자와 판매자는 인보이스를 처리하기 위해 앱을 전환할 필요가 없습니다. 앱이 판매자를 위한 홀드 인보이스를 감지하고 연결된 지갑을 통해 자동으로 결제하며, 구매자는 자동 인보이스 생성을 받습니다. 이 릴리스는 같은 주 초에 출시된 &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.1.1%2B1">v1.1.1&lt;/a>에 이어지는 것으로, v1.1.1은 신뢰할 수 있는 인스턴스의 큐레이션 레지스트리를 갖춘 다중 Mostro 노드 지원, 노드 표시를 위한 kind 0 메타데이터 가져오기, pubkey로 사용자 지정 노드 관리, 선택한 노드가 오프라인 상태일 때 자동 폴백을 추가했습니다.&lt;/p>
&lt;p>서버 측에서는 중복 개발 수수료 결제 수정, 비밀번호 검증 RPC 엔드포인트의 속도 제한, 협력적 취소 시 분쟁 정리를 포함하는 &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.16.2">Mostro v0.16.2&lt;/a>가 출시되었습니다.&lt;/p>
&lt;p>새 동반 프로젝트인 &lt;a href="https://github.com/MostroP2P/mostro-skill">mostro-skill&lt;/a>은 에이전트가 Nostr를 통해 Mostro에서 거래할 수 있게 합니다.&lt;/p>
&lt;h3 id="aerith-v02">Aerith v0.2&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a> 이미지 관리자인 &lt;a href="https://github.com/hardran3/Aerith">Aerith&lt;/a>가 미디어 정리를 위한 이미지 라벨, 서버 전반의 대량 미러/태그/삭제 작업, 라벨과 파일 유형별 필터링, 초기 로컬 캐시 지원을 갖춘 &lt;a href="https://github.com/hardran3/Aerith/releases/tag/v0.2">v0.2&lt;/a>를 출시했습니다. 더 넓은 로컬 캐시 트렌드에 대한 맥락은 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-18-newsletter/#blossom-%eb%a1%9c%ec%bb%ac-%ec%ba%90%ec%8b%9c-%eb%a0%88%ec%9d%b4%ec%96%b4-%eb%93%b1%ec%9e%a5">뉴스 섹션&lt;/a>을 참조하세요.&lt;/p>
&lt;h3 id="mapnolia-nostr를-통한-탈중앙화-지도-타일">Mapnolia: Nostr를 통한 탈중앙화 지도 타일&lt;/h3>
&lt;p>&lt;a href="https://github.com/zeSchlausKwab/mapnolia">Mapnolia&lt;/a>는 &lt;a href="https://github.com/protomaps/PMTiles">PMTiles&lt;/a> 지도 아카이브를 지리적 영역으로 청크로 나누고 탈중앙화 검색을 위해 Nostr를 통해 알리는 새로운 지리공간 데이터 서버입니다. 레이어 메타데이터, 지오해시 영역, 파일 참조, &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a> 서버 세부 정보가 포함된 지도 타일 청크의 완전한 인덱스를 담은 kind 34444 매개변수화된 교체 가능 event를 Nostr relay에 게시합니다.&lt;/p>
&lt;p>클라이언트는 중앙화된 타일 서버 대신 Nostr 네트워크를 통해 지도 데이터를 검색하고 가져오며, 공지 event가 나열된 Blossom 서버에서 필요한 지리적 영역만 요청하기에 충분한 메타데이터를 담고 있습니다. Mapnolia는 Nostr에 지리공간 데이터 배포를 처음으로 도입한 프로젝트로, 오프라인 지원 지도 애플리케이션의 가능성을 열어줍니다.&lt;/p>
&lt;h3 id="pika-marmot-기반-암호화-메시징">Pika: Marmot 기반 암호화 메시징&lt;/h3>
&lt;p>&lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>는 Nostr relay 위에 &lt;a href="https://nostrcompass.org/ko/topics/mls/">메시징 레이어 보안 (MLS)&lt;/a>을 레이어링하는 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> 프로토콜을 사용하는 iOS와 Android용 새로운 엔드투엔드 암호화 메시징 앱입니다. 아키텍처는 Nostr relay를 통해 MLS 상태 관리와 메시지 암호화/복호화를 처리하는 Rust 코어 (&lt;code>pika_core&lt;/code>)와 SwiftUI (iOS) 및 Kotlin (Android)의 얇은 네이티브 UI 셸로 우려 사항을 분리합니다. 상태는 단방향으로 흐릅니다: UI가 Rust 액터에게 액션을 발송하면, Rust 액터가 상태를 변경하고 UniFFI와 JNI 바인딩을 통해 UI로 개정 번호가 있는 스냅샷을 내보냅니다.&lt;/p>
&lt;p>Pika는 &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>, &lt;a href="https://github.com/VectorPrivacy">Vector&lt;/a>, &lt;a href="https://0xchat.com">0xchat&lt;/a>과 함께 성장하는 MLS-on-Nostr 메신저 분야에 합류합니다. 모두 MLS 암호화된 암호문의 전송 레이어로 Nostr relay를 사용하여, relay 운영자가 메시지 내용을 읽을 수 없게 합니다. Pika는 MLS 구현에 Marmot Development Kit (MDK)를, relay 연결성에 nostr-sdk를 사용합니다.&lt;/p>
&lt;h3 id="keep-android용-frostkotopicsfrost-임계값-서명">Keep: Android용 &lt;a href="https://nostrcompass.org/ko/topics/frost/">FROST&lt;/a> 임계값 서명&lt;/h3>
&lt;p>&lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a>은 어떤 단일 기기도 완전한 개인 키를 보유하지 않는 &lt;a href="https://nostrcompass.org/ko/topics/frost/">FROST&lt;/a> 임계값 서명을 위한 새로운 Android 애플리케이션입니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> (Android 서명자)와 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> (원격 서명)을 구현하므로 호환 가능한 Nostr 클라이언트가 키 자료가 기기 전반에 분산된 상태로 서명을 요청할 수 있습니다. 기본 구성은 2-of-3 및 3-of-5이지만, 어떤 t-of-n 임계값도 지원됩니다.&lt;/p>
&lt;p>Keep의 분산 키 생성 (DKG) 세레모니는 사용자 지정 event kind를 사용하여 Nostr relay를 통해 실행됩니다: 그룹 공지를 위한 kind 21101, 1라운드 커밋먼트 다항식을 위한 kind 21102 (공개 방송), 2라운드 비밀 공유를 위한 kind 21103 (참가자 간 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> 암호화 점대점). 그룹 개인 키 스칼라는 DKG 중 어디서도 계산되거나 조합되지 않습니다. 각 기기는 다항식 평가 몫만 보유하며, t개의 몫이면 2라운드 커밋-서명 프로토콜을 통해 유효한 Schnorr 서명을 생성할 수 있습니다. 결과 64바이트 서명은 단일 서명자 Schnorr 서명과 구별할 수 없습니다. 내부적으로 Keep은 Taproot 조정이 있는 Zcash 재단의 &lt;code>frost-secp256k1-tr&lt;/code> 크레이트를 사용하므로, 그룹 공개 키가 Nostr npub으로 직접 작동합니다.&lt;/p>
&lt;p>Keep은 &lt;a href="https://github.com/FROSTR-ORG/igloo-desktop">Igloo Desktop&lt;/a>, &lt;a href="https://github.com/FROSTR-ORG/igloo-android">Android용 Igloo&lt;/a>, &lt;a href="https://github.com/FROSTR-ORG/frost2x">Frost2x&lt;/a>, &lt;a href="https://github.com/FROSTR-ORG/igloo-ios">iOS용 Igloo&lt;/a>와 함께 &lt;a href="https://frostr.org">Frostr&lt;/a> 프로젝트 패밀리에 합류하여 Nostr에서의 임계값 키 관리 옵션을 확장합니다.&lt;/p>
&lt;h3 id="prism-android에서-어디서든-nostr로-공유">Prism: Android에서 어디서든 Nostr로 공유&lt;/h3>
&lt;p>&lt;a href="https://github.com/hardran3/Prism">Prism&lt;/a>은 시스템 공유 대상으로 등록하는 새로운 Android 앱 (Kotlin/Jetpack Compose, API 26+)으로, 사용자가 폰의 어떤 앱에서든 텍스트, URL, 이미지, 동영상을 Nostr에 게시할 수 있게 합니다. 공유된 URL은 노트로 작성되기 전에 추적 파라미터 제거기를 통과합니다. Prism은 풍부한 링크 미리보기를 생성하기 위해 OpenGraph 메타데이터를 가져오고 네이티브 Nostr 참조 (&lt;code>note1&lt;/code>, &lt;code>nevent1&lt;/code>)를 인라인으로 렌더링합니다.&lt;/p>
&lt;p>스케줄링 엔진은 Android 배터리 최적화를 우회하기 위해 하이브리드 &lt;code>AlarmManager&lt;/code>/&lt;code>WorkManager&lt;/code> 방식을 사용합니다: AlarmManager가 정밀한 깨우기 타이밍을 처리하고 expedited WorkManager 작업이 전달을 보장하며, 오프라인 시나리오에 대한 지수 백오프 재시도가 있습니다. 미디어 업로드는 이미지와 동영상 프레임의 썸네일 생성과 함께 구성 가능한 &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a> 서버를 통해 이루어집니다. 모든 event 서명은 &lt;a href="https://github.com/greenart7c3/amber">Amber&lt;/a>와 같은 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> 외부 서명자에게 위임되며, 신원 전환을 위한 다중 계정 지원이 있습니다. Prism은 &lt;a href="https://nostrcompass.org/ko/topics/nip-84/">NIP-84 (하이라이트)&lt;/a> 게시도 지원합니다. &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-18-newsletter/#aerith-v02">Aerith&lt;/a>와 같은 개발자 작품입니다.&lt;/p>
&lt;h3 id="hashtree-nostr-통합-콘텐츠-주소-지정-저장소">Hashtree: Nostr 통합 콘텐츠 주소 지정 저장소&lt;/h3>
&lt;p>&lt;a href="https://files.iris.to/#/npub1xndmdgymsf4a34rzr7346vp8qcptxf75pjqweh8naa8rklgxpfqqmfjtce/hashtree">Hashtree&lt;/a>는 Nostr에 Merkle 루트를 게시하여 변경 가능한 npub/경로 주소를 생성하는 파일시스템 기반 콘텐츠 주소 지정 blob 저장 시스템입니다. 이 시스템은 &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a> 업로드에 최적화된 2MB 블록으로 콘텐츠를 청크로 나누는 어떤 키-값 저장소에서도 작동하는 &amp;ldquo;덤 스토리지&amp;quot;를 사용합니다. BitTorrent와 달리 활성 Merkle 증명 계산이 필요 없으며, 단순히 해시로 blob을 저장하고 검색하면 됩니다.&lt;/p>
&lt;p>Nostr 통합을 통해 레포지토리 클론을 위한 &lt;code>htree://npub.../repo-name&lt;/code>과 같은 git 원격 URL이 가능하며, &lt;code>htree publish mydata &amp;lt;hash&amp;gt;&lt;/code>와 같은 명령으로 콘텐츠 해시를 &lt;code>npub.../mydata&lt;/code> 주소에 게시합니다. 포괄적인 CLI는 암호화 (기본값)와 공개 저장소 모드, 콘텐츠 핀닝, Blossom 서버 푸시, Nostr 신원 관리를 지원합니다. 저장된 각 항목은 원시 바이트 또는 트리 노드이며, Nostr relay 네트워크를 통한 탈중앙화 콘텐츠 배포의 기반을 제공합니다.&lt;/p>
&lt;h3 id="espy-shakespeare에서의-색상-팔레트-캡처">Espy: Shakespeare에서의 색상 팔레트 캡처&lt;/h3>
&lt;p>&lt;a href="https://soapbox.pub/tools/shakespeare/">Shakespeare&lt;/a> 플랫폼 위에 구축된 &lt;a href="https://espy.you">Espy&lt;/a>는 사용자가 사진에서 색상 팔레트를 캡처하고 Nostr event로 공유할 수 있게 합니다. Shakespeare는 NIP-07 브라우저 확장을 통해 사용자를 인증하고 내장 Nostr relay 연결성을 제공하는 AI 기반 앱 빌더로, 개발자가 자체 키 관리나 relay 풀을 구현하지 않고 앱을 출시할 수 있습니다. Espy는 카메라 입력에서 지배적인 색상을 표준 Nostr 피드를 통해 검색 가능한 공유 가능한 팔레트 카드로 추출합니다.&lt;/p>
&lt;h3 id="flotilla-164">Flotilla 1.6.4&lt;/h3>
&lt;p>relay를 그룹으로 정리하는 hodlbod의 Discord 유사 Nostr 클라이언트인 &lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a>가 &lt;a href="https://gitea.coracle.social/coracle/flotilla/releases/tag/1.6.4">1.6.4&lt;/a>를 출시했습니다. Coracle 프로젝트 패밀리는 GitHub에서 자체 호스팅 &lt;a href="https://gitea.coracle.social/coracle">Gitea 인스턴스&lt;/a>로 마이그레이션했습니다. 이 릴리스는 NIP-9a를 통한 푸시 알림과 지갑 수신 흐름, 분류 목록과 공간 URL 지원을 추가합니다. 인터페이스 개선에는 정리된 모달과 알림 처리가 포함됩니다. 방 음소거와 모바일 안전 영역 인셋, Safari 이미지 업로드와 캘린더 event 세부 정보 수정이 변경 사항을 완성합니다.&lt;/p>
&lt;h3 id="shosho-v0120">Shosho v0.12.0&lt;/h3>
&lt;p>Nostr 통합이 있는 모바일 라이브 스트리밍 앱인 &lt;a href="https://github.com/r0d8lsh0p/shosho-releases">Shosho&lt;/a>가 &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.12.0">v0.12.0&lt;/a>을 출시했습니다. 이 릴리스는 인플레이어 답글과 사용자 정의 이모지 통합이 있는 동영상 Clips를 추가합니다. 스레드 보호가 간접 언급 스팸을 차단하고, 새로운 QR 공유 기능으로 사용자가 오프라인으로 프로필을 교환할 수 있습니다. 새로운 가로 재생 모드가 스트림에 Twitch 스타일 시청 경험을 제공하며, 탐색 화면이 라이브 스트림과 함께 크리에이터 클립을 제공합니다.&lt;/p>
&lt;h3 id="granary-v100">Granary v10.0&lt;/h3>
&lt;p>Nostr, Bluesky, ActivityPub 및 기타 플랫폼 간의 데이터를 공통 형식으로 변환하는 소셜 웹 번역 라이브러리인 &lt;a href="https://github.com/snarfed/granary">Granary&lt;/a>가 주요 변경 사항과 함께 &lt;a href="https://github.com/snarfed/granary/releases/tag/v10.0">v10.0&lt;/a>을 출시했습니다. 이 릴리스는 Nostr의 기본 ActivityStreams 1 ID를 bech32에서 hex로 전환하고 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/27.md">NIP-27&lt;/a> 언급 파싱 및 아티클 태그를 포함한 확장된 Nostr 지원을 추가합니다. 변환기 전반의 새로운 다중 출력 옵션으로 개발자가 프로토콜 간 번역을 배치로 수행할 수 있습니다.&lt;/p>
&lt;h3 id="nostr-mcp-server-v300">Nostr MCP Server v3.0.0&lt;/h3>
&lt;p>AI 에이전트가 Nostr 네트워크와 상호작용할 수 있게 하는 &lt;a href="https://modelcontextprotocol.io/">Model Context Protocol&lt;/a> 서버인 &lt;a href="https://github.com/AustinKelsay/nostr-mcp-server">Nostr MCP Server&lt;/a>가 &lt;a href="https://github.com/AustinKelsay/nostr-mcp-server/releases/tag/v3.0.0">v3.0.0&lt;/a>을 출시했습니다. 이 주요 릴리스는 소셜 액션 (팔로우, 리액션, 리포스트, 답글)과 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/65.md">NIP-65&lt;/a> 지원 및 선택적 &lt;a href="https://nostrcompass.org/ko/topics/nip-42/">NIP-42&lt;/a> 인증이 있는 relay 목록 관리를 추가합니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a>과 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a>를 통한 다이렉트 메시지도 새롭게 추가되었습니다. 이 릴리스는 Nostr에서 운영하는 에이전트를 위한 실용적인 도구로서 이번 주 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-18-newsletter/#ai-%ec%97%90%ec%9d%b4%ec%a0%84%ed%8a%b8-nip-%eb%93%b1%ec%9e%a5">AI 에이전트 NIP 제안&lt;/a>과 짝을 이룹니다.&lt;/p>
&lt;h3 id="aegis-v038">Aegis v0.3.8&lt;/h3>
&lt;p>크로스 플랫폼 Nostr 서명자인 &lt;a href="https://github.com/ZharlieW/Aegis">Aegis&lt;/a>가 다국어 UI 지원과 내장 Nostr 앱 브라우저를 위한 점진적 업데이트 관리자를 갖춘 &lt;a href="https://github.com/ZharlieW/Aegis/releases/tag/v0.3.8">v0.3.8&lt;/a>을 출시했습니다. 새 업데이트 메커니즘은 로컬 상태에 대해 점진적으로 diff를 적용하여, 낮은 대역폭 사용으로 인앱 Nostr 웹 앱 디렉토리를 최신 상태로 유지합니다. 이 릴리스는 또한 연속으로 여러 event에 서명할 때 데이터베이스 왕복을 줄이기 위한 5분 키 자료 캐싱을 도입합니다.&lt;/p>
&lt;h3 id="snstr-v031">SNSTR v0.3.1&lt;/h3>
&lt;p>Nostr 프로토콜을 위한 TypeScript 라이브러리인 &lt;a href="https://github.com/AustinKelsay/snstr">SNSTR&lt;/a> (Secure Nostr Software Toolkit for Renegades)이 &lt;a href="https://github.com/AustinKelsay/snstr/releases/tag/v0.3.1">v0.3.1&lt;/a>을 출시했습니다. 이 릴리스는 모든 진입점이 npm tarball에 포함되도록 보장하는 패키지 검증 가드를 추가하며, Node와 Bun에 대한 CI 적용이 있습니다. &lt;a href="https://github.com/AustinKelsay/snstr/releases/tag/v0.3.0">v0.3.0&lt;/a>도 같은 주에 출시되었습니다.&lt;/p>
&lt;h3 id="citrine-v200-pre1">Citrine v2.0.0-pre1&lt;/h3>
&lt;p>greenart7c3의 Android Nostr relay인 &lt;a href="https://github.com/greenart7c3/Citrine">Citrine&lt;/a>이 최적화된 데이터베이스 인덱스와 개선된 Kotlin 코루틴 처리를 통한 성능 향상과 함께 &lt;a href="https://github.com/greenart7c3/Citrine/releases/tag/v2.0.0-pre1">v2.0.0-pre1&lt;/a>을 릴리스했습니다. 이 릴리스는 또한 웹 앱 호스팅 지원을 강화하며, 이제 각 앱이 자체 포트에서 실행됩니다.&lt;/p>
&lt;h2 id="프로젝트-업데이트">프로젝트 업데이트&lt;/h2>
&lt;h3 id="primal-android-nwc-인프라-확장">Primal Android: NWC 인프라 확장&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a>가 이번 주 11개의 NWC 관련 PR을 병합했으며, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-04-newsletter/#primal-android-nwc-%EC%95%94%ED%98%B8%ED%99%94-%EC%B6%9C%EC%8B%9C">2주 전 시작된&lt;/a> 빌드아웃을 계속하고 있습니다. 이 배치는 듀얼 지갑 NWC 지원, 백엔드 알림과 연동된 자동 서비스 시작/중지, 지갑 유형별 연결 라우팅, 지갑 삭제 시 적절한 데이터 정리를 추가합니다. NWC 서비스는 이제 지갑 연결 상태에 따라 자체 수명 주기를 관리하여 사용자의 수동 개입을 줄입니다.&lt;/p>
&lt;h3 id="notedeck-android-앱-스토어-준비">Notedeck: Android 앱 스토어 준비&lt;/h3>
&lt;p>Damus의 멀티 플랫폼 Nostr 클라이언트인 &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>이 이번 주 &lt;a href="https://github.com/damus-io/notedeck/pull/1287">Android 앱 스토어 릴리스 준비&lt;/a>를 병합했습니다. 이 PR은 Google Play에서 요구하는 UGC (사용자 생성 콘텐츠) 준수 계획을 추가합니다. 여기에는 서비스 약관 동의 화면, 컨텍스트 메뉴와 설정을 통한 사용자 차단, relay에 신고 event를 게시하는 &lt;a href="https://nostrcompass.org/ko/topics/nip-56/">NIP-56 (신고)&lt;/a> 기능, 콘텐츠 및 안전 설정 섹션이 포함됩니다. 새 Makefile 대상을 통해 서명된 릴리스 APK와 AAB (Android App Bundle)를 생성하기 위한 빌드 인프라가 추가되었습니다. EULA 문서가 17세 이상 연령 요건과 탈중앙화 콘텐츠에 관한 Nostr 특화 면책 조항을 확립합니다. 준수 기능 자체는 후속 PR에서 출시됩니다. 이 병합은 문서화와 서명 토대를 마련합니다.&lt;/p>
&lt;p>Damus iOS 측에서는 콘텐츠가 로드된 후에도 스피너가 무한히 지속되는 &lt;a href="https://github.com/damus-io/damus/pull/3593">무한 로딩 스피너 회귀 수정&lt;/a>이 이루어졌습니다.&lt;/p>
&lt;h3 id="nostria-검색-relay-및-dm-수정">Nostria: 검색 Relay 및 DM 수정&lt;/h3>
&lt;p>글로벌 규모에 집중한 크로스 플랫폼 Nostr 클라이언트인 &lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a>가 이번 주 9개의 PR을 병합했습니다. 가장 주목할 만한 것은 프로필 검색을 위한 &lt;a href="https://github.com/nostria-app/nostria/pull/460">검색 Relay 자동 초기화&lt;/a>를 추가하여, 새 사용자가 수동 설정 없이 relay 연결성을 갖출 수 있게 합니다. 다른 수정 사항으로는 &lt;a href="https://github.com/nostria-app/nostria/pull/466">DM 텍스트영역 줄바꿈&lt;/a>, &lt;a href="https://github.com/nostria-app/nostria/pull/479">전체 화면 동영상 뷰포트 채우기&lt;/a>, &lt;a href="https://github.com/nostria-app/nostria/pull/481">리포스트 미리보기의 아티클 메타데이터 추출&lt;/a>, &lt;a href="https://github.com/nostria-app/nostria/pull/458">알림의 nostr: URI 해석&lt;/a>이 있습니다.&lt;/p>
&lt;h3 id="camelus-riverpod-v3-마이그레이션">Camelus: Riverpod v3 마이그레이션&lt;/h3>
&lt;p>Flutter 기반 Nostr 클라이언트인 &lt;a href="https://github.com/camelus-hq/camelus">Camelus&lt;/a>가 이번 주 &lt;a href="https://github.com/camelus-hq/camelus/pull/158">Riverpod v3 API 마이그레이션&lt;/a>과 &lt;a href="https://github.com/camelus-hq/camelus/pull/159">일반 피드 리팩토링&lt;/a>을 중심으로 5개의 PR을 병합했습니다. &lt;a href="https://github.com/camelus-hq/camelus/pull/161">임베드 노트 캐시&lt;/a>가 인용 노트에 대한 중복 relay 가져오기를 방지합니다.&lt;/p>
&lt;h2 id="nip-업데이트">NIP 업데이트&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 저장소&lt;/a>의 최근 변경 사항:&lt;/p>
&lt;p>&lt;strong>병합됨:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2223">NIP-85: 서비스 제공자 검색 가능성&lt;/a>&lt;/strong>: vitorpamplona가 relay 힌트와 알고리즘별 서비스 키를 포함하여 &lt;a href="https://nostrcompass.org/ko/topics/nip-85/">NIP-85 Trusted Assertions&lt;/a> 서비스 제공자에 대한 클라이언트 검색 안내를 추가했습니다. 전체 내용은 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-18-newsletter/#nip-%ec%8b%ac%ec%b8%b5-%eb%b6%84%ec%84%9d-nip-85-trusted-assertions">아래 심층 분석&lt;/a>을 참조하세요.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1946">NIP-11: Relay 정보 정리&lt;/a>&lt;/strong>: fiatjaf가 &lt;a href="https://nostrcompass.org/ko/topics/nip-11/">NIP-11&lt;/a>에서 &lt;code>privacy_policy&lt;/code>, &lt;code>retention&lt;/code> 배열, &lt;code>relay_countries&lt;/code>, 커뮤니티 환경설정 블록을 제거했습니다. Relay 운영자들이 이 필드들을 거의 채우지 않았고 클라이언트들도 이에 반응하지 않았습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1752">NIP-52: 일 단위 타임스탬프 태그&lt;/a>&lt;/strong>: staab가 &lt;a href="https://nostrcompass.org/ko/topics/nip-52/">NIP-52&lt;/a> 시간 기반 캘린더 event (kind 31923)에 &lt;code>floor(unix_seconds / 86400)&lt;/code>으로 계산된 일 단위 Unix 타임스탬프를 나타내는 필수 &lt;code>D&lt;/code> tag를 추가했습니다. 여러 &lt;code>D&lt;/code> tag가 다중 일 event를 포함하여, 전체 타임스탬프를 파싱하지 않고 효율적인 시간적 인덱싱을 가능하게 합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2210">NIP-47: 단순화&lt;/a>&lt;/strong>: &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-11-newsletter/#nip-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8">뉴스레터 #9에서 논의된&lt;/a> 단순화 PR이 이번 주 병합되어 &lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47 (Nostr Wallet Connect)&lt;/a>에서 &lt;code>multi_pay_invoice&lt;/code>와 &lt;code>multi_pay_keysend&lt;/code>를 제거했습니다. 전체 NWC 프로토콜 심층 분석은 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-04-newsletter/#nip-%EC%8B%AC%EC%B8%B5-%EB%B6%84%EC%84%9D-nip-47-nostr-wallet-connect">뉴스레터 #8&lt;/a>을 참조하세요.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>오픈 PR 및 논의:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2211">NIP-74: 팟캐스트&lt;/a>&lt;/strong>: &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-04-newsletter/">뉴스레터 #8에서 다룬&lt;/a> 이 팟캐스트 명세 제안이 이번 주 열띤 논의를 보았습니다. staab는 이미 야생에서 경쟁하는 최소 세 개의 팟캐스트 표준이 존재한다고 언급했으며, derekross는 활성 앱과 팟캐스트가 있는 기존 6개월 된 구현을 지적했습니다. NIP 번호가 배정되기 전에 구현 간 수렴이 필요합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2226">NIP-XX: AI 에이전트 메시지&lt;/a>&lt;/strong>: joelklabo가 프롬프트, 응답, 스트리밍, 도구 텔레메트리, 오류, 기능 검색을 위한 event kind가 있는 완전한 AI 에이전트 통신 프로토콜을 제안합니다. 이번 주 모든 AI 제안에 대한 내용은 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-18-newsletter/#ai-%ec%97%90%ec%9d%b4%ec%a0%84%ed%8a%b8-nip-%eb%93%b1%ec%9e%a5">뉴스 섹션&lt;/a>을 참조하세요.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1893">NIP-PNS: 개인 노트 저장소&lt;/a>&lt;/strong>: jb55의 개인 노트 시스템이 누가 작성했는지 드러내지 않고 relay에 암호화된 개인 노트를 저장하기 위한 kind 1080 event를 정의합니다. 이 체계는 HKDF를 통해 사용자의 nsec에서 결정론적 가명 키쌍을 유도합니다: &lt;code>pns_key = hkdf_extract(ikm=device_key, salt=&amp;quot;nip-pns&amp;quot;)&lt;/code>, 그런 다음 그 유도 키에서 secp256k1 키쌍을 생성합니다. 두 번째 유도가 대칭 암호화 키를 생성합니다: &lt;code>pns_nip44_key = hkdf_extract(ikm=pns_key, salt=&amp;quot;nip44-v2&amp;quot;)&lt;/code>. 내부 노트는 이 키로 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> v2로 암호화되고 가명 pubkey 하에 게시되므로, relay는 사용자의 메인 키와 연결되지 않은 신원에서 kind 1080 event를 봅니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59&lt;/a> 선물 포장과 달리 PNS는 스팸이 불가능하며 (가명 키가 무작위가 아닌 결정론적), 공개 메타데이터를 전혀 전달하지 않습니다 (수신자가 없으므로 &lt;code>p&lt;/code> tag가 필요 없음). 이번 주 jb55가 Notedeck의 Rust 백엔드 (&lt;code>enostr::pns&lt;/code> 모듈)에 PNS를 구현하면서 발견한 것들을 게시했습니다. 명세의 &lt;code>hkdf_extract&lt;/code> 호출이 RFC 5869 HKDF에 두 단계 (Extract와 Expand)가 있고 대부분의 라이브러리가 둘 다 예상하기 때문에 모호하다는 점을 확인했습니다. &lt;code>pns_nip44_key&lt;/code>가 NIP-44의 일반적인 ECDH 키 합의를 우회하고 대화 키로 직접 사용된다고 명확히 했으며, 대부분의 NIP-44 라이브러리가 기본적으로 ECDH를 사용하므로 구현자가 알아야 할 세부 사항입니다. 참조 구현의 TypeScript에서 정의되지 않은 변수도 표시했습니다. 2025년 4월부터 있던 이 PR이 이제 적극적으로 구현되고 있습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2220">NIP-AE: 에이전트&lt;/a>&lt;/strong>: pablof7z가 &lt;a href="https://github.com/tenex-chat/tenex">TENEX&lt;/a>에서의 작업을 바탕으로 Nostr에서의 에이전트 신원을 위한 네 가지 event kind를 정의합니다. 기본 템플릿은 kind 4199 (에이전트 정의)로, 제목, 역할 설명, 시스템 지침, 도구 선언, 버전을 담습니다. 행동 수정자는 kind 4201 (에이전트 넛지)에 있으며, 런타임 기능 제어를 위한 &lt;code>only-tool&lt;/code>, &lt;code>allow-tool&lt;/code>, &lt;code>deny-tool&lt;/code> tag를 사용합니다. 에이전트는 학습한 것을 kind 4129 (에이전트 레슨) event로 게시하며, 카테고리화되고 &lt;code>e&lt;/code> tag를 통해 부모 정의로 연결되고 &lt;a href="https://nostrcompass.org/ko/topics/nip-22/">NIP-22&lt;/a> 댓글 스레드를 통해 정제될 수 있습니다. 소유권 검증은 kind 14199를 사용하며, 인간 운영자가 에이전트 pubkey를 나열하는 교체 가능 event로, 에이전트의 kind 0 프로필 &lt;code>p&lt;/code> tag와 매칭될 때 양방향 체인을 확립합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2221">NIP-AD: MCP 서버 및 스킬 공지&lt;/a>&lt;/strong>: pablof7z가 Nostr에서 &lt;a href="https://modelcontextprotocol.io/">Model Context Protocol&lt;/a> 서버와 개별 스킬을 알리는 event를 정의합니다. MCP 서버 공지는 서버의 엔드포인트 URL과 지원되는 프로토콜 버전을 입력 스키마가 있는 사용 가능한 도구 목록과 함께 담습니다. 서버 공지에 &lt;a href="https://nostrcompass.org/ko/topics/nip-22/">NIP-22&lt;/a> 댓글이 지원되므로 커뮤니티가 Nostr에서 직접 MCP 서버를 논의하고 평가할 수 있습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2224">NIP-73: OSM 태그 Kind&lt;/a>&lt;/strong>: DestBro가 &lt;code>i&lt;/code> 및 &lt;code>k&lt;/code> tag를 통해 책 (ISBN), 영화 (ISAN), 팟캐스트 피드 (GUID), 지오해시, URL과 같은 외부 콘텐츠를 Nostr event가 참조하는 방식을 표준화하는 &lt;a href="https://nostrcompass.org/ko/topics/nip-73/">NIP-73 (외부 콘텐츠 ID)&lt;/a>에 OpenStreetMap 식별자를 추가할 것을 제안합니다. 제안된 OSM kind는 event가 특정 지도 기능 (건물, 도로, 공원)을 OpenStreetMap 노드나 way ID로 참조하여 Nostr 콘텐츠를 개방형 지리 데이터베이스에 연결할 수 있게 합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2219">NIP-XX: 반응형 이미지 변형&lt;/a>&lt;/strong>: woikos가 다양한 해상도의 반응형 이미지 변형을 위한 tag로 &lt;a href="https://nostrcompass.org/ko/topics/nip-94/">NIP-94&lt;/a> 파일 메타데이터 event를 확장할 것을 제안합니다. 클라이언트가 디스플레이 크기와 네트워크 상태에 따라 적절한 변형을 선택하여, &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a> 서버에 호스팅된 고해상도 이미지를 보는 모바일 사용자의 대역폭을 줄일 수 있습니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-심층-분석-nip-85-trusted-assertions">NIP 심층 분석: NIP-85 (Trusted Assertions)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/85.md">NIP-85&lt;/a>는 비용이 많이 드는 계산을 신뢰할 수 있는 서비스 제공자에게 위임하고, 서비스 제공자가 서명된 결과를 Nostr event로 게시하는 시스템을 정의합니다. Web of Trust 점수와 참여도 메트릭은 여러 relay를 크롤링하고 대량의 event를 처리해야 하며, 이는 모바일 기기에서는 비실용적인 작업입니다. 이번 주 &lt;a href="https://github.com/nostr-protocol/nips/pull/2223">병합&lt;/a>은 이 제공자들의 클라이언트 검색 프로세스에 대한 안내를 추가했습니다.&lt;/p>
&lt;p>&lt;strong>위임:&lt;/strong>&lt;/p>
&lt;p>사용자의 Web of Trust 점수를 계산하려면 여러 relay에 걸쳐 팔로우 그래프를 여러 홉 깊이로 크롤링해야 하고, 정확한 팔로워 수를 계산하려면 전체 relay 네트워크에서 중복 제거가 필요합니다. 모바일 기기와 브라우저 클라이언트는 이러한 작업을 수행할 수 없지만, 결과는 스팸 필터링과 콘텐츠 순위 매기기에 필수적입니다. NIP-85는 사용자가 신뢰할 수 있는 제공자를 지정하여 계산을 실행하고 표준 Nostr event로 결과를 게시하도록 함으로써 이 격차를 해소합니다.&lt;/p>
&lt;p>&lt;strong>프로토콜 설계:&lt;/strong>&lt;/p>
&lt;p>NIP-85는 다양한 주체 유형에 대한 어서션을 위해 네 가지 event kind를 사용합니다. 사용자 어서션 (kind 30382)은 팔로워 수, 게시물/답글/리액션 수, zap 금액, 정규화 순위 (0-100), 공통 주제, 활동 시간을 담습니다:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;service pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1739836800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30382&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;e88a691e98d9987c964521dff60025f60700378a4879180dcbbb4a5027850411&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;rank&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;89&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;followers&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;4521&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;first_created_at&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1609459200&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;post_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1283&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;reply_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;647&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;reactions_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;8920&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;zap_amt_recd&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;850000&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;zap_amt_sent&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;320000&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;zap_cnt_recd&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;412&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;zap_cnt_sent&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;198&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;zap_avg_amt_day_recd&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1150&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;zap_avg_amt_day_sent&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;430&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;reports_cnt_recd&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;2&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;reports_cnt_sent&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;0&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nostr&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;bitcoin&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;active_hours_start&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;14&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;active_hours_end&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;22&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;service key signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Event 어서션 (kind 30383)은 댓글 수, 인용 수, 리포스트, 리액션, zap 데이터로 개별 노트를 평가합니다:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;service pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1739836800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30383&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;target event id&amp;gt;&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;rank&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;72&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;comment_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;45&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;quote_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;12&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;repost_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;89&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;reaction_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;310&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;zap_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;23&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;zap_amount&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;125000&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;service key signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>주소 지정 가능한 event (장문 아티클, 위키 페이지)의 경우, kind 30384가 모든 버전에 걸쳐 동일한 참여도 메트릭을 집합적으로 적용합니다. Kind 30385는 &lt;code>i&lt;/code> 및 &lt;code>k&lt;/code> tag를 통해 외부 콘텐츠를 참조하는 방식을 표준화하는 &lt;a href="https://nostrcompass.org/ko/topics/nip-73/">NIP-73 (외부 콘텐츠 ID)&lt;/a>를 통해 참조된 외부 식별자 (책, 영화, 웹사이트, 위치, 해시태그)를 평가합니다:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;service pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1739836800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30385&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;isbn:9780765382030&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;k&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;isbn&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;rank&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;94&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;comment_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;67&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;reaction_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;203&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;service key signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>각 어서션은 &lt;code>d&lt;/code> tag에 주체가 포함된 교체 가능한 주소 지정 가능 event입니다: pubkey, event ID, event 주소, 또는 NIP-73 식별자. 서비스 제공자는 자체 키로 이 event에 서명하고, 클라이언트는 신뢰 관계에 따라 평가합니다.&lt;/p>
&lt;p>&lt;strong>제공자 검색:&lt;/strong>&lt;/p>
&lt;p>사용자는 kind 10040 event를 게시하여 신뢰하는 어서션 제공자를 선언합니다. 각 항목은 제공자 pubkey와 relay 힌트, 선택적 알고리즘 변형과 함께 어서션 유형을 지정합니다:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;user pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1739836800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">10040&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;30382:rank&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;4fd5e210...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://nip85.nostr.band&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;30382:rank&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;3d842afe...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://nostr.wine&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;30382:zap_amt_sent&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;4fd5e210...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://nip85.nostr.band&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;30383:rank&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;4fd5e210...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://nip85.nostr.band&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;user signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>사용자는 제공자 환경설정을 비공개로 유지하기 위해 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a>를 사용하여 &lt;code>.content&lt;/code>의 tag 목록을 암호화할 수 있습니다. 클라이언트는 팔로우한 계정들이 신뢰하는 제공자를 확인하여 제공자 목록을 구축하며, 어서션 제공자 자체를 위한 탈중앙화 평판 레이어를 만듭니다.&lt;/p>
&lt;p>&lt;strong>보안 모델:&lt;/strong>&lt;/p>
&lt;p>제공자는 별개의 알고리즘에 서로 다른 서비스 키를 사용해야 하며, 알고리즘이 개인화될 때는 사용자당 고유한 키를 사용해야 합니다. 이는 사용자 간 쿼리의 상호 연관을 방지합니다. 각 서비스 키는 알고리즘의 동작을 설명하는 kind 0 메타데이터 event를 받아, 사용자에게 신뢰하는 것에 대한 투명성을 제공합니다. 어서션 event는 기본 데이터가 실제로 변경될 때만 업데이트되어야 하며, 불필요한 relay 트래픽을 방지하고 클라이언트가 안심하고 결과를 캐시할 수 있게 합니다.&lt;/p>
&lt;p>&lt;strong>현재 채택 현황:&lt;/strong>&lt;/p>
&lt;p>NIP-85는 이미 비공식적으로 등장하고 있는 패턴을 공식화합니다. Primal의 캐시 서버가 참여도 메트릭과 Web of Trust 점수를 계산합니다. &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-11-newsletter/#antiprimal-primal-%EC%BA%90%EC%8B%9C%EC%97%90-%EB%8C%80%ED%95%9C-%ED%91%9C%EC%A4%80-%ED%98%B8%ED%99%98-%EA%B2%8C%EC%9D%B4%ED%8A%B8%EC%9B%A8%EC%9D%B4">뉴스레터 #9에서 다룬&lt;/a> &lt;a href="https://gitlab.com/soapbox-pub/antiprimal">Antiprimal&lt;/a>이 NIP-85 event kind를 사용하여 이 계산들을 표준 Nostr 클라이언트에 브릿지합니다. &lt;a href="https://nostr.band">Nostr.band&lt;/a>가 명세 자체 예시에서 참조된 &lt;code>wss://nip85.nostr.band&lt;/code> relay를 운영하며, 검색 인덱스 데이터를 위한 어서션 event를 서비스합니다. 클라이언트 측에서 이 NIP을 작성한 vitorpamplona가 만든 &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>가 &lt;code>quartz&lt;/code> 라이브러리에 실험적인 Trusted Assertions 지원을 갖추고 있으며, 어서션 event와 서비스 제공자 선언을 파싱합니다. &lt;a href="https://vertexlab.io">Vertex&lt;/a>는 유사한 Web of Trust 메트릭을 계산하지만 &lt;a href="https://vertexlab.io/blog/dvms_vs_nip_85/">다른 접근 방식을 선택했습니다&lt;/a>. 검색 문제와 어서션 기반 아키텍처의 계산 오버헤드를 이유로 NIP-85 event 대신 직접 API를 사용합니다. NIP-85를 통해 어떤 클라이언트든 표준 event 형식을 통해 어떤 제공자의 어서션도 소비할 수 있으며, 제공자들은 정확성으로 경쟁하면서 사용자들은 신뢰할 대상을 선택합니다.&lt;/p>
&lt;h2 id="nip-심층-분석-nip-52-캘린더-events">NIP 심층 분석: NIP-52 (캘린더 Events)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/52.md">NIP-52&lt;/a>는 Nostr에서 캘린더 event를 정의하여, 클라이언트가 특정 순간 또는 순간 사이에 발생하는 사건을 표준적인 방식으로 표현하고 검색할 수 있게 합니다. 이번 주 &lt;a href="https://github.com/nostr-protocol/nips/pull/1752">D tag 병합&lt;/a>은 일 단위 인덱싱을 추가하여 명세의 쿼리 인프라에서 빠진 부분을 완성했습니다.&lt;/p>
&lt;p>&lt;strong>두 가지 Event 유형:&lt;/strong>&lt;/p>
&lt;p>NIP-52는 시간적 정밀도에 따라 캘린더 event를 두 가지 kind로 분리합니다. 날짜 기반 event (kind 31922)는 공휴일이나 다중 일 축제와 같은 하루 종일 지속되는 사건을 나타냅니다. &lt;code>start&lt;/code> 및 선택적 &lt;code>end&lt;/code> tag에 ISO 8601 날짜 문자열을 사용하며, 시간대 고려 없이:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event creator pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1735689600&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">31922&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Annual celebration of Bitcoin&amp;#39;s genesis block&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;bitcoin-independence-day-2026&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;title&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Bitcoin Independence Day&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;start&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;2026-01-03&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;end&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;2026-01-04&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;location&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Worldwide&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;g&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;u4pruydqqv&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;bitcoin&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;organizer-pubkey&amp;gt;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;host&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;r&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://bitcoinindependenceday.com&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event creator signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>시간 기반 event (kind 31923)는 &lt;code>start&lt;/code> 및 선택적 &lt;code>end&lt;/code> tag의 Unix 타임스탬프와 표시를 위한 IANA 시간대 식별자 (&lt;code>start_tzid&lt;/code>, &lt;code>end_tzid&lt;/code>)로 특정 순간을 나타냅니다. 두 kind 모두 매개변수화된 교체 가능 event이므로, 주최자가 같은 &lt;code>d&lt;/code> tag를 사용하는 새 event를 게시하여 세부 정보를 업데이트합니다.&lt;/p>
&lt;p>&lt;strong>캘린더와 RSVP:&lt;/strong>&lt;/p>
&lt;p>Kind 31924 event는 kind 31922 또는 31923 event를 주소 좌표로 가리키는 &lt;code>a&lt;/code> tag를 통해 event를 참조하는 컬렉션으로 캘린더를 정의합니다:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;calendar owner pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1739836800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">31924&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Nostr community events worldwide&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nostr-community-calendar&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;title&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Nostr Community Events&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;31923:&amp;lt;organizer-pubkey&amp;gt;:nostr-meetup-2026&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;31922:&amp;lt;organizer-pubkey&amp;gt;:bitcoin-independence-day-2026&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;calendar owner signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>사용자는 여러 캘린더 (개인, 업무, 커뮤니티)를 유지할 수 있으며 클라이언트는 특정 pubkey의 캘린더를 구독할 수 있습니다. 캘린더 event는 캘린더를 참조하는 &lt;code>a&lt;/code> tag를 포함하여 포함 요청을 할 수 있으며, 소유하지 않은 캘린더에 여러 사용자가 event를 기여하는 협업 캘린더 관리가 가능합니다.&lt;/p>
&lt;p>RSVP는 kind 31925를 사용하며, 사용자가 선택적 참여 가능/불가능 표시와 함께 참석 상태를 게시합니다:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;attendee pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1739836800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">31925&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Looking forward to it&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;31923:&amp;lt;organizer-pubkey&amp;gt;:nostr-meetup-2026&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;kind 31923 event id&amp;gt;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;unique-rsvp-id&amp;gt;&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;status&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;accepted&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;fb&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;busy&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;organizer-pubkey&amp;gt;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;attendee signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>유효한 &lt;code>status&lt;/code> 값은 &amp;ldquo;accepted&amp;rdquo;, &amp;ldquo;declined&amp;rdquo;, &amp;ldquo;tentative&amp;quot;이며, 선택적 &lt;code>fb&lt;/code> tag가 사용자를 해당 기간 동안 참여 가능 또는 불가능으로 표시합니다. RSVP event는 캘린더 event의 &lt;code>a&lt;/code> tag를 참조하고 주최자의 &lt;code>p&lt;/code> tag를 담으므로, 주최자의 클라이언트가 relay 전반의 응답을 집계할 수 있습니다.&lt;/p>
&lt;p>&lt;strong>D Tag 추가:&lt;/strong>&lt;/p>
&lt;p>이번 주 병합 전에는 날짜 범위에서 event를 쿼리하는 클라이언트가 pubkey나 캘린더에서 모든 event를 가져와 클라이언트 측에서 필터링해야 했습니다. 시간 기반 event (kind 31923)의 새로운 필수 &lt;code>D&lt;/code> tag는 &lt;code>floor(unix_seconds / 86400)&lt;/code>으로 계산된 일 단위 Unix 타임스탬프를 담습니다. 다중 일 event는 하루당 하나씩 여러 &lt;code>D&lt;/code> tag를 가집니다. Relay가 이제 일별로 event를 인덱싱하고 필터링된 쿼리에 효율적으로 응답할 수 있어, 클라이언트 측 필터링 문제를 relay 측 인덱스 조회로 전환합니다.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event creator pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1739836800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">31923&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Monthly meetup for Nostr developers in Austin&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nostr-meetup-2026&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;title&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Nostr Developer Meetup&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;summary&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Talks and demos from local Nostr builders&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;image&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://example.com/meetup-banner.jpg&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;start&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1740067200&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;end&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1740078000&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;start_tzid&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;America/New_York&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;end_tzid&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;America/New_York&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;D&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;20139&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;location&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Bitcoin Commons, Austin TX&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;g&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;9v6knb2pg&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;organizer-pubkey&amp;gt;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;host&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;speaker-pubkey&amp;gt;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;speaker&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nostr&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;meetup&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;r&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://bitcoincommons.com&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event creator signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>D&lt;/code> 값 &lt;code>20139&lt;/code>는 &lt;code>floor(1740067200 / 86400)&lt;/code>이며, 이 event를 2025년 2월 20일에 배치합니다. &amp;ldquo;이번 주 모든 event&amp;quot;를 쿼리하는 클라이언트는 해당 &lt;code>D&lt;/code> 범위가 있는 필터를 보내고, relay는 일치하는 event만 반환합니다.&lt;/p>
&lt;p>&lt;strong>설계 결정:&lt;/strong>&lt;/p>
&lt;p>NIP-52는 의도적으로 반복 event를 생략합니다. 명세는 재발 규칙 (iCalendar의 RRULE)을 완전히 제외하여 해당 복잡성을 클라이언트에 위임합니다. 주최자가 각 발생에 대해 개별 event를 게시하여 relay 측 데이터 모델을 단순하게 유지합니다. 참가자 tag는 선택적 역할 (&amp;ldquo;host&amp;rdquo;, &amp;ldquo;speaker&amp;rdquo;, &amp;ldquo;attendee&amp;rdquo;)을 담으며, 위치 tag는 인간이 읽을 수 있는 주소와 함께 공간 쿼리를 위한 지오해시 &lt;code>g&lt;/code> tag를 포함할 수 있습니다.&lt;/p>
&lt;p>&lt;strong>구현:&lt;/strong>&lt;/p>
&lt;p>&lt;a href="https://github.com/zmeyer44/flockstr">Flockstr&lt;/a>는 NIP-52 위에 구축된 주요 캘린더 클라이언트입니다. &lt;a href="https://gitea.coracle.social/coracle/coracle">Coracle&lt;/a>은 소셜 피드에 캘린더 event를 표시합니다. 이번 주 &lt;code>D&lt;/code> tag 추가로 특정 날짜 범위의 event를 쿼리할 때 대역폭을 줄이는 relay 측 시간적 인덱싱이 가능해져, 두 클라이언트 모두 이를 활용할 수 있습니다.&lt;/p>
&lt;hr>
&lt;p>이번 주는 여기까지입니다. 무언가를 만들고 있거나, 공유할 뉴스가 있거나, 프로젝트를 다뤄주길 원하신다면 &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">NIP-17 DM으로 연락하시거나&lt;/a> Nostr에서 찾아주세요.&lt;/p></content:encoded></item><item><title>Nostr Compass #9</title><link>https://nostrcompass.org/ko/newsletters/2026-02-11-newsletter/</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2026-02-11-newsletter/</guid><description>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> Mostro가 3년간의 개발 끝에 첫 퍼블릭 베타를 출시하여 Nostr를 통한 P2P Bitcoin 거래를 모바일로 가져왔습니다. OpenSats가 열여섯 번째 Bitcoin 보조금을 수여했으며, Minibits Wallet이 Nostr 통합 Cashu 지갑으로 갱신 보조금을 받았습니다. &lt;strong>Zapstore가 1.0 안정 릴리스에 도달하여&lt;/strong> 탈중앙화 Android 앱 스토어의 성숙을 표시합니다. Coracle 0.6.29가 주제 및 하이라이트 댓글 기능을 추가했습니다. Igloo Desktop v1.0.3가 Frostr 임계값 서명을 위한 주요 보안 강화를 출시했습니다. Amber v4.1.2-pre1이 Flow 아키텍처로 마이그레이션했습니다. Angor가 개편된 펀딩 UI와 NIP-96 이미지 서버 설정과 함께 v0.2.5에 도달했습니다. NostrPress가 Nostr 프로필을 정적 블로그로 변환하는 도구로 등장했습니다. Antiprimal이 Primal의 독점 캐시 서버를 표준 Nostr NIP으로 브릿지하는 표준 호환 게이트웨이를 공개했습니다. Primal Android가 듀얼 지갑 지원, 감사 로깅, &lt;code>lookup_invoice&lt;/code> 메서드로 NWC 인프라를 확장하는 18개의 PR을 병합했습니다. diVine이 API 기반 비디오 피드를 출시했습니다. Marmot TypeScript SDK가 참조 채팅 앱을 독립 저장소로 분리하고 ts-mls v2로의 마이그레이션을 시작했습니다. NIPs 저장소가 NIP-45의 HyperLogLog 근사 카운팅을 병합하고 kind 0에서 신원 tag를 추출했습니다. vitorpamplona의 일련의 제안이 kind 0 메타데이터 event를 체계적으로 경량화하기 시작했습니다. 프로토콜 제안으로는 NAT 통과를 위한 Nostr Relay Connect와 서명된 웹 클레임을 위한 Nostr Web Tokens가 있습니다. 이번 주 심층 분석은 크로스 relay event 메트릭을 위한 NIP-45의 HyperLogLog 근사 카운팅과, 현재 Blossom을 권장하며 비권장으로 표시된 NIP-96의 HTTP 파일 저장소 프로토콜을 다루며, 프로젝트들이 두 미디어 표준 사이의 전환을 진행하고 있습니다.&lt;/p></description><content:encoded>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> Mostro가 3년간의 개발 끝에 첫 퍼블릭 베타를 출시하여 Nostr를 통한 P2P Bitcoin 거래를 모바일로 가져왔습니다. OpenSats가 열여섯 번째 Bitcoin 보조금을 수여했으며, Minibits Wallet이 Nostr 통합 Cashu 지갑으로 갱신 보조금을 받았습니다. &lt;strong>Zapstore가 1.0 안정 릴리스에 도달하여&lt;/strong> 탈중앙화 Android 앱 스토어의 성숙을 표시합니다. Coracle 0.6.29가 주제 및 하이라이트 댓글 기능을 추가했습니다. Igloo Desktop v1.0.3가 Frostr 임계값 서명을 위한 주요 보안 강화를 출시했습니다. Amber v4.1.2-pre1이 Flow 아키텍처로 마이그레이션했습니다. Angor가 개편된 펀딩 UI와 NIP-96 이미지 서버 설정과 함께 v0.2.5에 도달했습니다. NostrPress가 Nostr 프로필을 정적 블로그로 변환하는 도구로 등장했습니다. Antiprimal이 Primal의 독점 캐시 서버를 표준 Nostr NIP으로 브릿지하는 표준 호환 게이트웨이를 공개했습니다. Primal Android가 듀얼 지갑 지원, 감사 로깅, &lt;code>lookup_invoice&lt;/code> 메서드로 NWC 인프라를 확장하는 18개의 PR을 병합했습니다. diVine이 API 기반 비디오 피드를 출시했습니다. Marmot TypeScript SDK가 참조 채팅 앱을 독립 저장소로 분리하고 ts-mls v2로의 마이그레이션을 시작했습니다. NIPs 저장소가 NIP-45의 HyperLogLog 근사 카운팅을 병합하고 kind 0에서 신원 tag를 추출했습니다. vitorpamplona의 일련의 제안이 kind 0 메타데이터 event를 체계적으로 경량화하기 시작했습니다. 프로토콜 제안으로는 NAT 통과를 위한 Nostr Relay Connect와 서명된 웹 클레임을 위한 Nostr Web Tokens가 있습니다. 이번 주 심층 분석은 크로스 relay event 메트릭을 위한 NIP-45의 HyperLogLog 근사 카운팅과, 현재 Blossom을 권장하며 비권장으로 표시된 NIP-96의 HTTP 파일 저장소 프로토콜을 다루며, 프로젝트들이 두 미디어 표준 사이의 전환을 진행하고 있습니다.&lt;/p>
&lt;h2 id="뉴스">뉴스&lt;/h2>
&lt;h3 id="mostro-첫-퍼블릭-베타-출시">Mostro 첫 퍼블릭 베타 출시&lt;/h3>
&lt;p>Nostr 기반 P2P Bitcoin 거래소인 &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a>가 3년간의 개발 끝에 첫 퍼블릭 베타인 &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.1.0">모바일 앱 v1.1.0&lt;/a>을 릴리스했습니다. 이 앱은 Nostr를 주문 조정에, Lightning을 정산에 사용하여 수탁 중개자 없이 사용자가 직접 Bitcoin을 거래할 수 있게 합니다.&lt;/p>
&lt;p>이번 릴리스는 Android에서 향상된 백그라운드 안정성을 갖춘 푸시 알림, 문제 발생 시 진단 데이터를 캡처하고 공유할 수 있는 선택적 로깅 시스템, 가산 초기화를 사용한 부드러운 relay 업데이트, 국제화 지원이 포함된 Phase 2 UI 개선을 도입합니다. 이 앱은 &lt;a href="https://zapstore.dev">Zapstore&lt;/a>와 &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.1.0">GitHub 직접 다운로드&lt;/a>로 제공됩니다.&lt;/p>
&lt;p>Mostro는 Shopstr, Plebeian Market과 함께 Nostr 네이티브 상거래 애플리케이션에 합류하며, 법정화폐-Bitcoin 거래 조정에 초점을 맞춘다는 점이 차별화됩니다. 기반이 되는 &lt;a href="https://github.com/MostroP2P/mostro">Mostro 데몬&lt;/a>은 Nostr relay를 통해 주문 매칭과 분쟁 해결을 처리합니다.&lt;/p>
&lt;h3 id="opensats-열여섯-번째-bitcoin-보조금">OpenSats 열여섯 번째 Bitcoin 보조금&lt;/h3>
&lt;p>&lt;a href="https://opensats.org/blog/sixteenth-wave-of-bitcoin-grants">OpenSats&lt;/a>가 17개 오픈소스 프로젝트에 보조금을 발표했습니다. Nostr 관련 주요 사항: &lt;a href="https://nostrcompass.org/ko/topics/nip-60/">NIP-60&lt;/a> 지갑 event 지원과 Nutzap 통합을 갖춘 Android &lt;a href="https://nostrcompass.org/ko/topics/cashu/">Cashu&lt;/a> 지갑인 &lt;a href="https://github.com/minibits-cash/minibits_wallet">Minibits Wallet&lt;/a>이 갱신 보조금을 받았습니다. Minibits는 Nostr event를 사용하여 ecash 토큰 상태를 저장하므로, relay 동기화를 통해 기기 간 지갑 백업이 가능합니다.&lt;/p>
&lt;h3 id="nostrpress-nostr-프로필을-정적-블로그로">NostrPress: Nostr 프로필을 정적 블로그로&lt;/h3>
&lt;p>&lt;a href="https://github.com/besoeasy/NostrPress">NostrPress&lt;/a> (&lt;a href="https://blog.besoeasy.com">blog.besoeasy.com&lt;/a>)는 Nostr 프로필을 어디서든 배포 가능한 완전한 정적 블로그로 변환하는 도구입니다. 사용자가 아무 클라이언트를 통해 Nostr에 기사를 게시하면, NostrPress가 해당 event로부터 로컬 미디어 호스팅과 RSS 피드를 갖춘 독립형 웹사이트를 생성합니다.&lt;/p>
&lt;p>Nunjucks 템플릿과 JavaScript로 구축된 NostrPress는 플랫폼 종속 없는 사이트를 생성합니다. 생성된 결과물은 모든 정적 파일 서버, GitHub Pages, Netlify, 개인 VPS에서 호스팅 가능한 일반 HTML/CSS입니다. &lt;a href="https://github.com/nostrband/nostrsite">Npub.pro&lt;/a> 및 &lt;a href="https://github.com/servus-social/servus">Servus&lt;/a>와 함께 Nostr 콘텐츠를 전통적인 웹사이트로 변환하는 옵션에 합류합니다.&lt;/p>
&lt;h3 id="antiprimal-primal-캐시에-대한-표준-호환-게이트웨이">Antiprimal: Primal 캐시에 대한 표준 호환 게이트웨이&lt;/h3>
&lt;p>Alex Gleason과 Soapbox 팀이 만든 &lt;a href="https://gitlab.com/soapbox-pub/antiprimal">antiprimal&lt;/a> (&lt;a href="https://antiprimal.net">antiprimal.net&lt;/a>)은 Primal의 독점 캐시 서버를 표준 Nostr 프로토콜 메시지로 브릿지하는 WebSocket 게이트웨이입니다. Primal은 &lt;code>wss://cache.primal.net/v1&lt;/code>을 통해 event 통계, 콘텐츠 검색, Web of Trust 계산 같은 기능을 제공하지만, 이에 접근하려면 표준 Nostr 클라이언트가 사용할 수 없는 비표준 &lt;code>cache&lt;/code> 필드가 포함된 독점 메시지 형식이 필요합니다. Antiprimal은 표준 NIP 요청을 Primal의 형식으로 변환하고 응답을 다시 변환합니다.&lt;/p>
&lt;p>게이트웨이는 &lt;a href="https://nostrcompass.org/ko/topics/nip-45/">NIP-45&lt;/a> COUNT 쿼리(리액션, 답글, 리포스트, zap 수, 팔로워 수), &lt;a href="https://github.com/nostr-protocol/nips/blob/master/50.md">NIP-50&lt;/a> 검색, &lt;a href="https://nostrcompass.org/ko/topics/nip-11/">NIP-11&lt;/a> relay 정보, Primal의 사전 계산된 Web of Trust 데이터를 위한 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/85.md">NIP-85&lt;/a> Trusted Assertions를 지원합니다. 동반 봇은 NIP-85 kind 30382(사용자 통계) 및 kind 30383(event 참여도) event를 설정 가능한 relay에 게시합니다. Bun에서 TypeScript로 구축되었고 Nostrify 라이브러리를 사용합니다. 2월 6일에 생성되어 첫 3일간 53개의 커밋이 있으며, antiprimal.net에서 운영 중입니다.&lt;/p>
&lt;h3 id="ikaros-signal과-nostr를-위한-ai-에이전트-메시징-게이트웨이">Ikaros: Signal과 Nostr를 위한 AI 에이전트 메시징 게이트웨이&lt;/h3>
&lt;p>Soapbox 팀이 만든 &lt;a href="https://gitlab.com/soapbox-pub/ikaros">Ikaros&lt;/a>는 AI 에이전트가 Signal과 Nostr 암호화 DM 모두를 통해 통신할 수 있게 하는 메시징 게이트웨이입니다. 이 브릿지는 &lt;a href="https://agentclientprotocol.org">Agent Client Protocol&lt;/a> (ACP)을 사용하여 ACP 호환 AI 코딩 어시스턴트를 실제 메시징 네트워크에 연결합니다. 세 개의 pull request가 이번 주 프로젝트의 초기 빌드를 구성합니다.&lt;/p>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/ikaros/-/merge_requests/1">PR #1&lt;/a>은 송수신 지원, 완료 시 명시적 플러시가 있는 응답 버퍼링, &lt;code>nsec&lt;/code> 및 16진수 개인 키 형식, 자동 재연결이 포함된 다중 relay 게시, 대화형 설정 마법사를 갖춘 완전한 &lt;a href="https://nostrcompass.org/ko/topics/nip-04/">NIP-04&lt;/a> 암호화 DM 어댑터를 구현합니다. 어댑터는 nostr-tools v2.23.0을 사용하고 ACP SDK를 v0.14.1로 업데이트합니다.&lt;/p>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/ikaros/-/merge_requests/2">PR #2&lt;/a>는 세션 업데이트 경합 상태로 인한 무음 메시지 드롭을 수정합니다. 세션이 맵에 등록되기 전에 도착한 수신 알림이 조용히 유실되었는데, 수정 사항은 등록이 완료되면 재생할 수 있도록 해당 알림을 버퍼링합니다. &lt;a href="https://gitlab.com/soapbox-pub/ikaros/-/merge_requests/3">PR #3&lt;/a>는 에이전트 상호작용에 Signal 사용자 및 그룹 이름/UUID 메타데이터를 추가하여, AI 에이전트가 누구와 어떤 그룹에서 대화하는지 알 수 있게 합니다. 이 프로젝트는 Nostr DM으로 접근 가능한 AI 에이전트가 Signal에서도 접근 가능하고, 그 반대도 가능한 설계 영역을 열어줍니다.&lt;/p>
&lt;h3 id="kind-0-슬리밍-캠페인">Kind 0 슬리밍 캠페인&lt;/h3>
&lt;p>vitorpamplona가 이번 주 kind 0(사용자 메타데이터) event에서 데이터를 전용 event kind로 체계적으로 추출하는 일련의 PR을 열었습니다. 이 캠페인은 커지는 문제를 해결합니다. kind 0 event가 시간이 지나면서 대부분의 클라이언트가 사용하지 않는 필드를 축적하여, 모든 프로필 가져오기의 크기를 부풀렸습니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2216">PR #2216&lt;/a>(병합됨)은 이 tag의 채택이 미미했기 때문에 신원 tag(&lt;code>i&lt;/code> tag)를 kind 0에서 kind 10011로 이동합니다. &lt;a href="https://github.com/nostr-protocol/nips/pull/2213">PR #2213&lt;/a>은 &lt;a href="https://nostrcompass.org/ko/topics/nip-05/">NIP-05&lt;/a> 검증을 kind 10008로 이동하는 것을 제안하며, 이를 통해 사용자가 여러 NIP-05 식별자를 가질 수 있고 NIP-05 주소로 event를 필터링할 수 있습니다. &lt;a href="https://github.com/nostr-protocol/nips/pull/2217">PR #2217&lt;/a>은 Lightning 주소(lud06/lud16)를 별도의 kind로 추출하여, Lightning 통합이 있는 클라이언트에만 관련된 zap 관련 필드를 모든 kind 0 사용자가 갖고 다니는 것을 중단하도록 제안합니다.&lt;/p>
&lt;p>이 제안들은 kind 0 구조에 대한 더 넓은 논의를 다시 활성화시켰으며, 여기에는 kind 0 콘텐츠의 문자열화된 JSON을 구조화된 tag로 대체하자는 오래된 제안인 &lt;a href="https://github.com/nostr-protocol/nips/pull/1770">PR #1770&lt;/a>도 포함됩니다.&lt;/p>
&lt;h3 id="암호화-메시징-보안에-nip-70-지원-필수">암호화 메시징 보안에 NIP-70 지원 필수&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> 프로토콜의 White Noise 구현이 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/70.md">NIP-70&lt;/a> (Protected Events) 및 &lt;a href="https://nostrcompass.org/ko/topics/nip-42/">NIP-42&lt;/a> (Authentication)에 대한 relay 지원의 &lt;a href="https://blog.jgmontoya.com/2026/02/10/nip70-relay-status.html">치명적 격차를 발견했습니다&lt;/a>. 테스트 결과 Damus, Primal, nos.lol을 포함한 주요 공개 relay가 필수 인증 챌린지를 시작하는 대신 &lt;code>blocked: event marked as protected&lt;/code> 오류로 protected event를 거부하는 것으로 나타났습니다.&lt;/p>
&lt;p>이는 핵심 보안 기능을 깨뜨립니다. NIP-70은 사용된 MLS KeyPackage의 안전한 삭제를 가능하게 하여, &amp;ldquo;지금 수집하고 나중에 복호화&amp;rdquo; 공격을 방지합니다. 이 지원 없이는 암호화 메시징 프로토콜이 미래의 키 손상으로부터 사용자를 보호할 수 없습니다. White Noise는 이에 대응하여 NIP-70을 기본적으로 비활성화했으며, 지원하는 relay를 가진 사용자를 위한 선택적 플래그를 유지합니다.&lt;/p>
&lt;p>&lt;strong>운영자를 위한 요청:&lt;/strong> 완전한 NIP-42 인증 흐름을 구현해주십시오. Protected event를 수신하면 소유권 증명을 요청한 후, 검증된 쓰기를 수락해야 합니다. 인증 없이 protected event를 거부하면, 암호화 메시징 애플리케이션이 의존하는 프로토콜 보안 보장이 깨집니다.&lt;/p>
&lt;h2 id="릴리스">릴리스&lt;/h2>
&lt;h3 id="coracle-0629">Coracle 0.6.29&lt;/h3>
&lt;p>hodlbod의 웹 클라이언트인 &lt;a href="https://github.com/coracle-social/coracle">Coracle&lt;/a> (&lt;a href="https://coracle.social">coracle.social&lt;/a>)이 &lt;a href="https://github.com/coracle-social/coracle/releases/tag/0.6.29">0.6.29&lt;/a>를 출시했습니다. 이 릴리스는 kind 9802 하이라이트에 대한 주제 및 댓글 표시를 추가합니다. 리스트 네비게이션 항목이 추가되어 메인 UI에서 사용자 큐레이션 리스트에 빠르게 접근할 수 있습니다. 내부적으로 Coracle은 relay 관리와 event 처리를 담당하는 공유 Nostr 라이브러리인 Welshman의 최신 버전으로 업그레이드했습니다. 기본 relay 목록이 갱신되었고 Glitchtip 오류 추적이 코드베이스에서 제거되었습니다.&lt;/p>
&lt;h3 id="igloo-desktop-v103">Igloo Desktop v1.0.3&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/frost/">FROST&lt;/a> 기반 임계값 서명 및 키 관리 애플리케이션인 &lt;a href="https://github.com/FROSTR-ORG/igloo-desktop">Igloo Desktop&lt;/a>이 광범위한 보안 강화와 함께 &lt;a href="https://github.com/FROSTR-ORG/igloo-desktop/releases/tag/v1.0.3">v1.0.3&lt;/a>을 출시했습니다. IPC 검증, Electron 격리, 서버 측 요청 위조 방어를 위한 SSRF 인식 relay 검사를 도입합니다. 온보딩 및 공유 가져오기 흐름이 키 배포를 단순화하고, relay 계획에 정규화 및 우선순위 병합이 포함되며, 프리로드 기반 Electron API 아키텍처가 렌더러와 메인 프로세스 사이의 보안 경계를 개선합니다. 서명자 keep-alive 시스템이 임계값 서명 세션 안정성을 유지하고, 복구 UX 개선이 키 복원의 마찰을 줄입니다.&lt;/p>
&lt;h3 id="amber-v412-pre1">Amber v4.1.2-pre1&lt;/h3>
&lt;p>Android event 서명자인 &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>가 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.2-pre1">v4.1.2-pre1&lt;/a>을 릴리스하여 v4.1.1에서 도입된 누락된 relay 신뢰 점수 표시를 수정하고, Nostr가 아닌 암호화/복호화 요청에 대한 JSON 파싱 문제를 해결하며, 더 예측 가능한 상태 관리를 위해 계정 모델을 LiveData에서 Flow로 마이그레이션했습니다. Bunker 비밀이 전체 UUID로 전환되었고 Gradle 플러그인 9으로 업그레이드됩니다.&lt;/p>
&lt;h3 id="mostro-mobile-v110-및-daemon-v0161">Mostro Mobile v1.1.0 및 Daemon v0.16.1&lt;/h3>
&lt;p>모바일 릴리스의 전체 내용은 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-11-newsletter/#mostro-%ec%b2%ab-%ed%8d%bc%eb%b8%94%eb%a6%ad-%eb%b2%a0%ed%83%80-%ec%b6%9c%ec%8b%9c">위 뉴스 섹션&lt;/a>을 참조하세요. 서버 측에서 &lt;a href="https://github.com/MostroP2P/mostro">Mostro 데몬&lt;/a>이 &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.16.1">v0.16.1&lt;/a>을 출시하여, 시작 시 NIP-01 kind 0 메타데이터를 자동 게시하는 기능(&lt;a href="https://github.com/MostroP2P/mostro/pull/575">PR #575&lt;/a>)을 추가했습니다. 이를 통해 데몬이 온라인 상태가 되면 네트워크에 자신의 신원을 알립니다. 개발 수수료 계산 문서도 수정됩니다(&lt;a href="https://github.com/MostroP2P/mostro/pull/571">PR #571&lt;/a>).&lt;/p>
&lt;h3 id="angor-v025">Angor v0.2.5&lt;/h3>
&lt;p>Bitcoin과 Nostr 기반의 탈중앙화 P2P 펀딩 프로토콜인 &lt;a href="https://github.com/block-core/angor">Angor&lt;/a> (&lt;a href="https://angor.io">angor.io&lt;/a>)가 3개의 병합된 PR과 함께 &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.5">v0.2.5&lt;/a>를 출시했습니다. &lt;a href="https://github.com/block-core/angor/pull/649">PR #649&lt;/a>는 자금 관리 섹션(V2)을 재설계하여, 이전 레이아웃을 개별 UTXO 및 투자 포지션 추적을 위한 인터페이스로 교체합니다. &lt;a href="https://github.com/block-core/angor/pull/651">PR #651&lt;/a>는 업데이트된 버튼 스타일, 닫을 수 있는 대화 상자, &amp;ldquo;주소 복사&amp;rdquo; 명령, 주소 모니터링 취소 지원, 개선된 투자 흐름 처리로 InvoiceView를 개편합니다. &lt;a href="https://github.com/block-core/angor/pull/652">PR #652&lt;/a>는 설정에서 구성 가능한 &lt;a href="https://nostrcompass.org/ko/topics/nip-96/">NIP-96&lt;/a> (&lt;a href="https://github.com/nostr-protocol/nips/blob/master/96.md">명세&lt;/a>) 이미지 서버를 추가하여, 사용자가 프로젝트 이미지와 문서를 처리하는 미디어 업로드 엔드포인트를 선택할 수 있게 합니다. &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.4">v0.2.4&lt;/a>는 전 주에 출시되었습니다.&lt;/p>
&lt;h3 id="ridestr-v022-및-v023">Ridestr v0.2.2 및 v0.2.3&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-04-newsletter/#ridestr-v020-roadflare-%EB%A6%B4%EB%A6%AC%EC%8A%A4">지난주 다룬&lt;/a> 탈중앙화 라이드셰어 플랫폼인 &lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a>가 v0.2.0 &amp;ldquo;RoadFlare Release&amp;rdquo; 이후 &lt;a href="https://github.com/variablefate/ridestr/releases/tag/v0.2.2">v0.2.2&lt;/a> (Bridge Payment Hotfix)와 &lt;a href="https://github.com/variablefate/ridestr/releases/tag/v0.2.3">v0.2.3&lt;/a>으로 빠른 반복을 계속했습니다. v0.2.2 핫픽스는 크로스 민트 &lt;a href="https://nostrcompass.org/ko/topics/cashu/">Cashu&lt;/a> 브릿지 결제가 처리 중이거나 결국 성공할 수 있는 상태에서 자동 취소되는 버그를 해결하여, 느린 정산에서의 조기 라이드 취소를 방지합니다. &amp;ldquo;내 위치&amp;rdquo; 버튼의 UI 깜빡임과 깨진 터치 히트박스도 수정됩니다. v0.2.3은 추가 버그 수정을 포함합니다. 두 릴리스 모두 Ridestr(라이더 앱)와 Drivestr(드라이버 앱)의 별도 APK를 포함합니다.&lt;/p>
&lt;h3 id="nostr-php-194">Nostr PHP 1.9.4&lt;/h3>
&lt;p>Nostr 프로토콜용 PHP 헬퍼 라이브러리인 &lt;a href="https://github.com/nostrver-se/nostr-php">Nostr PHP&lt;/a> (&lt;a href="https://nostr-php.dev">nostr-php.dev&lt;/a>)가 요청 클래스에 구성 가능한 &lt;code>timeout&lt;/code> 속성을 추가하는 &lt;a href="https://github.com/nostrver-se/nostr-php/releases/tag/1.9.4">1.9.4&lt;/a>를 출시했습니다(&lt;a href="https://github.com/nostrver-se/nostr-php/pull/106">PR #106&lt;/a>). 개발자가 relay 연결 및 메시지 요청에 대한 사용자 정의 타임아웃 기간을 설정하여, 응답이 없거나 느린 relay에서의 무한 대기를 방지할 수 있습니다.&lt;/p>
&lt;h3 id="zapstore-v100">Zapstore v1.0.0&lt;/h3>
&lt;p>Nostr 기반의 무허가 Android 앱 스토어인 &lt;a href="https://github.com/zapstore/zapstore/releases/tag/1.0.0">Zapstore&lt;/a> (&lt;a href="https://zapstore.dev">zapstore.dev&lt;/a>)가 수개월의 릴리스 후보 기간을 거쳐 &lt;strong>안정 1.0 릴리스 마일스톤에 도달했습니다&lt;/strong>.&lt;/p>
&lt;p>1.0 릴리스는 핵심 안정성 개선을 포함합니다. 설치 완료 후 삭제 버튼이 즉시 나타나도록 보장하는 설치 버튼 상태 처리, 확장 가능한 기술 세부 정보가 포함된 사용자 친화적 오류 메시지, 임시 키를 사용한 Nostr 암호화 DM으로 전송하는 &amp;ldquo;이슈 보고&amp;rdquo; 버튼이 있습니다. 폴링과 배치 추적이 포함된 업데이트 화면, 중단된 전송을 위한 개선된 다운로드 감시 기능, 기기 성능 기반의 동적 동시 다운로드 제한, 더 빈번한 설치된 패키지 동기화, 개선된 버전 비교 로직도 포함됩니다. 팀은 치명적인 flutter_secure_storage 이슈를 수정하고 패키지 관리자의 엣지 케이스 처리를 강화했습니다.&lt;/p>
&lt;p>이 마일스톤은 Nostr의 첫 번째 전용 앱 배포 플랫폼의 성숙을 나타내며, 개발자가 중앙화된 앱 스토어 게이트키핑 없이 사용자에게 직접 Android 애플리케이션을 게시할 수 있게 합니다.&lt;/p>
&lt;h3 id="zsp-v031">ZSP v0.3.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapstore/zapstore">Zapstore&lt;/a> 팀의 Go CLI 도구로, Zapstore의 이전 퍼블리싱 도구를 대체하여 Android 앱의 서명 및 Nostr relay 업로드를 처리하는 &lt;a href="https://github.com/zapstore/zsp">ZSP&lt;/a>가 &lt;a href="https://github.com/zapstore/zsp/releases/tag/v0.3.1">v0.3.1&lt;/a>을 릴리스했습니다. ZSP는 GitHub, GitLab, Codeberg, F-Droid 또는 로컬 파일에서 APK를 획득한 후 메타데이터를 파싱하고, Nostr event에 서명(개인 키, &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> bunker, &lt;a href="https://nostrcompass.org/ko/topics/nip-07/">NIP-07&lt;/a> 브라우저 확장을 통해)하고, &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a> 서버에 아티팩트를 업로드합니다. 네트워크 연결 없이 키스토어 연결을 위한 완전한 오프라인 모드, 프로토콜 준수를 위한 Blossom 업로드의 &lt;code>Content-Digest&lt;/code> 헤더, F-Droid 저장소에서의 arm64-v8a APK 감지 수정, GitLab 후행 쿼리 파라미터 수정, 설정을 위한 완전한 &lt;code>.env&lt;/code> 파일 지원이 추가됩니다.&lt;/p>
&lt;h3 id="damus-ios-117">Damus iOS 1.17&lt;/h3>
&lt;p>iOS Nostr 클라이언트인 &lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>가 버전 1.17로 업데이트되었습니다(&lt;a href="https://github.com/damus-io/damus/pull/3606">PR #3606&lt;/a>). 임시 리스 해제 후 연결이 닫히는 RelayPool 이슈를 수정하여(&lt;a href="https://github.com/damus-io/damus/pull/3605">PR #3605&lt;/a>), 구독이 예기치 않게 중단되는 것을 방지합니다. 탭 간 전환 시 즐겨찾기 타임라인에 event가 표시되지 않는 버그도 해결합니다(&lt;a href="https://github.com/damus-io/damus/pull/3603">PR #3603&lt;/a>).&lt;/p>
&lt;h3 id="nak-v0183">nak v0.18.3&lt;/h3>
&lt;p>Nostr army knife CLI인 &lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a>이 세 가지 안정성 수정과 함께 &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.18.3">v0.18.3&lt;/a>을 출시했습니다. AUTH 챌린지 tag가 nil이거나 너무 짧을 때의 패닉 방지, 파싱된 값 사용 전 dateparser 오류 확인, &lt;code>://&lt;/code> 구분자가 없는 Cashu mint URL 처리가 포함됩니다.&lt;/p>
&lt;h3 id="mi-브라우저-기반-로컬-relay">Mi: 브라우저 기반 로컬 Relay&lt;/h3>
&lt;p>&lt;a href="https://shakespeare.wtf">Shakespeare&lt;/a> MiniApp인 &lt;a href="https://git.shakespeare.diy/npub1scvyzz02ayma34hesz62pdrd5nhsmxp74hjq8msmfs9khh3r3drsnw68d8/mi.git">Mi&lt;/a> (&lt;a href="https://mi.shakespeare.wtf">mi.shakespeare.wtf&lt;/a>)는 사용자의 Nostr event를 IndexedDB에 보관하는 브라우저 기반 로컬 relay입니다. Mi는 연결된 relay에서 프로필(kind 0), 연락처 목록(kind 3), relay 목록(kind 10002), 지갑 event를 가져와 로컬에 저장하여, 사용자가 자신의 데이터에 오프라인으로 접근할 수 있게 합니다. React와 nostr-tools 2.15.0으로 구축되었습니다.&lt;/p>
&lt;h3 id="agora-v102">Agora v1.0.2&lt;/h3>
&lt;p>Soapbox 팀의 탈중앙화 활동주의 및 모금 플랫폼인 &lt;a href="https://gitlab.com/soapbox-pub/agora">Agora&lt;/a> (&lt;a href="https://agora.spot">agora.spot&lt;/a>)가 직접 설치 가능한 Android APK와 함께 &lt;a href="https://gitlab.com/soapbox-pub/agora/-/releases/v1.0.2">v1.0.2&lt;/a>를 출시했습니다. Compass에서 처음 언급되는 Agora는 1월 17일에 다음과 같은 미션 성명으로 출시되었습니다: &amp;ldquo;자유를 위한 글로벌 운동에 동참하세요. 전 세계 현장의 활동가에게 지원을 보내고 지역 활동에 참여하세요.&amp;rdquo;&lt;/p>
&lt;p>이 플랫폼은 사용자가 국가별로 탐색하고, 위치 태그가 붙은 &amp;ldquo;액션&amp;rdquo;(시위, 캠페인, 커뮤니티 조직)을 생성하며, 스레드 댓글을 통해 토론하는 세계 지도를 중심으로 합니다. 모든 콘텐츠가 Nostr relay를 통해 전파되므로 조정을 중단시키기 위해 중앙 서버를 다운시킬 수 없습니다. CI 강제 번역 패리티를 갖춘 다국어를 지원하고, 업로드를 위한 &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a> 미디어 서버를 통합하며, 글로벌/지역 토글이 있는 검색, 해시태그 탐색, 사용자 프로필, 리액션 시스템을 포함합니다. v1.0.2 릴리스는 현재 Android 빌드로, 직접 APK 다운로드로 제공됩니다.&lt;/p>
&lt;h3 id="xonos-v016">xonos v0.1.6&lt;/h3>
&lt;p>Bevy 게임 엔진으로 구축된 실험적 3D Nostr 클라이언트인 &lt;a href="https://codeberg.org/xonos/xonos">xonos&lt;/a>가 &lt;a href="https://codeberg.org/xonos/xonos/releases/tag/v0.1.6">v0.1.6&lt;/a>을 출시했습니다. xonos는 텍스트 음성 변환 기능을 갖춘 3D 공간 환경에서 Nostr event를 렌더링하며, 소셜 프로토콜 데이터가 기존 2D 인터페이스 밖에서 어떻게 작동할 수 있는지를 탐구합니다.&lt;/p>
&lt;h2 id="프로젝트-업데이트">프로젝트 업데이트&lt;/h2>
&lt;h3 id="primal-android-nwc-인프라-확장">Primal Android, NWC 인프라 확장&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a>가 이번 주 18개의 PR을 병합하여 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-04-newsletter/#primal-android-nwc-%EC%95%94%ED%98%B8%ED%99%94-%EC%B6%9C%EC%8B%9C">지난주 시작된&lt;/a> NWC 구축을 계속했습니다. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/883">PR #883&lt;/a>은 양쪽 지갑(Spark 및 외부)에 대한 NWC 연결 지원을 추가하고, &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/879">PR #879&lt;/a>는 결제 상태 확인을 위한 &lt;code>lookup_invoice&lt;/code> NWC 메서드를 구현합니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/880">PR #880&lt;/a>은 지갑 상호작용 디버깅을 위한 NWC 요청-응답 감사 로깅을 추가합니다. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/877">PR #877&lt;/a>는 &lt;code>PrimalNwcService&lt;/code>에 다중 계정 지원을 추가하여, 여러 프로필을 가진 사용자가 별도의 지갑 연결을 유지할 수 있게 합니다. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/882">PR #882&lt;/a>는 만료된 예산 보류의 주기적 정리를 구현하여, 오래된 결제 예약이 지갑 작업을 차단하는 것을 방지합니다.&lt;/p>
&lt;p>UI 작업에는 지갑 업그레이드 화면 재설계(&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/889">PR #889&lt;/a>), 지갑 업그레이드 FAQ(&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/885">PR #885&lt;/a>), 온보딩 중 Lightning 주소 설정(&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/888">PR #888&lt;/a>), Lightning 이외 유형에서 zap 거래가 일반 결제로 표시되는 문제 수정(&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/887">PR #887&lt;/a>)이 포함됩니다.&lt;/p>
&lt;h3 id="divine-api-기반-비디오-피드-출시">diVine, API 기반 비디오 피드 출시&lt;/h3>
&lt;p>짧은 형식 비디오 클라이언트인 &lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>이 이번 주 19개의 PR을 병합하여 API 기반 아키텍처로 전환했습니다. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1468">PR #1468&lt;/a>이 API 기반 비디오 피드를 도입하고, &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1466">PR #1466&lt;/a>이 트렌딩, 최근, 홈 API 엔드포인트를 추가합니다. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1433">PR #1433&lt;/a>은 효율적인 피드 렌더링을 위해 특정 비디오 컨트롤러를 인덱싱합니다.&lt;/p>
&lt;p>프로필 처리는 &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1440">PR #1440&lt;/a>이 다른 프로필 보기에 캐시 플러스 프레시 패턴을 구현하여 개선되었으며, 데이터 신선도를 보장하면서 로드 시간을 줄입니다. 알림 수정(&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1437">PR #1437&lt;/a>), 댓글 흐름 리팩토링(&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1431">PR #1431&lt;/a>), 알림 화면의 탭 스와이핑(&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1388">PR #1388&lt;/a>)도 출시되었습니다.&lt;/p>
&lt;h3 id="white-noise-키링-통합-및-사용자-검색">White Noise: 키링 통합 및 사용자 검색&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> 프로토콜의 &lt;a href="https://github.com/marmot-protocol/whitenoise-rs">White Noise&lt;/a> 백엔드가 이번 주 4개의 PR을 병합했습니다. 두 PR이 키링 처리를 개선했습니다. &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/468">PR #468&lt;/a>은 &lt;code>WhitenoiseConfig&lt;/code>를 통해 키링 서비스 식별자를 구성 가능하게 만들고, &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/475">PR #475&lt;/a>는 플랫폼 네이티브 저장소를 갖춘 단일 &lt;code>keyring-core&lt;/code> 크레이트로 구현을 통합하여, 분산된 플랫폼별 코드를 대체합니다. 별도로, &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/470">PR #470&lt;/a>이 사용자 검색 기능을 추가합니다.&lt;/p>
&lt;h3 id="marmot-ts-참조-채팅-앱-분리">Marmot TS, 참조 채팅 앱 분리&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> TypeScript SDK (&lt;a href="https://github.com/marmot-protocol/marmot-ts">marmot-ts&lt;/a>)가 &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/40">PR #40&lt;/a>을 병합하여 내장된 참조 채팅 애플리케이션을 제거하고 독립 저장소인 &lt;a href="https://github.com/marmot-protocol/marmots-web-chat">marmots-web-chat&lt;/a>으로 분리했습니다. 2월 6일에 생성된 이 저장소는 자체 CI 파이프라인, 탭 채팅 뷰, 독립적인 빌드 시스템을 갖춘 Marmot TypeScript SDK의 참조 구현입니다. 이 분리를 통해 SDK는 라이브러리 관심사에 집중하고 채팅 앱은 독립적으로 UX를 반복할 수 있습니다.&lt;/p>
&lt;p>오픈 PR (&lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/41">#41&lt;/a>)은 marmot-ts를 ts-mls v2.0.0으로 마이그레이션하며, 통합 컨텍스트 객체를 갖춘 재설계된 API, 메시지 처리 유틸리티(event 생성, 읽기, 역직렬화), 키 패키지 메타데이터 헬퍼, 삭제 event 지원을 가져옵니다.&lt;/p>
&lt;h3 id="alby-hub-업데이트">Alby Hub 업데이트&lt;/h3>
&lt;p>&lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a>이 이번 주 5개의 PR을 병합했습니다. &lt;a href="https://github.com/getAlby/hub/pull/2049">PR #2049&lt;/a>는 앱 스토어 인터페이스에 Alby CLI를 추가합니다. &lt;a href="https://github.com/getAlby/hub/pull/2033">PR #2033&lt;/a>은 거래 목록에서 잘못된 zap 데이터 처리를 수정하고, &lt;a href="https://github.com/getAlby/hub/pull/2046">PR #2046&lt;/a>은 LNClient 인터페이스에서 사용되지 않는 &lt;code>ListTransactions&lt;/code> 메서드를 제거합니다.&lt;/p>
&lt;h3 id="notedeck-대시보드-및-agentium-출시">Notedeck, 대시보드 및 Agentium 출시&lt;/h3>
&lt;p>Damus의 크로스 플랫폼 Nostr 클라이언트인 &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>이 이번 주 6개의 PR을 병합했습니다. &lt;a href="https://github.com/damus-io/notedeck/pull/1247">PR #1247&lt;/a>이 초기 대시보드 앱을 추가합니다. &lt;a href="https://github.com/damus-io/notedeck/pull/1293">PR #1293&lt;/a>은 Dave AI 어시스턴트를 듀얼 AI 모드와 씬 기반 에이전트 관리를 갖춘 시스템으로 변환하는 멀티 에이전트 개발 환경인 Agentium을 도입합니다. &lt;a href="https://github.com/damus-io/notedeck/pull/1276">PR #1276&lt;/a>이 Signal 스타일 키바인딩을 갖춘 멀티라인 메시지 컴포저를 추가하고, &lt;a href="https://github.com/damus-io/notedeck/pull/1278">PR #1278&lt;/a>이 미디어 성능 개선을 제공합니다. 주목할 오픈 PR로는 &lt;a href="https://github.com/damus-io/notedeck/pull/1288">outbox 인프라&lt;/a>와 &lt;a href="https://nostrcompass.org/ko/topics/nip-34/">NIP-34&lt;/a> &lt;a href="https://github.com/damus-io/notedeck/pull/1289">Git App 계획&lt;/a>이 있습니다.&lt;/p>
&lt;h3 id="agora-대규모-ui-개편-출시">Agora 대규모 UI 개편 출시&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/agora">Agora&lt;/a>가 v1.0.2 릴리스와 함께 이번 주 7개의 PR을 병합했습니다. &lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/106">PR #106&lt;/a>이 가장 크며, 설정, 프로필 편집, 지도 상호작용, 검색 결과, 댓글 필터링, Blossom 서버 관리에 걸쳐 11개의 UI 작업을 완료합니다. 인증되지 않은 사용자의 리액션 버튼을 비활성화하고(이전에는 지도에서 게시물에 반응하려고 할 때 무음 실패가 발생), 날짜선 지도 패닝을 수정하고, 검색 결과에 일치하는 텍스트를 굵게 표시하는 기능을 추가했습니다.&lt;/p>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/108">PR #108&lt;/a>은 피드 게시물과 스레드 페이지 아래에 댓글 수를 추가합니다. &lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/107">PR #107&lt;/a>은 event 로드 실패 시 자동 재시도와 재시도 소진 시 명시적 리로드 버튼을 추가합니다. &lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/104">PR #104&lt;/a>는 해시태그 탐색을 글로벌 범위로 기본값을 변경합니다. 이전의 국가 범위 기본값은 결과가 없는 경우가 많았습니다.&lt;/p>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/109">PR #109&lt;/a>는 모든 언어의 번역 패리티를 검사하는 CI 단계를 추가하여, 누락된 값이 있으면 빌드가 실패합니다. &lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/110">PR #110&lt;/a>은 스크롤 리듬을 유지하기 위해 피드에서 큰 노트를 클리핑하고, &lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/111">PR #111&lt;/a>은 작은 글꼴 크기로 인한 액션 댓글 시 iOS 모바일 줌 문제를 수정합니다.&lt;/p>
&lt;h3 id="clawstr-cli-및-lightning-zap-버튼-출시">Clawstr, CLI 및 Lightning Zap 버튼 출시&lt;/h3>
&lt;p>AI 에이전트가 Nostr에서 커뮤니티를 생성하고 관리하는 Reddit 영감을 받은 플랫폼인 &lt;a href="https://gitlab.com/soapbox-pub/clawstr">Clawstr&lt;/a>가 이번 주 3개의 PR을 병합했습니다. &lt;a href="https://gitlab.com/soapbox-pub/clawstr/-/merge_requests/11">PR #11&lt;/a>은 AI 에이전트 스킬 정의의 모든 수동 nak 명령을 &lt;code>@clawstr/cli&lt;/code> 패키지(&lt;code>npx -y @clawstr/cli@latest&lt;/code>)로 교체하여, 수동 JSON event 구성을 CLI 명령으로 대체하고 지갑 작업(init, balance, zap, npc) 및 &lt;a href="https://nostrcompass.org/ko/topics/nip-50/">NIP-50&lt;/a> 전문 검색을 추가합니다.&lt;/p>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/clawstr/-/merge_requests/13">PR #13&lt;/a>은 &amp;ldquo;For Humans&amp;rdquo; 문서 페이지와 &lt;code>ProfileZapDialog&lt;/code> 컴포넌트를 추가합니다. Zap 버튼은 사용자의 Lightning 주소가 설정된 프로필 페이지에 나타나며 로그인 없이 작동하고, 사전 설정된 sats 금액과 QR 코드 표시로 LNURL-pay를 직접 사용합니다. &lt;a href="https://gitlab.com/soapbox-pub/clawstr/-/merge_requests/12">PR #12&lt;/a>는 &lt;code>wallet sync&lt;/code> 명령을 문서화하여, Lightning 주소로의 결제가 에이전트가 명시적으로 지갑을 동기화할 때까지 NPC가 보유하는 방식을 설명합니다.&lt;/p>
&lt;h2 id="nip-업데이트">NIP 업데이트&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 저장소&lt;/a>의 최근 변경 사항:&lt;/p>
&lt;p>&lt;strong>병합됨:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1561">NIP-45: HyperLogLog 응답&lt;/a>&lt;/strong> - &lt;a href="https://nostrcompass.org/ko/topics/nip-45/">NIP-45 (Event 카운팅)&lt;/a>가 이제 HyperLogLog (HLL) 근사 카운팅을 지원합니다. COUNT 응답과 함께 256바이트 HLL 레지스터 값을 반환할 수 있습니다. 여러 relay에서 이 레지스터를 병합하면 전체 event 세트를 다운로드하지 않고 근사 카디널리티를 계산할 수 있습니다. 주요 사용 사례는 단일 relay를 권위적 출처로 의존하지 않는 팔로워 및 리액션 수입니다. 리액션 event 두 개만으로도 256바이트 HLL 페이로드보다 더 많은 대역폭을 소비합니다. HyperLogLog++ 보정을 적용하면 작은 카디널리티에서 정확도가 향상됩니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2216">NIP-39: 신원 Tag를 Kind 0에서 이동&lt;/a>&lt;/strong> - &lt;a href="https://nostrcompass.org/ko/topics/nip-39/">NIP-39&lt;/a> 신원 주장 tag(&lt;code>i&lt;/code> tag)가 kind 0 메타데이터 event에서 전용 kind 10011로 추출되었습니다. 이 tag를 지원하는 클라이언트가 거의 없어, 가치를 제공하지 않으면서 모든 kind 0 가져오기에 크기를 추가했다는 것이 근거입니다. vitorpamplona의 kind 0 추출 PR 시리즈 중 첫 번째입니다(&lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-11-newsletter/#kind-0-%ec%8a%ac%eb%a6%ac%eb%b0%8d-%ec%ba%a0%ed%8e%98%ec%9d%b8">뉴스 섹션&lt;/a> 참조).&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>오픈 PR 및 논의:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2214">NIP-XX: Nostr Relay Connect (NRC)&lt;/a>&lt;/strong> - woikos가 공개 랑데부 relay를 통한 암호화 터널링으로 Nostr relay에 접근하는 프로토콜을 제안합니다. 이 메커니즘은 홈 서버나 모바일 기기에서 실행되는 개인 relay를 포함하여 NAT나 방화벽 뒤의 relay 접근을 가능하게 합니다. 터널링은 랑데부 relay가 트래픽을 복호화할 수 없는 상태에서 kind 24891/24892 event와 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> 암호화를 사용합니다. 실용적인 활용 예시로, 모든 Nostr 클라이언트가 로컬 저장소(IndexedDB, SQLite)를 크로스 디바이스 동기화를 위한 relay 엔드포인트로 노출할 수 있습니다. 표준 NIP-01 시맨틱(REQ, EVENT, CLOSE, COUNT)이 터널을 통해 투명하게 전달됩니다. 참조 구현은 Go(ORLY Relay)와 TypeScript(Smesh)로 존재합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2187">Nostr Web Tokens (NWT)&lt;/a>&lt;/strong> - pippellia-btc가 JSON Web Tokens(JWT)에서 영감을 받은, 웹 당사자 간에 서명된 클레임을 전달하기 위한 Nostr event 형식인 Nostr Web Tokens를 제안합니다. NWT는 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/98.md">NIP-98&lt;/a> (HTTP Auth)과 &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom 인가 event&lt;/a> 모두를 나타낼 수 있어, 토큰 유효 기간의 유연성을 제공합니다. 참조 Go 라이브러리가 제공됩니다. 해당 PR에는 &lt;a href="https://github.com/pippellia-btc/nostr-web-tokens">동영상 설명&lt;/a>과 NIP-98 및 Blossom Auth와의 &lt;a href="https://github.com/pippellia-btc/nostr-web-tokens#comparisons">상세 비교&lt;/a>가 링크되어 있습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2210">NIP-47 단순화&lt;/a>&lt;/strong> - rolznz가 구현이 복잡하고 채택되지 않은 &lt;code>multi_&lt;/code> 메서드를 &lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47 (Nostr Wallet Connect)&lt;/a>에서 제거하는 것을 제안합니다. &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-04-newsletter/#nip-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8">지난주의 hold invoice 추가&lt;/a> 이후 명세를 정리하면서 암호화 및 하위 호환성 처리의 중복도 줄입니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2213">NIP-05: 자체 Event Kind로 이동&lt;/a>&lt;/strong> - vitorpamplona가 NIP-05 검증을 kind 0에서 kind 10008로 이동하는 것을 제안하여, 사용자당 여러 NIP-05 식별자와 NIP-05 주소에 의한 필터링을 가능하게 합니다. Kind 0 슬리밍 캠페인의 일부입니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2217">NIP-57: Kind 0에서 Lightning 주소 분리&lt;/a>&lt;/strong> - vitorpamplona가 &lt;a href="https://nostrcompass.org/ko/topics/nip-57/">NIP-57&lt;/a>에 따라 lud06/lud16(Lightning 주소)을 kind 0에서 전용 event kind로 추출하는 것을 제안하며, kind 0 슬리밍 노력을 계속합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2165">프로필 하이퍼커스터마이제이션&lt;/a>&lt;/strong> - fiatjaf가 현재 kind 0이 지원하는 것을 넘어서는 확장 프로필 커스터마이제이션 기능을 제안합니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-심층-분석-nip-45-event-카운팅과-hyperloglog">NIP 심층 분석: NIP-45 (Event 카운팅)과 HyperLogLog&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-45/">NIP-45&lt;/a> (&lt;a href="https://github.com/nostr-protocol/nips/blob/master/45.md">명세&lt;/a>)는 event 자체를 전송하지 않고 필터와 일치하는 event의 수를 relay에 요청하는 방법을 정의합니다. 이번 주 &lt;a href="https://github.com/nostr-protocol/nips/pull/1561">HyperLogLog 지원&lt;/a>의 병합은 여러 독립 relay에 걸쳐 항목을 카운팅하는 근본적인 문제를 해결하는 확률적 데이터 구조를 추가합니다.&lt;/p>
&lt;p>&lt;strong>문제:&lt;/strong>&lt;/p>
&lt;p>단일 relay에서 event를 카운팅하는 것은 간단합니다. COUNT 요청을 보내고 숫자를 받으면 됩니다. 네트워크 전체에서 카운팅하는 것은 더 어렵습니다. A relay가 50개의 리액션을 보고하고 B relay가 40개를 보고하면, 많은 event가 양쪽 relay에 존재하기 때문에 합계는 90이 아닙니다. 모든 event를 다운로드하여 중복을 제거하지 않으면 실제 수를 계산할 수 없습니다.&lt;/p>
&lt;p>&lt;strong>HyperLogLog:&lt;/strong>&lt;/p>
&lt;p>HyperLogLog (HLL)는 고정된 양의 메모리를 사용하여 집합의 고유 원소 수를 추정하는 확률적 알고리즘입니다. NIP-45 구현은 카운팅되는 event 수에 관계없이 정확히 256바이트를 소비하는 1바이트 256개의 레지스터를 사용합니다. 알고리즘은 각 event ID의 이진 표현을 검사하고 선행 0의 위치를 추적하는 방식으로 작동합니다. ID가 많은 0으로 시작하는 event는 통계적으로 드물기 때문에, 그 출현은 큰 집합을 나타냅니다.&lt;/p>
&lt;p>&lt;strong>NIP-45에서의 작동 방식:&lt;/strong>&lt;/p>
&lt;p>COUNT 요청에 응답할 때 base64로 인코딩된 레지스터 값이 포함된 &lt;code>hll&lt;/code> 필드를 포함할 수 있습니다:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>[&lt;span style="color:#e6db74">&amp;#34;COUNT&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;subscription_id&amp;gt;&amp;#34;&lt;/span>, {&lt;span style="color:#f92672">&amp;#34;count&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">4527&lt;/span>, &lt;span style="color:#f92672">&amp;#34;hll&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;base64 encoded 256 bytes&amp;gt;&amp;#34;&lt;/span>}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>여러 relay에서 HLL 값을 수집한 후, 각 레지스터 위치에서 최대값을 취하여 병합합니다. 병합된 HLL은 relay 전체의 모든 event 집합의 합집합을 나타내며, 자동으로 중복을 처리합니다. 최종 카디널리티 추정은 병합된 레지스터에서 계산됩니다.&lt;/p>
&lt;p>&lt;strong>정확도:&lt;/strong>&lt;/p>
&lt;p>256개의 레지스터로 표준 오차는 약 5.2%입니다. 실제 수가 1,000인 경우, 추정값은 일반적으로 948에서 1,052 사이에 들어갑니다. 더 큰 수에서도 상대 오차는 일정합니다. 실제 수가 100,000이면 약 94,800에서 105,200으로 추정됩니다. HyperLogLog++ 보정은 기본 알고리즘이 과대추정하는 경향이 있는 작은 카디널리티(약 200 미만)에서 정확도를 향상시킵니다.&lt;/p>
&lt;p>&lt;strong>중요한 이유:&lt;/strong>&lt;/p>
&lt;p>소셜 메트릭(팔로워 수, 리액션 수, 리포스트 수)은 소셜 미디어 클라이언트의 핵심 기능입니다. HLL 없이는 단일 &amp;ldquo;신뢰할 수 있는&amp;rdquo; relay에 쿼리하거나(수를 중앙화), 모든 relay에서 전체 event를 다운로드해야 합니다(대역폭 낭비). HLL은 실제 수에 관계없이 relay당 256바이트의 총 오버헤드로 여러 relay에서 좋은 근사 수를 얻을 수 있게 합니다. 리액션 event 두 개만으로도 전체 HLL 페이로드보다 더 많은 대역폭을 소비합니다.&lt;/p>
&lt;p>명세는 상호 운용성을 위해 레지스터 수를 256으로 고정합니다. 어떤 relay 구현을 실행하든 모든 relay가 병합 가능한 HLL 값을 생성합니다. 이 표준화 덕분에 HLL 지원을 한 번 구현하면 이를 지원하는 모든 relay로부터 혜택을 받을 수 있습니다.&lt;/p>
&lt;p>&lt;strong>현재 상태:&lt;/strong>&lt;/p>
&lt;p>fiatjaf가 열었으며, 이번 주 병합되기 전 수개월간 논의 중이었던 PR입니다. 서버 구현은 COUNT 핸들러에 HLL 계산을 추가해야 하고, 클라이언트 구현은 카운트 집계 로직에 HLL 병합을 추가해야 합니다.&lt;/p>
&lt;h2 id="nip-심층-분석-nip-96-http-파일-저장소과-blossom으로의-전환">NIP 심층 분석: NIP-96 (HTTP 파일 저장소)과 Blossom으로의 전환&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-96/">NIP-96&lt;/a> (&lt;a href="https://github.com/nostr-protocol/nips/blob/master/96.md">명세&lt;/a>)은 Nostr 클라이언트가 HTTP 미디어 서버에서 파일을 업로드, 다운로드, 관리하는 방법을 정의했습니다. 현재 &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a> (BUD 기반 미디어 호스팅)을 권장하며 &amp;ldquo;비권장&amp;quot;으로 표시되어 있지만, Angor v0.2.5가 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-11-newsletter/#angor-v025">NIP-96 서버 설정을 추가&lt;/a>하고 ZSP v0.3.1이 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-02-11-newsletter/#zsp-v031">Blossom 서버로 업로드&lt;/a>하는 등, 진행 중인 프로토콜 전환을 보여주기 때문에 이번 주 여전히 관련성이 있습니다.&lt;/p>
&lt;p>&lt;strong>NIP-96 작동 방식:&lt;/strong>&lt;/p>
&lt;p>&lt;code>/.well-known/nostr/nip96.json&lt;/code>을 가져와 파일 서버의 기능을 파악하며, 여기에는 API URL, 지원되는 콘텐츠 유형, 크기 제한, 사용 가능한 미디어 변환이 포함됩니다:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;api_url&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;https://file-server.example/api&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;download_url&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;https://cdn.example/files&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content_types&amp;#34;&lt;/span>: [&lt;span style="color:#e6db74">&amp;#34;image/jpeg&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;video/webm&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;audio/*&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;plans&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;free&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;is_nip98_required&amp;#34;&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;max_byte_size&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">10485760&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;media_transformations&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;image&amp;#34;&lt;/span>: [&lt;span style="color:#e6db74">&amp;#34;resizing&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>업로드 시 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/98.md">NIP-98&lt;/a> 인가 헤더(업로더의 신원을 증명하는 서명된 Nostr event)와 함께 API URL로 &lt;code>multipart/form-data&lt;/code> POST를 보냅니다. 서버는 파일 URL, 원본 및 변환된 SHA-256 해시, MIME 유형, 크기를 포함하는 &lt;a href="https://nostrcompass.org/ko/topics/nip-94/">NIP-94&lt;/a> 파일 메타데이터 구조를 반환합니다:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;status&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;success&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;nip94_event&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;url&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://cdn.example/files/&amp;lt;hash&amp;gt;.png&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;ox&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;original-file-hash&amp;gt;&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;x&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;transformed-file-hash&amp;gt;&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;m&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;image/png&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;dim&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;800x600&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>다운로드는 &lt;code>&amp;lt;api_url&amp;gt;/&amp;lt;sha256-hash&amp;gt;&lt;/code>로의 GET 요청을 사용하며, 이미지 리사이징 등 서버 측 변환을 위한 선택적 쿼리 파라미터가 있습니다. 삭제는 NIP-98 인증과 함께 DELETE를 사용하며, 원본 업로더만 자신의 파일을 삭제할 수 있습니다. 파일 목록 엔드포인트는 사용자 업로드의 페이지네이션된 결과를 반환합니다.&lt;/p>
&lt;p>선호하는 업로드 서버를 선언하기 위해 kind 10096 event를 게시하면, 수동 설정 없이 적절한 서버가 자동 선택됩니다.&lt;/p>
&lt;p>&lt;strong>비권장 이유:&lt;/strong>&lt;/p>
&lt;p>NIP-96은 파일 URL을 특정 서버에 묶었습니다. &lt;code>files.example.com&lt;/code>이 다운되면 해당 서버의 URL을 참조하는 모든 Nostr 노트가 미디어를 잃었습니다. 서버가 주소였고, 그 주소는 취약했습니다.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a> (Blobs Stored Simply on Mediaservers)은 파일 콘텐츠의 SHA-256 해시를 표준 식별자로 만들어 이를 뒤집습니다. Blossom URL은 &lt;code>https://blossom.example/&amp;lt;sha256&amp;gt;.png&lt;/code>처럼 보이지만, 동일한 파일을 호스팅하는 모든 Blossom 서버가 같은 해시 경로에서 제공합니다. 하나의 서버가 사라지면 같은 해시로 다른 서버에 쿼리합니다. 콘텐츠 주소 지정은 데이터를 기본적으로 서버 간 이동 가능하게 만듭니다.&lt;/p>
&lt;p>Blossom은 API도 단순화합니다. NIP-96은 JSON 응답, 변환 정책, 디스커버리 엔드포인트와 함께 멀티파트 폼 업로드를 사용했습니다. Blossom은 업로드에 일반 PUT, 다운로드에 GET, 인가에 서명된 Nostr event(HTTP 헤더가 아님)를 사용합니다. Blossom 명세는 모듈식 문서로 나뉘어 있습니다. BUD-01은 서버 프로토콜, 인가, 검색을 다루고, BUD-02는 blob 업로드를, BUD-03은 사용자 서버를, BUD-04는 서버 간 미러링을 다룹니다.&lt;/p>
&lt;p>비권장 처리는 2025년 9월 NIPs 인덱스에서 NIP-96을 &amp;ldquo;비권장&amp;quot;으로 표시한 &lt;a href="https://github.com/nostr-protocol/nips/pull/2047">PR #2047&lt;/a>을 통해 이루어졌습니다.&lt;/p>
&lt;p>&lt;strong>실제 전환 과정:&lt;/strong>&lt;/p>
&lt;p>nostr.build와 void.cat 같은 서버가 NIP-96을 지원했고 Blossom 엔드포인트를 추가하거나 마이그레이션했습니다. 다양한 단계의 전환이 진행 중입니다. 이번 주 Angor의 v0.2.5 릴리스는 프로젝트 이미지를 위한 NIP-96 서버 설정을 추가했고, ZSP의 v0.3.1 릴리스는 프로토콜 준수를 위한 &lt;code>Content-Digest&lt;/code> 헤더와 함께 아티팩트를 Blossom 서버로만 업로드합니다. Amethyst와 Primal은 Blossom 업로드를 지원합니다. 나머지 NIP-96 구현이 마이그레이션을 완료할 때까지 공존이 계속될 것입니다.&lt;/p>
&lt;p>&lt;strong>계승되는 것:&lt;/strong>&lt;/p>
&lt;p>Kind 10096 서버 선호 event는 Blossom 서버 선택에 유용하게 남아있습니다. NIP-94 파일 메타데이터(kind 1063 event)는 어떤 업로드 프로토콜로 생성되었든 파일 속성을 설명합니다. NIP-96이 다운로드 URL에 사용한 SHA-256 해싱은 Blossom의 콘텐츠 주소 지정의 기반이 되었습니다. NIP-96의 설계는 Blossom이 무엇을 단순화했는지를 알려주었습니다. 탈중앙화 네트워크의 미디어 호스팅은 relay 계층의 검열 저항성에 맞는 콘텐츠 주소 지정 저장소가 필요하다는 교훈이었습니다.&lt;/p>
&lt;hr>
&lt;p>이번 주는 여기까지입니다. 무언가를 만들고 있거나, 공유할 뉴스가 있거나, 프로젝트를 다뤄주길 원하신다면 &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">NIP-17 DM으로 연락하시거나&lt;/a> Nostr에서 찾아주세요.&lt;/p></content:encoded></item><item><title>Nostr Compass #8</title><link>https://nostrcompass.org/ko/newsletters/2026-02-04-newsletter/</link><pubDate>Wed, 04 Feb 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2026-02-04-newsletter/</guid><description>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> rust-nostr가 SDK 아키텍처를 전면 개편하는 21개의 PR과 함께 주요 API 재설계를 출시했습니다. Nostria 3.0이 듀얼 패인 네비게이션, 리스트 관리, 완전한 UI 개편과 함께 출시되었습니다. Vector가 SIMD 가속을 추가하여 65배에서 184배의 속도 향상을 달성하고 암호화된 그룹 메시징을 위한 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> 프로토콜 지원을 출시했습니다. Frostr가 TestFlight를 통해 iOS에 임계값 서명을 가져왔습니다. Damus가 크로스 relay 콘텐츠 발견을 위한 &lt;a href="https://nostrcompass.org/ko/topics/nip-19/">NIP-19 (Bech32 인코딩 엔티티)&lt;/a> relay 힌트를 구현했습니다. Primal Android가 NWC 암호화와 지갑 거래 내보내기를 추가했습니다. nostr-tools와 NDK가 안정성 개선을 받았습니다. NIP-82 (소프트웨어 애플리케이션)가 디바이스 플랫폼의 98%를 커버하도록 확장되었습니다. NIPs 저장소가 &lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47 (Nostr Wallet Connect)&lt;/a>에 hold invoice 지원을 병합했습니다. 새로운 프로토콜 제안에는 팟캐스팅을 위한 NIP-74, 브라우저 event 데이터베이스를 위한 NIP-DB, 탈중앙화 콘텐츠 큐레이션을 위한 TRUSTed Filters 제품군이 포함됩니다. 새로운 프로젝트로는 콘텐츠 마이그레이션을 위한 Instagram to Nostr v2, 탈중앙화 3D 프린팅 마켓플레이스를 출시하는 Pod21, AI 에이전트가 관리하는 커뮤니티를 소개하는 Clawstr, 라이브 스트리밍과 화상 통화 기능을 확장하는 Shosho와 NosCall이 있습니다.&lt;/p></description><content:encoded>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> rust-nostr가 SDK 아키텍처를 전면 개편하는 21개의 PR과 함께 주요 API 재설계를 출시했습니다. Nostria 3.0이 듀얼 패인 네비게이션, 리스트 관리, 완전한 UI 개편과 함께 출시되었습니다. Vector가 SIMD 가속을 추가하여 65배에서 184배의 속도 향상을 달성하고 암호화된 그룹 메시징을 위한 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> 프로토콜 지원을 출시했습니다. Frostr가 TestFlight를 통해 iOS에 임계값 서명을 가져왔습니다. Damus가 크로스 relay 콘텐츠 발견을 위한 &lt;a href="https://nostrcompass.org/ko/topics/nip-19/">NIP-19 (Bech32 인코딩 엔티티)&lt;/a> relay 힌트를 구현했습니다. Primal Android가 NWC 암호화와 지갑 거래 내보내기를 추가했습니다. nostr-tools와 NDK가 안정성 개선을 받았습니다. NIP-82 (소프트웨어 애플리케이션)가 디바이스 플랫폼의 98%를 커버하도록 확장되었습니다. NIPs 저장소가 &lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47 (Nostr Wallet Connect)&lt;/a>에 hold invoice 지원을 병합했습니다. 새로운 프로토콜 제안에는 팟캐스팅을 위한 NIP-74, 브라우저 event 데이터베이스를 위한 NIP-DB, 탈중앙화 콘텐츠 큐레이션을 위한 TRUSTed Filters 제품군이 포함됩니다. 새로운 프로젝트로는 콘텐츠 마이그레이션을 위한 Instagram to Nostr v2, 탈중앙화 3D 프린팅 마켓플레이스를 출시하는 Pod21, AI 에이전트가 관리하는 커뮤니티를 소개하는 Clawstr, 라이브 스트리밍과 화상 통화 기능을 확장하는 Shosho와 NosCall이 있습니다.&lt;/p>
&lt;h2 id="뉴스">뉴스&lt;/h2>
&lt;h3 id="rust-nostr-주요-api-재설계-출시">rust-nostr, 주요 API 재설계 출시&lt;/h3>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a> SDK가 이번 주 라이브러리 전반에 걸쳐 브레이킹 체인지를 도입하는 21개의 병합된 PR과 함께 대대적인 아키텍처 개편을 거쳤습니다. 이번 재설계는 대부분의 Rust 개발자가 의존하는 핵심 API에 영향을 미칩니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr/pull/1245">PR #1245&lt;/a>는 알림 API를 재설계하고, &lt;a href="https://github.com/rust-nostr/nostr/pull/1244">PR #1244&lt;/a>는 더 깔끔한 상태 처리를 위해 &lt;code>RelayNotification::Shutdown&lt;/code>을 &lt;code>RelayStatus::Shutdown&lt;/code>으로 교체합니다. 서명자 API는 이제 &lt;a href="https://github.com/rust-nostr/nostr/pull/1243">PR #1243&lt;/a>을 통해 다른 SDK 패턴과 정렬됩니다. Client와 Relay 메서드는 &lt;a href="https://github.com/rust-nostr/nostr/pull/1242">PR #1242&lt;/a>에서 정리되었고, 클라이언트 옵션은 이제 빌더 패턴을 사용합니다(&lt;a href="https://github.com/rust-nostr/nostr/pull/1241">PR #1241&lt;/a>).&lt;/p>
&lt;p>메시지 전송 API는 &lt;a href="https://github.com/rust-nostr/nostr/pull/1240">PR #1240&lt;/a>에서, REQ 구독 취소는 &lt;a href="https://github.com/rust-nostr/nostr/pull/1239">PR #1239&lt;/a>에서, relay 제거는 &lt;a href="https://github.com/rust-nostr/nostr/pull/1229">PR #1229&lt;/a>에서 재설계되었습니다. &lt;a href="https://github.com/rust-nostr/nostr/pull/1246">오픈 PR #1246&lt;/a>은 재설계를 마무리하기 위해 블로킹 API 지원을 추가합니다.&lt;/p>
&lt;p>이번 변경은 SDK에 일관성을 가져오지만 기존 프로젝트에서 마이그레이션 작업이 필요합니다. rust-nostr 기반으로 개발하는 개발자는 업그레이드 전에 changelog를 주의 깊게 검토해야 합니다.&lt;/p>
&lt;h3 id="instagram-to-nostr-v2-콘텐츠-마이그레이션-지원">Instagram to Nostr v2, 콘텐츠 마이그레이션 지원&lt;/h3>
&lt;p>새로운 도구를 통해 크리에이터가 중앙 집중식 플랫폼의 기존 콘텐츠를 Nostr로 마이그레이션할 수 있습니다. &lt;a href="https://github.com/primalpaul1/instagram-to-nostr-v2">Instagram to Nostr v2&lt;/a>는 사용자의 개인 키에 대한 접근 없이 Instagram, TikTok, Twitter, Substack에서 가져오기를 지원합니다.&lt;/p>
&lt;p>이 도구는 일반적인 온보딩 장벽을 해결합니다: 새 플랫폼에서 처음부터 시작하기를 망설이는 사용자가 이제 콘텐츠 히스토리를 보존할 수 있습니다. 또한 새 사용자에게 Nostr 계정을 선물하거나 기존 계정에 콘텐츠를 제안하는 것을 지원하여, 다른 사람들의 프로토콜 전환을 돕는 데 유용합니다.&lt;/p>
&lt;h3 id="pod21-탈중앙화-3d-프린팅-네트워크">Pod21: 탈중앙화 3D 프린팅 네트워크&lt;/h3>
&lt;p>&lt;a href="https://github.com/gobrrrme/Pod21">Pod21&lt;/a> (&lt;a href="https://pod21.com">pod21.com&lt;/a>)은 마켓플레이스 조정을 위해 Nostr를 사용하여 3D 프린터 운영자와 구매자를 연결합니다. 이 플랫폼에는 마켓플레이스 상호작용을 처리하는 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17 (비공개 다이렉트 메시지)&lt;/a> 호환 DM 봇이 포함되어 있어, 구매자가 암호화된 다이렉트 메시지를 통해 인쇄를 요청하고 제작자와 협상할 수 있습니다.&lt;/p>
&lt;p>제작자는 자신의 인쇄 용량과 능력을 나열하고, 구매자는 목록을 탐색하며 봇을 통해 주문을 시작합니다. 이 아키텍처는 다른 Nostr 상거래 애플리케이션과 유사한 패턴을 따릅니다: 발견을 위한 relay 기반, 주문 조정을 위한 암호화된 메시징, 결제를 위한 Lightning. Pod21은 Ridestr 및 Shopstr와 함께 프로토콜을 통해 실제 거래를 조정하는 Nostr 애플리케이션으로 합류합니다.&lt;/p>
&lt;h3 id="clawstr-ai-에이전트-소셜-네트워크">Clawstr: AI 에이전트 소셜 네트워크&lt;/h3>
&lt;p>&lt;a href="https://github.com/clawstr/clawstr">Clawstr&lt;/a>가 AI 에이전트가 Nostr에서 커뮤니티를 생성하고 관리하는 Reddit 영감을 받은 플랫폼으로 출시됩니다. 이 플랫폼은 자율 에이전트가 주제별 커뮤니티를 설립하고, 콘텐츠를 큐레이션하며, 사용자와 상호작용할 수 있게 합니다. 커뮤니티는 서브레딧처럼 기능하지만 AI 모더레이터와 큐레이터가 토론을 안내합니다. 이 아키텍처는 에이전트 간 및 에이전트와 인간 간 상호작용을 위해 Nostr의 오픈 프로토콜을 사용하여, 탈중앙화 소셜 미디어에서 커뮤니티 형성의 새로운 모델을 확립합니다.&lt;/p>
&lt;h2 id="릴리스">릴리스&lt;/h2>
&lt;h3 id="ridestr-v020-roadflare-릴리스">Ridestr v0.2.0: RoadFlare 릴리스&lt;/h3>
&lt;p>&lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a>가 개인 라이드셰어 네트워크를 도입하는 &amp;ldquo;RoadFlare Release&amp;quot;로 명명된 &lt;a href="https://github.com/variablefate/ridestr/releases/tag/v0.2.0">v0.2.0&lt;/a>을 출시했습니다. 이 기능을 통해 라이더는 즐겨찾는 드라이버를 신뢰할 수 있는 네트워크에 추가할 수 있습니다. 드라이버는 팔로워를 승인하고 암호화된 위치를 공유하여, 라이더가 신뢰할 수 있는 드라이버가 온라인이고 근처에 있을 때 볼 수 있게 합니다. 라이드 요청은 알려진 드라이버에게 직접 전달됩니다.&lt;/p>
&lt;p>자동 에스크로 복구, 더 나은 기기 간 지갑 동기화, 점진적 폴링을 통한 더 빠른 결제 처리로 결제 신뢰성이 개선되었습니다. &lt;a href="https://github.com/variablefate/ridestr/pull/37">PR #37&lt;/a>은 이러한 기능을 지원하는 Phase 5-6 인프라를 추가합니다. &lt;a href="https://github.com/variablefate/ridestr/releases/tag/v0.2.1">v0.2.1&lt;/a>은 결제 대화 상자 버그와 라이드 후 &amp;ldquo;즐겨찾기에 추가&amp;rdquo; 흐름에 대한 핫픽스로 이어졌습니다.&lt;/p>
&lt;h3 id="nostria-30">Nostria 3.0&lt;/h3>
&lt;p>sondreb의 글로벌 스케일을 위해 구축된 크로스 플랫폼 클라이언트인 &lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a>가 완전한 UI 개편, 새 로고, 수백 개의 수정 사항과 함께 버전 3.0을 출시했습니다. 이 릴리스는 집중적인 6주간의 개발 주기를 나타냅니다.&lt;/p>
&lt;p>듀얼 패인 네비게이션이 가장 큰 UX 변화로, 데스크톱 사용자가 리스트, 세부정보, 스레드 간 이동 시 컨텍스트 전환을 줄일 수 있습니다. 새로운 홈 섹션은 사용 가능한 모든 기능의 개요를 제공하며, 모든 화면이 통합된 툴바, 레이아웃, 기능을 공유합니다.&lt;/p>
&lt;p>리스트 관리가 가장 중요한 기능 업데이트로, 애플리케이션 전체에 통합됩니다. 사용자는 프로필 리스트를 관리하고 Streams, Music, Feeds 등 모든 기능에서 콘텐츠를 필터링할 수 있습니다. 스레드의 스팸이 지겹다면 즐겨찾기로 필터링하여 그들의 답글만 볼 수 있습니다. Quick Zaps는 구성 가능한 값으로 원탭 zap을 추가합니다. Copy/Screenshot은 어디서든 event를 공유하기 위한 클립보드 스크린샷을 생성합니다. Muted Words는 이제 프로필 필드(name, display_name, NIP-05)를 필터링하여, 사용자가 단일 금지 단어로 모든 브릿지된 프로필을 차단할 수 있습니다. 설정은 더 빠른 구성 변경을 위해 검색 가능해졌습니다.&lt;/p>
&lt;p>이 릴리스는 BOLT11 및 BOLT12 결제 요청 렌더링, 텍스트 크기 및 글꼴 선택, 기사 및 event와 같은 참조 콘텐츠 렌더링이 포함된 메시지 섹션의 &amp;ldquo;Note-to-Self&amp;rdquo; 메시징을 추가합니다. 새로운 공유 대화 상자는 이메일, 웹사이트 또는 여러 수신자에게 다이렉트 메시지를 통한 빠른 공유를 가능하게 합니다. 추가 기능으로는 커스텀 이모지 세트, Interests(동적 피드로서의 해시태그 리스트), 북마크, 공개 Relay 피드, Nostria 아이콘이 여는 옵션을 포함한 전체 메뉴 커스터마이징이 있습니다.&lt;/p>
&lt;p>Android, iOS, Windows 및 &lt;a href="https://www.nostria.app/">nostria.app&lt;/a>의 웹에서 사용 가능합니다.&lt;/p>
&lt;h3 id="applesauce-v510">Applesauce v5.1.0&lt;/h3>
&lt;p>hzrd149의 &lt;a href="https://github.com/hzrd149/applesauce">Applesauce&lt;/a> 라이브러리 제품군이 모든 패키지에서 v5.1.0을 릴리스했습니다. &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-signers%405.1.0">applesauce-signers&lt;/a>는 Nostr Connect 원격 서명자에 대한 &lt;code>switch_relays&lt;/code> 및 &lt;code>ping&lt;/code> 메서드 지원을 추가하여, 서명자 연결을 프로그래밍 방식으로 관리하는 데 유용합니다. &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-loaders%405.1.0">applesauce-loaders&lt;/a>는 병렬 비동기 로딩을 위한 &lt;code>loadAsyncMap&lt;/code>을 도입합니다. &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-react%405.1.0">applesauce-react&lt;/a>는 &lt;code>useAction().run()&lt;/code>에 패딩 인수를 추가합니다. &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-core%405.1.0">applesauce-core&lt;/a>는 &lt;code>onlyEvents&lt;/code> 없이 문자열을 직접 처리하도록 event-to-store 매핑을 업데이트합니다.&lt;/p>
&lt;h3 id="nak-v0183">nak v0.18.3&lt;/h3>
&lt;p>fiatjaf의 &lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a> (Nostr Army Knife)가 mattn의 안정성 수정과 함께 &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.18.3">v0.18.3&lt;/a>에 도달했습니다. 이 릴리스는 mint URL에 &lt;code>://&lt;/code> 구분자가 없을 때의 패닉을 방지하고, 날짜 값을 사용하기 전에 dateparser 오류를 검증하며, AUTH 챌린지 태그 파싱의 엣지 케이스를 처리합니다. 이러한 방어적 수정은 잘못된 입력을 처리할 때 CLI를 더 탄력적으로 만듭니다.&lt;/p>
&lt;h3 id="aegis-v037">Aegis v0.3.7&lt;/h3>
&lt;p>크로스 플랫폼 데스크톱 서명자인 &lt;a href="https://github.com/ZharlieW/Aegis">Aegis&lt;/a>가 &lt;a href="https://nostrcompass.org/ko/topics/nip-07/">NIP-07 (브라우저 확장 인터페이스)&lt;/a> 서명과 함께 Nostr 앱 브라우저 지원을 추가한 &lt;a href="https://github.com/ZharlieW/Aegis/releases/tag/v0.3.7">v0.3.7&lt;/a>을 출시했습니다. 이 릴리스는 &lt;a href="https://nostrcompass.org/ko/topics/nip-04/">NIP-04 (암호화된 다이렉트 메시지)&lt;/a> 및 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44 (버전 암호화)&lt;/a> 암호화 event를 기록하여, 사용자가 어떤 애플리케이션이 암호화 작업을 요청하는지 추적할 수 있습니다. 브라우저 세그먼트는 이제 웹 앱만 표시하도록 플랫폼별로 필터링됩니다.&lt;/p>
&lt;h3 id="bitchat-v151-ios">Bitchat v1.5.1 (iOS)&lt;/h3>
&lt;p>Nostr와 Bluetooth 메시를 사용하는 오프라인 가능 메시징 앱인 &lt;a href="https://github.com/permissionlesstech/bitchat">Bitchat&lt;/a>이 iOS 보안 강화와 함께 &lt;a href="https://github.com/permissionlesstech/bitchat/releases/tag/v1.5.1">v1.5.1&lt;/a>을 릴리스했습니다. &lt;a href="https://github.com/permissionlesstech/bitchat/pull/1012">PR #1012&lt;/a>는 처리 전에 Nostr event 서명을 검증하고, 유효하지 않은 giftwrap과 내장된 패킷을 거부하며, 과대 페이로드를 제한하고, 스푸핑된 BLE 발표 발신자 ID를 차단합니다. &lt;a href="https://github.com/permissionlesstech/bitchat/pull/998">PR #998&lt;/a>은 발신자 ID를 연결 UUID에 바인딩하여 iOS BLE 메시 인증을 수정하고, 메시 네트워크에서 신원 스푸핑을 방지합니다. &lt;a href="https://github.com/permissionlesstech/bitchat/pull/972">PR #972&lt;/a>는 여러 메시 기기가 근처에 있을 때 피어 발견 플러드를 방지하기 위해 알림 속도 제한을 추가합니다.&lt;/p>
&lt;h3 id="keychat-v1392">KeyChat v1.39.2&lt;/h3>
&lt;p>&lt;a href="https://github.com/keychat-io/keychat-app">KeyChat&lt;/a>이 &lt;a href="https://github.com/keychat-io/keychat-app/pull/148">PR #148&lt;/a>을 통해 &lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47&lt;/a> Nostr Wallet Connect 지원을 추가한 &lt;a href="https://github.com/keychat-io/keychat-app/releases/tag/v1.39.2%2B6495">v1.39.2&lt;/a>를 릴리스했습니다. 사용자는 이제 메시징 앱 내 결제를 위해 외부 Lightning 지갑을 연결할 수 있습니다. 이 릴리스는 또한 macOS 데스크톱 알림을 추가합니다.&lt;/p>
&lt;h3 id="nostrmo-v350">Nostrmo v3.5.0&lt;/h3>
&lt;p>크로스 플랫폼 Flutter 클라이언트인 &lt;a href="https://github.com/haorendashu/nostrmo">Nostrmo&lt;/a>가 피드 시스템을 전면 개편한 &lt;a href="https://github.com/haorendashu/nostrmo/releases/tag/3.5.0">v3.5.0&lt;/a>을 출시했습니다. 이 업데이트는 고정 피드를 커스터마이징 가능한 대안(General Feed, Mentioned Feed, Relay Feed)으로 교체하며, 각각 새로운 편집 페이지를 통해 구성할 수 있습니다. 이 릴리스는 더 나은 event 라우팅을 위한 outbox 모델 지원을 구현하고 구성 가능한 크기 제한과 구독 지원으로 로컬 relay 기능을 확장합니다.&lt;/p>
&lt;h3 id="shosho-v0111">Shosho v0.11.1&lt;/h3>
&lt;p>Nostr용 라이브 스트리밍 앱인 &lt;a href="https://github.com/r0d8lsh0p/shosho-releases">Shosho&lt;/a>가 녹화 및 VOD 기능과 함께 &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.11.1">v0.11.1&lt;/a>을 릴리스했습니다. 이 업데이트는 스트림을 시청하는 사람을 보여주는 방 참석자 표시기, 더 나은 토론 구성을 위한 스레드 채팅 대화, &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a>을 통한 iOS에서의 Nostr Connect 지원을 추가합니다. 스트리머는 이제 실시간 청중과의 채팅 상호작용을 유지하면서 나중에 시청할 수 있도록 방송을 저장할 수 있습니다.&lt;/p>
&lt;h3 id="noscall-v050">NosCall v0.5.0&lt;/h3>
&lt;p>Nostr용 오디오 및 화상 통화 앱인 &lt;a href="https://github.com/sanah9/noscall">NosCall&lt;/a>이 카테고리별 통화 정리를 위한 연락처 그룹, 연결 최적화를 위한 relay 관리, 개선된 NAT 트래버설을 위한 구성 가능한 ICE 서버 설정과 함께 &lt;a href="https://github.com/sanah9/noscall/releases/tag/v0.5.0-release">v0.5.0&lt;/a>을 출시했습니다. 이 릴리스는 다크 모드 지원도 추가합니다. NosCall은 통화 시그널링 및 조정을 위해 Nostr를 사용하여, 중앙 집중식 서버 없이 피어 투 피어 통화를 가능하게 합니다.&lt;/p>
&lt;h3 id="divine-104">diVine 1.0.4&lt;/h3>
&lt;p>rabble의 짧은 루핑 비디오 클라이언트인 &lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>이 Zapstore 제출에 앞서 Android 사전 릴리스 알파로 &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.4">1.0.4&lt;/a>를 릴리스했습니다. 이 릴리스는 nsec 가져오기, nsecBunker 및 Amber와 함께하는 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46 (Nostr Connect)&lt;/a> 원격 서명, nostrconnect:// URL 처리를 포함한 Nostr 키 관리 테스트에 중점을 둡니다. 팀은 relay 호환성 및 다른 클라이언트와의 비디오 상호 운용성에 대한 피드백을 요청하고 있습니다. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1265">PR #1265&lt;/a>는 절대 컨테이너 경로 대신 상대 경로를 저장하여 앱 업데이트 후 비디오 클립이 사용할 수 없게 되는 iOS 파일 경로 처리 문제를 수정합니다. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1251">PR #1251&lt;/a>은 댓글에서 프로필을 볼 때 네비게이션 문제를 수정합니다.&lt;/p>
&lt;h3 id="zeus-v0122">Zeus v0.12.2&lt;/h3>
&lt;p>&lt;a href="https://github.com/ZeusLN/zeus">Zeus&lt;/a>가 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-01-28-newsletter/#zeus-v0122-beta---nwc-%EC%88%98%EC%A0%95">이전 에디션에서 다룬 NWC 수정 사항&lt;/a>을 통합하여 안정 릴리스로 &lt;a href="https://github.com/ZeusLN/zeus/releases/tag/v0.12.2">v0.12.2&lt;/a>를 출시했습니다.&lt;/p>
&lt;h3 id="frostr-igloo-ios-testflight">Frostr Igloo iOS TestFlight&lt;/h3>
&lt;p>&lt;a href="https://github.com/FROSTR-ORG">Frostr&lt;/a> (&lt;a href="https://frostr.org/">frostr.org&lt;/a>)가 &lt;a href="https://testflight.apple.com/join/72hjQe3J">TestFlight&lt;/a>에서 &lt;a href="https://github.com/FROSTR-ORG/igloo-ios">Igloo for iOS&lt;/a>를 출시하여 Apple 기기로 임계값 서명을 확장했습니다. Frostr는 FROST (Flexible Round-Optimized Schnorr Threshold) 서명을 사용하여 nsec 키를 기기 간에 분산된 조각으로 분할하고, 내결함성을 갖춘 k-of-n 서명을 가능하게 합니다. &amp;ldquo;데모 모드&amp;quot;로 참여하는 사용자는 프로토콜의 실시간 조정 기능을 보여주는 라이브 2-of-2 임계값 서명 실험에 참여합니다. iOS 릴리스는 12월에 크로스 앱 서명 요청을 위한 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55 (Android 서명자)&lt;/a> 지원과 함께 출시된 &lt;a href="https://github.com/FROSTR-ORG/igloo-android">Igloo for Android&lt;/a> (v0.1.2)와 합류합니다. 두 모바일 클라이언트는 &lt;a href="https://github.com/FROSTR-ORG/igloo-desktop">Igloo desktop&lt;/a>과 &lt;a href="https://github.com/FROSTR-ORG/frost2x">Frost2x&lt;/a> 브라우저 확장을 보완합니다.&lt;/p>
&lt;h2 id="프로젝트-업데이트">프로젝트 업데이트&lt;/h2>
&lt;h3 id="damus-nip-19-relay-힌트-구현">Damus, NIP-19 Relay 힌트 구현&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>가 event 가져오기를 위한 &lt;a href="https://nostrcompass.org/ko/topics/nip-19/">NIP-19&lt;/a> relay 힌트 사용을 구현한 &lt;a href="https://github.com/damus-io/damus/pull/3477">PR #3477&lt;/a>을 병합했습니다. 이 기능은 &lt;a href="https://nostrcompass.org/ko/topics/nip-10/">NIP-10 (답글 스레드)&lt;/a>, &lt;a href="https://nostrcompass.org/ko/topics/nip-18/">NIP-18 (리포스트)&lt;/a>, NIP-19 참조에서 힌트를 추출하여 사용자의 구성된 풀에 없는 relay의 노트를 볼 수 있게 합니다. 구현은 참조 카운트 정리가 포함된 임시 relay 연결을 사용하여 영구적인 relay 풀 확장을 방지합니다.&lt;/p>
&lt;p>추가 수정에는 Lightning 인보이스 파싱(&lt;a href="https://github.com/damus-io/damus/pull/3566">PR #3566&lt;/a>), 지갑 뷰 로딩(&lt;a href="https://github.com/damus-io/damus/pull/3554">PR #3554&lt;/a>), relay 리스트 타이밍(&lt;a href="https://github.com/damus-io/damus/pull/3553">PR #3553&lt;/a>), 시각적 &amp;ldquo;팝핑&amp;quot;을 줄이기 위한 프로필 프리로딩(&lt;a href="https://github.com/damus-io/damus/pull/3550">PR #3550&lt;/a>)이 포함됩니다. &lt;a href="https://github.com/damus-io/damus/pull/3590">드래프트 PR #3590&lt;/a>은 진행 중인 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> 비공개 DM 지원을 보여줍니다.&lt;/p>
&lt;h3 id="primal-android-nwc-암호화-출시">Primal Android, NWC 암호화 출시&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a>는 지갑 인프라에 초점을 맞춘 18개의 병합된 PR과 함께 매우 활발한 한 주를 보냈습니다. 앱은 이제 Lightspark의 자기 수탁 Lightning 프로토콜인 Spark와 통합됩니다. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/874">PR #874&lt;/a>는 NWC 암호화 지원을 추가하고, &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/872">PR #872&lt;/a>는 연결이 설정될 때 NWC 정보 event를 전송합니다.&lt;/p>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/870">PR #870&lt;/a>은 회계 및 세금 목적에 유용한 지갑 거래 CSV 내보내기를 가능하게 합니다. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/716">PR #716&lt;/a>은 노트 에디터에 로컬 계정 전환기를 추가합니다. 여러 지갑 복원 수정(&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/876">PR #876&lt;/a>, &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/875">PR #875&lt;/a>, &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/873">PR #873&lt;/a>)은 비-Spark 지갑 구성을 가진 사용자의 엣지 케이스를 해결합니다.&lt;/p>
&lt;h3 id="marmot-typescript-sdk-메시지-히스토리-추가">Marmot TypeScript SDK, 메시지 히스토리 추가&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/marmot">Marmot&lt;/a> 프로토콜의 TypeScript 구현이 계속 개발 중입니다. hzrd149의 &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/38">PR #38&lt;/a>은 참조 채팅 애플리케이션을 위한 페이지네이션이 포함된 메시지 히스토리 지속성을 구현하고, &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/39">PR #39&lt;/a>는 라이브러리 사용성을 개선합니다.&lt;/p>
&lt;p>Rust 측에서는 &lt;a href="https://github.com/marmot-protocol/mdk/pull/161">PR #161&lt;/a>이 실패 시 메시지 컨텍스트를 보존하기 위한 재시도 가능한 상태 처리를 구현하고, &lt;a href="https://github.com/marmot-protocol/mdk/pull/164">PR #164&lt;/a>는 SQLite와의 tokio 패닉을 방지하기 위해 std::sync::Mutex로 전환합니다. whitenoise-rs 백엔드는 &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/418">Amber 통합&lt;/a> (&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/418">PR #418&lt;/a>), &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/467">MDK 및 nostr-sdk 0.44로 업그레이드&lt;/a> (&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/467">PR #467&lt;/a>)를 추가하고, NewMessage 및 GroupInvite event 유형과 함께 &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/460">PR #460&lt;/a>을 통한 실시간 알림 스트리밍을 도입합니다.&lt;/p>
&lt;h3 id="haven-주기적-wot-새로고침-추가">HAVEN, 주기적 WoT 새로고침 추가&lt;/h3>
&lt;p>개인 relay인 &lt;a href="https://github.com/bitvora/haven">HAVEN&lt;/a>이 주기적 &lt;a href="https://nostrcompass.org/ko/topics/web-of-trust/">Web of Trust&lt;/a> 새로고침을 추가한 &lt;a href="https://github.com/bitvora/haven/pull/108">PR #108&lt;/a>을 병합했습니다. 이 기능은 사용자의 소셜 그래프가 발전함에 따라 신뢰 점수가 최신 상태를 유지하도록 보장하여, 시간이 지남에 따라 스팸 필터링 정확도를 향상시킵니다.&lt;/p>
&lt;h3 id="nostr-tools">nostr-tools&lt;/h3>
&lt;p>핵심 JavaScript 라이브러리인 &lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a>는 이번 주 여러 개선을 받았습니다. 커밋에는 &lt;a href="https://nostrcompass.org/ko/topics/nip-27/">NIP-27 (텍스트 노트 참조)&lt;/a> 멘션에서 &lt;a href="https://github.com/nbd-wtf/nostr-tools/commit/c2423f7f31853d97fef2e3d649204cec328e81d5">줄바꿈 후 해시태그 파싱 수정&lt;/a>, 연결 정리를 위한 &lt;a href="https://github.com/nbd-wtf/nostr-tools/commit/ab802c8dbe35d29feb732ba54e82a346c21c32e2">유휴 추적과 함께 손상된 relay 객체 자동 정리&lt;/a>, 싱글 스레드 성능 최적화를 위한 &lt;a href="https://github.com/nbd-wtf/nostr-tools/commit/be9b91318fea6a0cb154b8734a15b50a4c1e7638">메시지 큐 제거&lt;/a>, 더 나은 TypeScript 임포트를 위한 &lt;a href="https://github.com/nbd-wtf/nostr-tools/commit/05b1fba5113182ac0aa3c72d1f511cd956a7c139">소스 파일 내보내기&lt;/a>가 포함됩니다.&lt;/p>
&lt;h3 id="ndk">NDK&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-dev-kit/ndk">NDK&lt;/a>가 &lt;a href="https://github.com/nostr-dev-kit/ndk/commit/33e759508bc656dc45d3d77c741edf581af323f3">기기 슬립/웨이크 사이클 후 재연결 및 오래된 연결 처리 수정&lt;/a>과 함께 &lt;a href="https://github.com/nostr-dev-kit/ndk/commit/26abea24726ed844fdd091744ac9f768f1a530a0">beta.71&lt;/a>을 출시하여 모바일 애플리케이션의 안정성 문제를 해결했습니다.&lt;/p>
&lt;h3 id="notedeck">Notedeck&lt;/h3>
&lt;p>Damus 팀의 데스크톱 클라이언트인 &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>에 &lt;a href="https://nostrcompass.org/ko/topics/nip-34/">NIP-34 (Git 협업)&lt;/a> 뷰어를 추가하는 &lt;a href="https://github.com/damus-io/notedeck/pull/1279">오픈 PR #1279&lt;/a>가 있습니다. 이를 통해 클라이언트 내에서 직접 Nostr relay에 게시된 git 저장소, 패치, 이슈를 탐색할 수 있어, Notedeck이 ngit 기반 워크플로우의 잠재적 프론트엔드가 될 수 있습니다.&lt;/p>
&lt;h3 id="njump">njump&lt;/h3>
&lt;p>Nostr 웹 게이트웨이인 &lt;a href="https://github.com/fiatjaf/njump">njump&lt;/a>가 &lt;a href="https://github.com/fiatjaf/njump/pull/152">PR #152&lt;/a>를 통해 두 가지 &lt;a href="https://nostrcompass.org/ko/topics/nip-51/">NIP-51 (리스트)&lt;/a> event 유형에 대한 지원을 추가했습니다. 게이트웨이는 이제 클라이언트가 다양한 컨텍스트에서 표시할 수 있는 사용자의 카테고리별 그룹인 kind:30000 Follow Sets와 공유 및 그룹 팔로우를 위해 설계된 큐레이션된 프로필 컬렉션인 kind:39089 Starter Packs를 렌더링합니다. 이러한 추가로 사용자가 nevent 링크를 공유할 때 njump가 커뮤니티 큐레이션 리스트를 표시할 수 있습니다.&lt;/p>
&lt;h3 id="amethyst">Amethyst&lt;/h3>
&lt;p>Android 클라이언트인 &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>가 플레이어 뷰에서 비디오 공유를 방해하는 버그를 수정했습니다(&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1695">PR #1695&lt;/a>). &amp;ldquo;비디오 공유&amp;rdquo; 옵션이 콘텐츠 파라미터가 컨트롤 버튼 컴포넌트에 전달되지 않아 표시되지 않았습니다. 사용자는 이제 플레이어에서 직접 다른 앱으로 Nostr 비디오 콘텐츠를 공유할 수 있습니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1693">PR #1693&lt;/a>은 특정 잘못된 형식의 event를 파싱할 때 발생하는 Jackson JSON 역직렬화 충돌을 수정합니다.&lt;/p>
&lt;h3 id="jumble">Jumble&lt;/h3>
&lt;p>relay 피드 브라우징에 초점을 맞춘 웹 클라이언트인 &lt;a href="https://github.com/CodyTseng/jumble">Jumble&lt;/a>이 &lt;a href="https://github.com/CodyTseng/jumble/pull/743">PR #743&lt;/a>에서 클립보드를 통한 오디오 파일 업로드를 추가했습니다. 사용자는 이제 오디오 파일을 게시물 편집기에 직접 붙여넣을 수 있으며, 구성된 미디어 서버에 업로드하고 노트에 URL을 포함합니다. 이 기능은 기존 이미지 붙여넣기 기능을 반영합니다.&lt;/p>
&lt;h3 id="flotilla">Flotilla&lt;/h3>
&lt;p>hodlbod의 &lt;a href="https://nostrcompass.org/ko/topics/nip-29/">NIP-29 (Relay 기반 그룹)&lt;/a> 커뮤니티 클라이언트인 &lt;a href="https://github.com/coracle-social/flotilla">Flotilla&lt;/a>가 &lt;a href="https://github.com/coracle-social/flotilla/pull/270">PR #270&lt;/a>을 통해 알림을 출시했습니다. 이 업데이트는 앵커 기반 폴링에서 웹용 로컬 풀 알림과 모바일용 푸시 알림으로 알림 시스템을 리팩토링합니다. 이 아키텍처는 제안된 NIP-9a 표준(아래 &lt;a href="https://github.com/nostr-protocol/nips/pull/2194">PR #2194&lt;/a> 참조)을 구현하며, 사용자가 relay에 웹훅 콜백을 등록하고 필터가 일치할 때 암호화된 event 페이로드를 수신합니다.&lt;/p>
&lt;h3 id="formstr">Formstr&lt;/h3>
&lt;p>Nostr 네이티브 폼 애플리케이션인 &lt;a href="https://github.com/abh3po/nostr-forms">Formstr&lt;/a>가 &lt;a href="https://github.com/abh3po/nostr-forms/pull/422">PR #422&lt;/a>에서 폼 가져오기 및 암호화된 폼 지원을 추가했습니다. 사용자는 이제 응답 링크를 통해 또는 다른 Formstr 인스턴스에서 기존 폼을 가져올 수 있습니다. 암호화 기능을 통해 폼 작성자는 지정된 수신자만 제출물을 읽을 수 있도록 응답을 제한할 수 있어, 민감한 정보를 수집하는 설문조사에 유용합니다.&lt;/p>
&lt;h3 id="pollerama">Pollerama&lt;/h3>
&lt;p>&lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a>를 기반으로 구축된 &lt;a href="https://github.com/abh3po/nostr-polls">Pollerama&lt;/a> (&lt;a href="https://pollerama.fun">pollerama.fun&lt;/a>)가 &lt;a href="https://github.com/abh3po/nostr-polls/pull/141">PR #141&lt;/a>과 &lt;a href="https://github.com/abh3po/nostr-polls/pull/142">PR #142&lt;/a>를 통해 설문조사를 위한 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> DM 공유를 추가했습니다. 사용자는 이제 암호화된 다이렉트 메시지를 통해 연락처에 직접 설문조사를 공유할 수 있습니다.&lt;/p>
&lt;h3 id="nostrability-schemata">Nostrability Schemata&lt;/h3>
&lt;p>Nostr event를 위한 JSON 검증 스키마 컬렉션인 &lt;a href="https://github.com/nostrability/schemata">Nostrability schemata&lt;/a>가 &lt;a href="https://github.com/nostrability/schemata/pull/59">PR #59&lt;/a>를 통해 &lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59 (Gift Wrap)&lt;/a> 커버리지를 추가했습니다. 이 업데이트에는 기존 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> 스키마 커버리지를 보완하는 kind 13 (seal) 및 kind 1059 (gift wrap) event에 대한 스키마가 포함됩니다.&lt;/p>
&lt;h3 id="vector">Vector&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a>, &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a>, &lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59&lt;/a>를 사용한 제로 메타데이터 암호화를 갖춘 프라이버시 중심 데스크톱 메신저인 &lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a>가 SIMD 가속 성능 최적화를 도입한 &lt;a href="https://github.com/VectorPrivacy/Vector/pull/39">PR #39&lt;/a>를 병합했습니다. 16진수 인코딩은 65배, 이미지 프리뷰 생성은 최대 38배, 바이너리 검색 인덱싱을 통한 메시지 조회는 184배 빨라졌습니다. 이 PR은 Apple Silicon용 ARM64 NEON 내장 함수와 런타임 감지가 포함된 Windows 및 Linux용 x86_64 AVX2/SSE2를 추가합니다. 메시지 구조체가 472바이트에서 128바이트로 줄어들고 인터닝을 통해 npub 저장이 99.6% 감소하여 메모리 사용량이 줄었습니다.&lt;/p>
&lt;p>Vector v0.3.0 (2025년 12월)은 MLS 프로토콜 기반 그룹 메시징을 위한 &lt;a href="https://github.com/marmot-protocol/mdk">MDK (Marmot Development Kit)&lt;/a>를 통합하여, 클라이언트에 전방 비밀성을 갖춘 종단 간 암호화 그룹을 가져왔습니다. MIP-04 파일 공유는 이제 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-01-28-newsletter/#marmot-protocol-updates">White Noise&lt;/a>와의 상호 운용성을 위해 설계된 MLS 그룹용 imeta 첨부 파일을 처리합니다. 이 릴리스는 또한 WebXDC 기반 P2P 멀티플레이어 게임이 있는 Mini Apps 플랫폼, The Nexus라는 탈중앙화 앱 스토어, 인앱 결제를 위한 PIVX 지갑 통합, 전체 히스토리 추적이 가능한 메시지 편집, 이미지 업로드 중 4배 메모리 감소를 도입했습니다.&lt;/p>
&lt;h2 id="nip-업데이트">NIP 업데이트&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 저장소&lt;/a>의 최근 변경 사항:&lt;/p>
&lt;p>&lt;strong>병합됨:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1913">NIP-47: Hold Invoice 지원&lt;/a>&lt;/strong> - &lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47 (Nostr Wallet Connect)&lt;/a>가 이제 hold invoice를 지원하여, 수신자가 결제를 명시적으로 정산하거나 취소해야 하는 고급 결제 워크플로우를 가능하게 합니다. 이 PR은 세 가지 새로운 RPC 메서드를 추가합니다: &lt;code>make_hold_invoice&lt;/code>는 사전 생성된 프리이미지와 결제 해시를 사용하여 hold invoice를 생성하고, &lt;code>settle_hold_invoice&lt;/code>는 원본 프리이미지를 제공하여 결제를 청구하며, &lt;code>cancel_hold_invoice&lt;/code>는 결제 해시를 사용하여 결제를 거부합니다. 새로운 &lt;code>hold_invoice_accepted&lt;/code> 알림은 지불자가 결제를 잠글 때 발생합니다. 이를 통해 pay-to-unlock 콘텐츠, 마켓플레이스 에스크로 시스템, 결제 게이팅과 같은 사용 사례가 가능합니다. 구현이 이미 &lt;a href="https://github.com/getAlby/hub/pull/1298">Alby Hub&lt;/a>, &lt;a href="https://github.com/getAlby/js-sdk/pull/382">Alby JS-SDK&lt;/a>, &lt;a href="https://github.com/relaystr/ndk/pull/147">dart NDK&lt;/a>에서 진행 중입니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2208">NIP-05: 소문자 요구 사항&lt;/a>&lt;/strong> - &lt;a href="https://nostrcompass.org/ko/topics/nip-05/">NIP-05 (도메인 검증)&lt;/a>가 이제 &lt;code>nostr.json&lt;/code> 파일의 16진수 공개 키와 로컬 이름 모두에 대해 명시적으로 소문자를 요구합니다. 이는 명세에서 암묵적이었지만 명시되지 않아, 일부 구현이 대소문자를 혼용하고 다른 구현이 소문자로 정규화할 때 상호 운용성 문제를 야기했습니다. NIP-05 식별자를 검증하는 클라이언트는 이제 키나 이름에 대문자가 포함된 &lt;code>nostr.json&lt;/code> 응답을 거부해야 합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2205">NIP-73: 국가 코드&lt;/a>&lt;/strong> - &lt;a href="https://nostrcompass.org/ko/topics/nip-73/">NIP-73 (지오태그)&lt;/a>가 이제 geohash의 대안으로 ISO 3166 국가 코드를 지원합니다. Event는 정확한 좌표 없이 국가 수준의 위치를 나타내기 위해 &lt;code>[&amp;quot;g&amp;quot;, &amp;quot;US&amp;quot;, &amp;quot;countryCode&amp;quot;]&lt;/code> 태그를 포함할 수 있습니다. 이를 통해 정확한 위치가 불필요하거나 바람직하지 않은 애플리케이션을 위한 국가 기반 콘텐츠 필터링 및 발견이 가능합니다. 이 PR은 또한 명세 문서에 누락된 geohash 예제를 추가했습니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>오픈 PR 및 논의:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1336">NIP-82: 소프트웨어 애플리케이션&lt;/a>&lt;/strong> - franzap이 kind 30063 릴리스 event를 사용하여 Nostr를 통해 소프트웨어 애플리케이션이 배포되는 방식을 정의하는 이 드래프트 명세에 대한 주요 업데이트를 발표했습니다. 업데이트는 이제 macOS, Linux, Windows, FreeBSD, WASM 환경, VS Code 확장, Chrome 확장, Web Bundles/PWA를 포함하여 전 세계 디바이스 플랫폼의 약 98%를 커버합니다. 팀은 다음으로 Android, PWA, iOS 지원에 집중하고 있으며, 개발자들이 이 공유 표준으로 수렴하도록 초대하고 있습니다. Zapstore는 앞으로 몇 주 내에 새 형식으로 마이그레이션할 계획입니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2211">NIP-74: 팟캐스트&lt;/a>&lt;/strong> - 팟캐스트 쇼(kind 30074)와 에피소드(kind 30075)를 위한 주소 지정 가능한 event를 정의합니다. 쇼에는 제목, 설명, 카테고리, 커버 이미지와 같은 메타데이터가 포함됩니다. 에피소드는 부모 쇼를 참조하고 enclosure URL, 재생 시간, 챕터 마커를 포함합니다. 명세는 Podcasting 2.0 메타데이터 표준과 통합되며 Lightning을 통한 V4V (value-for-value) 수익화를 위한 값 태그를 포함합니다. Nostr 네이티브 팟캐스트 퍼블리싱 플랫폼인 &lt;a href="https://transmit.fm">transmit.fm&lt;/a>과 같은 플랫폼은 이 형식을 사용하여 relay에 직접 게시할 수 있어, 팟캐스터가 중개자 없이 콘텐츠를 배포할 수 있습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2207">NIP-FR: 친구 전용 노트&lt;/a>&lt;/strong> - ViewKey라는 공유 대칭 키를 사용하여 사용자 정의 친구 목록에만 표시되는 노트를 게시하는 메커니즘을 제안합니다. 작성자는 NIP-44를 사용하여 ViewKey로 노트(kind 2044)를 암호화합니다. ViewKey 자체는 &lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59 (Gift Wrap)&lt;/a>를 통해 각 친구에게 한 번 배포됩니다. ViewKey를 보유한 친구는 노트를 복호화하여 읽을 수 있고, 그 외의 모든 사람은 암호문만 볼 수 있습니다. 작성자가 친구를 제거하면 ViewKey가 로테이션됩니다: 새 키가 생성되어 gift wrap을 통해 남은 모든 친구에게 재배포되며, 제거된 친구가 향후 게시물에 접근할 수 없도록 보장합니다. 이 접근 방식은 콘텐츠 암호화(대칭, 효율적)와 키 배포(비대칭, 친구별)를 분리하여 자주 요청되는 프라이버시 기능을 가능하게 하면서 프로토콜을 경량으로 유지합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrhub.io/e/1a451c1581888215ae5c311d36c8a7c7d9e5e81f1f4010de4afaf7fcbd553e90">NIP-DB: 브라우저 Nostr Event 데이터베이스 인터페이스&lt;/a>&lt;/strong> (&lt;a href="https://github.com/hzrd149/nostr-bucket/blob/master/nip.md">spec&lt;/a>) - 로컬 Nostr event 저장소를 제공하는 브라우저 확장을 위한 표준 &lt;code>window.nostrdb&lt;/code> 인터페이스를 제안합니다. API에는 event 추가, ID 또는 필터별 쿼리, 일치 항목 카운트, 업데이트 구독 메서드가 포함됩니다. 웹 애플리케이션은 이 인터페이스를 사용하여 relay 요청 없이 로컬 캐시된 event에서 읽을 수 있어, 대역폭과 지연 시간을 줄입니다. hzrd149의 &lt;a href="https://github.com/hzrd149/nostr-bucket">nostr-bucket&lt;/a> 브라우저 확장은 참조 구현을 제공하며, 모든 브라우저 탭에 인터페이스를 주입합니다. 동반 &lt;a href="https://github.com/hzrd149/window.nostrdb.js">폴리필 라이브러리&lt;/a>는 확장이 없는 환경을 위해 IndexedDB를 사용하여 동일한 API를 구현합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrhub.io/e/237667820943d1c8bbe7ab7732623ae51b337f177776ece439d4a8be84708eb7">TRUSTed Filters&lt;/a>&lt;/strong> - vitorpamplona의 &lt;a href="https://github.com/nostr-protocol/nips/pull/1534">병합된 Trusted Assertions PR #1534&lt;/a>를 기반으로 구축된 탈중앙화 콘텐츠 큐레이션을 위한 5개의 관련 제안 모음입니다. 핵심 명세는 사용자가 event 필터링 및 순위 지정을 위해 신뢰하는 서비스를 지정할 수 있는 Trust Provider Preferences 선언을 위한 kind 17570 event를 도입합니다. Trust provider는 클라이언트가 구독할 수 있는 어설션(kind 37571), 통계(kind 37572), 순위(kind 37573)를 게시합니다. 시스템은 필터 유형과 변환을 지정하기 위해 W/w 태그가 있는 플러그인 아키텍처를 사용합니다. 이를 통해 스팸 감지, 평판 점수, 콘텐츠 순위와 같은 계산 집약적 작업이 전용 인프라에서 실행되면서 사용자가 신뢰하는 provider에 대한 제어를 유지할 수 있습니다. 이 제품군에는 필터 프리셋, 사용자 순위, 신뢰할 수 있는 event, 플러그인 정의에 대한 별도의 명세가 포함됩니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2194">NIP-9a: 푸시 알림&lt;/a>&lt;/strong> - hodlbod이 kind 30390 등록 event를 사용하는 relay 기반 푸시 알림 표준을 제안합니다. 사용자는 수신하려는 event의 필터와 웹훅 콜백 URL을 포함하는 등록을 생성합니다. 등록은 relay의 pubkey(NIP-11 &lt;code>self&lt;/code> 필드에서)로 암호화됩니다. 일치하는 event가 발생하면 relay는 event ID(중복 제거를 위한 평문)와 event 자체(사용자에게 NIP-44 암호화)와 함께 콜백에 POST합니다. 이 아키텍처를 통해 relay가 중개 푸시 서버로부터 event 콘텐츠를 보호하면서 알림을 푸시할 수 있습니다. Flotilla의 &lt;a href="https://github.com/coracle-social/flotilla/pull/270">PR #270&lt;/a>이 이 표준을 구현합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/SigmaEnterprise/Catallax">Catallax&lt;/a>&lt;/strong> - kind 33400 event를 사용하여 에스크로가 포함된 탈중앙화 계약 작업 프로토콜을 제안합니다. 시스템은 세 가지 역할을 정의합니다: 중재자는 가용성과 조건을 발표하고, 후원자는 에스크로된 Bitcoin으로 자금이 지원된 작업을 생성하며, 프리 에이전트는 결제를 청구하기 위해 작업을 완료합니다. 중재자는 필요할 때 분쟁을 해결합니다. 이 프로토콜은 납품물이 수락되거나 중재가 종료될 때까지 자금이 잠기는 무신뢰 프리랜서 작업 조정을 가능하게 합니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-심층-분석-nip-47-nostr-wallet-connect">NIP 심층 분석: NIP-47 (Nostr Wallet Connect)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47&lt;/a>은 Nostr를 통신 레이어로 사용하는 원격 Lightning 지갑 제어 프로토콜인 Nostr Wallet Connect (NWC)를 정의합니다. 이번 주 hold invoice 지원 추가로 NWC는 이제 전체 Lightning 작업 범위를 커버합니다.&lt;/p>
&lt;p>프로토콜은 간단한 교환을 통해 작동합니다. 지갑 애플리케이션은 기능을 설명하는 &amp;ldquo;wallet info&amp;rdquo; event(kind 13194)를 게시합니다. 클라이언트 애플리케이션은 인보이스 결제, 인보이스 생성, 잔액 확인과 같은 작업을 지갑에 요청하는 암호화된 요청(kind 23194)을 보냅니다. 지갑은 암호화된 결과(kind 23195)로 응답합니다.&lt;/p>
&lt;p>NWC는 클라이언트와 지갑 간에 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> 암호화를 사용하며, 지갑 작업을 위한 전용 키 쌍을 사용하여 사용자의 주 신원과 분리합니다. 이러한 분리는 NWC 연결이 손상되어도 사용자의 Nostr 신원이 노출되지 않음을 의미합니다.&lt;/p>
&lt;p>&lt;strong>지원되는 메서드:&lt;/strong>&lt;/p>
&lt;p>명세는 핵심 Lightning 작업을 위한 메서드를 정의합니다: &lt;code>pay_invoice&lt;/code>는 결제를 보내고, &lt;code>make_invoice&lt;/code>는 수신을 위한 인보이스를 생성하며, &lt;code>lookup_invoice&lt;/code>는 결제 상태를 확인하고, &lt;code>get_balance&lt;/code>는 지갑 잔액을 반환하며, &lt;code>list_transactions&lt;/code>는 결제 내역을 제공합니다. 새로 병합된 &lt;code>pay_keysend&lt;/code>는 인보이스 없이 결제를 가능하게 하고, &lt;code>hold_invoice&lt;/code>는 조건부 결제를 지원합니다.&lt;/p>
&lt;p>&lt;strong>예제 Event:&lt;/strong>&lt;/p>
&lt;p>지갑 서비스는 기능을 광고하는 정보 event(kind 13194)를 게시합니다:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">13194&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;wallet service pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;pay_invoice get_balance make_invoice lookup_invoice list_transactions notifications&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;encryption&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nip44_v2&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;notifications&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;payment_received payment_sent&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;unix timestamp&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;wallet service signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>클라이언트는 인보이스를 결제하기 위해 암호화된 요청(kind 23194)을 보냅니다:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">23194&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;client ephemeral pubkey from connection URI secret&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;NIP-44 encrypted: {\&amp;#34;method\&amp;#34;: \&amp;#34;pay_invoice\&amp;#34;, \&amp;#34;params\&amp;#34;: {\&amp;#34;invoice\&amp;#34;: \&amp;#34;lnbc50n1...\&amp;#34;}}&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;wallet service pubkey&amp;gt;&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;encryption&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nip44_v2&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;unix timestamp&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;client ephemeral key signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>지갑 서비스는 결제 결과로 응답합니다(kind 23195):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">23195&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;wallet service pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;NIP-44 encrypted: {\&amp;#34;result_type\&amp;#34;: \&amp;#34;pay_invoice\&amp;#34;, \&amp;#34;result\&amp;#34;: {\&amp;#34;preimage\&amp;#34;: \&amp;#34;...\&amp;#34;}, \&amp;#34;error\&amp;#34;: null}&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;client ephemeral pubkey&amp;gt;&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;request event id&amp;gt;&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;unix timestamp&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;wallet service signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>응답의 &lt;code>e&lt;/code> 태그는 원본 요청을 참조하여, 클라이언트가 응답을 요청에 매칭할 수 있게 합니다.&lt;/p>
&lt;p>&lt;strong>Hold Invoice:&lt;/strong>&lt;/p>
&lt;p>이번 주 &lt;a href="https://github.com/nostr-protocol/nips/pull/1913">PR #1913&lt;/a>은 에스크로 스타일 결제를 가능하게 하는 hold invoice 지원을 추가했습니다. 수신자가 프리이미지를 공개하여 즉시 결제를 청구하는 표준 인보이스와 달리, hold invoice는 수신자가 이 결정을 연기할 수 있게 합니다. 지불자가 hold invoice에 전송하면 결제 경로를 따라 자금이 잠깁니다. 수신자는 정산(프리이미지를 공개하고 자금 청구)하거나 취소(결제를 거부하고 자금을 지불자에게 반환)를 선택합니다. 두 작업 모두 발생하지 않으면 결제가 타임아웃되어 자금이 자동으로 반환됩니다. PR은 &lt;code>make_hold_invoice&lt;/code>, &lt;code>settle_hold_invoice&lt;/code>, &lt;code>cancel_hold_invoice&lt;/code> 세 가지 NWC 메서드와 &lt;code>hold_invoice_accepted&lt;/code> 알림을 추가합니다. 이 메커니즘은 Ridestr의 라이드셰어 에스크로 및 마켓플레이스 분쟁 해결과 같은 애플리케이션을 지원합니다.&lt;/p>
&lt;p>&lt;strong>현재 구현:&lt;/strong>&lt;/p>
&lt;p>주요 지갑이 NWC를 지원합니다: Zeus, Alby, 그리고 이번 주 &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/874">PR #874&lt;/a>를 통해 Primal이 모두 지갑 측 지원을 구현합니다. 클라이언트 측에서는 Damus, Amethyst 및 대부분의 주요 Nostr 클라이언트가 zap 및 결제를 위해 NWC 지갑에 연결할 수 있습니다.&lt;/p>
&lt;p>이 프로토콜은 관심사 분리를 가능하게 합니다: 사용자는 한 기기에서 지갑을 실행하면서 다른 기기에서 Nostr와 상호작용할 수 있으며, Nostr relay가 통신 채널 역할을 합니다. 이 아키텍처는 모바일 클라이언트가 직접 자금을 보유할 필요가 없어, 지갑 인프라를 소셜 클라이언트와 분리하여 보안을 향상시킵니다.&lt;/p>
&lt;p>&lt;strong>보안 고려 사항:&lt;/strong>&lt;/p>
&lt;p>NWC 연결은 민감하게 취급해야 합니다. 암호화가 메시지 콘텐츠를 보호하지만, 지갑 pubkey와 연결 비밀은 보호되어야 합니다. 애플리케이션은 사용자가 연결을 취소하고 지출 한도를 설정할 수 있어야 합니다. 프로토콜은 기능 제한을 지원하므로, 지갑이 특정 연결이 수행할 수 있는 작업을 제한할 수 있습니다.&lt;/p>
&lt;h2 id="nip-심층-분석-nip-59-gift-wrap">NIP 심층 분석: NIP-59 (Gift Wrap)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59&lt;/a>는 어떤 Nostr event든 여러 레이어의 암호화로 캡슐화하여 relay와 관찰자로부터 발신자의 신원을 숨기는 프로토콜을 정의합니다. 이번 주 친구 전용 노트(NIP-FR) 및 푸시 알림(NIP-9a) 제안이 모두 gift wrapping에 의존하므로, 이해할 가치가 있는 기본 프라이버시 프리미티브입니다.&lt;/p>
&lt;p>&lt;strong>세 개의 레이어:&lt;/strong>&lt;/p>
&lt;p>Gift wrapping은 세 개의 중첩된 구조를 사용합니다:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>Rumor&lt;/strong> (서명되지 않은 event): 서명 없는 Nostr event로서의 원본 콘텐츠. Rumor는 relay가 서명되지 않은 event를 거부하기 때문에 직접 relay에 전송할 수 없습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Seal&lt;/strong> (kind 13): Rumor가 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a>를 사용하여 암호화되고 kind 13 event에 배치됩니다. Seal은 실제 작성자의 키로 서명됩니다. 이것이 작성자임을 증명하는 암호학적 증거입니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Gift Wrap&lt;/strong> (kind 1059): Seal이 암호화되어 무작위의 일회용 키 쌍으로 서명된 kind 1059 event에 배치됩니다. Gift wrap에는 수신자에게 라우팅하기 위한 &lt;code>p&lt;/code> 태그가 포함됩니다.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>흔한 오해: 부인 가능성&lt;/strong>&lt;/p>
&lt;p>명세는 서명되지 않은 rumor가 &amp;ldquo;부인 가능성&amp;quot;을 제공한다고 언급하지만, 이는 오해의 소지가 있습니다. Seal 레이어는 실제 작성자가 서명합니다. 수신자가 gift wrap을 복호화하고 seal을 복호화하면, 누가 메시지를 보냈는지에 대한 암호학적 증거를 갖게 됩니다. 수신자는 자신의 개인 키를 노출하지 않고 발신자의 신원을 밝히는 영지식 증명을 구성할 수도 있습니다.&lt;/p>
&lt;p>Gift wrap이 실제로 제공하는 것은 &lt;strong>관찰자로부터의 발신자 프라이버시&lt;/strong>입니다: relay와 제3자는 무작위 키로 서명된 gift wrap만 보기 때문에 누가 메시지를 보냈는지 알 수 없습니다. 하지만 수신자는 항상 알고 증명할 수 있습니다.&lt;/p>
&lt;p>&lt;strong>예제 Event:&lt;/strong>&lt;/p>
&lt;p>다음은 명세의 완전한 3레이어 구조입니다(&amp;ldquo;오늘 밤 파티에 가나요?&amp;rdquo; 전송):&lt;/p>
&lt;p>Rumor (서명되지 않음, relay에 게시 불가):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1691518405&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Are you going to the party tonight?&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;611df01bfcf85c26ae65453b772d8f1dfd25c264621c0277e1fc1518686faef9&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;9dd003c6d3b73b74a85a9ab099469ce251653a7af76f523671ab828acd2a0ef9&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Seal (kind 13, 실제 작성자가 서명, 암호화된 rumor 포함):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">13&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;611df01bfcf85c26ae65453b772d8f1dfd25c264621c0277e1fc1518686faef9&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;AqBCdwoS7/tPK+QGkPCadJTn8FxGkd24iApo3BR9/M0uw6n4RFAFSPAKKMgkzVMo...&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1703015180&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;28a87d7c074d94a58e9e89bb3e9e4e813e2189f285d797b1c56069d36f59eaa7&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;02fc3facf6621196c32912b1ef53bac8f8bfe9db51c0e7102c073103586b0d29...&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Gift wrap (kind 1059, 무작위 임시 키로 서명, 암호화된 seal 포함):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1059&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;18b1a75918f1f2c90c23da616bce317d36e348bcf5f7ba55e75949319210c87c&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;AhC3Qj/QsKJFWuf6xroiYip+2yK95qPwJjVvFujhzSguJWb/6TlPpBW0CGFwfuf...&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1703021488&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [[&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;166bf3765ebd1fc55decfe395beff2ea3b2a4e0a8946e7eb578512b555737c99&amp;#34;&lt;/span>]],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;5c005f3ccf01950aa8d131203248544fb1e41a0d698e846bd419cec3890903ac&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;35fabdae4634eb630880a1896a886e40fd6ea8a60958e30b89b33a93e6235df7...&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>주목하세요: seal의 &lt;code>pubkey&lt;/code>는 실제 작성자(&lt;code>611df01...&lt;/code>)이고, gift wrap의 &lt;code>pubkey&lt;/code>는 무작위 일회용 키(&lt;code>18b1a75...&lt;/code>)입니다. Relay는 gift wrap만 보기 때문에 메시지를 실제 작성자에게 귀속시킬 수 없습니다.&lt;/p>
&lt;p>&lt;strong>각 레이어가 보호하는 것:&lt;/strong>&lt;/p>
&lt;p>Rumor는 서명되지 않아 relay에 직접 게시할 수 없습니다. Seal은 실제 작성자가 서명하여 수신자에게 작성자임을 증명합니다. Gift wrap은 무작위 일회용 키로 서명되어 relay와 관찰자로부터 실제 작성자를 숨깁니다. 수신자만이 두 레이어를 통해 복호화하여 원본 콘텐츠에 도달하고 seal에 대한 작성자의 서명을 검증할 수 있습니다.&lt;/p>
&lt;p>&lt;strong>현재 애플리케이션:&lt;/strong>&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17 (비공개 다이렉트 메시지)&lt;/a>는 암호화된 DM을 위해 gift wrap을 사용하여 이전 NIP-04 방식을 대체합니다. 제안된 NIP-FR(친구 전용 노트)은 Gift Wrapping을 사용하여 친구에게 ViewKey를 배포하며, 친구는 해당 키로 암호화된 노트를 복호화합니다. NIP-9a (푸시 알림)는 gift wrap 원칙을 사용하여 알림 페이로드를 암호화합니다.&lt;/p>
&lt;p>&lt;strong>메타데이터 보호:&lt;/strong>&lt;/p>
&lt;p>타이밍 분석을 막기 위해 타임스탬프를 무작위화해야 합니다. Relay는 kind 1059 event를 제공하기 전에 AUTH를 요구하고 표시된 수신자에게만 제공해야 합니다. 여러 수신자에게 전송할 때는 각각에 대해 별도의 gift wrap을 생성합니다.&lt;/p>
&lt;hr>
&lt;p>이번 주는 여기까지입니다. 무언가를 만들고 계신가요? 공유할 뉴스가 있나요? 프로젝트를 다뤄드릴까요? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">NIP-17 DM으로 연락하시거나&lt;/a> Nostr에서 찾아주세요.&lt;/p></content:encoded></item><item><title>Nostr Compass #7</title><link>https://nostrcompass.org/ko/newsletters/2026-01-28-newsletter/</link><pubDate>Wed, 28 Jan 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2026-01-28-newsletter/</guid><description>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> Ridestr가 &lt;a href="https://nostrcompass.org/ko/topics/cashu/">Cashu&lt;/a> 결제와 암호화된 위치 공유를 통해 탈중앙화 라이드셰어링을 Nostr에 도입했습니다. Pomade는 다중서명 서명자를 위한 이메일 기반 복구 기능을 선보였습니다. Damus는 안정적인 DM 동기화를 위해 &lt;a href="https://nostrcompass.org/ko/topics/negentropy/">negentropy&lt;/a>를 출시했습니다. Amethyst 데스크톱 앱에 검색, 북마크, zap 기능이 추가되었습니다. Amber v4.1.1은 relay 신뢰도 점수를 표시합니다. Marmot는 MIP-03을 병합하고 TypeScript 참조 채팅 앱을 개발 중입니다. diVine은 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> QR 인증과 멘션 지원을 추가했습니다. 새로운 NIP 제안들은 커뮤니티 관리, 시퀀스 기반 동기화, 암호화된 파일 저장을 다룹니다. 또한 Nostr 1월의 5년을 돌아보며, 2021년 소수의 얼리 어답터들부터 2023년 Damus의 폭발적인 App Store 출시, 2025년 성숙해진 클라이언트 생태계까지 프로토콜의 진화를 추적합니다.&lt;/p></description><content:encoded>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 안내하는 주간 뉴스레터입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> Ridestr가 &lt;a href="https://nostrcompass.org/ko/topics/cashu/">Cashu&lt;/a> 결제와 암호화된 위치 공유를 통해 탈중앙화 라이드셰어링을 Nostr에 도입했습니다. Pomade는 다중서명 서명자를 위한 이메일 기반 복구 기능을 선보였습니다. Damus는 안정적인 DM 동기화를 위해 &lt;a href="https://nostrcompass.org/ko/topics/negentropy/">negentropy&lt;/a>를 출시했습니다. Amethyst 데스크톱 앱에 검색, 북마크, zap 기능이 추가되었습니다. Amber v4.1.1은 relay 신뢰도 점수를 표시합니다. Marmot는 MIP-03을 병합하고 TypeScript 참조 채팅 앱을 개발 중입니다. diVine은 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> QR 인증과 멘션 지원을 추가했습니다. 새로운 NIP 제안들은 커뮤니티 관리, 시퀀스 기반 동기화, 암호화된 파일 저장을 다룹니다. 또한 Nostr 1월의 5년을 돌아보며, 2021년 소수의 얼리 어답터들부터 2023년 Damus의 폭발적인 App Store 출시, 2025년 성숙해진 클라이언트 생태계까지 프로토콜의 진화를 추적합니다.&lt;/p>
&lt;h2 id="뉴스">뉴스&lt;/h2>
&lt;h3 id="ridestr-nostr에-탈중앙화-라이드셰어링-도입">Ridestr, Nostr에 탈중앙화 라이드셰어링 도입&lt;/h3>
&lt;p>&lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a>는 Nostr 위에 완전히 구축된 P2P 라이드셰어 애플리케이션을 개발 중이며, Bitcoin과 &lt;a href="https://nostrcompass.org/ko/topics/cashu/">Cashu&lt;/a> 결제를 통한 드라이버-라이더 간 직접 거래를 가능하게 합니다. 이 프로토콜은 커스텀 event kind(30173, 3173-3175, 30180/30181)를 사용하여 라이드를 조정하면서 점진적 위치 공개와 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> 암호화를 통해 프라이버시를 유지합니다.&lt;/p>
&lt;p>시스템은 신중하게 조율된 흐름으로 작동합니다: 드라이버는 kind 30173 event를 통해 geohash로 인코딩된 위치(약 5km 정밀도)로 가용성을 브로드캐스트하고, 라이더는 kind 3173을 통해 요금 견적과 함께 라이드를 요청하며, 라이드 시작 전에 HTLC 에스크로 토큰을 사용하여 결제가 보장됩니다. 위치 프라이버시는 점진적 공개를 통해 보존되며, 픽업 세부정보는 드라이버가 도착했을 때만 공개되고 목적지는 PIN 확인 후에 공유됩니다. 당사자 간의 모든 통신은 프라이버시를 위해 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> 암호화를 사용합니다.&lt;/p>
&lt;p>Ridestr는 P2PK 서명이 포함된 HTLC 에스크로를 통해 결제 보안을 구현합니다. 라이더가 드라이버의 제안을 수락하면, 드라이버만 라이드 완료 후 청구할 수 있는 payment hash로 &lt;a href="https://nostrcompass.org/ko/topics/cashu/">Cashu&lt;/a> 토큰을 잠급니다. 현재 프로토콜은 단일 mint 아키텍처로 운영되어 라이더와 드라이버가 동일한 &lt;a href="https://nostrcompass.org/ko/topics/cashu/">Cashu&lt;/a> mint를 사용해야 합니다. 프로젝트의 Kotlin 기반 Android 구현은 NUT-07 상태 확인을 통해 증명 검증 및 오래된 증명 복구를 처리합니다.&lt;/p>
&lt;p>Ridestr는 대부분의 Nostr 애플리케이션이 피하는 과제들을 해결합니다: 실시간 위치 조정, 분쟁 해결이 포함된 결제 에스크로, 물리적 세계 상호작용을 위한 평판 시스템. 이 프로젝트는 베타 단계이며 Nostr의 event 모델이 콘텐츠 공유뿐만 아니라 P2P 서비스 마켓플레이스도 지원할 수 있음을 보여줍니다.&lt;/p>
&lt;h3 id="pomade-다중서명-서명자를-위한-알파-복구-시스템-출시">Pomade, 다중서명 서명자를 위한 알파 복구 시스템 출시&lt;/h3>
&lt;p>hodlbod가 개발한 &lt;a href="https://github.com/coracle-social/pomade">Pomade&lt;/a>는 기존 &lt;a href="https://github.com/FROSTR-ORG">FROSTR&lt;/a> 생태계 위에 구축되어 복구 중심의 임계값 서명 서비스를 제공합니다. @frostr/bifrost 라이브러리를 통한 &lt;a href="https://nostrcompass.org/ko/topics/frost/">FROST&lt;/a> (Flexible Round-Optimized Schnorr Threshold) 서명을 사용하여, Pomade는 임계값 암호화 위에 이메일 기반 복구 흐름을 추가합니다. 시스템은 Shamir Secret Sharing을 사용하여 사용자의 비밀 키를 분할하고, 구성 가능한 임계값(2-of-3, 3-of-5 등)으로 여러 독립 서명자에게 분산합니다.&lt;/p>
&lt;p>프로토콜은 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> 암호화 페이로드가 포함된 단일 event kind(28350)를 사용하여 Nostr를 통해 완전히 작동합니다. 서명 시, 클라이언트는 최소 &lt;code>threshold&lt;/code> 서명자에게 부분 서명을 요청한 다음 이를 유효한 Schnorr 서명으로 집계합니다. 암호화의 경우, 서명자들은 어느 단일 당사자도 전체 키를 학습하지 않고 ECDH를 통해 공유 비밀을 도출하기 위해 협력합니다.&lt;/p>
&lt;p>복구는 두 가지 인증 방법을 통해 작동합니다: 비밀번호 기반(서명자의 pubkey를 salt로 사용하는 argon2id) 또는 이메일 OTP. OTP 복구 중 MITM 공격을 방지하기 위해, 각 서명자는 클라이언트가 제공한 접두사로 자체 확인 코드를 생성하여 사용자가 각 서명자와 독립적으로 인증하도록 요구합니다. 프로토콜은 스팸 방지를 위해 등록 event에 작업 증명(&lt;a href="https://nostrcompass.org/ko/topics/nip-13/">NIP-13&lt;/a>에 따라 20+ 비트)을 요구합니다.&lt;/p>
&lt;p>신뢰 모델은 명시적입니다: &lt;code>threshold&lt;/code> 서명자가 공모하면 키를 훔칠 수 있습니다. 이메일 제공자는 OTP를 가로챌 수 있으므로 완전히 신뢰됩니다. 사용자는 전체 비밀 키를 독립적으로 복구할 수 없으며, 이를 위해서는 &lt;code>threshold&lt;/code> 서명자의 협력이 필요합니다. 프로토콜은 키 관리에 익숙하지 않은 신규 사용자 온보딩을 위해 설계되었으며, 사용자가 익숙해지면 자기 수탁으로 마이그레이션할 것을 명시적으로 권장합니다. Pomade는 감사되지 않은 알파 상태를 고려하여 &amp;ldquo;키 손실, 도난, 서비스 거부 또는 메타데이터 유출&amp;rdquo; 가능성에 대해 경고합니다.&lt;/p>
&lt;h2 id="릴리스">릴리스&lt;/h2>
&lt;h3 id="damus-안정적인-dm-동기화를-위해-negentropy-출시">Damus, 안정적인 DM 동기화를 위해 Negentropy 출시&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus/tree/v1.13">Damus v1.13&lt;/a>은 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-01-21-newsletter/#damus-ios-client---open-prs">지난주 오픈 PR로 미리 본&lt;/a> negentropy 구현을 출시했습니다. &lt;a href="https://github.com/damus-io/damus/pull/3536">PR #3536&lt;/a>은 네트워킹 레이어에 기본 &lt;a href="https://nostrcompass.org/ko/topics/negentropy/">negentropy&lt;/a> 지원을 추가하여, 프로토콜을 지원하는 relay와의 집합 조정을 가능하게 합니다. 동반 &lt;a href="https://github.com/damus-io/damus/pull/3547">PR #3547&lt;/a>은 표준 REQ 구독이 실패할 때 누락된 메시지를 복구하기 위해 negentropy를 사용하는 당겨서 새로고침 DM 동기화를 추가합니다.&lt;/p>
&lt;p>구현은 보수적인 접근 방식을 따릅니다: 일반적인 DM 로딩은 변경 없이 계속되며, &lt;a href="https://nostrcompass.org/ko/topics/negentropy/">negentropy&lt;/a>는 사용자가 수동으로 새로고침할 때 복구 메커니즘으로 사용 가능합니다. 자동화된 테스트는 표준 쿼리가 놓칠 수 있는 오래된 타임스탬프의 DM을 생성한 다음 &lt;a href="https://nostrcompass.org/ko/topics/negentropy/">negentropy&lt;/a> 동기화를 사용하여 성공적으로 검색하는 것으로 수정을 시연합니다. &lt;a href="https://nostrcompass.org/ko/topics/negentropy/">negentropy&lt;/a> 지원은 호환되는 relay가 필요하지만, 구현은 가능한 곳에서 프로토콜을 사용하여 혼합 relay 환경을 우아하게 처리합니다.&lt;/p>
&lt;h3 id="amber-v411---relay-신뢰도-점수">Amber v4.1.1 - Relay 신뢰도 점수&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.1">Amber v4.1.1&lt;/a>은 relay 신뢰도 점수 표시(&lt;a href="https://github.com/greenart7c3/Amber/pull/289">PR #289&lt;/a>)를 출시하여, &lt;a href="https://nostrcompass.org/ko/newsletters/2026-01-21-newsletter/#nip-updates">지난주 Trusted Relay Assertions NIP 보도&lt;/a>에서 논의된 relay 평가 개념을 구현합니다. 신뢰도 점수는 이제 Relays 페이지와 NostrConnect 연결 요청에 표시되어, 사용자가 연결을 승인하기 전에 relay 신뢰성을 평가할 수 있습니다. 이 릴리스에는 재설계된 로그인/이벤트/권한 UI와 &lt;code>switch_relays&lt;/code> 메서드 지원도 포함됩니다. 성능 개선은 keystore 작업을 캐시하여, 구형 기기에서 20초 이상의 로드 시간에 대한 보고를 해결합니다.&lt;/p>
&lt;h3 id="nak-v0182---mcp-통합">nak v0.18.2 - MCP 통합&lt;/h3>
&lt;p>fiatjaf의 &lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a> (Nostr Army Knife) &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.18.2">v0.18.2&lt;/a>는 &lt;code>nak mcp&lt;/code>를 통해 &lt;a href="https://nostrify.dev/mcp">Model Context Protocol&lt;/a> 지원을 추가하여, AI 에이전트가 Nostr에서 사람을 검색하고, 노트를 게시하고, 사용자를 멘션하고, outbox 모델을 사용하여 콘텐츠를 읽을 수 있게 합니다. 이 릴리스는 또한 사전 빌드된 바이너리를 다운로드하는 &lt;a href="https://github.com/fiatjaf/nak/blob/master/install.sh">원라인 설치 프로그램&lt;/a>(&lt;code>curl -sSL https://raw.githubusercontent.com/fiatjaf/nak/master/install.sh | sh&lt;/code>)을 도입하여, 최종 사용자에게 Go 툴체인 요구 사항을 제거합니다. Bunker 모드는 이제 Unix 소켓과 &lt;code>switch_relays&lt;/code>를 지원합니다.&lt;/p>
&lt;h3 id="zeus-v0122-beta---nwc-수정">Zeus v0.12.2 Beta - NWC 수정&lt;/h3>
&lt;p>&lt;a href="https://github.com/ZeusLN/zeus/releases">Zeus v0.12.2-beta1&lt;/a>은 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-01-21-newsletter/#zeus-lightning-wallet-with-nostr-wallet-connect">지난주 Zeus 보도&lt;/a>에서 다룬 문제를 해결하는 여러 NWC 수정 사항을 출시합니다.&lt;/p>
&lt;h2 id="프로젝트-업데이트">프로젝트 업데이트&lt;/h2>
&lt;h3 id="amethyst-desktop---페이즈-2a-출시">Amethyst Desktop - 페이즈 2A 출시&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>는 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1676">데스크톱 앱의 페이즈 2A&lt;/a>를 출시하여, 데스크톱 경험에 검색, 북마크, Zap, 스레드 뷰, 장문 콘텐츠(Reads)를 추가했습니다. 동반 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1683">PR #1683&lt;/a>은 투명한 event 브로드캐스팅 피드백을 추가하여, 사용자가 이제 event가 네트워크 전체에 전파될 때 relay별 실시간 상태를 볼 수 있어 연결 문제를 진단하기 쉬워졌습니다.&lt;/p>
&lt;h3 id="notedeck-진행-상황-캘린더-앱과-ux-개선">Notedeck 진행 상황: 캘린더 앱과 UX 개선&lt;/h3>
&lt;p>Damus 팀의 &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> 데스크톱 클라이언트는 모바일 뷰에서 더 많은 화면 공간을 위해 스크롤 속도에 반응하는 자동 숨김 툴바 동작(&lt;a href="https://github.com/damus-io/notedeck/pull/1268">PR #1268&lt;/a>)을 병합했습니다. &lt;a href="https://github.com/damus-io/notedeck/pull/1271">드래프트 PR #1271&lt;/a>은 월/주/일/의제 뷰, RSVP 지원, 캘린더 이벤트에 대한 &lt;a href="https://nostrcompass.org/ko/topics/nip-22/">NIP-22&lt;/a> 댓글이 포함된 전체 &lt;a href="https://nostrcompass.org/ko/topics/nip-52/">NIP-52&lt;/a> 캘린더 앱을 추가하며, 현재 테스트를 위해 기능 플래그로 설정되어 있습니다.&lt;/p>
&lt;h3 id="jumble-커뮤니티-모드-추가">Jumble, 커뮤니티 모드 추가&lt;/h3>
&lt;p>relay 중심 웹 클라이언트인 &lt;a href="https://github.com/CodyTseng/jumble">Jumble&lt;/a>은 &lt;a href="https://github.com/CodyTseng/jumble/pull/738">커뮤니티 모드&lt;/a>와 &lt;a href="https://github.com/CodyTseng/jumble/pull/736">환경 변수를 통한 relay 세트 프리셋&lt;/a> 지원을 추가하여, &lt;a href="https://nostr.moe/">nostr.moe&lt;/a>와 같은 테마별 인스턴스를 쉽게 배포할 수 있게 했습니다.&lt;/p>
&lt;h3 id="shopstr-주문-대시보드">Shopstr 주문 대시보드&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a>는 채팅 기반 주문 관리를 전용 &lt;a href="https://github.com/shopstr-eng/shopstr/pull/219">주문 대시보드&lt;/a>로 교체했습니다. 새 인터페이스는 판매자가 주문 상태를 추적하고, 메시지를 읽음으로 표시하고, 채팅 스레드를 스크롤하지 않고도 이행을 관리할 수 있는 중앙 집중식 뷰를 제공합니다. 이 업데이트는 더 나은 필터링을 위해 주문 DM이 태그되는 방식을 수정하고 서버 측 주문 상태 API를 위해 IndexedDB 캐싱을 폐기합니다.&lt;/p>
&lt;h3 id="formstr-그리드-질문-추가">Formstr, 그리드 질문 추가&lt;/h3>
&lt;p>Nostr 네이티브 폼 앱인 &lt;a href="https://github.com/abh3po/nostr-forms">Formstr&lt;/a>는 &lt;a href="https://github.com/abh3po/nostr-forms/pull/419">그리드 질문&lt;/a>을 추가하고 임베드 지원과 함께 &lt;a href="https://github.com/abh3po/nostr-forms/pull/410">SDK를 재작성&lt;/a>했습니다. &lt;a href="https://github.com/abh3po/nostr-forms/pull/418">비-NIP-07 서명자를 위한 수정&lt;/a>은 bunker나 로컬 서명자를 사용하여 자신의 신원으로 폼을 제출하려는 사용자의 문제를 해결했습니다.&lt;/p>
&lt;h3 id="nostr-tools-암호화-의존성-업그레이드">nostr-tools 암호화 의존성 업그레이드&lt;/h3>
&lt;p>핵심 JavaScript 라이브러리인 &lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a>는 &lt;a href="https://github.com/nbd-wtf/nostr-tools/pull/520">@noble/curves v2.0.1로 업그레이드&lt;/a>하여, 27개 파일에 걸친 브레이킹 API 변경을 해결하고 최신 감사된 noble 라이브러리를 채택했습니다. fiatjaf는 또한 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a>에 &lt;code>switch_relays&lt;/code> 지원을 추가하여, bunker 클라이언트가 relay 연결을 동적으로 변경할 수 있게 했습니다.&lt;/p>
&lt;h3 id="zeus-nip-87-mint-리뷰-작업-중">Zeus, NIP-87 Mint 리뷰 작업 중&lt;/h3>
&lt;p>&lt;a href="https://github.com/ZeusLN/zeus">Zeus&lt;/a>는 [&lt;a href="https://nostrcompass.org/ko/topics/nip-87/">NIP-87&lt;/a> mint 리뷰를 위한 오픈 PR](&lt;a href="https://github.com/ZeusLN/zeus/pull/3576">https://github.com/ZeusLN/zeus/pull/3576&lt;/a>)을 보유하고 있어, 사용자가 Nostr 팔로우로 필터링된 &lt;a href="https://nostrcompass.org/ko/topics/cashu/">Cashu&lt;/a> mint를 발견하고 리뷰할 수 있습니다. 리뷰에는 별점이 포함되며 익명으로 또는 사용자의 nsec로 제출할 수 있습니다.&lt;/p>
&lt;h3 id="camelus-전체-dm-지원-출시">Camelus, 전체 DM 지원 출시&lt;/h3>
&lt;p>배터리 효율적인 모바일 성능을 위해 Dart NDK로 구축된 Flutter 기반 Android 클라이언트인 &lt;a href="https://github.com/camelus-hq/camelus">Camelus&lt;/a>는 이번 주 20개 이상의 커밋으로 포괄적인 다이렉트 메시징을 추가했습니다. 업데이트에는 채팅 카테고리, 메시지 날짜, 낙관적 전송 UI, 자신에게 노트 기능, 적절한 DM relay 처리가 포함됩니다.&lt;/p>
&lt;h3 id="marmot-protocol-업데이트">Marmot Protocol 업데이트&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/newsletters/2026-01-21-newsletter/#marmot-protocol-white-noise-encrypted-group-chat-library">지난주 오픈 PR로 다뤘던&lt;/a> MIP-03 결정론적 커밋 해결이 이제 병합되었습니다. &lt;a href="https://github.com/marmot-protocol/mdk/pull/152">MDK PR #152&lt;/a>는 동일한 epoch에 대해 여러 유효한 커밋이 도착할 때 모든 &lt;a href="https://nostrcompass.org/ko/topics/mls/">MLS&lt;/a> 기반 그룹 채팅이 동일한 상태로 수렴하도록 보장합니다.&lt;/p>
&lt;p>동반 &lt;a href="https://github.com/marmot-protocol/marmot/pull/28">스펙 PR #28&lt;/a>은 구현 감사에서 발견된 간극을 해결하는 init_key 수명 주기 요구 사항을 추가합니다: Welcome 메시지의 개인 키 자료는 처리 후 안전하게 삭제되어야 하며(영점화, 스토리지 정리), 새 멤버는 forward secrecy를 위해 24시간 이내에 자기 업데이트를 수행해야 합니다.&lt;/p>
&lt;p>TypeScript SDK(&lt;a href="https://github.com/marmot-protocol/marmot-ts">marmot-ts&lt;/a>)는 참조 채팅 애플리케이션을 구축 중입니다. &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/37">PR #37&lt;/a>은 그룹 생성/목록, 게시/브로드캐스트/삭제 흐름이 포함된 키 패키지 관리, QR 코드 초대를 추가합니다. hzrd149의 &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/38">오픈 PR #38&lt;/a>은 페이지네이션이 포함된 메시지 이력 지속성을 구현합니다. whitenoise-rs 백엔드는 다국어 지원(&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/455">PR #455&lt;/a>)과 MIP-04 v2 미디어 참조(&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/450">PR #450&lt;/a>)를 포함하여 이번 주 15개의 PR을 병합했습니다.&lt;/p>
&lt;h3 id="divine-nostr-통합-기능-추가">diVine, Nostr 통합 기능 추가&lt;/h3>
&lt;p>짧은 동영상 앱인 &lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>은 빠른 Nostr 통합을 계속하고 있습니다.&lt;/p>
&lt;p>오픈 PR에는 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> QR 코드 인증(&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1019">PR #1019&lt;/a>)과 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> 암호화 다이렉트 메시징(&lt;a href="https://github.com/divinevideo/divine-mobile/pull/834">PR #834&lt;/a>)이 포함됩니다. 이번 주 활동은 &lt;code>nostr:&lt;/code> URI와 @멘션을 클릭 가능한 프로필 링크로 변환하는 &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1098">멘션 지원&lt;/a>, Nostr 프로필을 사용한 &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1097">Classic Viners 아바타 폴백&lt;/a>, &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1056">그리기&lt;/a>, &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1053">필터&lt;/a>, &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1050">스티커&lt;/a>를 포함한 동영상 편집 도구에 집중했습니다.&lt;/p>
&lt;h2 id="nip-업데이트">NIP 업데이트&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 저장소&lt;/a>의 최근 변경 사항:&lt;/p>
&lt;p>&lt;strong>병합됨:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1534">Trusted Relay Assertions&lt;/a>&lt;/strong> - relay 신뢰도 점수 표준화를 위한 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-01-21-newsletter/#nip-updates">지난주 다뤘던&lt;/a> 제안이 병합되었습니다. 사양은 신뢰성, 품질, 접근성에 걸친 점수를 가진 relay 신뢰 어설션용 kind 30385 event를 정의합니다. 병합에 이르는 논의는 신뢰도 점수가 &amp;ldquo;전역&amp;rdquo;(모든 사용자에 대해 한 번 계산)이어야 하는지 &amp;ldquo;개인화&amp;rdquo;(각 관찰자의 소셜 그래프에 상대적)이어야 하는지에 집중되었습니다. &lt;a href="https://trust.nostr.band/">nostr.band의 Trust Rank&lt;/a>와 &lt;a href="https://github.com/Pretty-Good-Freedom-Tech/graperank-nodejs">GrapeRank&lt;/a> 같은 PageRank 스타일 알고리즘은 가짜 계정을 통해 전달되는 순위를 봇 팜 크기로 나누어 시빌 공격에 저항합니다.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>오픈 PR과 논의:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Communikeys&lt;/strong> - relay 기반 접근 방식 대신 기존 npub를 커뮤니티 식별자로 사용하는 커뮤니티 관리를 위한 &lt;a href="https://nostrhub.io">포괄적인 제안&lt;/a>. 어떤 npub도 kind 10222 event를 게시하여 커뮤니티가 될 수 있습니다; 게시물은 kind 30222 event를 통해 커뮤니티를 대상으로 합니다. 접근 제어는 &lt;a href="https://nostrcompass.org/ko/topics/nip-58/">NIP-58&lt;/a> 배지를 사용하여 커뮤니티 키의 콜드 스토리지와 함께 위임된 멤버십 관리를 가능하게 합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2196">NIP-CF: Changes Feed&lt;/a>&lt;/strong> - 타임스탬프 기반 &lt;code>since&lt;/code> 필터의 대안으로 시퀀스 기반 event 동기화를 제안하는 드래프트. 문제: &lt;code>since&lt;/code> 타임스탬프를 사용하는 표준 Nostr 동기화는 여러 event가 동일한 초 정밀도 타임스탬프를 공유하거나, 클라이언트와 relay 시계가 어긋나거나, 체크포인트가 부정확할 때 event를 놓칠 수 있습니다. NIP-CF는 relay가 저장된 event에 단조 증가하는 시퀀스 번호를 할당하여 엄격한 전체 순서를 제공함으로써 이를 해결합니다. 클라이언트는 특정 시퀀스 번호 이후의 변경 사항을 요청하고 보장된 순서로 event를 수신하며, event를 절대 놓치지 않는 정확한 체크포인트를 제공합니다. 이 제안은 또한 초기 동기화 후 구독이 실시간 업데이트를 위해 열려 있는 라이브/연속 모드를 지원합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1947">NIP-XX: Encrypted File Sync&lt;/a>&lt;/strong> - Nostr relay를 사용하여 기기 간에 암호화된 콘텐츠를 동기화하기 위한 kind 30800(암호화된 파일), 30801(볼트 인덱스), 30802(공유 문서)를 정의하는 프로토콜. 이 프로토콜은 로컬 퍼스트 노트 앱이 중앙 집중식 서버 없이 종단 간 암호화 동기화를 제공할 수 있게 합니다. 파일 내용, 경로, 이름, 폴더 구조가 모두 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> 자기 암호화를 사용하여 암호화되어, relay는 읽을 수 없는 blob을 저장합니다. 이미지와 같은 바이너리 첨부 파일은 클라이언트 측 암호화와 함께 &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a> 서버를 사용합니다. Kind 30802는 수신자의 공개 키로 암호화하여 사용자 간 문서 공유를 가능하게 합니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nostr-1월의-5년">Nostr 1월의 5년&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/ko/newsletters/2025-12-31-newsletter/#december-recap-five-years-of-nostr-decembers">지난달 뉴스레터&lt;/a>는 fiatjaf의 첫 클라이언트 출시부터 Jack Dorsey의 촉매적 기부까지 Nostr의 12월 이정표를 추적했습니다. 이 회고록은 2021년부터 2025년까지 각 1월에 일어난 일을 검증된 기술 개발에 초점을 맞춰 기록합니다.&lt;/p>
&lt;h3 id="2021년-1월-초기-개발">2021년 1월: 초기 개발&lt;/h3>
&lt;p>Nostr의 세 번째 달은 2020년 12월에 출시된 fiatjaf의 Vue.js 클라이언트인 Branle의 지속적인 개발을 보았습니다. 15명 미만으로 추정되는 소수의 얼리 어답터 그룹이 Telegram 그룹 &lt;a href="https://t.me/nostr_protocol">@nostr_protocol&lt;/a>(2020년 11월 16일 생성)을 통해 조율하며 하나 또는 두 개의 실험적 relay에서 프로토콜을 테스트했습니다. 커맨드라인 클라이언트 noscl은 터미널 기반 상호작용을 제공했습니다.&lt;/p>
&lt;p>기술적 기반은 이미 고정되어 있었습니다: secp256k1 공개 키로 식별되는 사용자, Schnorr 서명으로 암호화 서명된 게시물, 서로 통신하지 않는 덤 스토리지 역할의 relay. 이것은 의도적으로 Bitcoin 네이티브 암호화였으며, 수년 후 채택 패턴을 형성할 설계 선택이었습니다.&lt;/p>
&lt;h3 id="2022년-1월-개발자-발견">2022년 1월: 개발자 발견&lt;/h3>
&lt;p>2022년 1월은 110포인트와 138개 댓글을 생성한 &lt;a href="https://news.ycombinator.com/item?id=29749061">첫 Hacker News 등장&lt;/a>(2021년 12월 31일)의 열기 속에서 시작되었습니다. 해당 게시물 당시, 전체 네트워크를 구동하는 relay는 약 7개에 불과했으며, 댓글 작성자들은 &amp;ldquo;nostr가 아주 새롭고 아무도 사용하지 않기 때문에 스팸은 아직 문제가 아니다&amp;quot;라고 언급했습니다. Robert C. Martin(&amp;ldquo;Uncle Bob&amp;rdquo;)은 Nostr를 &amp;ldquo;소셜 커뮤니케이션을 위한 최종 솔루션&amp;quot;이 될 가능성이 있다고 지지했습니다. 논의는 1월까지 계속되었고, 개발자들은 relay 아키텍처 대 진정한 P2P, 검열 저항 대 중재, 단순함이 확장될 수 있는지에 대해 토론했습니다.&lt;/p>
&lt;p>HN 게시물은 새로운 구현의 물결을 촉발했습니다. Uncle Bob 자신이 1월 18일에 Clojure 데스크톱 클라이언트인 &lt;a href="https://github.com/unclebob/more-speech">more-speech&lt;/a>를 시작했습니다. fiatjaf의 &lt;a href="https://github.com/nbd-wtf/go-nostr">go-nostr&lt;/a> 라이브러리(2021년 1월 생성)와 &lt;a href="https://github.com/fiatjaf/noscl">noscl&lt;/a> 커맨드라인 클라이언트는 Go 도구를 제공했고, &lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a>는 JavaScript 지원을 제공했습니다. 2022년 12월까지 약 800개의 프로필이 바이오를 가지고 있었습니다. Branle은 개인 키 가져오기와 다중 relay 지원을 포함한 업데이트를 받으며 주요 웹 클라이언트로 남아 있었습니다. 기술적 과제는 분명했습니다: 64자 16진수 키는 직관적이지 않았고, 메시지 지연은 사용자를 좌절시켰으며, 커뮤니티는 아키텍처가 Twitter 규모의 트래픽을 처리할 수 있는지 의문을 제기했습니다.&lt;/p>
&lt;h3 id="2023년-1월-폭발적-성장">2023년 1월: 폭발적 성장&lt;/h3>
&lt;p>2023년 1월은 Nostr를 실험에서 운동으로 변모시켰습니다. William Casarin(jb55)의 iOS 클라이언트인 Damus는 Apple의 App Store 승인 과정과 싸웠습니다. 1월 1일 거부, 1월 26일 다시 거부, 마침내 &lt;a href="https://www.coindesk.com/tech/2023/02/01/decentralized-social-media-project-nostrs-damus-gets-listed-on-apple-app-store">1월 31일 승인&lt;/a>. 그 승인은 연쇄 반응을 일으켰습니다: Damus는 즉시 미국 소셜 네트워킹 10위에 올랐습니다. Jack Dorsey는 이를 &amp;ldquo;오픈 프로토콜의 이정표&amp;quot;라고 &lt;a href="https://web.archive.org/web/20240304043638/https://www.theblock.co/post/207448/nostr-based-decentralized-twitter-alternative-damus-goes-live-on-apple-app-store">평가했습니다&lt;/a>.&lt;/p>
&lt;p>8일 전인 1월 23일, &lt;a href="https://x.com/Snowden/status/1617623779626352640">Edward Snowden이 Nostr에서의 존재를 발표했습니다&lt;/a>: &amp;ldquo;Nostr의 멋진 점 중 하나는&amp;hellip; 검열 저항 외에도 280자로 제한되지 않는다는 것입니다.&amp;rdquo; NSA 내부 고발자의 지지는 프라이버시를 중시하는 커뮤니티에서 무게를 실었고, 사용자들은 즉시 Lightning을 통해 그에게 sats를 zap하기 시작했습니다.&lt;/p>
&lt;p>웹 클라이언트들은 유입을 온보딩하기 위해 경쟁했습니다. 2022년 12월 kieran이 만든 &lt;a href="https://github.com/v0l/snort">Snort&lt;/a>는 기능이 풍부한 React 클라이언트로 부상했습니다; 1월 13일, Snort는 Nostr Plebs API를 통한 NIP-05 등록을 통합하여 새 사용자가 온보딩 중에 사람이 읽을 수 있는 신원을 주장할 수 있게 했습니다. Satoshi로부터 두 번째 Bitcoin 거래를 받은 초기 Bitcoin 기여자인 Martti Malmi가 풀타임으로 개발한 &lt;a href="https://iris.to">Iris&lt;/a>는 iris.to에서 무료 NIP-05 신원과 함께 웹 및 모바일 인터페이스를 모두 제공했습니다. monlovesmango가 Branle 포크로 Quasar(Vue.js)를 사용하여 구축한 &lt;a href="https://github.com/monlovesmango/astral">Astral&lt;/a>은 사용자가 게시 및 필터링을 위해 relay를 세트로 구성할 수 있는 relay 그룹화 기능으로 relay 관리에 집중했습니다. iOS 클라이언트용 TestFlight 베타는 몇 시간 만에 마감되었고, Amethyst가 Android를 장악했습니다.&lt;/p>
&lt;p>인프라는 속도를 맞추기 위해 분주했습니다. 모든 relay는 자비를 들여 운영하는 열성팬들이 운영했습니다. Lightning 소액 결제를 사용하는 유료 relay는 자연스러운 스팸 필터링을 만들었지만 접근 장벽을 도입했습니다. &lt;a href="https://techcrunch.com/2023/02/02/damus-pulled-from-apples-app-store-in-china-after-two-days/">Damus는 승인 단 이틀 만에 중국 App Store에서 삭제되었습니다&lt;/a>, 보도에 따르면 중국 최고 인터넷 감시 기관의 요청에 따른 것이었습니다.&lt;/p>
&lt;h3 id="2024년-1월-프로토콜-강화">2024년 1월: 프로토콜 강화&lt;/h3>
&lt;p>2024년 1월은 프로토콜 표준화와 커뮤니티 구축에 집중했습니다. &lt;a href="https://www.nostrphx.com/events">Nostr PHX&lt;/a>는 1월 5일 Phoenix에서 지역 사이퍼펑크들을 모으는 밋업으로 한 해를 시작했습니다. 이것은 BTC Prague(6월), 리가의 Nostriga(8월), Nostrasia를 포함한 그해 많은 커뮤니티 이벤트 중 첫 번째였습니다.&lt;/p>
&lt;p>가장 중요한 프로토콜 개발은 1월 29일에 병합된 &lt;a href="https://github.com/nostr-protocol/nips/pull/716">NIP-59 (Gift Wrap)&lt;/a>로, 암호화된 통신을 위한 메타데이터 보호를 제공했습니다. Gift Wrap은 relay로부터 발신자 신원을 숨기기 위해 &lt;a href="https://github.com/paulmillr/nip44">NIP-44의 암호화 표준&lt;/a>(2023년 12월 &lt;a href="https://cure53.de/audit-report_nip44-implementations.pdf">Cure53에 의해 감사됨&lt;/a>) 위에 구축됩니다. 이 프로토콜은 암호화된 메시지를 무작위의 일회용 키 쌍으로 서명된 외부 event 안에 래핑합니다. Relay는 일회용 pubkey만 보고, 실제 발신자의 신원은 수신자만 복호화할 수 있는 암호화된 페이로드 안에 묻혀 있습니다. 이는 relay 운영자와 네트워크 관찰자가 누가 누구에게 메시지를 보내는지 알 수 없게 합니다. 타임스탬프도 타이밍 분석을 무력화하기 위해 무작위화할 수 있습니다.&lt;/p>
&lt;p>생태계는 소셜 미디어 너머로 확장되었습니다. &lt;a href="https://plebeian.market">Plebeian Market&lt;/a>은 &lt;a href="https://nostrcompass.org/ko/topics/nip-15/">NIP-15&lt;/a> 준수를 통해 완전한 Nostr 네이티브가 되어, 교차 상점 장바구니와 상인 발견을 위한 상점 브라우저를 가능하게 했습니다. &lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a>는 Bitcoin 상거래를 촉진하는 무허가 마켓플레이스로 부상했습니다. kieran이 구축한 &lt;a href="https://zap.stream/">Zap.stream&lt;/a>은 분당 21 sats의 Lightning 결제와 함께 Nostr에 라이브 스트리밍을 가져왔습니다. 개발자 도구는 &lt;a href="https://github.com/nostr-dev-kit/ndk">NDK&lt;/a>가 TypeScript 추상화를 제공하고 &lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a>가 Rust 바인딩을 제공하면서 성숙해졌습니다. &lt;a href="https://blog.zeusln.com/new-release-zeus-v0-8-1/">Zeus v0.8.1&lt;/a>은 Nostr 연락처 가져오기와 영구 LND를 출시하여 이후 릴리스에서 Nostr Wallet Connect 통합의 기반을 마련했습니다.&lt;/p>
&lt;p>그러나 인프라 지속 가능성은 &lt;a href="https://arxiv.org/abs/2402.05709">여전히 도전적이었습니다&lt;/a>. 이 기간의 학술 연구에 따르면 relay의 95%가 운영 비용을 충당하는 데 어려움을 겪었으며, 20%가 상당한 다운타임을 경험했습니다. 유료 relay의 입장료는 평균 1,000 sats(약 $0.45) 미만으로 운영을 유지하기에 불충분했습니다.&lt;/p>
&lt;p>&lt;em>스캠에 대한 참고: 이 시기에 출시된 &amp;ldquo;Nostr Assets Protocol&amp;quot;과 관련 &amp;ldquo;$NOSTR&amp;rdquo; 토큰은 &lt;a href="https://www.aicoin.com/en/article/377704">fiatjaf에 의해 공개적으로 비난되어&lt;/a> 실제 Nostr 프로토콜과 아무런 연관이 없는 &amp;ldquo;100% 사기&amp;quot;이자 &amp;ldquo;친밀도 스캠&amp;quot;이라고 밝혀졌습니다.&lt;/em>&lt;/p>
&lt;h3 id="2025년-1월-클라이언트-성숙">2025년 1월: 클라이언트 성숙&lt;/h3>
&lt;p>2025년 1월은 생태계 전반에 걸쳐 지속적인 클라이언트 개발을 보았습니다. &lt;a href="https://www.nobsbitcoin.com/nostur-v1-17-0/">Nostur 1.17.0&lt;/a>은 1월 13일 읽기 상태의 기기 간 동기화, &lt;a href="https://nostrcompass.org/ko/topics/frost/">FROST&lt;/a> 다중 서명 로그인 지원, 최적화된 로컬 데이터베이스 성능을 출시했습니다. Amethyst는 수동 구성 대신 팔로우 목록을 기반으로 relay 세트를 자동으로 컴파일하는 outbox 모델로의 전환을 계속했습니다.&lt;/p>
&lt;p>주요 클라이언트들은 다이렉트 메시지를 위해 &lt;a href="https://nostrcompass.org/ko/topics/nip-04/">NIP-04&lt;/a>에서 벗어나 향상된 암호화와 메타데이터 보호를 위해 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a>과 제안된 &lt;a href="https://nostrcompass.org/ko/topics/nip-104/">NIP-104&lt;/a>로 마이그레이션하기 시작했습니다. 생태계가 더 효율적인 relay 사용 패턴으로 수렴하면서 Gossip 모델(outbox/inbox 통신)이 채택을 얻었습니다. 업계 관찰자들은 올해가 Nostr가 틈새 프로토콜에서 주류 인식으로 전환하는 해가 될 것이라고 예측했으며, 일일 활동을 두 배로 늘릴 수 있는 잠재적인 고프로필 플랫폼 마이그레이션을 전망했습니다.&lt;/p>
&lt;h3 id="2026년-1월-보안-및-서명-인프라">2026년 1월: 보안 및 서명 인프라&lt;/h3>
&lt;p>2026년 1월은 보안 및 서명 인프라에서 상당한 진전을 가져왔습니다. &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/2.6.18">Primal Android 2.6.18&lt;/a>은 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> 원격 서명과 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> 로컬 서명자 지원을 출시하여, Amber 및 Aegis와 함께 다른 Android 앱을 위한 완전한 서명 허브에 합류했습니다. &lt;a href="https://github.com/permissionlesstech/bitchat/pulls">Bitchat는 Cure53 보안 감사를 완료했습니다&lt;/a>, Signal과 NIP-44를 감사한 동일한 회사로, DH 비밀 지우기와 스레드 안전성 문제를 포함한 중요한 발견 사항을 수정하는 17개 이상의 PR이 있었습니다. Bitchat와 Damus 모두 향상된 신뢰성과 메모리 안전성을 위해 C Tor에서 Rust Arti로 마이그레이션했습니다.&lt;/p>
&lt;p>프로토콜 작업은 &lt;a href="https://github.com/nostr-protocol/nips/pull/1669">NIP-71&lt;/a>(주소 지정 가능한 비디오 event)이 병합되고 양자 공격에 대한 Nostr의 미래 보장에 대한 논의를 여는 포스트 양자 암호화 NIP와 함께 계속되었습니다. Trusted Relay Assertions 드래프트는 서명된 증명을 통해 relay 신뢰도 점수를 표준화할 것을 제안했습니다. &lt;a href="https://github.com/marmot-protocol/mdk">Marmot Protocol&lt;/a>은 감사 발견 사항을 해결하는 18개의 병합된 PR로 &lt;a href="https://nostrcompass.org/ko/topics/mls/">MLS&lt;/a> 기반 암호화 메시징을 강화했습니다.&lt;/p>
&lt;p>실제 응용 프로그램은 &lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a>가 &lt;a href="https://nostrcompass.org/ko/topics/cashu/">Cashu&lt;/a> 에스크로와 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> 암호화를 사용한 탈중앙화 라이드셰어링을 개발하고, &lt;a href="https://github.com/coracle-social/pomade">Pomade&lt;/a>가 &lt;a href="https://nostrcompass.org/ko/topics/frost/">FROST&lt;/a> 임계값 서명에 이메일 기반 복구 흐름을 추가하면서 확장되었습니다. Damus는 안정적인 DM 동기화를 위해 &lt;a href="https://nostrcompass.org/ko/topics/negentropy/">negentropy&lt;/a>를 출시했고, Amethyst의 데스크톱 앱은 검색, 북마크, zap과 함께 페이즈 2A에 도달했습니다.&lt;/p>
&lt;h3 id="앞으로">앞으로&lt;/h3>
&lt;p>6년간의 1월은 Nostr의 진화를 보여줍니다: 초기 개발(2021)에서 대중적 발견(2022), 폭발적 성장(2023), 프로토콜 강화(2024), 클라이언트 성숙(2025), 보안 인프라(2026)까지. 이 패턴은 오픈 프로토콜의 성장을 지켜본 사람이라면 익숙할 것입니다: 수년간의 조용한 구축, 조건이 맞을 때 갑작스러운 폭발, 그 다음 모든 것을 신뢰할 수 있게 만드는 더 긴 작업. 7개의 relay와 Hacker News 스레드로 시작한 것이 이제 실제 응용 프로그램을 갖춘 감사된 인프라입니다. 2027년의 질문: 누군가가 라이드를 호출하고, 암호화된 메시지를 보내고, 또는 Nostr를 사용하여 분실된 키를 복구할 때, 그들은 Nostr를 사용하고 있다는 것을 알까요?&lt;/p>
&lt;hr>
&lt;p>이번 주는 여기까지입니다. 무언가를 만들고 계신가요? 공유할 뉴스가 있나요? 프로젝트를 다뤄드릴까요? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">NIP-17 DM으로 연락하시거나&lt;/a> Nostr에서 찾아주세요.&lt;/p></content:encoded></item><item><title>Nostr Compass #6</title><link>https://nostrcompass.org/ko/newsletters/2026-01-21-newsletter/</link><pubDate>Wed, 21 Jan 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2026-01-21-newsletter/</guid><description>&lt;p>노스트 컴퍼스에 다시 방문해주셨습니다. 노스트의 주간 가이드입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> Bitchat는 C Tor를 Rust Arti 구현으로 교체하여 더 나은 안정성과 성능을 제공합니다. nostrdb-rs는 제로 할당 데이터베이스 작업을 활성화하는 스트리밍 폴드 쿼리를 획득합니다. Listr는 1년 이상의 휴면 후 NDK 3 베타 마이그레이션과 AI 지원 유지보수로 대규모 리팩토링을 받습니다. Zeus는 &lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47&lt;/a> (원격 라이트닝 제어를 위한 Nostr Wallet Connect) 수정사항 및 Cashu 개선에 중점을 둔 17개의 병합된 PR을 출시하며, Primal Android는 지갑 백업 흐름 및 &lt;a href="https://nostrcompass.org/ko/topics/nip-92/">NIP-92&lt;/a> (올바른 종횡비를 위한 미디어 치수) 지원을 추가합니다. 새로운 드래프트 NIP는 표준화된 리레이 신뢰도 점수 매기기를 위해 &lt;a href="https://nostrcompass.org/ko/topics/trusted-relay-assertions/">Trusted Relay Assertions&lt;/a>를 제안합니다.&lt;/p></description><content:encoded>&lt;p>노스트 컴퍼스에 다시 방문해주셨습니다. 노스트의 주간 가이드입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> Bitchat는 C Tor를 Rust Arti 구현으로 교체하여 더 나은 안정성과 성능을 제공합니다. nostrdb-rs는 제로 할당 데이터베이스 작업을 활성화하는 스트리밍 폴드 쿼리를 획득합니다. Listr는 1년 이상의 휴면 후 NDK 3 베타 마이그레이션과 AI 지원 유지보수로 대규모 리팩토링을 받습니다. Zeus는 &lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47&lt;/a> (원격 라이트닝 제어를 위한 Nostr Wallet Connect) 수정사항 및 Cashu 개선에 중점을 둔 17개의 병합된 PR을 출시하며, Primal Android는 지갑 백업 흐름 및 &lt;a href="https://nostrcompass.org/ko/topics/nip-92/">NIP-92&lt;/a> (올바른 종횡비를 위한 미디어 치수) 지원을 추가합니다. 새로운 드래프트 NIP는 표준화된 리레이 신뢰도 점수 매기기를 위해 &lt;a href="https://nostrcompass.org/ko/topics/trusted-relay-assertions/">Trusted Relay Assertions&lt;/a>를 제안합니다.&lt;/p>
&lt;h2 id="뉴스">뉴스&lt;/h2>
&lt;h3 id="bitchat가-tor-지원을-위해-rust-arti로-이동">Bitchat가 Tor 지원을 위해 Rust Arti로 이동&lt;/h3>
&lt;p>Bitchat는 C Tor에서 Tor 프로토콜의 Rust 구현인 &lt;a href="https://gitlab.torproject.org/tpo/core/arti">Arti&lt;/a>로 마이그레이션했습니다. &lt;a href="https://github.com/permissionlesstech/bitchat/pull/958">PR #958&lt;/a>은 C Tor 의존성을 제거하고 Arti를 통합하여 메모리 안전성 보장과 개선된 안정성을 제공합니다. 이 변경은 foreground 서비스 재시작을 야기한 휴면 웨이크 시도를 제거하여 C 구현의 오래된 문제를 해결합니다.&lt;/p>
&lt;p>&lt;strong>사용자에게 미치는 영향:&lt;/strong> 더 안정적인 암호화 메시징과 특히 모바일 기기에서 연결 해제가 적어집니다. Rust 구현은 충돌 위험을 감소시키고 지속적인 재연결 시도로 인한 배터리 소비를 줄입니다.&lt;/p>
&lt;p>Arti는 Tor 프로토콜의 Rust로 완전히 다시 작성된 것으로 Tor 프로젝트에서 메모리 안전성을 통해 더 나은 보안을 제공하고 애플리케이션으로의 통합을 용이하게 하기 위해 개발되었습니다. Bitchat의 경우 메모리 안전성 특성은 암호화된 메시지와 리레이 연결을 처리할 때 공격 표면을 감소시킵니다. 이 마이그레이션은 팀의 최근 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-01-13-newsletter/#bitchat-completes-cure53-security-audit">Cure53 보안 감사&lt;/a> (뉴스레터 #5에서 다룬)를 따르며 보안 개선을 계속합니다.&lt;/p>
&lt;p>이 PR은 또한 ChatViewModel 및 BLEService에 대한 포괄적인 테스트 범위를 도입하고, 죽은 코드를 제거하며, 테스트 스위트를 안정화합니다. Bluetooth Low Energy 메시 안정성 개선이 Tor 변경과 함께 제공되어 대규모 전송 실패를 해결합니다. 이러한 변경들은 Tor가 인터넷 연결을 제공하는 오프라인 메시 네트워킹 시나리오에서 Bitchat의 복원력을 개선합니다.&lt;/p>
&lt;h3 id="listr가-ai-기반-유지보수로-되살아남">Listr가 AI 기반 유지보수로 되살아남&lt;/h3>
&lt;p>JeffG는 1년 이상 휴면 상태였던 노스트 리스트 관리 애플리케이션 &lt;a href="https://github.com/erskingardner/listr">Listr&lt;/a>의 대규모 리팩토링을 발표했습니다. AI 지원을 사용하여 &lt;a href="https://github.com/nostr-dev-kit/ndk">NDK&lt;/a> 3 베타로의 마이그레이션, Svelte 및 Vite의 최신 버전으로의 업데이트, 모든 의존성을 현재 상태로 업데이트하는 포괄적인 업그레이드를 완료했습니다. 리팩토링은 팔로우 팩에 대한 1급 지원을 추가하고, 50개 항목을 초과하는 리스트에 대한 페이지 매김을 구현하며, 휴면 기간 동안 누적된 많은 버그를 수정합니다.&lt;/p>
&lt;p>&lt;strong>사용자에게 미치는 영향:&lt;/strong> Listr는 팔로우 리스트, 콘텐츠 모음 및 주제 큐레이션을 관리하기 위한 개선된 성능과 새로운 기능으로 다시 온라인 상태입니다. 페이지 매김 수정은 대규모 리스트를 실제로 사용 가능하게 만듭니다.&lt;/p>
&lt;p>JeffG는 AI 지원 없이는 이 유지보수 작업이 발생했을 가능성이 낮으며, 프로젝트가 버려지는 것을 방지한다고 언급했습니다. Listr는 노스트에서 콘텐츠 큐레이션을 활성화하여 사용자가 프로필, 주제 및 리소스의 리스트를 생성, 관리 및 공유할 수 있게 합니다. 업그레이드는 목록 관리가 프로토콜의 콘텐츠 발견의 중심이 됨에 따라 애플리케이션을 현재 노스트 표준 및 클라이언트 예상과 호환되게 유지합니다.&lt;/p>
&lt;h2 id="nip-업데이트">NIP 업데이트&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 리포지토리&lt;/a>의 최근 변경 사항:&lt;/p>
&lt;p>&lt;strong>병합됨:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-29/">NIP-29&lt;/a>&lt;/strong> (Relay 기반 그룹) - Relay Key 명확화 (&lt;a href="https://github.com/nostr-protocol/nips/pull/2190">#2190&lt;/a> - 병합됨)는 relay 키가 relay URL 자체이지 pubkey가 아니라는 것을 명확히 합니다. 명세서는 이제 명시적으로 &amp;ldquo;relay 키는 relay의 WebSocket URL입니다 (예: wss://groups.example.com)&amp;ldquo;라고 명시하여 혼동을 피합니다. 이는 클라이언트가 주어진 그룹을 호스트하는 relay를 식별하는 방식에 영향을 미쳐 그룹이 호스팅 relay에 제대로 속하도록 합니다.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>공개 PR 및 토론:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Trusted Relay Assertions&lt;/strong> - 드래프트 NIP는 &lt;a href="https://nostrcompass.org/ko/topics/nip-66/">NIP-66&lt;/a> (relay 발견 및 모니터링) 메트릭, 운영자 평판 및 사용자 보고서에서 계산된 신뢰 점수 (0-100)를 포함하는 kind 30385 이벤트를 통해 relay 신뢰도 점수 매기기를 표준화할 것을 제안합니다. 명세서는 신뢰를 신뢰도 (가동 시간, 대기 시간), 품질 (TLS, 문서, 운영자 검증) 및 접근성 (관할권, 장벽, 감시 위험) 구성 요소로 나눕니다. 운영자 검증은 &lt;a href="https://nostrcompass.org/ko/topics/nip-11/">NIP-11&lt;/a> (relay 정보 문서)을 통한 암호화 서명, DNS TXT 레코드 및 .well-known 파일을 포함합니다. 사용자는 kind 10385 이벤트를 통해 신뢰할 수 있는 주장 제공자를 선언하여 클라이언트가 다양한 관점을 위해 여러 제공자를 쿼리할 수 있도록 합니다. 제안은 &lt;a href="https://nostrcompass.org/ko/topics/nip-66/">NIP-66&lt;/a> 발견과 평가를 보완하여 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> (원격 서명/Nostr Connect)이 연결 URI의 relay 신뢰성을 평가하는 데 도움을 줍니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Post-Quantum Cryptography&lt;/strong> - &lt;a href="https://github.com/nostr-protocol/nips/pull/2185">PR #2185&lt;/a> (공개)는 &lt;a href="https://nostrcompass.org/ko/newsletters/2026-01-13-newsletter/#nip-updates">뉴스레터 #5&lt;/a>에서 양자 저항 알고리즘 제안이 도입된 이후로 계속 진화합니다. 이번 주 토론은 암호화 민첩성을 위한 구현 세부 사항에 중점을 두었습니다: 마이그레이션 중에 클라이언트가 이중 서명을 처리하는 방식, 오래된 클라이언트의 역호환성, 더 큰 양자 저항 서명의 성능 함의. 기여자들은 ML-DSA-44만 의무화할지 또는 유연성을 위해 여러 알고리즘 (ML-DSA-44, Falcon-512, Dilithium)을 지원할지에 대해 논쟁했습니다. 합의는 단계적 접근 방식을 향하고 있습니다: 초기에는 선택적 양자 서명이며, 광범위한 클라이언트 지원과 실제 양자 위협의 출현 이후에만 의무화됩니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-깊이-분석-nip-11-및-nip-66">NIP 깊이 분석: NIP-11 및 NIP-66&lt;/h2>
&lt;p>이번 주 relay 발견 및 평가를 활성화하는 두 개의 NIP를 살펴봅니다: NIP-11은 relay가 자신을 설명하는 방법을 정의하고, NIP-66은 relay 동작을 측정하는 방법을 표준화합니다. 함께 relay 신뢰도 평가 시스템의 기초를 형성합니다.&lt;/p>
&lt;h3 id="nip-11kotopicsnip-11-relay-정보-문서">&lt;a href="https://nostrcompass.org/ko/topics/nip-11/">NIP-11&lt;/a>: Relay 정보 문서&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/11.md">NIP-11&lt;/a>는 relay가 HTTP를 통해 제공하는 JSON 문서를 정의하여 기능, 정책 및 운영자 정보를 설명합니다. 클라이언트가 &lt;code>wss://relay.example.com&lt;/code>에 연결할 때, 릴레이의 정보 문서를 검색하기 위해 &lt;code>https://relay.example.com&lt;/code> (&lt;code>wss://&lt;/code>를 &lt;code>https://&lt;/code>로 대체)을 가져올 수 있습니다.&lt;/p>
&lt;p>문서는 &lt;code>Accept: application/nostr+json&lt;/code> 헤더와 함께 표준 HTTP 콘텐츠 협상을 사용합니다. 이는 relay가 브라우저에 일반 웹사이트를 제공하는 동시에 Nostr 클라이언트에 기계 읽기 가능한 메타데이터를 제공할 수 있게 합니다. 응답에는 relay 소프트웨어 이름 및 버전, 운영자 연락처 정보 (pubkey, 이메일, 대체 연락처), 지원되는 NIP 및 결제 요구사항 또는 콘텐츠 제한과 같은 운영 매개변수가 포함됩니다.&lt;/p>
&lt;p>중요하게도 기본 NIP-11 문서는 HTTPS를 통해 제공되는 서명되지 않은 JSON으로 인증을 위해 전적으로 TLS 인증서에 의존합니다. 이는 relay의 웹 서버를 제어하는 모든 사람이 문서를 수정할 수 있음을 의미하므로 운영자 주장을 확인할 수 없습니다. Trusted Relay Assertions 제안은 relay의 &lt;code>self&lt;/code> pubkey 필드를 통한 서명된 증명을 도입하여 relay가 인증 메커니즘에 서명된 이벤트를 사용하는 방식과 유사하게 운영자 정체성의 암호화 증명을 가능하게 함으로써 이 격차를 해결합니다.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;relay.example.com&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;description&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;A general-purpose public relay&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;contact&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;admin@example.com&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;supported_nips&amp;#34;&lt;/span>: [&lt;span style="color:#ae81ff">1&lt;/span>, &lt;span style="color:#ae81ff">2&lt;/span>, &lt;span style="color:#ae81ff">4&lt;/span>, &lt;span style="color:#ae81ff">9&lt;/span>, &lt;span style="color:#ae81ff">11&lt;/span>, &lt;span style="color:#ae81ff">12&lt;/span>, &lt;span style="color:#ae81ff">16&lt;/span>, &lt;span style="color:#ae81ff">20&lt;/span>, &lt;span style="color:#ae81ff">22&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;software&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;git+https://github.com/relay/relay.git&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;version&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;1.2.3&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;limitation&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;max_message_length&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">16384&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;max_subscriptions&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">20&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;max_filters&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">100&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;max_limit&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">5000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;max_subid_length&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">100&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;min_prefix&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">4&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;max_event_tags&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">2000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;max_content_length&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">8196&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;min_pow_difficulty&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">0&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;auth_required&amp;#34;&lt;/span>: &lt;span style="color:#66d9ef">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;payment_required&amp;#34;&lt;/span>: &lt;span style="color:#66d9ef">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;payments_url&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;https://relay.example.com/payments&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;fees&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;admission&amp;#34;&lt;/span>: [{&lt;span style="color:#f92672">&amp;#34;amount&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">5000&lt;/span>, &lt;span style="color:#f92672">&amp;#34;unit&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;msats&amp;#34;&lt;/span>}],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;subscription&amp;#34;&lt;/span>: [{&lt;span style="color:#f92672">&amp;#34;amount&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1000&lt;/span>, &lt;span style="color:#f92672">&amp;#34;unit&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;msats&amp;#34;&lt;/span>, &lt;span style="color:#f92672">&amp;#34;period&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">2592000&lt;/span>}],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;publication&amp;#34;&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>limitation&lt;/code> 객체는 클라이언트에게 relay가 시행하는 제약 조건을 알립니다. &lt;code>max_message_length&lt;/code>는 WebSocket 프레임 크기를 제한하고, &lt;code>max_subscriptions&lt;/code>은 연결당 동시 REQ 구독을 한정하며, &lt;code>max_filters&lt;/code>는 REQ당 필터를 제한하고, &lt;code>max_limit&lt;/code>은 단일 필터가 요청할 수 있는 이벤트 수를 제약합니다. 이러한 매개변수는 클라이언트가 relay 기능에 맞게 동작을 적응하도록 도와 제한을 초과하여 연결을 끊는 것을 피합니다.&lt;/p>
&lt;p>결제 정보는 &lt;code>fees&lt;/code> 및 &lt;code>payments_url&lt;/code>에 나타납니다. Relay는 허가 (일회성 액세스), 구독 (반복 액세스) 또는 게시 (이벤트당 수수료)에 대해 요금을 청구할 수 있습니다. &lt;code>payments_url&lt;/code>은 일반적으로 라이트닝 인보이스 또는 ecash 민트에 대한 세부 사항을 가리킵니다. 유료 relay는 이 필드를 사용하여 클라이언트가 인증을 시도하기 전에 가격을 전달합니다.&lt;/p>
&lt;p>&lt;code>supported_nips&lt;/code> 배열은 클라이언트가 relay 기능을 발견할 수 있게 합니다. relay가 &lt;a href="https://nostrcompass.org/ko/topics/nip-50/">NIP-50&lt;/a>을 나열하면, 클라이언트는 전체 텍스트 검색 쿼리를 보낼 수 있음을 알고 있습니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-42/">NIP-42&lt;/a>가 나타나면, 클라이언트는 인증 도전을 예상해야 합니다. 이 선언적 기능 광고는 점진적 개선을 활성화합니다: 클라이언트는 사용 가능한 고급 기능을 사용하는 동시에 제한된 지원이 있는 relay에서 정상적으로 저하됩니다.&lt;/p>
&lt;p>운영자 정보는 책임성을 구축합니다. &lt;code>pubkey&lt;/code> 필드는 relay 운영자를 노스트에서 식별하여 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> DM이나 공개 언급을 통한 직접 통신을 가능하게 합니다. &lt;code>contact&lt;/code> 이메일은 오프 프로토콜 폴백을 제공합니다. 함께 이 필드들은 사용자가 남용 보고, 액세스 요청 또는 기술 문제에 대해 운영자에게 도달하도록 도웁니다.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-11/">NIP-11&lt;/a> 문서는 자체 보고됩니다: relay는 실제로 무엇을 하는지가 아니라 지원한다고 주장하는 것을 설명합니다. NIP-66이 중요해지는 곳입니다.&lt;/p>
&lt;h3 id="nip-66kotopicsnip-66-relay-발견-및-생성력-모니터링">&lt;a href="https://nostrcompass.org/ko/topics/nip-66/">NIP-66&lt;/a>: Relay 발견 및 생성력 모니터링&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/66.md">NIP-66&lt;/a>는 노스트에 relay 모니터링 데이터를 게시하는 것을 표준화합니다. 모니터 서비스는 가용성, 대기 시간, 프로토콜 준수 및 지원되는 NIP에 대해 relay를 지속적으로 테스트합니다. 그들은 결과를 kind 30166 이벤트로 게시하여 relay 자체 보고에 독립적인 실시간 relay 상태를 제공합니다.&lt;/p>
&lt;p>모니터는 연결 및 테스트 구독 전송을 통해 relay 가용성을 확인합니다. 대기 시간 측정은 연결 시간, 구독 응답 시간 및 이벤트 전파 지연을 추적합니다. 프로토콜 준수 테스트는 relay 동작이 명세와 일치하는지 확인하여 구현 버그나 의도적인 편차를 포착합니다. NIP 지원 확인은 &lt;a href="https://nostrcompass.org/ko/topics/nip-11/">NIP-11&lt;/a> 주장을 넘어 실제로 광고된 기능이 올바르게 작동하는지 테스트합니다.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a34b5c7d89e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;4e2d0bc6f8e7c3a5b9f1d2e3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1736784000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30166&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;rtt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;open&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;143&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1736784000&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;rtt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;read&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;89&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1736784000&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;rtt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;write&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;92&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1736784000&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;nips&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;2&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;4&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;9&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;11&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;12&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;geo&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;US&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;United States&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;New York&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;other&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;network&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;clearnet&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;other&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;payment_required&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;false&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;other&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;auth_required&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;false&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;{\&amp;#34;last_check\&amp;#34;: 1736784000, \&amp;#34;checks\&amp;#34;: 8760}&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;8b9c4d5e6a7f8b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>d&lt;/code> 태그는 relay URL을 포함하여 이를 매개변수화된 교체 가능한 이벤트로 만듭니다. 각 모니터는 relay당 하나의 이벤트를 게시하며, 측정값이 변경될 때 업데이트합니다. 여러 모니터가 동일한 relay를 추적할 수 있어 중복성과 교차 검증을 제공합니다. 클라이언트는 relay 상태에 대한 다양한 관점을 얻기 위해 여러 모니터 pubkey를 쿼리합니다.&lt;/p>
&lt;p>왕복 시간 (rtt) 태그는 다양한 작업에 대한 대기 시간을 측정합니다. &lt;code>rtt open&lt;/code>은 WebSocket 연결 설정을 추적하고, &lt;code>rtt read&lt;/code>는 구독 응답 시간을 측정하며, &lt;code>rtt write&lt;/code>는 이벤트 게시 속도를 테스트합니다. 모든 값은 밀리초 단위입니다. 클라이언트는 이러한 메트릭을 사용하여 시간 민감한 작업을 위해 낮은 대기 시간 relay를 선호하거나 느린 relay를 폄하합니다.&lt;/p>
&lt;p>&lt;code>nips&lt;/code> 태그는 주장된 지원이 아닌 실제로 확인된 NIP 지원을 나열합니다. 모니터는 기능을 행사하여 각 NIP를 테스트합니다. relay가 &lt;a href="https://nostrcompass.org/ko/topics/nip-11/">NIP-11&lt;/a> 문서에서 &lt;a href="https://nostrcompass.org/ko/topics/nip-50/">NIP-50&lt;/a> 검색을 주장하지만 검색 쿼리가 실패하면, 모니터는 확인된 목록에서 NIP-50을 생략합니다. 이는 relay 기능에 대한 기초 사실을 제공합니다.&lt;/p>
&lt;p>지리적 정보는 클라이언트가 더 나은 대기 시간과 검열 저항을 위해 근처 relay를 선택할 수 있게 합니다. &lt;code>geo&lt;/code> 태그는 국가 코드, 국가 이름 및 지역을 포함합니다. &lt;code>network&lt;/code> 태그는 clearnet relay를 Tor 숨겨진 서비스 또는 I2P 끝점과 구별합니다. 함께 이 태그들은 지리적 다양성을 활성화합니다: 클라이언트는 지역 검열에 저항하기 위해 여러 관할권의 relay에 연결할 수 있습니다.&lt;/p>
&lt;p>모니터 데이터는 클라이언트의 relay 선택기, 탐색기 웹사이트 및 Trusted Relay Assertions 제안을 제공합니다. 자체 보고 &lt;a href="https://nostrcompass.org/ko/topics/nip-11/">NIP-11&lt;/a> 문서를 측정된 &lt;a href="https://nostrcompass.org/ko/topics/nip-66/">NIP-66&lt;/a> 데이터 및 계산된 신뢰 주장과 결합하여 생태계는 하드코딩된 기본값 또는 입소문 권장사항에 의존하는 것 대신 정보 있는 relay 선택으로 이동합니다.&lt;/p>
&lt;h2 id="릴리스">릴리스&lt;/h2>
&lt;h3 id="0xchat-v153---향상된-메시징-기능">0xchat v1.5.3 - 향상된 메시징 기능&lt;/h3>
&lt;p>&lt;a href="https://github.com/0xchat-app/0xchat-app-main/releases/tag/v1.5.3-release">0xchat v1.5.3&lt;/a>는 Telegram 스타일의 노스트 메시징 클라이언트에 상당한 개선을 제공합니다. 릴리스는 Amber 같은 외부 서명자를 통한 적절한 이벤트 서명을 방지하고 있던 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> (Android 서명자 애플리케이션) 준수 문제를 해결합니다. 완전한 준수는 0xchat이 이제 서명 작업을 올바르게 위임하여 보안을 개선하고 개인 키를 격리 상태로 유지함을 의미합니다.&lt;/p>
&lt;p>업데이트는 FileDropServer 및 BlossomServer를 모두 기본 미디어 저장 옵션으로 통합하여 파일 업로드에 대한 중복성을 제공합니다. &lt;a href="https://github.com/hzrd149/blossom">Blossom&lt;/a>은 파일이 SHA-256 해시로 참조되는 콘텐츠 주소 지정 저장소를 제공하여 무결성을 보장하고 네트워크 전체에서 중복 제거를 활성화합니다. Moments에 대한 자동 초안 저장은 긴 형식 콘텐츠를 작성할 때 데이터 손실을 방지하여 앱 전환 또는 연결 중단 중 손실된 게시물에 대한 사용자 불만을 해결합니다.&lt;/p>
&lt;p>Cashu 지갑 통합은 지갑 보기에서 소비된 토큰을 제거하는 자동 증명 필터링으로 연구됩니다. 이는 사용자가 유효한 증명과 함께 유효하지 않은 증명을 본 혼동스러운 사용자 경험을 해결하여 잔액 계산을 신뢰할 수 없게 만듭니다. 필터링은 클라이언트 측에서 발생하며 채팅 내 P2P 트랜잭션에 대한 결제 경험을 개선하는 동시에 개인정보 보호를 유지합니다.&lt;/p>
&lt;h3 id="amber-v410-pre-releases---ui-오버홀">Amber v4.1.0 Pre-releases - UI 오버홀&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.0-pre1">Amber v4.1.0-pre1&lt;/a>부터 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.0-pre3">v4.1.0-pre3&lt;/a>까지는 인기 있는 Android 이벤트 서명자를 위한 재설계된 인터페이스를 도입합니다. 로그인 화면은 이제 어떤 애플리케이션이 서명 권한을 요청하는지 명확하게 표시하여 인증 흐름에 대한 사용자 혼동을 해결합니다. 새 이벤트 화면은 애플리케이션이 서명하기를 원하는 데이터를 자세히 검사할 수 있게 하여 사용자가 작업을 승인하기 전에 정보 있는 보안 결정을 내릴 수 있도록 합니다.&lt;/p>
&lt;p>권한 관리는 각 연결된 애플리케이션에 부여된 기능을 정확히 보여주는 개선된 인터페이스로 상당한 주의를 받습니다. 사용자는 완전히 연결을 해제하지 않고도 특정 권한을 취소할 수 있어 서명 위임에 대한 세분화된 제어를 활성화합니다. 업데이트된 quartz 라이브러리를 사용하는 리팩토링된 relay 카운터는 이벤트 처리량 및 relay 성능에 대한 실시간 통계를 제공합니다. &lt;a href="https://github.com/nostr-protocol/nips/blob/master/46.md">NIP-46&lt;/a> (Nostr Connect) bunker 연결은 이제 연결 실패 시 상세한 오류 메시지를 표시하여 암호화된 타임아웃 오류를 실행 가능한 진단으로 대체합니다.&lt;/p>
&lt;h2 id="주목할-만한-코드-및-문서-변경사항">주목할 만한 코드 및 문서 변경사항&lt;/h2>
&lt;p>&lt;em>이들은 병합된 풀 요청 및 추적할 가치가 있는 초기 단계 개발입니다. 일부는 릴리스 전에 진화할 수 있는 실험적 기능입니다.&lt;/em>&lt;/p>
&lt;h3 id="zeus-라이트닝-지갑-nostr-wallet-connect-포함">Zeus (라이트닝 지갑 Nostr Wallet Connect 포함)&lt;/h3>
&lt;p>Zeus는 이번 주 17개의 풀 요청을 병합하여 주요 &lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47&lt;/a> Nostr Wallet Connect 구현으로서의 위치를 강화합니다. 가장 중요한 수정사항은 Nostr 클라이언트와의 상호 운용성 문제를 야기하고 있던 데이터 일관성 및 프로토콜 준수 문제를 해결합니다.&lt;/p>
&lt;p>&lt;strong>트랜잭션 기록 수정&lt;/strong> - &lt;a href="https://github.com/ZeusLN/zeus/pull/3542">PR #3542&lt;/a>는 NWC 트랜잭션 목록이 잘못되거나 중복된 항목을 표시한 중대한 버그를 해결합니다. 문제는 Zeus가 이벤트 업데이트를 적절히 처리하지 않으면서 트랜잭션 데이터를 캐시할 때 발생하여 사용자가 유령 트랜잭션을 보거나 누락된 결제를 봅니다. 수정사항은 적절한 이벤트 중복 제거 및 캐시 무효화를 구현하여 트랜잭션 기록이 라이트닝 노드 상태를 정확하게 반영하도록 합니다.&lt;/p>
&lt;p>&lt;strong>프로토콜 준수&lt;/strong> - &lt;a href="https://github.com/ZeusLN/zeus/pull/3548">PR #3548&lt;/a>은 완전한 NIP-47 준수를 예상하는 클라이언트와의 호환성을 깬 불완전한 &lt;code>getInfo&lt;/code> 응답을 해결합니다. 일부 노스트 클라이언트는 &lt;code>block_height&lt;/code> 또는 &lt;code>network&lt;/code> 같은 필드가 누락된 부분 응답을 받을 때 충돌합니다. PR은 모든 필수 필드가 기본 기본값으로도 반환되도록 보장하여 기본 라이트닝 구현이 제공하지 않더라도 생태계 전반의 Zeus 호환성을 개선합니다.&lt;/p>
&lt;p>&lt;strong>연결 복원력&lt;/strong> - &lt;a href="https://github.com/ZeusLN/zeus/pull/3543">PR #3543&lt;/a>은 정지된 노스트 연결에 대한 타임아웃 알림을 구현합니다. 이전에는 사용자가 relay 연결이 조용히 떨어졌을 때 무한정 기다렸습니다. 이제 Zeus는 30초 동안 활동이 없은 후 명확한 타임아웃 메시지를 표시하여 사용자가 재시도하거나 relay를 전환할 수 있게 합니다. &lt;a href="https://github.com/ZeusLN/zeus/pull/3541">PR #3541&lt;/a>은 NWC가 호환되지 않는 라이트닝 구현에서 활성화되는 것을 방지하기 위해 백엔드 검증을 추가하여 런타임 충돌을 일으키기 전에 구성 오류를 포착합니다.&lt;/p>
&lt;p>&lt;strong>Cashu 경합 조건&lt;/strong> - &lt;a href="https://github.com/ZeusLN/zeus/pull/3531">PR #3531&lt;/a>은 동시 민트 작업이 토큰 데이터베이스를 손상시킬 수 있는 Cashu 토큰 관리의 동시성 버그를 수정합니다. 경합 조건은 여러 스레드가 적절한 잠금 없이 토큰 개수를 업데이트할 때 발생하여 때때로 잘못된 잔액을 초래합니다. 수정사항은 중요 섹션 주위에 mutex 보호를 추가하여 토큰 상태에 대한 원자적 업데이트를 보장합니다.&lt;/p>
&lt;h3 id="primal-android-클라이언트">Primal Android (클라이언트)&lt;/h3>
&lt;p>Primal Android는 지갑 보안 및 미디어 처리에 대한 중요한 개선과 함께 12개의 병합된 PR을 출시했습니다. 지갑 백업 구현은 가장 요청된 기능 중 하나를 해결하는 반면 NIP-92 지원은 애플리케이션 전체의 시각적 경험을 개선합니다.&lt;/p>
&lt;p>&lt;strong>지갑 백업 시스템&lt;/strong> - 4-PR 시리즈 (&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/844">#844&lt;/a>, &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/845">#845&lt;/a>, &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/846">#846&lt;/a>, &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/848">#848&lt;/a>)는 포괄적인 시드 구문 백업 기능을 구현합니다. 사용자는 이제 스크린샷을 방지하는 보안 흐름을 통해 12단어 니모닉을 내보낼 수 있으며, 지갑 대시보드에 백업 상태를 표시하고, 기존 사용자를 마이그레이션을 통해 안내합니다. 구현은 BIP-39 표준을 따르고 사용자가 부정확한 구문 기록으로 인해 자금을 잃는 것을 방지하기 위한 검증을 포함합니다.&lt;/p>
&lt;p>&lt;strong>미디어 치수 (NIP-92)&lt;/strong> - &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/718">PR #718&lt;/a>은 올바른 이미지 및 비디오 종횡비에 대한 &lt;a href="https://nostrcompass.org/ko/topics/nip-92/">NIP-92&lt;/a> 지원을 구현합니다. 치수 메타데이터 없이 클라이언트는 콘텐츠가 로드될 때 이미지를 다운로드하여 레이아웃 점프를 야기합니다. NIP-92는 &lt;code>dim&lt;/code> 태그 (예: &lt;code>[&amp;quot;dim&amp;quot;, &amp;quot;1920x1080&amp;quot;]&lt;/code>)를 파일 메타데이터 이벤트에 추가하여 Primal이 미디어를 다운로드하기 전에 올바른 공간을 예약할 수 있게 합니다. 이는 이미지 갤러리에서 불안한 리플로우를 제거하고 인지된 성능을 개선합니다.&lt;/p>
&lt;p>&lt;strong>원격 서명자 신뢰도&lt;/strong> - &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/841">PR #841&lt;/a>은 누락된 &lt;code>wss://&lt;/code> 접두어가 조용한 실패를 야기한 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> 연결 문제를 수정합니다. PR은 bunker 연결 설정 중에 relay URI를 검증하여 사용자가 베어 도메인을 붙여 넣을 때 프로토콜 접두어를 자동으로 추가합니다. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/843">PR #843&lt;/a>은 나쁜 네트워크 조건이 회신이 루트 노트로 게시되도록 야기한 스레딩 버그를 해결하여 대화 흐름을 끊습니다. 수정사항은 네트워크 중단을 통해 부모 이벤트 ID가 지속되도록 보장합니다.&lt;/p>
&lt;h3 id="marmot-protocol-white-noise-암호화된-그룹-채팅-라이브러리">Marmot Protocol: White Noise (암호화된 그룹 채팅 라이브러리)&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> Protocol의 암호화된 그룹 채팅을 구동하는 Rust 라이브러리인 White Noise는 사용자 경험 및 보안을 개선하는 6개의 PR을 병합했습니다. 변경사항은 Marmot을 주류 메시징 애플리케이션과의 기능 패리티에 더 가깝게 가져오는 동시에 개인정보 보호 우선 아키텍처를 유지합니다.&lt;/p>
&lt;p>&lt;strong>읽음 확인&lt;/strong> - &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/433">PR #433&lt;/a> 및 &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/436">#436&lt;/a>은 그룹 대화를 위한 메시지 읽음 추적을 구현합니다. 시스템은 단일 장치 내에서 그룹당 사용자당 읽음 위치를 저장하여 미읽음 개수 배지를 활성화합니다. 구현은 각 대화에 대한 마지막 읽음 메시지 위치를 추적하기 위해 단조적 타임스탬프를 사용합니다. 이 기초 기능은 미읽음 메시지 개수 per 대화를 보여주는 UI 지시자를 활성화합니다.&lt;/p>
&lt;p>&lt;strong>대화 고정&lt;/strong> - &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/442">PR #442&lt;/a>는 계정을 그룹에 연결하는 &lt;code>accounts_groups&lt;/code> junction 테이블의 &lt;code>pin_order&lt;/code> 필드를 통한 지속적인 대화 고정을 추가합니다. 고정된 대화는 메시지 활동과 관계없이 채팅 목록의 상단에 위치를 유지하여 Signal 및 WhatsApp의 사용자 예상과 일치합니다. 구현은 정수 정렬을 사용하여 무제한 핀을 결정론적 정렬로 허용합니다.&lt;/p>
&lt;p>&lt;strong>결정론적 커밋 해석 (MIP-03)&lt;/strong> - &lt;a href="https://github.com/marmot-protocol/mdk/pull/152">PR #152&lt;/a> (공개)는 분산 그룹 채팅에서 커밋 경합 조건의 중대한 문제를 해결하는 Marmot 개선 제안 03을 구현합니다. 여러 멤버가 그룹 상태 변경 (구성원 추가/제거, 권한 변경)을 동시에 제출할 때, 클라이언트는 커밋 정렬에 달라질 수 있어 그룹을 호환되지 않는 상태로 단편화합니다. MIP-03은 에포크 스냅샷과 결정론적 우승자 선택을 도입합니다: 가장 이른 &lt;code>created_at&lt;/code> 타임스탬프가 있는 커밋이 이기며, 사전식 이벤트 ID가 타이브레이커입니다. 이는 모든 클라이언트가 롤백 및 재생을 통해 동일한 상태로 수렴할 수 있게 하여 네트워크 분할 중에도 그룹 일관성을 유지합니다.&lt;/p>
&lt;p>&lt;strong>보안 강화&lt;/strong> - &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/443">PR #443&lt;/a>은 &lt;code>resolve_group_image_path&lt;/code>에서 참조를 사용하여 암호화 비밀의 불필요한 복사를 방지합니다. 이는 비밀이 해제된 힙 할당에서 복구될 수 있는 메모리 공격 윈도우를 줄입니다. &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/438">PR #438&lt;/a>은 keyring 매개변수를 통한 SQLCipher 데이터베이스 암호화를 활성화하여 메시지 기록을 보호합니다. keyring 통합은 구성 파일 대신 플랫폼 키체인에서 보안 키 저장을 허용합니다.&lt;/p>
&lt;h3 id="nostrdb-rs-데이터베이스-라이브러리---공개-pr">nostrdb-rs (데이터베이스 라이브러리) - 공개 PR&lt;/h3>
&lt;p>&lt;strong>스트리밍 쿼리 구현&lt;/strong> - &lt;a href="https://github.com/damus-io/nostrdb-rs/pull/58">PR #58&lt;/a> (공개)는 제로 할당 데이터베이스 작업을 활성화하는 스트리밍 폴드 쿼리를 제안합니다. 구현은 벡터로 전체 결과 세트를 구체화하지 않고 데이터베이스 결과를 한 번에 하나씩 처리하는 &lt;code>fold&lt;/code>, &lt;code>try_fold&lt;/code>, &lt;code>count&lt;/code>, &lt;code>any&lt;/code>, &lt;code>all&lt;/code> 및 &lt;code>find_map&lt;/code> 메서드를 추가합니다. 이 접근 방식은 메모리 소비를 감소시키고 일반적인 쿼리 패턴에 대한 조기 종료를 활성화합니다.&lt;/p>
&lt;p>기술적 구현은 낮은 수준의 쿼리 결과 콜백 (&lt;code>ndb_query_visit&lt;/code>)을 &lt;code>ControlFlow&lt;/code> 변형을 C 방문자 작업으로 매핑하는 상태 저장 Rust 방문자로 노출합니다. 병합되면, 애플리케이션 코드는 반복자 로직처럼 읽히는 동시에 데이터베이스 계층 근처에서 실행됩니다. 예를 들어, 일치하는 노트를 세는 것은 그들을 수집하는 대신 결과를 통해 스트림하며, &lt;code>find_map&lt;/code>은 나머지 행을 처리하지 않고 첫 번째 유용한 결과를 반환합니다.&lt;/p>
&lt;p>nostrdb는 Damus 및 Notedeck (각각 iOS/macOS 및 데스크톱 클라이언트)을 구동합니다. 스트리밍 쿼리는 페이지 매김, 조건부 필터링 및 존재 확인과 같은 효율적인 패턴을 활성화합니다. PR은 쿼리 계층의 상당한 리팩토링인 3개 파일을 +756 추가 및 -32 삭제로 변경합니다. nostrdb-rs 기반 애플리케이션의 사용자는 대규모 타임라인을 탐색하거나 광범위한 이벤트 데이터베이스를 검색할 때 감소된 메모리 사용량을 볼 것입니다.&lt;/p>
&lt;h3 id="nak-cli-도구">nak (CLI 도구)&lt;/h3>
&lt;p>fiatjaf의 명령줄 노스트 도구인 nak는 빌드 시스템 개선 및 새 기능에 중점을 둔 6개의 PR을 병합했습니다. &lt;a href="https://github.com/fiatjaf/nak/pull/91">PR #91&lt;/a>은 nak이 Blossom 미디어 서버의 미러로 역할하도록 하는 Blossom 미러 기능을 구현합니다. &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a>은 노스트 이벤트와 함께 작동하는 콘텐츠 주소 지정 미디어 저장소 프로토콜입니다.&lt;/p>
&lt;p>나머지 PR은 Windows, macOS 및 Linux 플랫폼 전반의 빌드 시스템 호환성을 해결하여 노스트 이벤트를 로컬 디렉토리로 마운트하기 위한 FUSE 파일 시스템 지원을 활성화합니다.&lt;/p>
&lt;h3 id="damus-ios-클라이언트---공개-pr">Damus (iOS 클라이언트) - 공개 PR&lt;/h3>
&lt;p>Damus는 중요한 아키텍처 개선을 탐색하는 11개의 공개 PR을 가지고 있습니다. 이들은 아직 병합되지 않았지만 개인정보 보호, 동기화 효율성 및 모바일 데이터 최적화 주변의 iOS 노스트 클라이언트 개발에 대한 중요한 방향을 신호합니다.&lt;/p>
&lt;p>&lt;strong>Tor 통합&lt;/strong> - &lt;a href="https://github.com/damus-io/damus/pull/3535">PR #3535&lt;/a>는 Arti Tor 클라이언트를 Damus에 직접 내장하여 외부 의존성 없이 익명 relay 연결을 활성화합니다. Orbot 또는 Tor Browser 접근 방식과는 달리 Arti 내장은 iOS 샌드박싱 및 백그라운드 실행 제한과의 매끄러운 통합을 제공합니다. Rust 구현은 네트워크 익명화에 메모리 안전성을 제공하여 C Tor에 비해 공격 표면을 감소시킵니다. 사용자는 relay당 또는 전역적으로 Tor 모드를 전환할 수 있으며, 클라이언트는 회로 관리를 투명하게 처리합니다.&lt;/p>
&lt;p>&lt;strong>Negentropy 동기화 프로토콜&lt;/strong> - &lt;a href="https://github.com/damus-io/damus/pull/3536">PR #3536&lt;/a>은 동기화 효율성을 급격히 개선하는 set 조정 프로토콜인 Negentropy를 구현합니다. 마지막 연결 이후 모든 이벤트를 다운로드하는 대신, Negentropy는 클라이언트와 relay 사이의 정확히 어떤 이벤트가 다른지 식별하기 위해 콤팩트 핑거프린트 (Merkle 트리)를 교환합니다. 수백 명의 pubkey를 따르는 사용자의 경우, 이는 동기화 대역폭을 메가바이트에서 킬로바이트로 감소시킵니다. 구현은 RelayPool 및 SubscriptionManager와 통합하여 모든 연결된 relay 전체에서 자동 효율적 동기화를 활성화합니다.&lt;/p>
&lt;p>&lt;strong>낮은 데이터 모드&lt;/strong> - &lt;a href="https://github.com/damus-io/damus/pull/3549">PR #3549&lt;/a>는 사용자 피드백에 응하는 셀룰러 데이터 절약 기능을 추가합니다. 모드는 이미지 자동 로딩, 비디오 사전 로딩을 비활성화하고 구독 제한을 감소시킵니다. 계량된 연결의 사용자는 데이터 한도를 초과할 우려 없이 텍스트 콘텐츠를 탐색할 수 있습니다. 구현은 iOS 낮은 데이터 모드 설정을 존중하고 다양한 미디어 유형에 대한 세분화된 제어를 제공합니다.&lt;/p>
&lt;p>&lt;strong>데이터베이스 최적화&lt;/strong> - &lt;a href="https://github.com/damus-io/damus/pull/3548">PR #3548&lt;/a>은 더 빠른 쿼리 및 감소된 디스크 사용량을 위해 nostrdb 스냅샷 저장소를 다시 작업합니다. 최적화는 데이터베이스 스냅샷이 디스크에 지속되는 방식을 변경하여 읽기 성능과 쓰기 증폭을 모두 개선합니다. 이는 대규모 이벤트 데이터베이스를 가진 사용자로부터의 배터리 소비 불만을 해결합니다.&lt;/p>
&lt;hr>
&lt;p>이번 주는 여기까지입니다. 뭔가 만들고 있나요? 공유할 뉴스가 있나요? 우리가 당신의 프로젝트를 다루기를 원하나요? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">NIP-17 DM을 통해 연락하세요&lt;/a> 또는 노스트에서 우리를 찾으세요.&lt;/p></content:encoded></item><item><title>Nostr Compass #5</title><link>https://nostrcompass.org/ko/newsletters/2026-01-13-newsletter/</link><pubDate>Tue, 13 Jan 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2026-01-13-newsletter/</guid><description>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 위한 주간 가이드입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> Bitchat이 Signal과 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a>를 감사한 것으로 유명한 Cure53의 전문 보안 감사를 받았으며, 중요한 발견 사항을 수정하는 17개 이상의 PR이 이미 병합되었습니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-71/">NIP-71&lt;/a>이 병합되어 프로토콜에 주소 지정 가능한 비디오 event가 도입되었습니다. 양자 후 암호화 NIP가 Nostr를 양자 공격으로부터 미래 대비하는 것에 대한 논의를 시작했습니다. Amethyst v1.05.0은 북마크 목록, 음성 메모, 초기 데스크톱 릴리스를 제공하며, Nostur v1.25.3은 반응 및 답글을 통해 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> DM을 개선합니다. 라이브러리 소식으로는 rust-nostr가 SQLite 및 LMDB 백엔드 전반에 걸쳐 &lt;a href="https://nostrcompass.org/ko/topics/nip-62/">NIP-62&lt;/a> 지원을 확장하고, NDK가 구독 추적 버그를 수정했습니다.&lt;/p></description><content:encoded>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr를 위한 주간 가이드입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> Bitchat이 Signal과 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a>를 감사한 것으로 유명한 Cure53의 전문 보안 감사를 받았으며, 중요한 발견 사항을 수정하는 17개 이상의 PR이 이미 병합되었습니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-71/">NIP-71&lt;/a>이 병합되어 프로토콜에 주소 지정 가능한 비디오 event가 도입되었습니다. 양자 후 암호화 NIP가 Nostr를 양자 공격으로부터 미래 대비하는 것에 대한 논의를 시작했습니다. Amethyst v1.05.0은 북마크 목록, 음성 메모, 초기 데스크톱 릴리스를 제공하며, Nostur v1.25.3은 반응 및 답글을 통해 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> DM을 개선합니다. 라이브러리 소식으로는 rust-nostr가 SQLite 및 LMDB 백엔드 전반에 걸쳐 &lt;a href="https://nostrcompass.org/ko/topics/nip-62/">NIP-62&lt;/a> 지원을 확장하고, NDK가 구독 추적 버그를 수정했습니다.&lt;/p>
&lt;h2 id="뉴스">뉴스&lt;/h2>
&lt;h3 id="bitchat-cure53-보안-감사-완료">Bitchat, Cure53 보안 감사 완료&lt;/h3>
&lt;p>Nostr와 Cashu를 결합한 iOS 암호화 메신저인 Bitchat이 업계에서 가장 존경받는 보안 회사 중 하나인 Cure53의 전문 보안 감사를 받았습니다. Cure53은 이전에 Signal, Mullvad VPN, 그리고 특히 현대 Nostr 비공개 메시징의 기반이 되는 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> 암호화 사양을 감사했습니다.&lt;/p>
&lt;p>감사에서 12개 이상의 보안 문제(BCH-01-002부터 BCH-01-013까지)가 발견되었습니다. Bitchat 팀은 17개 이상의 pull request로 대응했습니다. 주요 수정 사항은 다음과 같습니다:&lt;/p>
&lt;p>&lt;strong>Noise Protocol DH Secret Clearing&lt;/strong> - &lt;a href="https://github.com/permissionlesstech/bitchat/pull/928">PR #928&lt;/a>은 키 합의 후 Diffie-Hellman 공유 비밀이 0으로 초기화되지 않던 6개 위치를 수정하여 순방향 비밀성 보장을 복원합니다. 비밀이 필요 이상으로 오래 메모리에 남아 있으면, 메모리 덤프나 콜드 부트 공격이 과거 통신을 침해할 수 있습니다.&lt;/p>
&lt;p>&lt;strong>서명 검증&lt;/strong> - 여러 PR이 암호화 검증 경로를 강화하여 잘못된 입력을 통해 메시지 인증 검사를 우회할 수 없도록 합니다.&lt;/p>
&lt;p>&lt;strong>스레드 안전성&lt;/strong> - &lt;a href="https://github.com/permissionlesstech/bitchat/pull/929">PR #929&lt;/a>는 NostrTransport의 읽음 확인 큐에 배리어 동기화를 추가하여 높은 메시지 볼륨에서 데이터 손상이나 충돌을 일으킬 수 있는 경쟁 조건을 방지합니다.&lt;/p>
&lt;p>&lt;strong>메모리 안전성&lt;/strong> - &lt;a href="https://github.com/permissionlesstech/bitchat/pull/920">PR #920&lt;/a>은 높은 메시지 처리량에서 더 나은 성능을 위해 메시지 중복 제거기를 최적화하면서 메모리 고갈을 방지합니다.&lt;/p>
&lt;p>&lt;strong>입력 유효성 검사&lt;/strong> - &lt;a href="https://github.com/permissionlesstech/bitchat/pull/919">PR #919&lt;/a>는 잘못된 입력으로 인한 충돌을 방지하기 위해 16진수 문자열 파싱을 강화합니다. 이는 서비스 거부 공격의 일반적인 공격 벡터입니다.&lt;/p>
&lt;p>Bitchat은 Cashu ecash를 처리하므로 전문적인 보안 검토가 필수적입니다. 이번 감사는 작년의 &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot&lt;/a> Protocol 감사와 암호화 계층을 검증한 NIP-44 감사에 이은 것입니다.&lt;/p>
&lt;h2 id="nip-업데이트">NIP 업데이트&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 저장소&lt;/a>의 최근 변경 사항:&lt;/p>
&lt;p>&lt;strong>병합됨:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-71/">NIP-71&lt;/a>&lt;/strong> - 주소 지정 가능한 비디오 Event (&lt;a href="https://github.com/nostr-protocol/nips/pull/1669">#1669&lt;/a>)는 주소 지정 가능한 event로 kind 34235(가로 비디오)와 34236(세로 비디오)을 도입합니다. 필수 &lt;code>d&lt;/code> 태그는 고유 식별자를 제공하므로 전체 event를 다시 게시하지 않고도 비디오 메타데이터를 업데이트할 수 있습니다. 선택적 &lt;code>origin&lt;/code> 태그는 가져오기 소스를 추적합니다. 이미 Amethyst와 nostrvine에 구현되어 있습니다.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>열린 PR:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>양자 후 암호화&lt;/strong> - &lt;a href="https://github.com/nostr-protocol/nips/pull/2185">PR #2185&lt;/a>는 Nostr에 양자 저항 암호화 알고리즘을 추가할 것을 제안합니다. 이 사양은 개별 사용자가 아닌 애플리케이션 및 권한과 같은 &amp;ldquo;초고가치 event&amp;quot;를 대상으로 디지털 서명을 위한 ML-DSA-44와 Falcon-512를 도입합니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a>의 대칭 암호화(ChaCha20)는 양자 저항성이 있지만, 키 교환은 Shor 알고리즘에 취약한 secp256k1 ECDH를 사용합니다. 이 제안은 이 격차를 해결하기 위해 키 합의를 위한 ML-KEM을 포함합니다. 이것은 Nostr의 장기 보안을 위한 암호화 민첩성에 대한 논의를 시작하는 초기 단계 제안입니다.&lt;/li>
&lt;li>&lt;strong>NIP-47용 BOLT12&lt;/strong> - 137개의 댓글과 광범위한 논의 끝에, 커뮤니티는 BOLT12 offer가 &lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47&lt;/a>을 확장하는 것보다 자체 사양을 갖는 것이 좋다고 결정했습니다. BOLT12 offer는 재사용 가능성, 블라인드 경로를 통한 더 나은 프라이버시, 선택적 지불자 정보를 포함하여 BOLT11 인보이스보다 상당한 업그레이드를 제공합니다. 새 NIP는 Nostr Wallet Connect 구현을 위한 &lt;code>make_offer&lt;/code>, &lt;code>pay_offer&lt;/code>, &lt;code>list_offers&lt;/code>와 같은 메서드를 정의할 것입니다.&lt;/li>
&lt;li>&lt;strong>오디오 트랙 NIP&lt;/strong> - &lt;a href="https://github.com/nostr-protocol/nips/pull/1043">PR #1043&lt;/a>은 음악 트랙을 위한 kind 32100과 팟캐스트 에피소드를 위한 32101을 제안하여 오디오 콘텐츠에 NIP-71이 비디오에 제공하는 것과 동일한 일급 대우를 부여합니다. 현재 Wavlake, Zapstr, Stemstr와 같은 오디오 플랫폼은 각각 독점 event 형식을 사용하여 생태계를 분열시키고 있습니다. 공통 표준은 사용자가 호환 가능한 클라이언트에서 오디오를 발견하고 재생할 수 있도록 상호 운용성을 가능하게 합니다.&lt;/li>
&lt;li>&lt;strong>NIP-A3 범용 결제 대상&lt;/strong> - &lt;a href="https://github.com/nostr-protocol/nips/pull/2119">PR #2119&lt;/a>는 RFC-8905 &lt;code>payto:&lt;/code> URI를 사용하여 여러 네트워크에서 결제 옵션을 노출하는 kind 10133 event를 제안합니다. Bitcoin, Lightning, Cashu 또는 기존 결제 레일에 대해 별도의 event kind를 만드는 대신, 이 추상화를 통해 클라이언트는 표준화된 태그를 파싱하고 네이티브 결제 핸들러를 호출할 수 있습니다. 새로운 결제 방법은 &lt;code>payto:&lt;/code> URI 스킴만 필요하므로 이 접근 방식은 미래 지향적입니다.&lt;/li>
&lt;/ul>
&lt;h2 id="nip-심층-분석-nip-51과-nip-65">NIP 심층 분석: NIP-51과 NIP-65&lt;/h2>
&lt;p>이번 주에는 사용자 기본 설정을 저장하는 두 가지 NIP를 다룹니다: 콘텐츠 구성을 위한 NIP-51과 relay 연결 구성을 위한 NIP-65. 둘 다 교체 가능한 event를 사용하며, 이는 각 새 게시가 이전 버전을 덮어쓴다는 것을 의미합니다.&lt;/p>
&lt;h3 id="nip-51kotopicsnip-51-목록">&lt;a href="https://nostrcompass.org/ko/topics/nip-51/">NIP-51&lt;/a>: 목록&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/51.md">NIP-51&lt;/a>은 event, 사용자, 해시태그 및 기타 콘텐츠에 대한 참조를 구성하기 위한 여러 목록 유형을 정의합니다. Amethyst v1.05.0이 북마크 지원을 추가하여 목록 작동 방식을 이해하기 좋은 시기입니다.&lt;/p>
&lt;p>사양은 각각 다른 목적을 수행하는 여러 목록 kind를 정의합니다. Kind 10000은 사용자, 스레드 또는 단어를 숨기기 위한 뮤트 목록입니다. Kind 10001은 프로필에 표시할 event를 고정합니다. Kind 30003은 북마크를 저장하며, 이것이 Amethyst가 이제 지원하는 것입니다. 다른 kind는 팔로우 세트(30000), 큐레이션된 기사 컬렉션(30004), 해시태그 관심사(30015), 사용자 정의 이모지 세트(30030)를 처리합니다.&lt;/p>
&lt;p>목록은 태그를 통해 콘텐츠를 참조합니다. 북마크 목록은 특정 event에 대해 &lt;code>e&lt;/code> 태그를 사용하고 기사와 같은 주소 지정 가능한 콘텐츠에 대해 &lt;code>a&lt;/code> 태그를 사용합니다:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;ae3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1736784000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30003&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;saved-articles&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;abc123def456...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;30023:author-pubkey:article-id&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;encrypted-private-bookmarks&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;908a15e46fb4d8675bab026fc230a0e3542bfade63da02d542fb78b2a8513fcd0092619a2c8c1221e581946e0191f2af505dfdf8657a414dbca329186f009262&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>d&lt;/code> 태그는 고유 식별자를 제공하므로 동일한 kind에서 &amp;ldquo;saved-articles&amp;rdquo;, &amp;ldquo;read-later&amp;rdquo; 또는 &amp;ldquo;favorites&amp;quot;와 같은 여러 북마크 세트를 유지할 수 있습니다.&lt;/p>
&lt;p>목록은 공개 항목과 비공개 항목을 모두 지원합니다. 공개 항목은 태그 배열에 나타나며 event를 가져오는 누구에게나 표시됩니다. 비공개 항목은 &lt;code>content&lt;/code> 필드에 들어가며 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a>를 사용하여 자신에게 암호화됩니다. 이 이중 구조를 통해 공개 북마크를 유지하면서 비공개 메모를 첨부하거나, 누구를 뮤트했는지 공개하지 않고 뮤트 목록을 유지할 수 있습니다. 자신에게 암호화하려면 자신의 pubkey를 수신자로 하여 NIP-44를 사용하세요.&lt;/p>
&lt;p>10000 시리즈 kind는 교체 가능하며, 이는 relay가 pubkey당 하나의 event만 유지한다는 것을 의미합니다. 30000 시리즈는 매개변수화된 교체 가능으로, pubkey와 &lt;code>d&lt;/code> 태그 조합당 하나의 event를 허용합니다. 두 경우 모두 목록을 업데이트한다는 것은 완전한 교체를 게시하는 것을 의미합니다. 증분 변경을 보낼 수 없습니다. 클라이언트는 다른 애플리케이션에서 추가한 데이터를 덮어쓰지 않도록 목록을 수정할 때 알 수 없는 태그를 보존해야 합니다.&lt;/p>
&lt;h3 id="nip-65kotopicsnip-65-relay-목록-메타데이터">&lt;a href="https://nostrcompass.org/ko/topics/nip-65/">NIP-65&lt;/a>: Relay 목록 메타데이터&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/65.md">NIP-65&lt;/a>는 사용자가 읽기 및 쓰기에 선호하는 relay를 광고하는 kind 10002 event를 정의합니다. 이것은 다른 사용자와 클라이언트가 귀하의 콘텐츠를 찾는 데 도움이 됩니다.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;bd2217a96b5835b59f9a6a42d8d8a36f8c9b7d4e5f0a1b2c3d4e5f6a7b8c9d0e1&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1736784000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">10002&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;r&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.damus.io&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;read&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;r&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://nos.lol&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;r&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.nostr.band&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;write&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;f1c2d3e4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>각 &lt;code>r&lt;/code> 태그는 relay URL과 선택적 마커를 포함합니다. &lt;code>write&lt;/code> 마커는 귀하의 outbox를 지정합니다: 귀하가 콘텐츠를 게시하는 relay입니다. &lt;code>read&lt;/code> 마커는 귀하의 inbox를 지정합니다: 멘션, 답글 및 태그를 확인하는 relay입니다. 마커를 생략하면 둘 다를 나타냅니다.&lt;/p>
&lt;p>Alice가 Bob의 게시물을 찾으려면, 그녀의 클라이언트는 Bob의 kind 10002를 가져와서 그의 write relay(그의 outbox)를 추출하고 거기서 구독합니다. Alice가 Bob에게 답글을 달면, 그녀의 클라이언트는 그가 멘션을 볼 수 있도록 그의 read relay(그의 inbox)에 게시합니다. 이 relay 인식 라우팅은 &amp;ldquo;outbox 모델&amp;quot;이며, 몇몇 중앙 서버에 모두를 집중시키는 대신 많은 relay에 사용자를 분산시킵니다.&lt;/p>
&lt;p>NIP-65는 공개 콘텐츠 라우팅을 처리하지만, 비공개 메시지는 별도의 목록을 사용합니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a>은 &lt;code>r&lt;/code> 태그 대신 &lt;code>relay&lt;/code> 태그를 사용하여 DM inbox relay를 위한 kind 10050을 정의합니다. 누군가에게 비공개 메시지를 보낼 때, 클라이언트는 수신자의 kind 10050 event를 찾아 거기에 암호화된 gift-wrapped 메시지를 게시합니다. 이 분리는 DM 라우팅을 공개 콘텐츠 라우팅과 구별하고, 사용자가 비공개 대 공개 통신에 다른 relay를 지정할 수 있게 합니다.&lt;/p>
&lt;p>outbox 모델은 단일 relay가 모든 사람의 콘텐츠를 저장하거나 제공할 필요가 없기 때문에 검열 저항성을 향상시킵니다. 클라이언트는 팔로우하는 사용자의 NIP-65 event에 나열된 relay에 대한 연결을 유지하며, 새 계정을 발견하면 동적으로 새 relay에 연결합니다. NIP-65는 다른 NIP에서 발견되는 relay 힌트를 보완합니다. &lt;code>[&amp;quot;p&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;wss://hint.relay&amp;quot;]&lt;/code>로 누군가를 태그하면, 힌트는 클라이언트에게 해당 특정 참조를 어디서 찾아야 하는지 알려줍니다. NIP-65는 권위 있는 사용자 제어 목록을 제공하고, 힌트는 개별 event에 포함된 바로가기를 제공합니다.&lt;/p>
&lt;p>최상의 결과를 위해 relay 목록을 최신 상태로 유지하세요. 오래된 항목은 당신을 찾기 어렵게 만듭니다. 사양에서는 카테고리당 2~4개의 relay를 권장합니다. 너무 많은 relay를 나열하면 귀하의 콘텐츠를 가져오려는 모든 클라이언트에 부담을 주어 경험을 느리게 하고 네트워크 부하를 증가시킵니다. 클라이언트는 NIP-65 event를 캐시하고 사용자가 기본 설정을 업데이트함에 따라 정기적으로 새로 고침합니다.&lt;/p>
&lt;h2 id="릴리스">릴리스&lt;/h2>
&lt;p>&lt;strong>Amethyst v1.05.0&lt;/strong> - 인기 있는 Android 클라이언트가 여러 주요 기능을 포함한 &lt;a href="https://github.com/vitorpamplona/amethyst/releases">주요 업데이트를 출시했습니다&lt;/a>. &lt;a href="https://nostrcompass.org/ko/topics/nip-51/">NIP-51&lt;/a> kind 30003 북마크 목록을 통해 사용자는 나중에 참조할 게시물을 저장하고 호환 클라이언트 간에 동기화할 수 있습니다. 음성 메모는 이제 파형 시각화, 미디어 서버 선택 및 업로드 진행률 표시기와 함께 DM 및 일반 게시물에서 작동합니다. &lt;a href="https://nostrcompass.org/ko/topics/web-of-trust/">Web of Trust&lt;/a> 점수가 이제 인터페이스에 표시되어 사용자가 알고리즘이 자신의 소셜 그래프를 기준으로 계정을 어떻게 평가하는지 이해하는 데 도움이 됩니다. &lt;a href="https://nostrcompass.org/ko/topics/quartz/">Quartz&lt;/a> 데이터베이스 마이그레이션은 OpenSats 자금 지원 Kotlin Multiplatform 작업의 일환으로 쿼리 성능을 향상시킵니다. 초기 데스크톱 릴리스는 Android 앱과 동일한 코드베이스를 공유하면서 Compose Multiplatform을 통해 Amethyst를 Windows, macOS 및 Linux로 가져옵니다. 새로운 사용자 온보딩 흐름은 처음 Nostr 사용자를 위한 경험을 매끄럽게 합니다.&lt;/p>
&lt;p>&lt;strong>Nostur v1.25.3&lt;/strong> - iOS 및 macOS 클라이언트가 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> 개선 사항과 함께 &lt;a href="https://github.com/nostur-com/nostur-ios-public/releases">비공개 메시징에 집중합니다&lt;/a>. DM 대화는 이제 반응과 답글을 지원하여 공개 게시물의 상호 작용성을 암호화된 메시지에 도입합니다. 대화 보기가 더 나은 스레딩으로 재작업되어 다중 메시지 교환을 더 쉽게 따라갈 수 있으며, DM 목록에 &amp;ldquo;시간 전&amp;rdquo; 타임스탬프가 표시되어 빠른 스캔이 가능합니다. 데스크톱 사용자는 여러 피드나 대화를 나란히 보기 위한 다중 열 레이아웃을 얻습니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> 원격 서명자 지원을 통해 사용자는 Amber나 nsec.app과 같은 전용 서명자 앱에 개인 키를 보관할 수 있습니다. 추가 수정 사항은 iOS 15 및 iOS 16에서 DM 기능을 복원하고, 알림 지연을 해결하며, 게시된 DM을 수신하는 relay를 구성하는 기능을 추가합니다.&lt;/p>
&lt;h2 id="주목할-만한-코드-및-문서-변경-사항">주목할 만한 코드 및 문서 변경 사항&lt;/h2>
&lt;p>&lt;em>이것들은 열린 pull request와 초기 단계 작업으로, 병합되기 전에 피드백을 받기에 완벽합니다. 눈에 띄는 것이 있다면 리뷰하거나 댓글을 달아보세요!&lt;/em>&lt;/p>
&lt;h3 id="citrine-android-relay">Citrine (Android Relay)&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Citrine/pull/89">PR #89&lt;/a>는 Android 개인 relay 앱의 SQL 인젝션 취약점을 수정합니다. 이 문제로 인해 잘못된 event 데이터가 임의의 데이터베이스 쿼리를 실행할 수 있었으며, 이는 신뢰할 수 없는 입력을 저장하고 처리하는 모든 앱에 심각한 결함입니다. 수정 사항은 매개변수화된 쿼리를 사용하여 모든 데이터베이스 작업을 적절히 살균합니다. 아직 릴리스가 태그되지 않았으므로 사용자는 다음 버전을 기다리거나 소스에서 빌드해야 합니다. &lt;a href="https://github.com/greenart7c3/Citrine/pull/90">PR #90&lt;/a>은 데이터베이스 수준 필터링 및 페이지네이션으로 ContentProvider 쿼리 성능을 최적화하여 Amethyst와 같은 외부 앱이 Android의 프로세스 간 통신 계층을 통해 Citrine의 event 데이터베이스에 액세스할 때 지연 시간을 줄입니다.&lt;/p>
&lt;h3 id="rust-nostr-라이브러리">rust-nostr (라이브러리)&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-62/">NIP-62&lt;/a> (Vanish Requests) 지원이 rust-nostr의 데이터베이스 백엔드 전반에 확장되고 있습니다. 2주 전에 병합된 &lt;a href="https://github.com/rust-nostr/nostr/pull/1180">PR #1180&lt;/a>은 SQLite에 NIP-62 지원을 추가했으며, 데이터베이스 계층이 특정 relay URL을 알지 못하므로 &lt;code>ALL_RELAYS&lt;/code> vanish 요청을 처리합니다. &lt;a href="https://github.com/rust-nostr/nostr/pull/1210">PR #1210&lt;/a>은 이를 LMDB 백엔드로 확장하여 vanish 요청이 디스크에 지속되고 relay 재시작 후에도 유지되도록 합니다. 브라우저 환경을 위한 IndexedDB 구현도 진행 중입니다. 이러한 변경 사항을 통해 개발자는 SQLite, LMDB 및 곧 브라우저 스토리지 전반에 걸쳐 일관된 NIP-62 지원을 얻습니다.&lt;/p>
&lt;h3 id="ndk-nostr-development-kit">NDK (Nostr Development Kit)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-dev-kit/ndk/pull/375">PR #375&lt;/a>는 seenEvents 추적 시스템의 버그를 수정합니다. 이 문제로 인해 특정 구독 패턴이 event를 이미 본 것으로 잘못 표시하여 사용자가 새 구독을 열거나 relay에 다시 연결할 때 콘텐츠를 놓치게 되었습니다. 수정 사항은 구독 수명 주기 전반에 걸쳐 event가 정확하게 추적되도록 하며, 이는 사용자 탐색에 따라 동적으로 구독 및 구독 취소하는 애플리케이션에 특히 중요합니다. NDK는 이 수정 사항이 포함된 beta.70으로 업데이트되었습니다.&lt;/p>
&lt;h3 id="damus-ios">Damus (iOS)&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus/pull/3515">PR #3515&lt;/a>는 iOS 17 사용자에게 영향을 미치는 시작 시 충돌을 수정합니다. 이 문제는 Swift Mutex가 iOS 17에서 사용할 수 없기 때문에 사용되는 대체 클래스인 &lt;code>NdbUseLock&lt;/code>의 산술 오버플로우에서 비롯되었습니다. 수정 사항은 이전 동기화 접근 방식을 iOS 17에서 사용 가능하고 나머지 경쟁 조건을 적절히 처리하는 &lt;code>NSLock&lt;/code>으로 대체합니다. iOS 18+ 사용자는 네이티브 Swift Mutex 구현에 액세스할 수 있으므로 영향을 받지 않았습니다.&lt;/p>
&lt;p>별도로, &lt;a href="https://github.com/damus-io/damus/pull/3509">PR #3509&lt;/a>를 통해 장문 기사 개선 사항이 도입되었습니다. 읽기 진행 막대가 기사 내 위치를 추적하고, 예상 읽기 시간이 미리보기에 표시되며, 세피아 모드와 조절 가능한 줄 높이 설정이 더 편안한 읽기를 제공합니다. 포커스 모드는 아래로 스크롤할 때 탐색 크롬을 자동으로 숨기고 탭하면 복원하여 집중 읽기를 위한 시각적 혼잡을 줄입니다. 여러 수정 사항이 마크다운 콘텐츠의 이미지 표시 문제를 해결하고 기사가 중간이 아닌 맨 위에서 열리도록 합니다.&lt;/p>
&lt;h3 id="zapstream-라이브-스트리밍">Zap.stream (라이브 스트리밍)&lt;/h3>
&lt;p>YouTube 및 Kick 채팅 통합은 외부 스트리밍 플랫폼의 메시지를 Nostr로 연결합니다. YouTube, Kick 및 Zap.stream으로 멀티캐스트하는 스트리머는 이제 각 플랫폼의 메시지가 네이티브 Nostr 댓글과 함께 표시되는 통합 보기에서 모든 채팅 메시지를 볼 수 있습니다. 이것은 스트리밍에 Nostr를 사용하고 싶지만 기존 플랫폼의 청중을 포기할 수 없는 크리에이터의 주요 마찰 지점을 제거합니다. 통합은 각 메시지가 어느 플랫폼에서 왔는지 표시하고 외부 계정 연결을 위한 인증 흐름을 처리합니다.&lt;/p>
&lt;h3 id="chachi-nip-29-그룹">Chachi (NIP-29 그룹)&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-29/">NIP-29&lt;/a> 그룹 채팅 클라이언트가 이번 주에 6개의 병합된 PR을 출시했습니다. 보안 업데이트는 오픈 리디렉트 공격을 가능하게 할 수 있는 react-router의 XSS 취약점인 &lt;a href="https://github.com/purrgrammer/chachi/pull/89">CVE-2026-22029&lt;/a>를 해결합니다. 수정 사항은 react-router-dom 6.30.0으로 업데이트합니다. &lt;a href="https://github.com/purrgrammer/chachi/pull/92">PR #92&lt;/a>는 그룹 채팅에 페이지네이션된 메시지 로딩을 추가하여 긴 대화가 한 번에 모두가 아닌 점진적으로 로드됩니다. &lt;a href="https://github.com/purrgrammer/chachi/pull/91">PR #91&lt;/a>은 초기 로드 시 빈 그룹 이름을 유발하는 경쟁 조건과 멤버 보기를 충돌시키는 정의되지 않은 참가자 목록을 포함한 여러 NIP-29 버그를 수정합니다. 번역 범위는 이제 각각 1060개의 키를 가진 31개의 지원되는 로케일 모두를 포함합니다.&lt;/p>
&lt;h3 id="0xchat-메시징">0xchat (메시징)&lt;/h3>
&lt;p>Telegram 스타일 메시징 클라이언트는 외부 서명 앱을 사용할 때 서명자 패키지 이름을 적절히 저장하여 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> 준수를 개선했으며, 재시작 후 어떤 서명자를 사용할지 앱이 추적을 잃는 문제를 수정했습니다. NIP-17 답글 처리는 이제 스레딩을 위한 &lt;code>e&lt;/code> 태그를 올바르게 포함하여 클라이언트 전반에 걸쳐 답글이 올바른 대화 컨텍스트에 표시되도록 합니다. 성능 최적화는 긴 채팅 기록을 로드할 때 일반적인 문제인 메시지 목록의 스크롤 지연을 해결합니다. 임시 저장 자동 저장은 작성 중 다른 곳으로 이동해도 메시지 손실을 방지하며, 파일 저장 옵션에는 이제 기본 FileDropServer 및 BlossomServer 엔드포인트가 포함됩니다.&lt;/p>
&lt;h3 id="primal-ios">Primal (iOS)&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> 원격 서명자 지원이 &lt;a href="https://github.com/PrimalHQ/primal-ios-app/pull/184">PR #184&lt;/a>를 통해 iOS에 도입되어 몇 주 전 Android에서 시작된 크로스 플랫폼 롤아웃을 완료합니다. 사용자는 이제 nsec.app이나 자체 호스팅 nsecBunker 인스턴스와 같은 전용 벙커 서비스에 개인 키를 보관하고, 클라이언트 앱에 키를 노출하지 않고 Nostr relay를 통해 연결하여 event에 서명할 수 있습니다. 이 분리는 Primal의 기능을 사용하면서 더 엄격한 키 관리 관행을 유지하려는 사용자의 보안 태세를 개선합니다. 구현에는 벙커 연결 URI를 위한 QR 코드 스캔이 포함되며 암호화된 relay 메시지를 통한 NIP-46 요청/응답 흐름을 처리합니다.&lt;/p>
&lt;hr>
&lt;p>이번 주는 여기까지입니다. 무언가를 만들고 계신가요? 공유할 뉴스가 있으신가요? 프로젝트를 다뤄드릴까요? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">NIP-17 DM으로 연락하거나&lt;/a> Nostr에서 찾아주세요.&lt;/p></content:encoded></item><item><title>Nostr Compass #4</title><link>https://nostrcompass.org/ko/newsletters/2026-01-07-newsletter/</link><pubDate>Wed, 07 Jan 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2026-01-07-newsletter/</guid><description>&lt;p>Nostr 프로토콜 생태계에 대한 주간 가이드, Nostr Compass에 다시 오신 것을 환영합니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> Primal Android가 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> 원격 서명과 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> 로컬 서명자 지원을 탑재하여 다른 Android 앱을 위한 완전한 서명 허브가 되었습니다. &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot Protocol&lt;/a> 팀은 보안 감사 결과에 대응하여 &lt;a href="https://nostrcompass.org/ko/topics/mls/">MLS&lt;/a> 기반 암호화 메시징을 강화하는 18개의 PR을 병합했습니다. Citrine이 v1.0에 도달했고 Applesauce는 전체 라이브러리 스위트에 걸쳐 v5.0을 출시했습니다. TENEX는 Nostr에서 AI 에이전트 감독 기능을 구축하고 있으며, Jumble은 스마트 릴레이 풀링을 추가했습니다. NIP-55 스펙 수정으로 &lt;code>nip44_encrypt&lt;/code> 반환 필드가 명확해졌고, &lt;a href="https://nostrcompass.org/ko/topics/nip-50/">NIP-50&lt;/a> PR은 고급 검색을 위한 쿼리 표현식 확장을 제안합니다. 심층 분석에서는 &lt;a href="https://nostrcompass.org/ko/topics/nip-04/">NIP-04&lt;/a>와 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a>를 설명합니다: 레거시 암호화의 보안 결함과 현대적 대체 방식이 이를 어떻게 해결하는지 알아봅니다.&lt;/p></description><content:encoded>&lt;p>Nostr 프로토콜 생태계에 대한 주간 가이드, Nostr Compass에 다시 오신 것을 환영합니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> Primal Android가 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> 원격 서명과 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> 로컬 서명자 지원을 탑재하여 다른 Android 앱을 위한 완전한 서명 허브가 되었습니다. &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot Protocol&lt;/a> 팀은 보안 감사 결과에 대응하여 &lt;a href="https://nostrcompass.org/ko/topics/mls/">MLS&lt;/a> 기반 암호화 메시징을 강화하는 18개의 PR을 병합했습니다. Citrine이 v1.0에 도달했고 Applesauce는 전체 라이브러리 스위트에 걸쳐 v5.0을 출시했습니다. TENEX는 Nostr에서 AI 에이전트 감독 기능을 구축하고 있으며, Jumble은 스마트 릴레이 풀링을 추가했습니다. NIP-55 스펙 수정으로 &lt;code>nip44_encrypt&lt;/code> 반환 필드가 명확해졌고, &lt;a href="https://nostrcompass.org/ko/topics/nip-50/">NIP-50&lt;/a> PR은 고급 검색을 위한 쿼리 표현식 확장을 제안합니다. 심층 분석에서는 &lt;a href="https://nostrcompass.org/ko/topics/nip-04/">NIP-04&lt;/a>와 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a>를 설명합니다: 레거시 암호화의 보안 결함과 현대적 대체 방식이 이를 어떻게 해결하는지 알아봅니다.&lt;/p>
&lt;h2 id="뉴스">뉴스&lt;/h2>
&lt;p>&lt;strong>Primal Android가 완전한 서명 허브가 되다&lt;/strong> - &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/2.6.18">버전 2.6.18&lt;/a>은 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> 원격 서명과 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> 로컬 서명을 모두 추가하여 Primal을 다른 Nostr 앱을 위한 완전한 서명자로 만들었습니다. NIP-46을 통한 원격 서명은 사용자가 Nostr 릴레이를 통해 벙커 서비스에 연결할 수 있게 하여 키를 기기에서 완전히 분리합니다. NIP-55를 통한 로컬 서명은 Primal을 Android 콘텐츠 제공자로 노출하여 Amethyst나 Citrine 같은 앱이 개인 키에 직접 접근하지 않고도 서명을 요청할 수 있게 합니다. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/839">여러 후속 PR&lt;/a>이 NIP-55 스펙의 16진수 pubkey 요구사항과의 호환성 문제를 수정했고, 잘못된 형식의 &lt;code>nostrconnect://&lt;/code> URI 파싱을 개선했습니다. 이번 릴리스에는 부드러운 스크롤을 위한 미디어 사전 캐싱, 개선된 스레드 로드 시간, 아바타 사전 캐싱도 포함됩니다.&lt;/p>
&lt;p>&lt;strong>Marmot Protocol 감사 후 보안 강화&lt;/strong> - &lt;a href="https://nostrcompass.org/ko/topics/nip-104/">NIP-104&lt;/a> MLS 기반 엔드투엔드 암호화 메시징을 구현하는 &lt;a href="https://github.com/marmot-protocol/mdk">Marmot Development Kit&lt;/a> (mdk)가 이번 주에 광범위한 보안 수정을 받았습니다. 18개의 병합된 풀 리퀘스트가 감사 결과를 해결했는데, 여기에는 스토리지 수준 블롭 대체 공격을 방지하기 위한 &lt;a href="https://github.com/marmot-protocol/mdk/pull/97">암호화된 그룹 이미지의 해시 검증&lt;/a>, 메모리 고갈을 방지하기 위한 &lt;a href="https://github.com/marmot-protocol/mdk/pull/110">대기 중인 환영 메시지의 페이지네이션&lt;/a>, &lt;a href="https://github.com/marmot-protocol/mdk/pull/112">오류 메시지에서의 MLS Group ID 유출&lt;/a>, 그리고 키 패키지를 위한 &lt;a href="https://github.com/marmot-protocol/mdk/pull/98">base64 인코딩 강제&lt;/a>가 포함됩니다. &lt;a href="https://github.com/marmot-protocol/marmot/pull/20">Marmot 스펙 자체도&lt;/a> MIP-04 v2 버전 관리 및 보안 개선으로 업데이트되었습니다. 활성 PR들은 논스 재사용, 시크릿 제로화, 캐시 오염 벡터를 계속 해결하고 있습니다.&lt;/p>
&lt;p>&lt;strong>Nostrability가 릴레이 힌트 지원 추적&lt;/strong> - 새로운 &lt;a href="https://github.com/nostrability/nostrability/issues/270">릴레이 힌트 호환성 추적기&lt;/a>가 클라이언트들이 생태계 전반에서 릴레이 힌트를 구성하고 소비하는 방식을 문서화합니다. 추적기는 대부분의 클라이언트가 이제 &lt;a href="https://nostrcompass.org/ko/topics/nip-10/">NIP-10&lt;/a> 및 &lt;a href="https://nostrcompass.org/ko/topics/nip-19/">NIP-19&lt;/a>에 따라 힌트를 구성하지만, 소비 방식은 매우 다양하다는 것을 보여줍니다: 일부 클라이언트는 발신 이벤트에 힌트를 포함하지만 수신 힌트를 가져오기에 사용하지 않습니다. 6개의 클라이언트가 완전한 구현으로 &amp;ldquo;Full&amp;rdquo; 등급을 받았습니다. 이 추적기는 상호 운용성을 확인하는 개발자와 일부 클라이언트가 다른 클라이언트가 찾지 못하는 콘텐츠를 찾을 수 있는 이유가 궁금한 사용자에게 유용합니다.&lt;/p>
&lt;p>&lt;strong>Nostria 2.0 크로스 플랫폼 기능 대폭 개편 출시&lt;/strong> - &lt;a href="https://nostria.app">Nostria&lt;/a> 클라이언트가 iOS(TestFlight), Android(Play Store), Web, Windows에 걸쳐 상당한 추가 기능과 함께 &lt;a href="#ZgotmplZ">버전 2.0을 출시&lt;/a>했습니다. 이번 릴리스는 재생목록 생성, 트랙 업로드, zap 기반 아티스트 결제, 기능하는 이퀄라이저가 있는 WinAmp 스타일 플레이어를 갖춘 네이티브 음악 지원을 추가합니다. 라이브 스트리밍은 게임플레이 스트림 중 풍부한 메타데이터를 표시하는 Game API 통합을 받았습니다. 새로운 요약 기능은 시간별, 일별 또는 주별 활동 다이제스트를 압축된 타임라인 뷰로 생성합니다. Discover 섹션은 콘텐츠와 프로필을 찾기 위한 큐레이션된 목록을 제공합니다. 미디어 게시는 크로스 클라이언트 검색 가능성을 위한 자동 짧은 형식 게시물 생성으로 단순화되었습니다. 원격 서명자 연결은 이제 수동 구성 없이 QR 코드 스캔을 통해 작동합니다. 프로필 발견은 일반적인 Nostr 문제점을 해결합니다: 사용자가 메타데이터를 가져오지 않고 릴레이 간에 이동할 때 Nostria가 프로필을 찾아 현재 릴레이에 다시 게시합니다. 프리미엄 구독자는 YouTube 채널 통합, 비공개 메모, 분석 대시보드, 병합/복원 옵션이 있는 자동 팔로잉 목록 백업을 이용할 수 있습니다.&lt;/p>
&lt;h2 id="nip-업데이트">NIP 업데이트&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 저장소&lt;/a>의 최근 변경 사항:&lt;/p>
&lt;p>&lt;strong>병합됨:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a>&lt;/strong> - &lt;code>nip44_encrypt&lt;/code> 메서드의 반환 필드 수정 (&lt;a href="https://github.com/nostr-protocol/nips/pull/2184">#2184&lt;/a>). Android 서명자는 이제 별도의 필드가 아닌 &lt;code>signature&lt;/code> 필드에 암호화된 페이로드를 반환해야 합니다(&lt;code>nip44_decrypt&lt;/code>와 일치). 이는 Amber 및 Primal의 기존 구현과 스펙을 일치시킵니다.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>열린 PR:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-50/">NIP-50&lt;/a>&lt;/strong> - 쿼리 표현식 확장 (&lt;a href="https://github.com/nostr-protocol/nips/pull/2182">#2182&lt;/a>)은 구조화된 쿼리 표현식으로 NIP-50 검색을 확장할 것을 제안합니다. 이 PR은 &lt;code>kind:1&lt;/code>, &lt;code>author:npub1...&lt;/code> 같은 연산자와 불리언 조합(&lt;code>AND&lt;/code>, &lt;code>OR&lt;/code>, &lt;code>NOT&lt;/code>)을 추가하여 단순 텍스트 매칭을 넘어서는 더 정밀한 검색 쿼리를 가능하게 합니다. 이를 통해 클라이언트는 기본 검색 문자열과의 하위 호환성을 유지하면서 고급 검색 인터페이스를 구축할 수 있습니다.&lt;/li>
&lt;/ul>
&lt;h2 id="nip-심층-분석-nip-04와-nip-44">NIP 심층 분석: NIP-04와 NIP-44&lt;/h2>
&lt;p>이번 주에는 Nostr의 암호화 표준을 다룹니다: 여전히 접하게 될 레거시 NIP-04와 심각한 보안 결함을 수정한 현대적 대체품 NIP-44입니다.&lt;/p>
&lt;h3 id="nip-04kotopicsnip-04-암호화된-다이렉트-메시지-레거시">&lt;a href="https://nostrcompass.org/ko/topics/nip-04/">NIP-04&lt;/a>: 암호화된 다이렉트 메시지 (레거시)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/04.md">NIP-04&lt;/a>는 kind 4 이벤트를 사용하는 Nostr의 첫 암호화 메시징 시도였습니다. 구현이 간단하지만 알려진 보안 취약점이 있어 NIP-44를 위해 더 이상 사용되지 않습니다.&lt;/p>
&lt;p>&lt;strong>작동 방식:&lt;/strong> NIP-04는 ECDH(타원 곡선 Diffie-Hellman)를 사용하여 발신자와 수신자 간의 공유 비밀을 도출한 다음 AES-256-CBC로 암호화합니다.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event-id&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;sender-pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1736200000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">4&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [[&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;recipient-pubkey&amp;gt;&amp;#34;&lt;/span>]],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;base64-ciphertext?iv=base64-iv&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>암호화 흐름:&lt;/p>
&lt;ol>
&lt;li>공유 포인트 계산: &lt;code>shared = ECDH(sender_privkey, recipient_pubkey)&lt;/code>&lt;/li>
&lt;li>키 도출: &lt;code>key = SHA256(shared_x_coordinate)&lt;/code>&lt;/li>
&lt;li>무작위 16바이트 IV 생성&lt;/li>
&lt;li>암호화: &lt;code>ciphertext = AES-256-CBC(key, iv, plaintext)&lt;/code>&lt;/li>
&lt;li>콘텐츠 형식화: &lt;code>base64(ciphertext)?iv=base64(iv)&lt;/code>&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>보안 문제:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>인증 없음:&lt;/strong> AES-CBC는 기밀성은 제공하지만 무결성은 제공하지 않습니다. 릴레이를 제어하는 공격자가 암호문 비트를 수정하여 평문에 예측 가능한 변경을 일으킬 수 있습니다(비트 플리핑 공격).&lt;/li>
&lt;li>&lt;strong>평문 IV:&lt;/strong> 초기화 벡터가 암호문과 함께 전송되며, 예측 가능한 IV를 가진 CBC 모드는 선택 평문 공격을 가능하게 합니다.&lt;/li>
&lt;li>&lt;strong>패딩 검증 없음:&lt;/strong> 구현마다 PKCS#7 패딩을 처리하는 방식이 달라 패딩 오라클 공격이 가능할 수 있습니다.&lt;/li>
&lt;li>&lt;strong>메타데이터 노출:&lt;/strong> 발신자 pubkey, 수신자 pubkey, 타임스탬프가 모두 릴레이에 노출됩니다.&lt;/li>
&lt;li>&lt;strong>키 재사용:&lt;/strong> 두 당사자 간의 모든 메시지에 동일한 공유 비밀이 영원히 사용됩니다.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>여전히 존재하는 이유:&lt;/strong> 많은 오래된 클라이언트와 릴레이가 NIP-04만 지원합니다. 레거시 시스템과 상호 작용할 때 이를 접하게 됩니다. Amber 같은 서명자와 Primal 같은 앱은 하위 호환성을 위해 여전히 &lt;code>nip04_encrypt&lt;/code>/&lt;code>nip04_decrypt&lt;/code>를 구현합니다.&lt;/p>
&lt;h3 id="nip-44kotopicsnip-44-버전-관리-암호화">&lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a>: 버전 관리 암호화&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/44.md">NIP-44&lt;/a>는 NIP-04의 알려진 결함을 수정하도록 설계된 현대적 암호화 표준입니다. NIP-44 구현에 대한 Cure53 보안 감사에서 타이밍 공격 및 순방향 비밀성 문제를 포함한 10개의 문제가 식별되었으며, 스펙이 확정되기 전에 해결되었습니다. 적절한 키 도출과 인증된 암호화와 함께 ChaCha20-Poly1305를 사용합니다.&lt;/p>
&lt;p>&lt;strong>NIP-04 대비 주요 개선 사항:&lt;/strong>&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">측면&lt;/th>
 &lt;th style="text-align: left">NIP-04&lt;/th>
 &lt;th style="text-align: left">NIP-44&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">암호&lt;/td>
 &lt;td style="text-align: left">AES-256-CBC&lt;/td>
 &lt;td style="text-align: left">XChaCha20-Poly1305&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">인증&lt;/td>
 &lt;td style="text-align: left">없음&lt;/td>
 &lt;td style="text-align: left">Poly1305 MAC&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">키 도출&lt;/td>
 &lt;td style="text-align: left">SHA256(shared_x)&lt;/td>
 &lt;td style="text-align: left">솔트가 있는 HKDF&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">논스&lt;/td>
 &lt;td style="text-align: left">16바이트 IV, 재사용 패턴&lt;/td>
 &lt;td style="text-align: left">24바이트 무작위 논스&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">패딩&lt;/td>
 &lt;td style="text-align: left">PKCS#7 (길이 유출)&lt;/td>
 &lt;td style="text-align: left">2의 거듭제곱으로 패딩&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">버전 관리&lt;/td>
 &lt;td style="text-align: left">없음&lt;/td>
 &lt;td style="text-align: left">버전 바이트 접두사&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>암호화 흐름:&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>대화 키:&lt;/strong> 각 발신자-수신자 쌍에 대해 안정적인 키를 도출:&lt;/p>
&lt;pre tabindex="0">&lt;code>shared_x = ECDH(sender_privkey, recipient_pubkey).x
conversation_key = HKDF-SHA256(
 ikm = shared_x,
 salt = &amp;#34;nip44-v2&amp;#34;,
 info = &amp;#34;&amp;#34;
)
&lt;/code>&lt;/pre>&lt;/li>
&lt;li>
&lt;p>&lt;strong>메시지 키:&lt;/strong> 각 메시지에 대해 무작위 32바이트 논스를 생성하고 암호화/인증 키를 도출:&lt;/p>
&lt;pre tabindex="0">&lt;code>keys = HKDF-SHA256(
 ikm = conversation_key,
 salt = nonce,
 info = &amp;#34;nip44-v2&amp;#34;
)
chacha_key = keys[0:32]
chacha_nonce = keys[32:44]
hmac_key = keys[44:76]
&lt;/code>&lt;/pre>&lt;/li>
&lt;li>
&lt;p>&lt;strong>평문 패딩:&lt;/strong> 메시지 길이를 숨기기 위해 다음 2의 거듭제곱으로 패딩(최소 32바이트):&lt;/p>
&lt;pre tabindex="0">&lt;code>padded = [length_u16_be] + [plaintext] + [zeros to next power of 2]
&lt;/code>&lt;/pre>&lt;/li>
&lt;li>
&lt;p>&lt;strong>암호화 및 인증:&lt;/strong>&lt;/p>
&lt;pre tabindex="0">&lt;code>ciphertext = XChaCha20(chacha_key, chacha_nonce, padded)
mac = HMAC-SHA256(hmac_key, nonce + ciphertext)
&lt;/code>&lt;/pre>&lt;/li>
&lt;li>
&lt;p>&lt;strong>페이로드 형식화:&lt;/strong>&lt;/p>
&lt;pre tabindex="0">&lt;code>payload = [version=0x02] + [nonce] + [ciphertext] + [mac]
content = base64(payload)
&lt;/code>&lt;/pre>&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>버전 바이트:&lt;/strong> 첫 번째 바이트(&lt;code>0x02&lt;/code>)는 암호화 버전을 나타냅니다. 이를 통해 기존 메시지를 손상시키지 않고 향후 업그레이드가 가능합니다. 버전 &lt;code>0x01&lt;/code>은 널리 배포되지 않은 초기 초안이었습니다.&lt;/p>
&lt;p>&lt;strong>복호화:&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>base64 디코드, 버전 바이트가 &lt;code>0x02&lt;/code>인지 확인&lt;/li>
&lt;li>논스(바이트 1-32), 암호문, MAC(마지막 32바이트) 추출&lt;/li>
&lt;li>수신자의 개인 키와 발신자의 공개 키를 사용하여 대화 키 도출&lt;/li>
&lt;li>대화 키와 논스에서 메시지 키 도출&lt;/li>
&lt;li>복호화 전에 MAC 검증(유효하지 않으면 거부)&lt;/li>
&lt;li>암호문 복호화, 길이 접두사 추출, 패딩되지 않은 평문 반환&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>보안 속성:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>인증된 암호화:&lt;/strong> Poly1305 MAC이 복호화 전에 모든 변조를 감지&lt;/li>
&lt;li>&lt;strong>순방향 비밀성(부분적):&lt;/strong> 각 메시지가 고유한 논스를 사용하므로 한 메시지가 손상되어도 다른 메시지는 드러나지 않음. 그러나 개인 키가 손상되면 과거의 모든 메시지가 노출됨(래칫 없음).&lt;/li>
&lt;li>&lt;strong>길이 숨김:&lt;/strong> 2의 거듭제곱 패딩이 정확한 메시지 길이를 숨김&lt;/li>
&lt;li>&lt;strong>타이밍 공격 저항:&lt;/strong> MAC 검증을 위한 상수 시간 비교&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>실제 사용:&lt;/strong> NIP-44는 다음을 위한 암호화 레이어입니다:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> 비공개 다이렉트 메시지(gift wrap 내부)&lt;/li>
&lt;li>&lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> 원격 서명자 통신&lt;/li>
&lt;li>&lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59&lt;/a> seal 암호화&lt;/li>
&lt;li>&lt;a href="https://nostrcompass.org/ko/topics/nip-104/">Marmot Protocol&lt;/a> 그룹 메시지, 여기서 NIP-44는 MLS exporter secret에서 도출된 키를 사용하여 MLS 암호화된 콘텐츠를 래핑&lt;/li>
&lt;li>안전한 포인트 투 포인트 암호화가 필요한 모든 애플리케이션&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>마이그레이션 가이드:&lt;/strong> 새로운 애플리케이션은 NIP-44만 사용해야 합니다. 하위 호환성을 위해, NIP-04로 폴백하기 전에 연락처의 클라이언트가 NIP-44를 지원하는지(&lt;a href="https://nostrcompass.org/ko/topics/nip-89/">NIP-89&lt;/a> 앱 메타데이터 또는 릴레이 지원을 통해) 확인하세요. 메시지를 받을 때는 먼저 NIP-44 복호화를 시도한 다음 레거시 콘텐츠에 대해 NIP-04로 폴백하세요.&lt;/p>
&lt;h2 id="릴리스">릴리스&lt;/h2>
&lt;p>&lt;strong>Primal Android v2.6.18&lt;/strong> - &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/2.6.18">전체 릴리스&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> 원격 서명과 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> 로컬 서명을 추가하여 Primal을 다른 Android 앱을 위한 서명 허브로 만듭니다. 성능 개선에는 미디어 사전 캐싱, 아바타 사전 캐싱, 더 빠른 스레드 로딩이 포함됩니다. 버그 수정은 바이오의 자기 언급, 미디어 갤러리 크래시, 스트림 제목 폴백을 해결합니다. iOS에서 Primal은 NIP-46 서명 요청 수신을 위해 앱을 활성 상태로 유지하기 위해 백그라운드 오디오 재생을 사용합니다; 사용자는 설정에서 소리를 변경하거나 완전히 음소거할 수 있습니다.&lt;/p>
&lt;p>&lt;strong>Mostro v0.15.6&lt;/strong> - &lt;a href="https://nostrcompass.org/ko/topics/nip-69/">NIP-69&lt;/a> P2P 비트코인 거래 플랫폼의 &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.15.6">최신 릴리스&lt;/a>는 Phase 4 감사 이벤트로 개발 펀드 구현을 완료합니다. 개발 수수료 지불은 이제 각 성공적인 지불 후 게시되는 kind 38383 Nostr 이벤트를 통해 추적되어 제3자 검증 및 분석이 가능합니다. 구매자/판매자 메시지에 대한 금액 계산이 수정되었고, 프리미엄 로직이 lnp2pbot 참조 구현과 일치하도록 조정되었습니다.&lt;/p>
&lt;p>&lt;strong>Aegis v0.3.5&lt;/strong> - 크로스 플랫폼 서명자가 &lt;a href="https://github.com/ZharlieW/Aegis/releases/tag/v0.3.5">다크 모드를 추가&lt;/a>하고, 앱 아이콘 표시를 개선하고, 더 깔끔한 UI 레이아웃을 제공합니다. 버그 수정은 iOS iCloud Private Relay 충돌 및 이벤트 파싱 문제를 해결합니다. 이번 릴리스는 이벤트 JSON이 Rust 서명 함수에 전달되는 방식도 개선합니다.&lt;/p>
&lt;p>&lt;strong>Citrine v1.0.0&lt;/strong> - Android 릴레이 앱이 &lt;a href="https://github.com/greenart7c3/Citrine/releases/tag/v1.0.0">1.0에 도달&lt;/a>했습니다. Citrine은 Android 기기에서 직접 개인 Nostr 릴레이를 실행할 수 있게 해주며, 로컬 캐싱, 백업 또는 NIP-55 컴패니언으로 유용합니다. 이번 릴리스는 크래시 리포트 핸들러를 추가하고, 데이터베이스 쿼리 효율성을 개선하며, Crowdin을 통해 번역을 업데이트합니다.&lt;/p>
&lt;p>&lt;strong>Applesauce v5.0.0&lt;/strong> - hzrd149의 TypeScript 라이브러리 스위트가 정확성과 단순성에 초점을 맞춘 브레이킹 체인지와 함께 &lt;a href="https://github.com/hzrd149/applesauce/releases">메이저 버전을 출시&lt;/a>합니다. core 패키지는 이제 &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-core%405.0.0">기본적으로 이벤트 서명을 검증&lt;/a>하고 좌표 메서드를 더 명확한 &amp;ldquo;address&amp;rdquo; 용어를 사용하도록 이름을 변경합니다(&lt;code>parseCoordinate&lt;/code> → &lt;code>parseReplaceableAddress&lt;/code>). relay 패키지는 &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-relay%405.0.0">기본 재시도를 10에서 3으로 낮추고&lt;/a> 기본적으로 도달할 수 없는 릴레이를 무시하며, 더 간단한 이벤트 가져오기를 위한 &lt;code>createUnifiedEventLoader&lt;/code>를 추가합니다. wallet 패키지는 &lt;a href="https://nostrcompass.org/ko/topics/nip-87/">NIP-87&lt;/a> &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-wallet%405.0.0">Cashu mint 검색&lt;/a>을 지원합니다. 패키지 전반에서 직접적인 &lt;code>nostr-tools&lt;/code> 의존성이 제거되어 번들 크기와 버전 충돌이 감소했습니다.&lt;/p>
&lt;h2 id="주목할-만한-코드-및-문서-변경-사항">주목할 만한 코드 및 문서 변경 사항&lt;/h2>
&lt;p>&lt;em>이것들은 열린 풀 리퀘스트와 초기 단계 작업으로, 병합 전에 피드백을 받기에 완벽합니다. 관심이 가는 것이 있다면 리뷰나 코멘트를 고려해 보세요!&lt;/em>&lt;/p>
&lt;h3 id="damus-ios">Damus (iOS)&lt;/h3>
&lt;p>일련의 PR이 장문 기사 경험을 개선합니다. &lt;a href="https://github.com/damus-io/damus/pull/3496">읽기 UX 개선&lt;/a>은 진행률 표시줄, 예상 읽기 시간, 세피아 모드, 조정 가능한 줄 높이, 스크롤 시 내비게이션을 숨기는 집중 모드를 추가합니다. &lt;a href="https://github.com/damus-io/damus/pull/3489">이미지 수정&lt;/a>은 마크다운 콘텐츠의 이미지가 독립 이미지를 블록 수준 요소로 전처리하여 적절한 종횡비로 표시되도록 합니다. &lt;a href="https://github.com/damus-io/damus/pull/3497">장문 미리보기 카드&lt;/a>는 인라인 &lt;code>@naddr1...&lt;/code> 텍스트를 기사 제목과 메타데이터를 보여주는 풍부한 미리보기 카드로 대체합니다. 새로운 &lt;a href="https://github.com/damus-io/damus/pull/3508">릴레이 통합 테스트 스위트&lt;/a>는 &lt;a href="https://nostrcompass.org/ko/topics/nip-01/">NIP-01&lt;/a> 프로토콜 검증과 저하된 네트워크 조건(3G 시뮬레이션)에서의 동작을 포함한 137개의 네트워크 관련 테스트를 추가합니다.&lt;/p>
&lt;h3 id="bitchat-암호화-메시징">Bitchat (암호화 메시징)&lt;/h3>
&lt;p>iOS Nostr+Cashu 메신저의 보안 강화. &lt;a href="https://github.com/permissionlesstech/bitchat/pull/928">Noise 프로토콜 DH 비밀 클리어링&lt;/a>은 Diffie-Hellman 키 합의 후 공유 비밀이 제로화되지 않던 6곳을 수정하여 순방향 비밀성 보장을 복원합니다. &lt;a href="https://github.com/permissionlesstech/bitchat/pull/929">읽음 확인 큐에 대한 스레드 안전성&lt;/a>은 NostrTransport의 경쟁 조건을 방지하기 위한 배리어 동기화를 추가합니다. &lt;a href="https://github.com/permissionlesstech/bitchat/pull/920">메시지 중복 제거기 최적화&lt;/a>는 높은 메시지 볼륨에서 성능을 개선하고, &lt;a href="https://github.com/permissionlesstech/bitchat/pull/919">16진수 문자열 파싱 강화&lt;/a>는 잘못된 형식의 입력으로 인한 크래시를 방지합니다.&lt;/p>
&lt;h3 id="frostr-임계값-서명">Frostr (임계값 서명)&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/frost/">FROST&lt;/a> 기반 임계값 서명 프로토콜이 온보딩 중과 서명자 인터페이스에서 그룹 자격 증명 및 공유 자격 증명을 위한 &lt;a href="https://github.com/FROSTR-ORG/igloo-desktop/pull/62">QR 코드 표시를 추가&lt;/a>했습니다. 이를 통해 여러 기기에 키 공유를 배포할 때 사용자가 긴 문자열을 수동으로 복사하는 대신 자격 증명을 스캔할 수 있어 설정이 더 쉬워집니다.&lt;/p>
&lt;h3 id="marmot-mdk-라이브러리">Marmot mdk (라이브러리)&lt;/h3>
&lt;p>위에서 언급한 보안 수정 외에도, 활성 PR들이 나머지 감사 결과를 해결합니다: &lt;a href="https://github.com/marmot-protocol/mdk/pull/109">제로화를 위한 Secret&lt;T> 타입&lt;/a>은 드롭 시 민감한 데이터를 자동으로 제로화하는 래퍼 타입을 도입하고, &lt;a href="https://github.com/marmot-protocol/mdk/pull/111">메시지 쿼리 페이지네이션&lt;/a>은 채팅 기록을 로드할 때 메모리 고갈을 방지하며, &lt;a href="https://github.com/marmot-protocol/mdk/pull/102">암호화된 스토리지&lt;/a>는 그룹 상태와 메시지를 저장하는 SQLite 데이터베이스에 휴지 상태 암호화를 추가합니다.&lt;/p>
&lt;h3 id="amethyst-android">Amethyst (Android)&lt;/h3>
&lt;p>Android 클라이언트 전반의 바쁜 안정성 수정 주간. &lt;a href="https://github.com/vitorpamplona/amethyst/commit/2c42796">관대한 JSON 파싱&lt;/a>은 Kotlin Serialization을 더 관용적으로 만들어 잘못된 형식의 이벤트로 인한 크래시를 방지합니다. 이벤트 유효성 검사는 이제 과대한 값으로 인한 예외를 피하기 위해 처리 전에 &lt;a href="https://github.com/vitorpamplona/amethyst/commit/40f9622">kind 필드 크기를 확인&lt;/a>합니다. 신뢰 점수 UI는 시각적 간섭을 줄이기 위해 더 작은 아이콘을 받았고, &lt;a href="https://github.com/vitorpamplona/amethyst/commit/69c53ac">개선된 오류 로깅&lt;/a>은 릴레이 연결 문제 진단에 도움이 됩니다. Crowdin을 통한 번역 업데이트가 도착했고, 여러 SonarQube 경고가 해결되었습니다.&lt;/p>
&lt;h3 id="tenex-ai-에이전트">TENEX (AI 에이전트)&lt;/h3>
&lt;p>Nostr 네이티브 AI 에이전트 프레임워크가 이번 주에 자율 기능을 구축하는 81개의 커밋을 보였습니다. 새로운 &lt;a href="https://github.com/tenex-chat/tenex/pull/48">에이전트 감독 시스템&lt;/a>은 에이전트 행동을 모니터링하고 필요할 때 개입하기 위한 행동 휴리스틱을 구현합니다. &lt;a href="https://github.com/tenex-chat/tenex/commit/b244c10">위임 투명성&lt;/a>은 위임 기록에 사용자 개입 로깅을 추가하여 사용자가 에이전트가 자신을 대신해 수행한 작업을 감사할 수 있게 합니다. &lt;a href="https://github.com/tenex-chat/tenex/pull/47">LLM 제공자 레지스트리&lt;/a>는 다른 AI 백엔드의 더 쉬운 통합을 위해 모듈화되었습니다. 크로스 프로젝트 대화 지원은 에이전트가 여러 Nostr 기반 프로젝트에서 컨텍스트를 유지할 수 있게 합니다.&lt;/p>
&lt;h3 id="jumble-웹-클라이언트">Jumble (웹 클라이언트)&lt;/h3>
&lt;p>릴레이 중심 웹 클라이언트가 여러 사용자 경험 개선을 추가했습니다. &lt;a href="https://github.com/CodyTseng/jumble/commit/695f2fe">스마트 릴레이 풀&lt;/a>은 사용 패턴에 따라 연결을 지능적으로 관리합니다. &lt;a href="https://github.com/CodyTseng/jumble/commit/917fcd9">라이브 피드 토글&lt;/a>은 사용자가 실시간 스트리밍과 수동 새로고침 사이를 전환할 수 있게 합니다. &lt;a href="https://github.com/CodyTseng/jumble/commit/d1b3a8c">새 노트 자동 표시&lt;/a>는 페이지 새로고침 없이 상단에 새 콘텐츠를 표시합니다. 팔로잉 피드와 알림을 위한 &lt;a href="https://github.com/CodyTseng/jumble/commit/fd9f41c">영구 캐시&lt;/a>는 재방문 시 로드 시간을 개선합니다. 사용자는 이제 설정을 통해 &lt;a href="https://github.com/CodyTseng/jumble/commit/53a67d8">기본 릴레이를 변경&lt;/a>할 수 있습니다.&lt;/p>
&lt;hr>
&lt;p>이번 주는 여기까지입니다. 무언가를 만들고 계신가요? 공유할 뉴스가 있으신가요? 프로젝트를 다뤄주길 원하시나요? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">NIP-17 DM으로 연락&lt;/a>하시거나 Nostr에서 찾아주세요.&lt;/p></content:encoded></item><item><title>Nostr Compass #3</title><link>https://nostrcompass.org/ko/newsletters/2025-12-31-newsletter/</link><pubDate>Wed, 31 Dec 2025 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2025-12-31-newsletter/</guid><description>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr 프로토콜 생태계에 대한 주간 가이드입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> 2025년이 끝나가며, Nostr 진화의 12월 이정표 5년을 되돌아봅니다. 2020년 12월 fiatjaf의 첫 클라이언트 릴리스부터, 2022년 12월 Jack Dorsey의 결정적 14 BTC 기부, 그리고 이번 달 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> 서명자 확산과 NDK의 162배 캐시 속도 향상까지, 12월은 꾸준히 프로토콜의 전환점을 만들어 왔습니다. 이번 특집호는 12월마다의 기술적 역사를 따라가며, 두 개의 실험적 relay에서 50개국 2,500개 이상의 노드로 성장한 과정을 기록합니다. 여기에 Quartz를 통한 Amethyst의 데스크톱 모듈 구체화, 메시징 기능을 얻은 Notedeck, 웹 앱을 호스팅하는 Citrine, 비라틴 문자 국제화를 바로잡은 &lt;a href="https://nostrcompass.org/ko/topics/nip-54/">NIP-54&lt;/a>까지 다룹니다.&lt;/p></description><content:encoded>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr 프로토콜 생태계에 대한 주간 가이드입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> 2025년이 끝나가며, Nostr 진화의 12월 이정표 5년을 되돌아봅니다. 2020년 12월 fiatjaf의 첫 클라이언트 릴리스부터, 2022년 12월 Jack Dorsey의 결정적 14 BTC 기부, 그리고 이번 달 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> 서명자 확산과 NDK의 162배 캐시 속도 향상까지, 12월은 꾸준히 프로토콜의 전환점을 만들어 왔습니다. 이번 특집호는 12월마다의 기술적 역사를 따라가며, 두 개의 실험적 relay에서 50개국 2,500개 이상의 노드로 성장한 과정을 기록합니다. 여기에 Quartz를 통한 Amethyst의 데스크톱 모듈 구체화, 메시징 기능을 얻은 Notedeck, 웹 앱을 호스팅하는 Citrine, 비라틴 문자 국제화를 바로잡은 &lt;a href="https://nostrcompass.org/ko/topics/nip-54/">NIP-54&lt;/a>까지 다룹니다.&lt;/p>
&lt;h2 id="12월-회고-nostr의-다섯-번의-12월">12월 회고: Nostr의 다섯 번의 12월&lt;/h2>
&lt;p>Nostr는 올해로 다섯 살이 됩니다. fiatjaf는 2020년 11월 7일 프로토콜을 시작했고, 이후의 모든 12월은 개념 검증, 글로벌 운동, 프로덕션 생태계로 이어지는 서로 다른 진화 단계를 보여줬습니다. 이번 글은 2020년 12월부터 2025년 12월까지, Nostr의 기반을 세우고 돌파구를 만든 형성기의 기술적 회고입니다.&lt;/p>
&lt;h3 id="2020년-12월-창세기">2020년 12월: 창세기&lt;/h3>
&lt;p>Nostr가 존재한 첫 번째 완전한 달에 fiatjaf는 Quasar(Vue.js)와 absurd-sql을 사용해 로컬 스토리지를 구현한 프로토콜 최초의 클라이언트 &lt;a href="https://github.com/fiatjaf/branle">Branle&lt;/a>를 공개했습니다. 당시 fiatjaf는 이미 핵심 아키텍처를 세워 두었습니다. 사용자는 secp256k1 공개키로 식별되고, 모든 게시물은 암호학적으로 서명되며, relay는 서로 통신하지 않는 단순 저장소로 동작했습니다. 11월 16일에 시작된 텔레그램 그룹 &lt;a href="https://t.me/nostr_protocol">@nostr_protocol&lt;/a>에서 조율하던 소수의 초기 사용자들을 위해 한두 개의 실험적 relay가 돌아갔습니다. &lt;a href="https://fiatjaf.com/nostr.html">초기 문서&lt;/a>는 이를 &amp;ldquo;검열 저항적인 글로벌 소셜 네트워크를 만들 수 있는 가장 단순한 오픈 프로토콜&amp;quot;이라고 설명했고, 그 전제가 증명되기까지는 2년이 더 필요했습니다.&lt;/p>
&lt;h3 id="2021년-12월-초기-개발">2021년 12월: 초기 개발&lt;/h3>
&lt;p>2021년 12월 31일, Cameri가 제출한 글을 통해 Nostr는 &lt;a href="https://news.ycombinator.com/item?id=29749061">Hacker News 첫 페이지&lt;/a>에 올랐고 110점과 138개의 댓글을 기록했습니다. 이는 더 넓은 개발자 커뮤니티가 프로토콜을 본격적으로 접한 첫 순간이었습니다. 당시 네트워크는 대략 7개의 relay와 1,000명 미만의 사용자로 운영됐습니다. Branle은 12월 31일 개인 키 가져오기와 멀티 relay 지원을 포함한 업데이트를 받았습니다. 커맨드라인 클라이언트 noscl도 터미널 기반 상호작용을 제공했습니다. 프로토콜 사양은 fiatjaf의 문서에 존재했지만, 공식 &lt;a href="https://github.com/nostr-protocol/nips">NIPs 저장소&lt;/a>가 만들어진 것은 2022년 5월이었습니다. fiatjaf의 표현대로, 이 프로토콜은 아직 &amp;ldquo;진행 중인 작업&amp;quot;이었습니다.&lt;/p>
&lt;h3 id="2022년-12월-전환점">2022년 12월: 전환점&lt;/h3>
&lt;p>2022년 12월은 Nostr를 틈새 실험에서 주류 운동으로 바꿔놓았습니다. 촉매는 12월 15일에 왔습니다. Jack Dorsey가 프로토콜을 발견한 뒤 &amp;ldquo;우리가 Bluesky에 원했던 것이 100퍼센트지만, 회사가 만든 것은 아니다&amp;quot;라고 말하며 fiatjaf에게 &lt;a href="https://www.coindesk.com/tech/2022/12/15/jack-dorsey-gives-decentralized-social-network-nostr-14-btc-in-funding">14.17171699 BTC&lt;/a>(약 245,000~250,000달러)를 기부했습니다. 12월 16일 fiatjaf는 이 자금을 Damus 개발자 William Casarin(jb55)과 나누겠다고 발표했고, Dorsey는 자신의 Nostr 계정(npub: &lt;code>npub1sg6plzptd64u62a878hep2kev88swjh3tw00gjsfl8f237lmu63q0uf63m&lt;/code>)을 인증했습니다. 이 자금 지원은 프로젝트를 하룻밤 사이에 정당화했습니다.&lt;/p>
&lt;p>같은 주, Twitter의 혼란은 채택을 더 밀어올렸습니다. 12월 14일과 15일에는 New York Times, CNN, Washington Post의 저명한 기자 계정이 정지됐습니다. 12월 18일 Twitter는 &lt;a href="https://techcrunch.com/2022/12/18/twitter-wont-let-you-post-your-facebook-instagram-and-mastodon-handles/">Nostr, Mastodon, 기타 플랫폼 홍보 계정 금지&lt;/a>를 발표했습니다. 이 정책은 반발 이후 다음 날 철회됐습니다. 그 이탈 흐름은 사용자들을 대안을 찾게 만들었습니다.&lt;/p>
&lt;p>프로토콜 개발도 급증했습니다. 12월 16일 &lt;a href="https://nostrcompass.org/ko/topics/nip-19/">NIP-19&lt;/a>가 병합되며(&lt;a href="https://github.com/nostr-protocol/nips/pull/57">#57&lt;/a>) 사람이 읽을 수 있고 구별 가능한 bech32 식별자(npub, nsec, note, nprofile, nevent)를 도입했습니다. NIPs 저장소에는 그달 36개 이상의 커밋이 기록됐고, NIP-40과 NIP-07 업데이트도 포함됐습니다. 클라이언트도 빠르게 늘어났습니다. Damus는 몇 시간 만에 TestFlight 베타 정원을 채웠고, Astral은 프로필 생성을 위해 Branle을 포크했으며, Snort는 &amp;ldquo;빠르고 검열 저항적인&amp;rdquo; 웹 클라이언트로 출시됐고, Vitor Pamplona는 Amethyst 개발을 시작했습니다. Alby v1.22.1 &amp;ldquo;Kemble&amp;rsquo;s Cascade of Stars&amp;quot;는 12월 22일 &lt;a href="https://nostrcompass.org/ko/topics/nip-19/">NIP-19&lt;/a> 지원과 함께 출시됐습니다. 12월 7일 기준 Nostr에는 프로필을 가진 사용자가 약 800명이었지만, 2023년 1월 31일 Damus가 App Store에 올라간 뒤에는 폭발적으로 성장해 2023년 6월까지 315,000명 이상으로 늘었습니다.&lt;/p>
&lt;h3 id="2023년-12월-생태계의-성숙">2023년 12월: 생태계의 성숙&lt;/h3>
&lt;p>2023년 12월은 Nostr 프로토콜 보안에서 결정적인 변곡점이었습니다. 12월 20일, 독립적인 Cure53 보안 감사(NOS-01)에서 TypeScript, Go, Rust 구현 전반의 10개 이슈, 즉 타이밍 공격과 forward secrecy 우려가 발견된 뒤 &lt;a href="https://github.com/nostr-protocol/nips/pull/746">NIP-44 개정 3&lt;/a>이 병합됐습니다. 업데이트된 사양은 결함이 있던 &lt;a href="https://nostrcompass.org/ko/topics/nip-04/">NIP-04&lt;/a> 암호화를 ChaCha20과 HMAC-SHA256으로 대체했고, 현재 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> 개인 DM과 &lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59&lt;/a> gift wrapping을 떠받치는 암호학적 기반을 세웠습니다. 같은 주인 12월 21일에는 &lt;a href="https://opensats.org/blog/nostr-grants-december-2023">OpenSats가 네 번째 보조금 웨이브를 발표&lt;/a>하며 Lume, noStrudel, ZapThreads, 독립적인 NIP-44 감사 등 7개 프로젝트를 지원했습니다. 이는 Damus, Coracle, Iris 등을 지원한 &lt;a href="https://opensats.org/blog/nostr-grants-july-2023">2023년 7월 첫 번째 웨이브&lt;/a>에 이은 것이며, 총 Nostr Fund 배분액은 39개 보조금에 걸쳐 약 340만 달러에 도달했습니다.&lt;/p>
&lt;p>이 달은 생태계의 지속 가능성에 대한 긴장도 드러냈습니다. 12월 28일 William Casarin(jb55)은 &lt;a href="https://stacker.news/items/368863">Stacker News 글&lt;/a>에서 Apple의 인앱 zap 제한이 수익 가능성을 심각하게 막고 있다며 2024년이 &amp;ldquo;아마 Damus의 마지막 해가 될 것&amp;quot;이라고 썼습니다. Damus 팀은 이전에 VC 자금을 거절한 바 있습니다. 한편 &lt;a href="https://github.com/getAlby/nostr-wallet-connect/releases/tag/0.4.1">Nostr Wallet Connect v0.4.1&lt;/a>은 12월 26일 출시되며 &lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47&lt;/a>에 &lt;code>pay_keysend&lt;/code>, &lt;code>make_invoice&lt;/code>, &lt;code>lookup_invoice&lt;/code>, &lt;code>list_transactions&lt;/code>, &lt;code>get_balance&lt;/code>, &lt;code>get_info&lt;/code> 메서드를 확장했고, 이후 클라이언트 전반에 표준이 되는 지갑 통합의 토대를 마련했습니다.&lt;/p>
&lt;h3 id="2024년-12월-프로토콜의-전진">2024년 12월: 프로토콜의 전진&lt;/h3>
&lt;p>2024년 12월은 11월 30일 &lt;a href="https://damus.io/notedeck/">Notedeck Alpha 출시&lt;/a>로 시작됐습니다. Damus 팀의 Rust 기반 데스크톱 클라이언트인 Notedeck은 다중 컬럼 인터페이스와 다중 계정 지원을 제공했습니다. Linux, macOS, Windows용으로 빌드됐고(Android는 2025년 예정), 처음에는 Damus Purple 구독자에게 배포되며 iOS를 넘어서는 전략적 확장을 보여줬습니다. 2주 뒤인 12월 16일에는 &lt;a href="https://opensats.org/blog/9th-wave-of-nostr-grants">OpenSats가 아홉 번째 보조금 웨이브를 발표&lt;/a>하며 AlgoRelay, Pokey, Nostr Safebox(&lt;a href="https://nostrcompass.org/ko/topics/nip-60/">NIP-60&lt;/a> &lt;a href="https://nostrcompass.org/ko/topics/cashu/">Cashu&lt;/a> 토큰 저장), LumiLumi를 지원했습니다. 그 결과 총 Nostr Fund 배분액은 약 900만 달러가 되었고, 전년 대비 67% 증가했습니다.&lt;/p>
&lt;p>이달에는 생태계 전반에서 클라이언트 성숙도도 크게 올라갔습니다. &lt;a href="https://github.com/mikedilger/gossip/releases/tag/v0.13.0">Gossip 0.13.0&lt;/a>은 12월 23일 File Metadata(&lt;a href="https://nostrcompass.org/ko/topics/nip-92/">NIP-92&lt;/a>/&lt;a href="https://nostrcompass.org/ko/topics/nip-94/">NIP-94&lt;/a>) 지원, Blossom 통합, &lt;a href="https://nostrcompass.org/ko/topics/nip-50/">NIP-50&lt;/a> relay 검색과 함께 나왔습니다. &lt;a href="https://github.com/coracle-social/coracle/releases/tag/0.5.0">Coracle 0.5.0&lt;/a>은 12월 12일 재작업된 온보딩과 nostr-editor 통합을 포함해 출시됐습니다. 프로토콜 개발도 계속 활발해서 12월 9일부터 22일까지 30개의 pull request가 제출됐고 그중 10개가 병합됐습니다. 여기에는 &lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a>을 &lt;a href="https://nostrcompass.org/ko/topics/nip-44/">NIP-44&lt;/a> 암호화만 사용하도록 다시 쓰는 작업과 Signal 수준의 double ratchet 암호화를 위한 &lt;a href="https://nostrcompass.org/ko/topics/nip-104/">NIP-104&lt;/a> 작업이 포함됩니다. 네트워크 통계로는 일일 trusted pubkey event가 224,000개를 넘었고, contact list를 가진 신규 프로필은 전년 대비 4배 늘었으며, 공개 글쓰기 event는 50% 증가했습니다.&lt;/p>
&lt;h3 id="2025년-12월-생태계-확장">2025년 12월: 생태계 확장&lt;/h3>
&lt;p>2025년 12월은 프로토콜 성숙과 생태계 확장이 계속 이어졌습니다. 12월 21일 &lt;a href="https://opensats.org/blog/fourteenth-wave-of-nostr-grants">OpenSats는 열네 번째 Nostr 보조금 웨이브를 발표&lt;/a>하며 세 프로젝트를 지원했습니다. 장문 콘텐츠용 creator portal과 &lt;a href="https://nostrcompass.org/ko/topics/cashu/">Cashu&lt;/a>/Nutzaps 결제를 통합한 멀티 플랫폼 클라이언트 YakiHonne, Amethyst를 구동하고 향후 iOS 버전을 가능하게 할 Vitor Pamplona의 Kotlin Multiplatform 라이브러리 Quartz, 그리고 PlebOne의 RSS-대-Nostr 양방향 통합인 Nostr Feedz입니다. 추가 갱신 보조금은 Dart NDK와 Mattn의 nostr-relay에 배정됐습니다.&lt;/p>
&lt;p>프로토콜 진화도 계속됐습니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-be/">NIP-BE&lt;/a>(Bluetooth Low Energy 메시징, &lt;a href="https://github.com/nostr-protocol/nips/pull/1979">#1979&lt;/a>)는 11월에 병합돼 오프라인 기기 동기화를 가능하게 했습니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-a4/">NIP-A4&lt;/a>(공개 메시지, kind 24, &lt;a href="https://github.com/nostr-protocol/nips/pull/1988">#1988&lt;/a>)는 그달 말에 병합되며 스레딩 복잡성을 피하기 위해 &lt;code>q&lt;/code> 태그를 사용하는 알림 화면 메시지를 정의했습니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-29/">NIP-29&lt;/a>은 주요 명확화를 받으며(&lt;a href="https://github.com/nostr-protocol/nips/pull/2106">#2106&lt;/a>) 진정으로 비공개이고 발견 불가능한 그룹을 위한 &lt;code>hidden&lt;/code> 태그를 도입했습니다. &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> 사양도(&lt;a href="https://github.com/nostr-protocol/nips/pull/2166">#2166&lt;/a>) 정교화되어, 개발자가 백그라운드 프로세스에서 &lt;code>get_public_key&lt;/code>를 호출하는 흔한 구현 실수를 바로잡았습니다.&lt;/p>
&lt;p>클라이언트 측에서는 &lt;a href="https://nostrcompass.org/en/newsletters/2025-12-24-newsletter/#news">Primal Android가 완전한 NIP-55 서명자&lt;/a>가 되었고, &lt;code>LocalSignerContentProvider&lt;/code>를 구현하는 여덟 개의 병합된 PR을 통해 Amber와 Aegis에 합류했습니다. &lt;a href="https://nostrcompass.org/en/newsletters/2025-12-24-newsletter/#notable-code-and-documentation-changes">NDK 라이브러리는 162배 빠른 캐시 쿼리&lt;/a>를 달성했습니다. 중복 쓰기와 불필요한 LRU 캐시 조회를 제거하며 약 3,690ms에서 약 22ms로 개선됐습니다(&lt;a href="https://github.com/nostr-dev-kit/ndk/pull/371">PR #371&lt;/a>, &lt;a href="https://github.com/nostr-dev-kit/ndk/pull/372">PR #372&lt;/a>). Shopstr는 zap 기반 플래시 세일용 &lt;a href="https://nostrcompass.org/en/newsletters/2025-12-24-newsletter/#news">Zapsnags&lt;/a>를 도입했습니다. White Noise는 프라이버시 보호형 푸시 알림 &lt;a href="https://nostrcompass.org/ko/topics/mip-05/">MIP-05&lt;/a>를 출시했습니다. 자세한 내용은 &lt;a href="https://nostrcompass.org/en/newsletters/2025-12-17-newsletter/">뉴스레터 #1&lt;/a>과 &lt;a href="https://nostrcompass.org/en/newsletters/2025-12-24-newsletter/">뉴스레터 #2&lt;/a>에서 확인할 수 있습니다.&lt;/p>
&lt;hr>
&lt;p>다섯 해 전 fiatjaf는 두 개의 실험적 relay에서 소수의 사용자를 위해 Branle을 공개했습니다. 오늘날 이 프로토콜은 140개 이상의 클라이언트, 50개국에 걸친 2,500개 이상의 relay, 수십만 개 키페어를 연결하는 성장하는 신뢰의 그물을 지원합니다. 이번 12월에도 주요 릴리스의 흐름은 이어졌습니다. Bluetooth 메시징, Android 서명자 확산, 인프라 보조금은 크로스플랫폼 도구에 대한 지속적인 투자를 보여줍니다.&lt;/p>
&lt;h2 id="뉴스">뉴스&lt;/h2>
&lt;p>&lt;strong>Amethyst 데스크톱이 형태를 갖추다&lt;/strong> - OpenSats 열네 번째 웨이브의 Quartz 보조금은 이미 결과를 내고 있습니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1625">PR #1625&lt;/a>는 Compose Multiplatform을 사용해 Amethyst용 완전한 &lt;code>:desktopApp&lt;/code> 모듈을 만들며, Desktop JVM에서 로그인과 글로벌 피드 화면이 동작합니다. 아키텍처는 &lt;code>:commons&lt;/code> 모듈을 Kotlin Multiplatform으로 전환하고, &lt;code>commonMain&lt;/code>, &lt;code>jvmAndroid&lt;/code>, &lt;code>androidMain&lt;/code>, &lt;code>jvmMain&lt;/code>의 깔끔한 소스셋 구조를 도입해 Android와 데스크톱 간 UI 컴포넌트 공유를 가능하게 하면서, 플랫폼별 결정은 각 타깃에 맡깁니다. 이는 동일한 Kotlin Multiplatform 접근을 통해 장기적으로 iOS 버전까지 이어질 기반을 마련합니다.&lt;/p>
&lt;p>&lt;strong>Amethyst 음성 답글&lt;/strong> - davotoula의 크리스마스 선물입니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1622">PR #1622&lt;/a>는 파형 시각화, 재녹음 지원, 미디어 서버 선택, 업로드 진행률 표시를 갖춘 전용 음성 답글 화면을 추가합니다. 사용자는 이제 루트 음성 메시지와 음성 답글 모두에 오디오로 답할 수 있습니다.&lt;/p>
&lt;p>&lt;strong>Notedeck에 메시징 추가&lt;/strong> - Damus 데스크톱 클라이언트 Notedeck은 &lt;a href="https://github.com/damus-io/notedeck/pull/1223">PR #1223&lt;/a>에서 메시지 기능을 얻으며, 타임라인 탐색을 넘어 직접 커뮤니케이션 영역으로 확장됐습니다.&lt;/p>
&lt;p>&lt;strong>Citrine이 웹 앱을 호스팅&lt;/strong> - Citrine은 이제 &lt;a href="https://github.com/greenart7c3/Citrine/pull/81">웹 애플리케이션을 호스팅&lt;/a>할 수 있어, 휴대폰을 로컬 우선 Nostr 웹 서버로 바꿉니다. 별도의 &lt;a href="https://github.com/greenart7c3/Citrine/pull/85">PR #85&lt;/a>는 네트워크 연결이 복구될 때 자동 재연결과 event 브로드캐스팅을 추가했고, Android API 레벨 전반에 걸친 포괄적인 테스트도 포함합니다.&lt;/p>
&lt;p>&lt;strong>Nostrability 개발자 툴킷 레지스트리&lt;/strong> - &lt;a href="https://github.com/nostrability/nostrability/issues/264">Developer Kits &amp;amp; Tooling&lt;/a> 트래커는 TypeScript, Rust, Python, Go, Dart, Swift 등 다양한 언어의 SDK, 라이브러리, 개발자 도구를 큐레이션한 레지스트리를 유지합니다. Nostr 개발을 처음 시작한다면, 자신의 스택에 맞는 도구를 찾는 출발점으로 유용합니다.&lt;/p>
&lt;h2 id="nip-업데이트">NIP 업데이트&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 저장소&lt;/a>의 최근 변경 사항:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-54/">NIP-54&lt;/a>&lt;/strong> - 위키 &lt;code>d&lt;/code> 태그 정규화를 위한 중요한 국제화 수정(&lt;a href="https://github.com/nostr-protocol/nips/pull/2177">#2177&lt;/a>). 기존 규칙은 모든 비ASCII 문자를 &lt;code>-&lt;/code>로 변환해 일본어, 중국어, 아랍어, 키릴 문자 등 비라틴 문자 지원을 깨뜨렸습니다. 업데이트된 사양은 UTF-8 문자를 보존하고, 대소문자 변형이 있는 문자에만 소문자 처리를 적용하며, 포괄적인 예시를 포함합니다. &lt;code>&amp;quot;ウィキペディア&amp;quot;&lt;/code>는 그대로 &lt;code>&amp;quot;ウィキペディア&amp;quot;&lt;/code>로 유지되고, &lt;code>&amp;quot;Москва&amp;quot;&lt;/code>는 &lt;code>&amp;quot;москва&amp;quot;&lt;/code>가 되며, &lt;code>&amp;quot;日本語 Article&amp;quot;&lt;/code> 같은 혼합 스크립트는 &lt;code>&amp;quot;日本語-article&amp;quot;&lt;/code>로 정규화됩니다.&lt;/li>
&lt;/ul>
&lt;h2 id="릴리스">릴리스&lt;/h2>
&lt;p>&lt;strong>Zapstore 1.0-rc1&lt;/strong> - Nostr 기반 permissionless 앱 스토어가 &lt;a href="https://github.com/zapstore/zapstore/releases/tag/1.0-rc1">새 아키텍처의 첫 release candidate&lt;/a>를 출시했습니다. 완전한 UI 리프레시, 개선된 에러 처리를 갖춘 재작성된 패키지 매니저, 큐레이션 탐색용 App Stacks, 다시 설계된 프로필 화면, 백그라운드 업데이트 확인, 릴리스 목록의 무한 스크롤이 포함됩니다.&lt;/p>
&lt;p>&lt;strong>KeyChat v1.38.1&lt;/strong> - MLS 기반 암호화 메시징 앱이 &lt;a href="https://github.com/keychat-io/keychat-app/releases/tag/v1.38.1%2B6489">UnifiedPush 지원&lt;/a>을 추가해 Android와 Linux 푸시 알림을 제공하고, 프라이버시 관련 작업을 위한 생체 인증도 도입했습니다. Android, Windows, macOS, Linux에서 사용할 수 있습니다.&lt;/p>
&lt;p>&lt;strong>Alby Go v2.0.0&lt;/strong> - 모바일 Lightning 지갑 companion 앱이 &lt;a href="https://github.com/getAlby/go/releases/tag/v2.0.0">시각적 리디자인&lt;/a>과 함께 출시됐습니다. 새 로고, 갱신된 색상 팔레트, 재설계된 주소록, 개선된 금액 입력 키보드가 포함됩니다. BTC Map은 이제 홈 화면에서 접근할 수 있고, 거래 설명은 알림에 표시됩니다.&lt;/p>
&lt;p>&lt;strong>nak v0.17.4&lt;/strong> - fiatjaf의 커맨드라인 Nostr 도구가 &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.17.4">새 버전으로 릴리스&lt;/a>됐습니다. 지난주 v0.17.3에서 수정된 LMDB Linux 제한 문제에 이은 릴리스입니다.&lt;/p>
&lt;h2 id="주목할-코드-및-문서-변경">주목할 코드 및 문서 변경&lt;/h2>
&lt;p>&lt;em>열린 pull request와 주시할 만한 초기 단계 작업들입니다.&lt;/em>&lt;/p>
&lt;h3 id="damus-ios">Damus (iOS)&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus/pull/3477">NIP-19 relay 힌트&lt;/a>는 event 조회 시 relay 힌트 소비를 구현합니다. 사용자가 nevent, nprofile, naddr 링크를 열면 Damus는 bech32 TLV 데이터에서 relay 힌트를 추출하고, 사용자의 relay 풀에 없는 콘텐츠를 가져오기 위해 일시적인 relay에 연결합니다. 구현에는 동시 조회 중 경쟁 상태를 막기 위한 ref-counted 정리 로직이 포함됩니다. &lt;a href="https://github.com/damus-io/damus/pull/3474">이미지 URL 감지&lt;/a>는 작성기에 붙여넣은 이미지 URL을 자동으로 미리보기 썸네일로 바꾸며, 여러 이미지가 있을 때 캐러셀 위치 배지를 표시합니다. &lt;a href="https://github.com/damus-io/damus/pull/3473">npub 붙여넣기 변환&lt;/a>은 붙여넣은 npub/nprofile 문자열을 비동기 프로필 해석과 함께 멘션 링크로 바꿉니다.&lt;/p>
&lt;h3 id="amethyst-android">Amethyst (Android)&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1627">결제 대상&lt;/a>은 &lt;a href="https://nostrcompass.org/ko/topics/nip-57/">NIP-57&lt;/a> zap 분배를 위한 event 인터페이스를 추가해, 게시물이 들어오는 zap을 여러 수신자가 나눠 받을 수 있게 합니다. 협업, 수익 분배, 혹은 콘텐츠 제작자와 그들이 사용하는 도구에 함께 팁을 주는 상황에 유용합니다. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1624">Quartz 기능 동등성 문서&lt;/a>는 Android, Desktop JVM, iOS 타깃별 구현 기능을 추적하는 자세한 표를 추가하며, iOS에는 핵심 암호화(&lt;code>Secp256k1Instance&lt;/code>), JSON 직렬화, 데이터 구조가 아직 부족하다고 적고 있습니다.&lt;/p>
&lt;h3 id="notedeck-desktop">Notedeck (Desktop)&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck/pull/1226">타임라인 필터 재구축&lt;/a>은 언팔로우한 계정이 계속 피드에 나타나는 버그를 고칩니다. 타임라인 필터가 contact list를 기준으로 한 번만 생성되고 이후 갱신되지 않았는데, 이번 수정은 &lt;code>contact_list_timestamp&lt;/code> 추적과 &lt;code>invalidate()&lt;/code> 메서드를 추가해 팔로우 상태가 바뀔 때 재구성을 유도합니다.&lt;/p>
&lt;h3 id="citrine-android-relay">Citrine (Android Relay)&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Citrine/pull/86">ContentProvider API&lt;/a>는 로컬 relay의 event 데이터베이스를 다른 Android 앱에 &lt;code>ContentResolver&lt;/code>를 통해 노출합니다. WebSocket 인터페이스와 달리, 앱이 지속적인 연결을 유지하거나 Nostr relay 프로토콜을 직접 구현할 필요가 없습니다. ContentProvider는 Android의 네이티브 IPC를 통해 직접적이고 동기적인 데이터베이스 접근을 제공합니다. 외부 앱은 ID, pubkey, kind, 날짜 범위로 event를 조회하고, 검증을 거쳐 새 event를 삽입하거나, 소켓 연결을 관리하지 않고 삭제할 수 있습니다.&lt;/p>
&lt;h3 id="rust-nostr-library">rust-nostr (Library)&lt;/h3>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr/pull/1183">NIP-40 relay 레벨 지원&lt;/a>은 relay builder 수준에서 만료 처리 기능을 추가합니다. 만료된 event는 이제 저장 전에 거부되고, 클라이언트로 보내기 전에도 필터링되므로, 각 데이터베이스 구현이 만료 검사를 개별적으로 처리할 필요가 없어집니다.&lt;/p>
&lt;h3 id="nak-cli">nak (CLI)&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/nak/pull/91">Blossom mirror&lt;/a>는 커맨드라인 도구에 blob 미러링 기능을 구현합니다.&lt;/p>
&lt;h3 id="mostro-p2p-trading">Mostro (P2P Trading)&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro/pull/559">개발 수수료 감사 event&lt;/a>는 개발 펀드 지급에 대한 투명한 감사 추적을 kind 8383 Nostr event를 통해 추가합니다. 이 구현은 성공적인 수수료 지급 뒤에 비차단 방식으로 감사 event를 발행하며, 프라이버시를 위해 구매자와 판매자 pubkey는 제외한 채 주문 세부 정보와 결제 해시를 포함합니다.&lt;/p>
&lt;h3 id="mdk-marmot-development-kit">MDK (Marmot Development Kit)&lt;/h3>
&lt;p>세 가지 보안 감사 수정이 적용됐습니다. &lt;a href="https://github.com/marmot-protocol/mdk/pull/40">작성자 검증&lt;/a>은 rumor pubkey가 MLS 발신자 자격 증명과 일치하도록 강제해 가장 공격을 막습니다. &lt;a href="https://github.com/marmot-protocol/mdk/pull/41">KeyPackage 신원 바인딩&lt;/a>은 자격 증명 신원이 event 서명자와 일치하는지 검증합니다. &lt;a href="https://github.com/marmot-protocol/mdk/pull/42">관리자 업데이트 검증&lt;/a>은 비어 있는 관리자 집합과 비멤버 관리자 할당을 막습니다.&lt;/p>
&lt;h3 id="shopstr-marketplace">Shopstr (Marketplace)&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr/pull/217">HODL invoice escrow&lt;/a>는 실물 상품을 위한 trust-minimized 결제 시스템을 구현합니다. 아키텍처는 Alby의 &lt;code>makeHoldInvoice&lt;/code>를 사용해 구매자 자금을 구매자 본인 지갑에 잠가 두고, 판매자의 재고 확인이 끝난 뒤에만 정산이 이뤄지게 합니다. 핸드셰이크 프로토콜은 &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> 암호화 DM을 통해 흐릅니다. 구매자가 주문 요청을 보내면, 판매자가 HODL invoice로 응답하고, 구매자는 결제해 자금이 잠긴 뒤, 판매자가 재고와 배송을 확인하면 정산이 이뤄집니다. 다중 판매자 장바구니 지원은 여러 판매자 간 결제를 분할합니다.&lt;/p>
&lt;h3 id="jumble-web-client">Jumble (Web Client)&lt;/h3>
&lt;p>&lt;a href="https://github.com/CodyTseng/jumble/pull/713">relay별 discovery 모드&lt;/a>는 특정 relay에서 팔로우 중인 사용자의 게시물을 숨기는 토글을 추가해, 언어 기반 discovery 피드(예: nostr.band/lang/*)를 가능하게 합니다. 이 기능은 작성자 pubkey가 사용자의 팔로우 목록에 포함된 게시물을 걸러내고, relay URL별 토글 상태를 localStorage에 저장합니다.&lt;/p>
&lt;h3 id="white-noise-encrypted-messaging">White Noise (Encrypted Messaging)&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/937">미디어 업로드 재시도&lt;/a>는 실패한 업로드를 위한 재시도 옵션을 추가합니다. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/927">프로필 편집 경고&lt;/a>는 사용자가 프로필 변경을 할 때 경고를 보여줍니다. 백엔드에서는 &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/422">whitenoise-rs&lt;/a>가 AccountGroup 생성 과정의 경쟁 상태를 수정합니다.&lt;/p>
&lt;h3 id="npubcash-lightning-address-service">npub.cash (Lightning Address Service)&lt;/h3>
&lt;p>&lt;a href="https://github.com/cashubtc/npubcash-server/pull/40">v3 재작성&lt;/a>은 모노레포와 서버를 Bun으로 이전하고, SQLite 지원을 추가하며, v1 호환성을 제거하고, LUD-21을 구현하며, 실시간 mint quote 업데이트를 도입합니다.&lt;/p>
&lt;h3 id="nostr-java-library">nostr-java (Library)&lt;/h3>
&lt;p>&lt;a href="https://github.com/tcheeric/nostr-java/releases/tag/v1.1.1">v1.1.1&lt;/a>은 &lt;a href="https://github.com/tcheeric/nostr-java/pull/499">두 개의 PR&lt;/a>에 걸친 WebSocket 처리 리팩터링과 더 견고한 테스트를 포함해 출시됐습니다.&lt;/p>
&lt;h3 id="nips-repository">NIPs Repository&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2180">NIP-54 Djot 마이그레이션&lt;/a>은 위키 사양의 별도 변경안을 제안합니다. 콘텐츠 형식을 Asciidoc에서 더 가벼운 마크업 언어 Djot로 전환하고, 위키 링크를 위한 reference-style 링크를 도입해 소스 형태에서 문서 간 상호 참조를 더 읽기 쉽게 만듭니다. &lt;a href="https://github.com/nostr-protocol/nips/pull/2179">NIP-XX Quorum&lt;/a>은 FROST(Flexible Round-Optimized Schnorr Threshold signatures)를 사용해 Nostr 그룹을 위한 threshold multi-signature 거버넌스를 제안합니다. Quorum은 T-of-N 구조를 통해 구성원들이 직접 대표하거나 대표자 평의회에 위임할 수 있는 공유 nsec입니다. 평의회가 바뀌면 기존 nsec는 폐기되고 새로운 nsec가 배포되며, 이전 평의회의 마지막 행위는 거버넌스 전환 event에 서명하는 것입니다. 이 사양은 멤버십(공개 또는 비공개), 선거와 투표(일반 투표, 불신임 투표), 선택적 자연어 &amp;ldquo;법&amp;rdquo;, 그리고 quorum이 다른 quorum의 구성원이 될 수 있는 quorum ontology를 정의해, 지역 단위가 상위 지역 단체에 참여하는 계층 구조까지 가능하게 합니다. 활용 사례는 소스 코드 개발, 회사 이사회, HOA, 관리형 커뮤니티까지 폭넓습니다.&lt;/p>
&lt;hr>
&lt;p>이번 주와 올해는 여기까지입니다. 뭔가를 만들고 있나요? 공유할 소식이 있나요? 여러분의 프로젝트를 다뤄주길 원하시나요? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">&lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> DM으로 연락&lt;/a>하시거나 Nostr에서 찾아주세요.&lt;/p></content:encoded></item><item><title>Nostr Compass #2</title><link>https://nostrcompass.org/ko/newsletters/2025-12-24-newsletter/</link><pubDate>Wed, 24 Dec 2025 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2025-12-24-newsletter/</guid><description>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr 프로토콜 생태계에 대한 주간 가이드입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> 세 가지 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> 서명자 구현이 업데이트를 받았습니다: Amber는 성능 캐싱을 추가하고, Aegis는 &lt;code>nostrsigner:&lt;/code> URI 지원을 확보했으며, Primal Android가 완전한 로컬 서명자로 합류했습니다. Shopstr는 zaps를 통한 플래시 세일을 위한 &amp;ldquo;Zapsnags&amp;quot;를 도입했습니다. Mostro는 개발 펀드를 추가했습니다. 공개 메시지(kind 24)와 그룹 프라이버시 개선을 포함한 네 가지 NIP 업데이트가 도착했습니다. NDK 캐시 쿼리가 162배 빨라졌고, Applesauce가 리액션과 NIP-60 지갑 지원을 추가했으며, Tenex가 AI 에이전트 위임을 위한 RAL 아키텍처를 도입했습니다. 심층 분석에서는 소셜 타임라인과 대화를 구축하기 위한 기초 사양인 &lt;a href="https://nostrcompass.org/ko/topics/nip-02/">NIP-02&lt;/a>(팔로우 리스트)와 &lt;a href="https://nostrcompass.org/ko/topics/nip-10/">NIP-10&lt;/a>(답글 스레딩)을 설명합니다.&lt;/p></description><content:encoded>&lt;p>Nostr Compass에 다시 오신 것을 환영합니다. Nostr 프로토콜 생태계에 대한 주간 가이드입니다.&lt;/p>
&lt;p>&lt;strong>이번 주:&lt;/strong> 세 가지 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> 서명자 구현이 업데이트를 받았습니다: Amber는 성능 캐싱을 추가하고, Aegis는 &lt;code>nostrsigner:&lt;/code> URI 지원을 확보했으며, Primal Android가 완전한 로컬 서명자로 합류했습니다. Shopstr는 zaps를 통한 플래시 세일을 위한 &amp;ldquo;Zapsnags&amp;quot;를 도입했습니다. Mostro는 개발 펀드를 추가했습니다. 공개 메시지(kind 24)와 그룹 프라이버시 개선을 포함한 네 가지 NIP 업데이트가 도착했습니다. NDK 캐시 쿼리가 162배 빨라졌고, Applesauce가 리액션과 NIP-60 지갑 지원을 추가했으며, Tenex가 AI 에이전트 위임을 위한 RAL 아키텍처를 도입했습니다. 심층 분석에서는 소셜 타임라인과 대화를 구축하기 위한 기초 사양인 &lt;a href="https://nostrcompass.org/ko/topics/nip-02/">NIP-02&lt;/a>(팔로우 리스트)와 &lt;a href="https://nostrcompass.org/ko/topics/nip-10/">NIP-10&lt;/a>(답글 스레딩)을 설명합니다.&lt;/p>
&lt;h2 id="news">뉴스&lt;/h2>
&lt;p>&lt;strong>Primal Android가 NIP-55 서명자가 됨&lt;/strong> - 지난주의 &lt;a href="https://nostrcompass.org/ko/newsletters/2025-12-17-newsletter/#primal-android">Nostr Connect 지원&lt;/a>을 바탕으로, Primal은 8개의 병합된 풀 리퀘스트를 통해 완전한 로컬 서명 기능을 구현했습니다. 구현에는 Android의 콘텐츠 프로바이더 인터페이스를 통해 다른 Android 앱에 서명 작업을 노출하는 완전한 &lt;code>LocalSignerContentProvider&lt;/code>가 포함되어 있으며, &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> 사양을 따릅니다. 아키텍처는 관심사를 깔끔하게 분리합니다: &lt;code>SignerActivity&lt;/code>는 사용자 대면 승인 흐름을 처리하고, &lt;code>LocalSignerService&lt;/code>는 백그라운드 작업을 관리하며, 새로운 권한 시스템을 통해 사용자가 어떤 앱이 서명을 요청할 수 있는지 제어할 수 있습니다. 이로써 Primal은 다른 Nostr 경험을 위해 다른 앱을 사용하면서 키를 한 앱에 보관하려는 Android 사용자를 위한 Amber의 실행 가능한 대안이 되었습니다.&lt;/p>
&lt;p>&lt;strong>Shopstr Zapsnags: Lightning을 통한 플래시 세일&lt;/strong> - Nostr 네이티브 마켓플레이스가 &lt;a href="https://github.com/shopstr-eng/shopstr/pull/211">&amp;ldquo;Zapsnags&amp;rdquo;&lt;/a>를 도입했습니다. 구매자가 단일 zap으로 소셜 피드에서 직접 아이템을 구매할 수 있는 플래시 세일 기능입니다. 구현은 &lt;code>#shopstr-zapsnag&lt;/code>으로 태그된 kind 1 노트를 필터링하고 표준 장바구니 흐름 대신 &amp;ldquo;Zap to Buy&amp;rdquo; 버튼이 있는 제품 카드로 렌더링합니다. 구매자가 zap을 보내면 시스템이 &lt;a href="https://nostrcompass.org/ko/topics/nip-57/">NIP-57&lt;/a>을 사용하여 결제 요청을 생성하고, kind 9735 zap 영수증을 폴링하여 결제를 확인한 다음, &lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a> gift wrapping을 사용하여 배송 정보를 암호화한 후 판매자에게 비공개로 전송합니다. 이 기능은 반복 구매를 위해 구매자 세부 정보를 로컬에 저장하고 플래시 세일 리스팅 생성을 위한 판매자 대시보드를 포함합니다. 이는 Nostr의 조합 가능한 설계가 새로운 상거래 패턴을 가능하게 하는 방식을 보여주는 소셜, 결제, 프라이버시 프리미티브의 영리한 조합입니다.&lt;/p>
&lt;p>&lt;strong>Mostro 개발 펀드 도입&lt;/strong> - &lt;a href="https://nostrcompass.org/ko/topics/nip-69/">NIP-69&lt;/a> P2P Bitcoin 거래 플랫폼이 지속 가능한 유지보수를 지원하기 위해 &lt;a href="https://github.com/MostroP2P/mostro/pull/555">구성 가능한 개발 수수료를 구현&lt;/a>했습니다. 운영자는 Mostro 거래 수수료의 10-100%(기본값 30%) 사이에서 &lt;code>dev_fee_percentage&lt;/code>를 설정할 수 있으며, 이는 각 성공적인 거래에서 개발 펀드로 자동 라우팅됩니다. 구현은 기여를 추적하기 위해 세 개의 데이터베이스 컬럼(&lt;code>dev_fee&lt;/code>, &lt;code>dev_fee_paid&lt;/code>, &lt;code>dev_fee_payment_hash&lt;/code>)을 추가하고 데몬 시작 시 백분율을 검증합니다. &lt;a href="https://github.com/MostroP2P/mostro/blob/main/docs/DEV_FEE.md">&lt;code>docs/DEV_FEE.md&lt;/code>&lt;/a>의 기술 문서가 시스템을 설명합니다. 이 옵트인 모델을 통해 운영자는 수수료 할당에 대한 완전한 투명성을 유지하면서 지속적인 개발을 지원할 수 있습니다.&lt;/p>
&lt;h2 id="nip-updates">NIP 업데이트&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 저장소&lt;/a>의 최근 변경 사항:&lt;/p>
&lt;p>&lt;strong>새로운 NIP:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-a4/">NIP-A4&lt;/a> (공개 메시지, kind 24)&lt;/strong> - 광범위한 클라이언트 지원을 목표로 설계된 알림 화면 메시지를 위한 새로운 kind (&lt;a href="https://github.com/nostr-protocol/nips/pull/1988">#1988&lt;/a>). 스레드 대화와 달리 이 메시지에는 채팅 기록이나 메시지 체인 개념이 없습니다. 스레딩 복잡성을 피하기 위해 &lt;code>e&lt;/code> 태그 대신 &lt;code>q&lt;/code> 태그(인용)를 사용하여 대화 상태를 생성하지 않고 수신자의 알림 피드에 나타나는 간단한 공개 알림에 이상적입니다.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>주요 변경 사항:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-29/">NIP-29&lt;/a>&lt;/strong> - 그룹 의미론의 주요 명확화 (&lt;a href="https://github.com/nostr-protocol/nips/pull/2106">#2106&lt;/a>). &lt;code>closed&lt;/code> 태그는 이제 &amp;ldquo;쓰기 불가&amp;rdquo;(비회원에게 읽기 전용)를 의미하며, 가입 메커니즘과 분리되었습니다. 새로운 &lt;code>hidden&lt;/code> 태그는 릴레이가 비회원에게 메타데이터나 멤버 이벤트를 제공하는 것을 방지하여 대역 외 초대 없이는 발견할 수 없는 진정한 비공개 그룹을 가능하게 합니다. &lt;code>private&lt;/code> 태그는 검색을 위한 공개 메타데이터는 허용하면서 메시지 가시성을 제어합니다.&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-51/">NIP-51&lt;/a>&lt;/strong> - 큐레이션된 사진 세트를 위한 kind 30006 추가 (&lt;a href="https://github.com/nostr-protocol/nips/pull/2170">#2170&lt;/a>), 30004(기사)와 30005(비디오)의 패턴을 따릅니다. 이미 Nostria에서 구현되었습니다.&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a>&lt;/strong> - Android 서명자의 연결 시작에 대한 명확화 (&lt;a href="https://github.com/nostr-protocol/nips/pull/2166">#2166&lt;/a>). 다중 사용자 세션을 구현하는 개발자들이 백그라운드 프로세스에서 호출하여 &lt;code>get_public_key&lt;/code>를 잘못 사용하고 있었습니다. 업데이트된 사양은 일반적인 구현 함정을 방지하기 위해 초기 연결 시에만 한 번 호출할 것을 권장합니다.&lt;/li>
&lt;/ul>
&lt;h2 id="nip-deep-dive-nip-02-and-nip-10">NIP 심층 분석: NIP-02와 NIP-10&lt;/h2>
&lt;p>이번 주에는 소셜 기능에 필수적인 두 가지 NIP를 다룹니다: 클라이언트가 누구를 팔로우하는지 알고 대화가 스레드되는 방식입니다.&lt;/p>
&lt;h3 id="nip-02kotopicsnip-02-팔로우-리스트">&lt;a href="https://nostrcompass.org/ko/topics/nip-02/">NIP-02&lt;/a>: 팔로우 리스트&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/02.md">NIP-02&lt;/a>는 팔로우 리스트를 저장하는 kind 3 이벤트를 정의합니다. 이 간단한 메커니즘이 타임라인을 가능하게 하는 소셜 그래프를 구동합니다.&lt;/p>
&lt;p>&lt;strong>구조:&lt;/strong> kind 3 이벤트에는 팔로우한 pubkey를 나열하는 &lt;code>p&lt;/code> 태그가 포함됩니다:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;d7a8f...&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a3b9c...&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1734912000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">3&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;91cf9..af5f&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://alicerelay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;alice&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;14aeb..8dad&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://bobrelay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;bob&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;612ae..982b&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;e4f8a...&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>각 &lt;code>p&lt;/code> 태그에는 네 가지 위치가 있습니다: 태그 이름, 팔로우한 pubkey(hex), 선택적 릴레이 URL 힌트, 선택적 &amp;ldquo;petname&amp;rdquo;(로컬 닉네임). 릴레이 힌트는 다른 클라이언트에게 해당 사용자의 이벤트를 어디서 찾을 수 있는지 알려줍니다. petname을 사용하면 자체 선언된 표시 이름에 의존하지 않고 연락처에 기억하기 쉬운 이름을 지정할 수 있습니다.&lt;/p>
&lt;p>&lt;strong>교체 가능 동작:&lt;/strong> Kind 3은 교체 가능 범위(0, 3, 10000-19999)에 속하므로 릴레이는 pubkey당 최신 버전만 유지합니다. 새 사람을 팔로우하면 클라이언트가 기존의 모든 팔로우와 새 팔로우를 포함하는 완전히 새로운 kind 3을 게시합니다. 즉, 팔로우 리스트는 매번 완전해야 하며 증분 업데이트를 게시할 수 없습니다.&lt;/p>
&lt;p>&lt;strong>타임라인 구축:&lt;/strong> 홈 피드를 구성하기 위해 클라이언트는 사용자의 kind 3을 가져와 모든 &lt;code>p&lt;/code> 태그 pubkey를 추출한 다음 해당 작성자의 kind 1 이벤트를 구독합니다:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>[&lt;span style="color:#e6db74">&amp;#34;REQ&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;home&amp;#34;&lt;/span>, {&lt;span style="color:#f92672">&amp;#34;kinds&amp;#34;&lt;/span>: [&lt;span style="color:#ae81ff">1&lt;/span>], &lt;span style="color:#f92672">&amp;#34;authors&amp;#34;&lt;/span>: [&lt;span style="color:#e6db74">&amp;#34;91cf9...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;14aeb...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;612ae...&amp;#34;&lt;/span>], &lt;span style="color:#f92672">&amp;#34;limit&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">50&lt;/span>}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>릴레이가 일치하는 노트를 반환하면 클라이언트가 렌더링합니다. kind 3의 릴레이 힌트는 클라이언트가 각 팔로우한 사용자에 대해 어떤 릴레이를 쿼리할지 알 수 있게 도와줍니다.&lt;/p>
&lt;p>&lt;strong>Petname과 신원:&lt;/strong> petname 필드는 탈중앙화된 명명 체계를 가능하게 합니다. 사용자가 프로필에서 주장하는 이름을 신뢰하는 대신 자신만의 레이블을 지정할 수 있습니다. 클라이언트는 &amp;ldquo;alice (내 동생)&amp;ldquo;처럼 표시할 수 있으며, 여기서 &amp;ldquo;alice&amp;quot;는 그녀의 kind 0 프로필에서 가져오고 &amp;ldquo;내 동생&amp;quot;은 당신의 petname입니다. 이는 전역 사용자 이름이 제공할 수 없는 맥락을 제공합니다.&lt;/p>
&lt;p>&lt;strong>실용적 고려 사항:&lt;/strong> kind 3 이벤트는 교체 가능하고 완전해야 하므로 클라이언트는 업데이트 시 알 수 없는 태그를 보존해야 합니다. 다른 클라이언트가 당신의 클라이언트가 이해하지 못하는 태그를 추가한 경우, 맹목적으로 덮어쓰면 해당 데이터가 손실됩니다. 처음부터 다시 구축하지 말고 새 팔로우를 추가하세요.&lt;/p>
&lt;h3 id="nip-10kotopicsnip-10-텍스트-노트-스레딩">&lt;a href="https://nostrcompass.org/ko/topics/nip-10/">NIP-10&lt;/a>: 텍스트 노트 스레딩&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/10.md">NIP-10&lt;/a>은 kind 1 노트가 서로 참조하여 답글 스레드를 형성하는 방법을 지정합니다. 대화 뷰를 구축하는 데 이해가 필수적입니다.&lt;/p>
&lt;p>&lt;strong>문제:&lt;/strong> 누군가 노트에 답글을 달 때 클라이언트는 알아야 합니다: 무엇에 대한 답글인가? 대화의 루트는 무엇인가? 누구에게 알려야 하는가? NIP-10은 &lt;code>e&lt;/code> 태그(이벤트 참조)와 &lt;code>p&lt;/code> 태그(pubkey 멘션)를 통해 이러한 질문에 답합니다.&lt;/p>
&lt;p>&lt;strong>마킹된 태그 (권장):&lt;/strong> 현대 클라이언트는 &lt;code>e&lt;/code> 태그에 명시적 마커를 사용합니다:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;f9c2e...&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a3b9c...&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1734912345&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;abc123...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;root&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;def456...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;reply&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;91cf9...&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;14aeb...&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;좋은 지적이에요! 동의합니다.&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;b7d3f...&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>root&lt;/code> 마커는 스레드를 시작한 원래 노트를 가리킵니다. &lt;code>reply&lt;/code> 마커는 답변하는 특정 노트를 가리킵니다. 루트에 직접 답글하는 경우 &lt;code>root&lt;/code>만 사용합니다(&lt;code>reply&lt;/code> 태그 필요 없음). 이 구분은 렌더링에 중요합니다: &lt;code>reply&lt;/code>는 스레드 뷰에서 들여쓰기를 결정하고, &lt;code>root&lt;/code>는 모든 답글을 함께 그룹화합니다.&lt;/p>
&lt;p>&lt;strong>스레딩 규칙:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>루트에 직접 답글:&lt;/strong> &lt;code>root&lt;/code> 마커가 있는 &lt;code>e&lt;/code> 태그 하나&lt;/li>
&lt;li>&lt;strong>답글에 대한 답글:&lt;/strong> &lt;code>root&lt;/code> 하나와 &lt;code>reply&lt;/code> 하나로 두 개의 &lt;code>e&lt;/code> 태그&lt;/li>
&lt;li>&lt;code>root&lt;/code>는 스레드 전체에서 일정하게 유지됩니다; &lt;code>reply&lt;/code>는 응답하는 대상에 따라 변경됩니다&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>알림을 위한 Pubkey 태그:&lt;/strong> 알림을 받아야 하는 모든 사람에 대해 &lt;code>p&lt;/code> 태그를 포함합니다. 최소한 답글하는 노트의 작성자를 태그하세요. 관례적으로 부모 이벤트의 모든 &lt;code>p&lt;/code> 태그도 포함합니다(대화의 모든 사람이 계속 알 수 있도록), 그리고 콘텐츠에서 @멘션하는 모든 사용자도 포함합니다.&lt;/p>
&lt;p>&lt;strong>릴레이 힌트:&lt;/strong> &lt;code>e&lt;/code> 및 &lt;code>p&lt;/code> 태그의 세 번째 위치에는 해당 이벤트나 사용자의 콘텐츠를 찾을 수 있는 릴레이 URL이 포함될 수 있습니다. 이는 클라이언트가 원래 릴레이에 연결되어 있지 않아도 참조된 콘텐츠를 가져오는 데 도움이 됩니다.&lt;/p>
&lt;p>&lt;strong>더 이상 사용되지 않는 위치 기반 태그:&lt;/strong> 초기 Nostr 구현은 마커가 아닌 태그 위치에서 의미를 유추했습니다: 첫 번째 &lt;code>e&lt;/code> 태그가 루트, 마지막이 답글, 중간이 멘션이었습니다. 이 접근 방식은 모호성을 만들기 때문에 더 이상 사용되지 않습니다. 마커 없는 &lt;code>e&lt;/code> 태그가 보이면 오래된 클라이언트에서 온 것일 가능성이 높습니다. 현대 구현은 항상 명시적 마커를 사용해야 합니다.&lt;/p>
&lt;p>&lt;strong>스레드 뷰 구축:&lt;/strong> 스레드를 표시하려면 루트 이벤트를 가져온 다음 해당 루트를 참조하는 &lt;code>e&lt;/code> 태그가 있는 모든 이벤트를 쿼리합니다:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>[&lt;span style="color:#e6db74">&amp;#34;REQ&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;thread&amp;#34;&lt;/span>, {&lt;span style="color:#f92672">&amp;#34;kinds&amp;#34;&lt;/span>: [&lt;span style="color:#ae81ff">1&lt;/span>], &lt;span style="color:#f92672">&amp;#34;#e&amp;#34;&lt;/span>: [&lt;span style="color:#e6db74">&amp;#34;&amp;lt;root-event-id&amp;gt;&amp;#34;&lt;/span>]}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>created_at&lt;/code>으로 결과를 정렬하고 &lt;code>reply&lt;/code> 마커를 사용하여 트리 구조를 구축합니다. &lt;code>reply&lt;/code>가 루트를 가리키는 이벤트는 최상위 답글입니다; &lt;code>reply&lt;/code>가 다른 답글을 가리키는 이벤트는 중첩된 응답입니다.&lt;/p>
&lt;h2 id="releases">릴리스&lt;/h2>
&lt;p>&lt;strong>Zeus v0.12.0&lt;/strong> - 지난주의 &lt;a href="https://nostrcompass.org/ko/newsletters/2025-12-17-newsletter/#zeus-lightning-wallet">NWC 병렬 결제 지원&lt;/a>을 바탕으로, Lightning 지갑의 &lt;a href="https://github.com/ZeusLN/zeus/releases/tag/v0.12.0">주요 릴리스&lt;/a>가 커스텀 릴레이 지원과 예산 추적이 포함된 완전한 &lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47&lt;/a> Nostr Wallet Connect 서비스를 제공합니다. &lt;a href="https://github.com/ZeusLN/zeus/pull/3455">예산 리로드 수정&lt;/a>으로 연결이 현재 제한을 사용하도록 보장합니다. &lt;a href="https://github.com/ZeusLN/zeus/pull/3460">Lightning 주소 복사&lt;/a>가 더 이상 &lt;code>lightning:&lt;/code> 접두사를 포함하지 않아 Nostr 프로필 필드에 붙여넣기 문제를 수정합니다.&lt;/p>
&lt;p>&lt;strong>Amber v4.0.6&lt;/strong> - Android &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a> 서명자가 서명 작업에 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.0.6">성능 캐싱을 추가&lt;/a>하고 잘못된 콘텐츠 복호화 시 오류 처리를 개선했습니다. 릴레이 연결 이벤트에 대한 재시도 로직으로 연결 신뢰성이 향상되었고, 여러 충돌 수정이 잘못된 &lt;code>nostrconnect://&lt;/code> URI와 권한 화면 상호작용에 관한 엣지 케이스를 해결합니다.&lt;/p>
&lt;p>&lt;strong>nak v0.17.3&lt;/strong> - 명령줄 Nostr 도구의 &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.17.3">최신 릴리스&lt;/a>가 LMDB 빌드를 Linux로 제한하여 크로스 플랫폼 컴파일 문제를 수정합니다.&lt;/p>
&lt;p>&lt;strong>Aegis v0.3.4&lt;/strong> - 크로스 플랫폼 Nostr 서명자가 &lt;a href="https://nostrcompass.org/ko/topics/nip-55/">NIP-55&lt;/a>에 정의된 &lt;code>nostrsigner:&lt;/code> URI 스킴 &lt;a href="https://github.com/ZharlieW/Aegis/releases/tag/v0.3.4">지원을 추가&lt;/a>하여 Amber의 연결 흐름과 일치합니다. 이제 로컬 릴레이 데이터를 백업용으로 가져오고 내보낼 수 있으며, 릴리스에는 릴레이 소켓 오류에 대한 버그 수정과 로컬 릴레이 인터페이스의 UI 개선이 포함됩니다.&lt;/p>
&lt;h2 id="notable-code-and-documentation-changes">주목할 만한 코드 및 문서 변경&lt;/h2>
&lt;p>&lt;em>이것들은 오픈 풀 리퀘스트와 초기 단계 작업으로, 병합 전에 피드백을 받기에 완벽합니다. 관심이 가는 것이 있다면 리뷰하거나 댓글을 달아보세요!&lt;/em>&lt;/p>
&lt;h3 id="damus">Damus (iOS)&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus/pull/3469">뮤트 리스트 지속성&lt;/a>이 콜드 스타트 시 뮤트 리스트가 지워지는 문제를 수정합니다. 수정은 앱 초기화 중 실수로 덮어쓰는 것을 방지하는 가드를 추가합니다. &lt;a href="https://github.com/damus-io/damus/pull/3457">프로필 스트림 타이밍&lt;/a>이 캐시된 프로필이 나타나기 전의 약 1초 지연을 제거합니다. 이전에는 뷰가 구독 작업이 다시 시작될 때까지 기다렸습니다; 이제 &lt;code>streamProfile()&lt;/code>이 NostrDB에서 캐시된 데이터를 즉시 반환하여 축약된 pubkey와 플레이스홀더 이미지가 표시되는 창을 제거합니다.&lt;/p>
&lt;h3 id="white-noise">White Noise (암호화 메시징)&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/919">실시간 메시지 스트리밍&lt;/a>이 이전 폴링 메커니즘을 스트림 기반 아키텍처로 대체합니다. 새로운 &lt;code>ChatStreamNotifier&lt;/code>는 Rust SDK의 메시지 스트림을 직접 소비하여 시간순 순서를 유지하고 증분 업데이트를 효율적으로 처리합니다. 테스트에서 응답성이 크게 향상되었습니다. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/921">채팅 리스트 API&lt;/a>가 대화 요약 검색을 위한 &lt;code>get_chat_list&lt;/code>를 추가하고, &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/905">안정적인 정렬 수정&lt;/a>이 &lt;code>createdAt&lt;/code>과 메시지 ID를 타이브레이커로 사용하여 메시지 재정렬 루프를 방지합니다.&lt;/p>
&lt;h3 id="ndk">NDK (라이브러리)&lt;/h3>
&lt;p>두 개의 풀 리퀘스트가 극적인 캐시 성능 향상을 제공했습니다. &lt;a href="https://github.com/nostr-dev-kit/ndk/pull/371">PR #371&lt;/a>이 SQLite 캐시에서 읽은 이벤트가 즉시 다시 쓰여지는 버그를 수정하여 앱 부팅 시 100% 중복 쓰기가 발생했습니다. 수정은 &lt;code>fromCache&lt;/code> 가드를 추가하고 인메모리 Set을 통한 O(1) 중복 검사를 구현합니다. 작은 결과 집합(&amp;lt;100 이벤트)의 경우 직접 JSON 전송이 바이너리 인코딩 오버헤드를 대체합니다. &lt;a href="https://github.com/nostr-dev-kit/ndk/pull/372">PR #372&lt;/a>가 캐시된 이벤트에 대한 불필요한 &lt;code>seenEvent&lt;/code> 호출을 제거했습니다. LRU 캐시 조회에 이벤트당 0.24-0.64ms가 소요되었습니다; 5,700개의 캐시된 이벤트에 대해 약 1.4초의 오버헤드가 추가되었습니다. 결과: 캐시 쿼리가 약 3,690ms에서 약 22ms로 감소(162배 빨라짐).&lt;/p>
&lt;h3 id="rust-nostr">rust-nostr (라이브러리)&lt;/h3>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr/pull/1176">다중 필터 REQ 지원&lt;/a>이 이전 리팩터링에서 제거된 후 복원되었습니다. SDK가 다시 구독 요청에 대해 &lt;code>Vec&amp;lt;Filter&amp;gt;&lt;/code>를 수용하여 OR 논리로 여러 필터 조건을 결합하는 효율적인 쿼리를 가능하게 합니다. &lt;a href="https://github.com/rust-nostr/nostr/pull/1156">릴레이 출처&lt;/a>가 &lt;code>stream_events*&lt;/code> 메서드에 추가되어 각 스트리밍된 이벤트에 이제 출처 &lt;code>RelayUrl&lt;/code>과 성공 또는 실패를 나타내는 &lt;code>Result&lt;/code>가 포함되어 릴레이 신뢰성 추적과 연결 문제 디버깅에 유용합니다. &lt;a href="https://github.com/rust-nostr/nostr/pull/1179">보안 수정&lt;/a>이 RUSTSEC-2024-0421에 따라 &lt;code>url-fork&lt;/code> 의존성을 제거하여 알려진 취약점을 제거했습니다.&lt;/p>
&lt;h3 id="applesauce">Applesauce (라이브러리)&lt;/h3>
&lt;p>&lt;a href="https://github.com/hzrd149/nostrudel">noStrudel&lt;/a>을 구동하는 TypeScript 라이브러리가 이번 주에 상당한 개발을 보았습니다. 새로운 모델에는 &lt;a href="https://github.com/hzrd149/applesauce">리액션 시스템&lt;/a>과 사용자 그룹 캐스팅이 포함됩니다. 지갑 기능이 NIP-60 지원, 전송 탭, 개선된 토큰 복구 도구로 확장되었습니다. 새로운 &lt;code>user.directMessageRelays$&lt;/code> 속성이 DM 릴레이 구성을 노출합니다. 모든 액션이 비동기 인터페이스를 사용하도록 리팩터링되었고(비동기 제너레이터 제거), 버그 수정이 암호화된 콘텐츠 복원 및 시간 기반 이벤트 필터 엣지 케이스를 해결했습니다.&lt;/p>
&lt;h3 id="tenex">Tenex (AI 에이전트)&lt;/h3>
&lt;p>Nostr에 구축된 &lt;a href="https://github.com/tenex-chat/tenex">다중 에이전트 조정 시스템&lt;/a>이 &lt;a href="https://github.com/pablof7z/tenex/pull/38">다섯 개의 병합된 PR&lt;/a>에서 RAL(Request-Action-Lifecycle) 아키텍처를 도입했습니다. RAL은 에이전트가 작업을 위임할 때 일시 중지하고 결과가 도착하면 재개할 수 있게 하며, 대화 범위 상태 지속성을 제공합니다. 위임 도구(&lt;code>delegate&lt;/code>, &lt;code>ask&lt;/code>, &lt;code>delegate_followup&lt;/code>, &lt;code>delegate_external&lt;/code>)가 이제 Nostr 이벤트를 게시하고 차단 대신 중지 신호를 반환합니다. 리팩터링에는 AI SDK v6 마이그레이션, 결정론적 LLM 상호작용 기록을 위한 VCR 테스팅 인프라, 멀티모달 이미지 지원이 포함됩니다.&lt;/p>
&lt;hr>
&lt;p>이번 주는 여기까지입니다. 무언가를 만들고 계신가요? 공유할 뉴스가 있으신가요? 프로젝트를 다뤄주길 원하시나요? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">NIP-17 DM으로 연락하세요&lt;/a> 또는 Nostr에서 찾아주세요.&lt;/p></content:encoded></item><item><title>Nostr Compass #1</title><link>https://nostrcompass.org/ko/newsletters/2025-12-17-newsletter/</link><pubDate>Mon, 15 Dec 2025 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/ko/newsletters/2025-12-17-newsletter/</guid><description>&lt;p>Nostr Compass에 오신 것을 환영합니다. Nostr 프로토콜 생태계를 다루는 주간 뉴스레터입니다. 우리의 임무는 개발자, 릴레이 운영자, 빌더들에게 네트워크 전반의 중요한 발전 상황을 알리는 것입니다. 우리는 NIP 제안부터 클라이언트 릴리스, 구현 모범 사례에 이르기까지 기술적 정확성, 중립성, 깊이를 갖추어 프로토콜 진화를 문서화합니다.&lt;/p>
&lt;p>Nostr Compass는 &lt;a href="https://bitcoinops.org/">Bitcoin Optech&lt;/a>에서 영감을 받았습니다. Bitcoin Optech는 수년간 Bitcoin 기술 지식 발전에 헌신하여 프로토콜 중심 뉴스레터의 표준을 세웠습니다. 그들의 모범에 감사드리며, Nostr 생태계에도 동일한 엄격함을 가져오고자 합니다.&lt;/p>
&lt;p>이번 창간호에서 주간 형식을 확립합니다. 매주 수요일 NIP 업데이트, 릴리스 노트, 개발 하이라이트, 기술 가이드를 전달해 드립니다. 클라이언트를 개발하든, 릴레이를 운영하든, 프로토콜에 기여하든, Nostr Compass는 생태계 전반에서 일어나는 일에 대한 신뢰할 수 있는 정보원이 되고자 합니다.&lt;/p></description><content:encoded>&lt;p>Nostr Compass에 오신 것을 환영합니다. Nostr 프로토콜 생태계를 다루는 주간 뉴스레터입니다. 우리의 임무는 개발자, 릴레이 운영자, 빌더들에게 네트워크 전반의 중요한 발전 상황을 알리는 것입니다. 우리는 NIP 제안부터 클라이언트 릴리스, 구현 모범 사례에 이르기까지 기술적 정확성, 중립성, 깊이를 갖추어 프로토콜 진화를 문서화합니다.&lt;/p>
&lt;p>Nostr Compass는 &lt;a href="https://bitcoinops.org/">Bitcoin Optech&lt;/a>에서 영감을 받았습니다. Bitcoin Optech는 수년간 Bitcoin 기술 지식 발전에 헌신하여 프로토콜 중심 뉴스레터의 표준을 세웠습니다. 그들의 모범에 감사드리며, Nostr 생태계에도 동일한 엄격함을 가져오고자 합니다.&lt;/p>
&lt;p>이번 창간호에서 주간 형식을 확립합니다. 매주 수요일 NIP 업데이트, 릴리스 노트, 개발 하이라이트, 기술 가이드를 전달해 드립니다. 클라이언트를 개발하든, 릴레이를 운영하든, 프로토콜에 기여하든, Nostr Compass는 생태계 전반에서 일어나는 일에 대한 신뢰할 수 있는 정보원이 되고자 합니다.&lt;/p>
&lt;h2 id="nostr란-무엇인가">Nostr란 무엇인가?&lt;/h2>
&lt;p>&lt;em>이것이 첫 번째 호이므로, Nostr의 작동 방식에 대한 입문서로 시작합니다. 정기 독자는 &lt;a href="https://nostrcompass.org/ko/newsletters/2025-12-17-newsletter/#%eb%89%b4%ec%8a%a4">뉴스 및 업데이트로 건너뛰기&lt;/a>할 수 있습니다.&lt;/em>&lt;/p>
&lt;p>Nostr(Notes and Other Stuff Transmitted by Relays)는 소셜 네트워킹과 메시징을 위한 탈중앙화 프로토콜입니다. 기존 플랫폼과 달리 Nostr에는 중앙 서버도, 이를 통제하는 회사도, 단일 장애 지점도 없습니다. 사용자는 암호화 키 쌍을 통해 자신의 신원을 소유하며, 콘텐츠는 누구나 운영할 수 있는 독립적인 릴레이 서버를 통해 흐릅니다.&lt;/p>
&lt;p>&lt;strong>작동 방식:&lt;/strong> 사용자는 키 쌍(nsec라는 개인 키와 npub라는 공개 키)을 생성합니다. 개인 키는 &amp;ldquo;이벤트&amp;quot;라는 메시지에 서명하고, 공개 키는 당신의 신원 역할을 합니다. 이벤트는 릴레이로 전송되며, 릴레이는 이를 저장하고 다른 사용자에게 전달합니다. 당신이 키를 통제하기 때문에, 신원이나 팔로워를 잃지 않고 클라이언트나 릴레이를 전환할 수 있습니다.&lt;/p>
&lt;p>&lt;strong>중요한 이유:&lt;/strong> Nostr는 릴레이 다양성(한 릴레이가 당신을 차단해도 다른 릴레이가 여전히 콘텐츠를 제공할 수 있음)을 통한 검열 저항성, 이식성(당신의 신원은 모든 Nostr 앱에서 작동), 상호운용성(모든 Nostr 클라이언트는 동일한 프로토콜을 사용)을 제공합니다. 무엇을 볼지 결정하는 알고리즘도, 광고도, 데이터 수집도 없습니다.&lt;/p>
&lt;p>&lt;strong>오늘날의 생태계:&lt;/strong> Nostr는 마이크로블로깅(Twitter/X와 유사), 장문 콘텐츠(Medium과 유사), 다이렉트 메시지, 마켓플레이스, 라이브 스트리밍 등을 지원합니다. 클라이언트에는 Damus(iOS), Amethyst(Android), Primal, Coracle 및 수십 개의 다른 앱이 있습니다. Lightning Network 통합으로 &amp;ldquo;zaps&amp;quot;를 통한 즉시 결제가 가능합니다. 프로토콜은 기능을 확장하는 커뮤니티 주도 사양인 NIP(Nostr Implementation Possibilities)를 통해 계속 진화하고 있습니다.&lt;/p>
&lt;h2 id="news">뉴스&lt;/h2>
&lt;p>&lt;strong>NIP-BE 병합: Bluetooth Low Energy 지원&lt;/strong> - 프로토콜에 중요한 새로운 기능이 &lt;a href="https://github.com/nostr-protocol/nips/pull/1979">추가되었습니다&lt;/a>. &lt;a href="https://nostrcompass.org/ko/topics/nip-be/">NIP-BE&lt;/a>는 Nostr 애플리케이션이 Bluetooth Low Energy를 통해 통신하고 동기화하는 방법을 명시합니다. 이를 통해 오프라인 지원 앱이 인터넷 연결 없이 근처 기기 간에 데이터를 동기화할 수 있습니다. 이 사양은 WebSocket 릴레이 패턴을 BLE의 제약에 맞게 조정하여, DEFLATE 압축과 청크 메시징을 사용해 BLE의 작은 MTU 크기(20-256바이트)를 처리합니다. 기기는 UUID 비교를 기반으로 역할을 협상하며, 더 높은 UUID를 가진 기기가 GATT 서버가 됩니다.&lt;/p>
&lt;p>&lt;strong>MIP-05: 프라이버시 보존 푸시 알림&lt;/strong> - &lt;a href="https://nostrcompass.org/ko/topics/marmot/">Marmot Protocol&lt;/a>이 &lt;a href="https://nostrcompass.org/ko/topics/mip-05/">MIP-05&lt;/a>(&lt;a href="https://github.com/marmot-protocol/mips/blob/main/mip-05.md">사양&lt;/a>)를 발표했습니다. 이는 프라이버시를 유지하는 푸시 알림 사양입니다. 기존 푸시 시스템은 서버가 기기 토큰과 사용자 신원을 알아야 합니다. MIP-05는 ECDH+HKDF와 ChaCha20-Poly1305로 기기 토큰을 암호화하고, 임시 키를 사용하여 상관관계를 방지함으로써 이를 해결합니다. 세 가지 이벤트 가십 프로토콜(kind 447-449)이 그룹 멤버 간에 암호화된 토큰을 동기화하며, 알림은 &lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59&lt;/a> gift wrapping과 디코이 토큰을 사용하여 그룹 크기를 숨깁니다. 이를 통해 WhiteNoise 및 기타 Marmot 클라이언트가 사용자 프라이버시를 침해하지 않고 적시에 알림을 전달할 수 있습니다.&lt;/p>
&lt;p>&lt;strong>Blossom BUD-10: 새로운 URI 스킴&lt;/strong> - &lt;a href="https://nostrcompass.org/ko/topics/blossom/">Blossom&lt;/a> 미디어 프로토콜이 &lt;a href="https://nostrcompass.org/ko/topics/bud-10/">BUD-10&lt;/a>(&lt;a href="https://github.com/hzrd149/blossom/blob/master/buds/10.md">사양&lt;/a>)을 통해 커스텀 URI 스킴을 도입합니다. 새로운 &lt;code>blossom:&amp;lt;sha256&amp;gt;.ext&lt;/code> 형식은 파일 해시, 확장자, 크기, 다중 서버 힌트, &lt;a href="https://nostrcompass.org/ko/topics/bud-03/">BUD-03&lt;/a> 서버 검색을 위한 작성자 공개 키를 포함합니다. 이를 통해 blob 링크가 서버 간 자동 폴백을 가능하게 하여 정적 HTTP URL보다 더 탄력적입니다.&lt;/p>
&lt;p>&lt;strong>Shopstr 마켓플레이스 업데이트&lt;/strong> - Nostr 네이티브 마켓플레이스가 결제를 위해 &lt;a href="https://github.com/shopstr-eng/shopstr/pull/202">Nostr Wallet Connect를 구현&lt;/a>(&lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47&lt;/a>)했고, &lt;a href="https://nostrcompass.org/ko/topics/nip-40/">NIP-40&lt;/a>을 사용한 &lt;a href="https://github.com/shopstr-eng/shopstr/pull/203">리스팅 만료 기능을 추가&lt;/a>했으며, 판매자를 위한 &lt;a href="https://github.com/shopstr-eng/shopstr/pull/210">할인 코드&lt;/a>를 도입했습니다.&lt;/p>
&lt;h2 id="nip-updates">NIP 업데이트&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 저장소&lt;/a>의 최근 변경 사항:&lt;/p>
&lt;p>&lt;strong>새로운 NIP:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-be/">NIP-BE&lt;/a>&lt;/strong> - Bluetooth Low Energy 메시징 및 기기 동기화 (&lt;a href="https://github.com/nostr-protocol/nips/pull/1979">#1979&lt;/a>)&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-63/">NIP-63&lt;/a>&lt;/strong> - 프로토콜 내 게이트된 콘텐츠를 처리하기 위한 페이월/프리미엄 콘텐츠 표준 (&lt;a href="https://github.com/nostr-protocol/nips/pull/2156">#2156&lt;/a>)&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>주요 변경 사항:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-24/">NIP-24&lt;/a>&lt;/strong> - Kind 0 사용자 메타데이터에 선택적 &lt;code>languages&lt;/code> 배열 추가, 사용자가 향상된 콘텐츠 검색 및 릴레이 매칭을 위해 IETF BCP 47 태그를 사용하여 여러 선호 언어를 지정할 수 있음 (&lt;a href="https://github.com/nostr-protocol/nips/pull/2159">#2159&lt;/a>)&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-69/">NIP-69&lt;/a>&lt;/strong> - &lt;code>expires_at&lt;/code> 및 &lt;code>expiration&lt;/code> 태그로 P2P 거래에 주문 만료 지원 추가 (&lt;a href="https://github.com/nostr-protocol/nips/pull/2118">#2118&lt;/a>)&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-59/">NIP-59&lt;/a>&lt;/strong> - Gift wrap 이벤트를 이제 NIP-09/NIP-62 요청을 통해 삭제 가능 (&lt;a href="https://github.com/nostr-protocol/nips/pull/2131">#2131&lt;/a>)&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-51/">NIP-51&lt;/a>&lt;/strong> - 일반 북마크에서 해시태그 및 URL 태그 제거; 해시태그는 이제 kind 30015 사용 (&lt;a href="https://github.com/nostr-protocol/nips/pull/2133">#2133&lt;/a>)&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-18/">NIP-18&lt;/a>&lt;/strong> - &lt;code>a&lt;/code> 태그 지원으로 교체 가능 이벤트에 대한 일반 리포스트 개선 (&lt;a href="https://github.com/nostr-protocol/nips/pull/2132">#2132&lt;/a>)&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-17/">NIP-17&lt;/a>&lt;/strong> - 문구 개선 및 DM에 kind 7 리액션 지원 추가 (&lt;a href="https://github.com/nostr-protocol/nips/pull/2098">#2098&lt;/a>)&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/ko/topics/nip-11/">NIP-11&lt;/a>&lt;/strong> - 릴레이 공개 키 식별을 위한 &lt;code>self&lt;/code> 필드 추가 (&lt;a href="https://github.com/nostr-protocol/nips/pull/1764">#1764&lt;/a>)&lt;/li>
&lt;/ul>
&lt;h2 id="nip-deep-dive-nip-01-and-nip-19">NIP 심층 분석: NIP-01과 NIP-19&lt;/h2>
&lt;p>이번 창간호에서는 모든 Nostr 개발자가 이해해야 할 두 가지 기초 NIP를 다룹니다. 자세한 내용은 &lt;a href="https://nostrcompass.org/ko/topics/nip-01/">NIP-01&lt;/a>과 &lt;a href="https://nostrcompass.org/ko/topics/nip-19/">NIP-19&lt;/a> 토픽 페이지를 참조하세요.&lt;/p>
&lt;h3 id="nip-01-기본-프로토콜">NIP-01: 기본 프로토콜&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-01/">NIP-01&lt;/a>은 핵심 프로토콜을 정의합니다. Nostr의 모든 것은 이 사양을 기반으로 합니다.&lt;/p>
&lt;p>&lt;strong>이벤트&lt;/strong>는 유일한 객체 유형입니다. 각 이벤트에는 다음이 포함됩니다:&lt;/p>
&lt;ul>
&lt;li>&lt;code>id&lt;/code>: 직렬화된 이벤트의 SHA256 해시(이벤트의 고유 식별자)&lt;/li>
&lt;li>&lt;code>pubkey&lt;/code>: 생성자의 공개 키(32바이트 hex, secp256k1)&lt;/li>
&lt;li>&lt;code>created_at&lt;/code>: Unix 타임스탬프&lt;/li>
&lt;li>&lt;code>kind&lt;/code>: 이벤트 유형을 분류하는 정수&lt;/li>
&lt;li>&lt;code>tags&lt;/code>: 메타데이터용 배열의 배열&lt;/li>
&lt;li>&lt;code>content&lt;/code>: 페이로드(해석은 kind에 따라 다름)&lt;/li>
&lt;li>&lt;code>sig&lt;/code>: 해당 pubkey가 이 이벤트를 생성했음을 증명하는 Schnorr 서명&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Kind&lt;/strong>는 릴레이가 이벤트를 저장하는 방식을 결정합니다:&lt;/p>
&lt;ul>
&lt;li>일반 이벤트 (1, 2, 4-44, 1000-9999): 정상적으로 저장, 모든 버전 유지&lt;/li>
&lt;li>교체 가능 이벤트 (0, 3, 10000-19999): pubkey당 최신 버전만 유지&lt;/li>
&lt;li>임시 이벤트 (20000-29999): 저장되지 않고 구독자에게만 전달&lt;/li>
&lt;li>주소 지정 가능 이벤트 (30000-39999): pubkey + kind + &lt;code>d&lt;/code> 태그 조합당 최신 버전&lt;/li>
&lt;/ul>
&lt;p>Kind 0은 사용자 메타데이터(프로필), kind 1은 텍스트 노트(기본 게시물), kind 3은 팔로우 리스트입니다.&lt;/p>
&lt;p>&lt;strong>Kind 1: 텍스트 노트&lt;/strong>는 소셜 Nostr의 핵심입니다. Kind 1 이벤트는 트윗과 유사한 단문 게시물입니다. &lt;code>content&lt;/code> 필드에는 메시지 텍스트가 포함됩니다(일반 텍스트, 클라이언트는 종종 마크다운을 렌더링). 태그를 통해 답글, 멘션, 참조가 가능합니다:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;32-byte-hex&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;32-byte-hex&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1734480000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Hello Nostr! Check out @jb55&amp;#39;s work on Damus.&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;replied-to-event-id&amp;gt;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;reply&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;jb55-pubkey&amp;gt;&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;64-byte-hex&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&amp;ldquo;reply&amp;rdquo; 마커가 있는 &lt;code>e&lt;/code> 태그는 이것이 답글임을 나타냅니다(스레딩 규칙은 &lt;a href="https://nostrcompass.org/ko/topics/nip-10/">NIP-10&lt;/a> 참조). &lt;code>p&lt;/code> 태그는 사용자를 멘션하여 클라이언트가 알림을 보내고 원시 pubkey 대신 이름을 렌더링할 수 있게 합니다. 클라이언트는 멘션된 사용자의 kind 0 이벤트를 가져와 표시 이름과 사진을 얻습니다.&lt;/p>
&lt;p>타임라인을 구성하려면 클라이언트가 팔로우한 pubkey의 kind 1 이벤트를 구독합니다: &lt;code>[&amp;quot;REQ&amp;quot;, &amp;quot;feed&amp;quot;, {&amp;quot;kinds&amp;quot;: [1], &amp;quot;authors&amp;quot;: [&amp;quot;&amp;lt;pubkey1&amp;gt;&amp;quot;, &amp;quot;&amp;lt;pubkey2&amp;gt;&amp;quot;, ...], &amp;quot;limit&amp;quot;: 50}]&lt;/code>. 릴레이는 일치하는 노트를 반환하고, 클라이언트는 이를 시간순으로 렌더링합니다.&lt;/p>
&lt;p>&lt;strong>주소 지정 가능 이벤트&lt;/strong> (30000-39999)는 교체 가능 이벤트처럼 작동하지만 &lt;code>d&lt;/code> 태그를 추가 식별자로 사용합니다. 릴레이는 각 pubkey + kind + d-tag 조합의 최신 버전만 유지합니다. 이를 통해 편집 가능한 기사, 상품 목록 또는 사용자당 여러 교체 가능 항목이 필요한 모든 경우가 가능합니다.&lt;/p>
&lt;p>&lt;strong>태그&lt;/strong>는 첫 번째 요소가 태그 이름인 배열입니다. 표준 단일 문자 태그(&lt;code>e&lt;/code>, &lt;code>p&lt;/code>, &lt;code>a&lt;/code>, &lt;code>d&lt;/code>, &lt;code>t&lt;/code>)는 효율적인 쿼리를 위해 릴레이에 의해 인덱싱됩니다. 예를 들어, &lt;code>[&amp;quot;e&amp;quot;, &amp;quot;&amp;lt;event-id&amp;gt;&amp;quot;]&lt;/code>는 다른 이벤트를 참조하고, &lt;code>[&amp;quot;p&amp;quot;, &amp;quot;&amp;lt;pubkey&amp;gt;&amp;quot;]&lt;/code>는 사용자를 참조합니다.&lt;/p>
&lt;p>&lt;strong>클라이언트-릴레이 통신&lt;/strong>은 JSON 배열을 메시지로 사용하는 WebSocket 연결을 사용합니다. 첫 번째 요소는 메시지 유형을 식별합니다.&lt;/p>
&lt;p>클라이언트에서 릴레이로:&lt;/p>
&lt;ul>
&lt;li>&lt;code>[&amp;quot;EVENT&amp;quot;, &amp;lt;event&amp;gt;]&lt;/code> - 릴레이에 이벤트 게시&lt;/li>
&lt;li>&lt;code>[&amp;quot;REQ&amp;quot;, &amp;lt;sub-id&amp;gt;, &amp;lt;filter&amp;gt;, ...]&lt;/code> - 필터와 일치하는 이벤트 구독&lt;/li>
&lt;li>&lt;code>[&amp;quot;CLOSE&amp;quot;, &amp;lt;sub-id&amp;gt;]&lt;/code> - 구독 종료&lt;/li>
&lt;/ul>
&lt;p>릴레이에서 클라이언트로:&lt;/p>
&lt;ul>
&lt;li>&lt;code>[&amp;quot;EVENT&amp;quot;, &amp;lt;sub-id&amp;gt;, &amp;lt;event&amp;gt;]&lt;/code> - 구독과 일치하는 이벤트 전달&lt;/li>
&lt;li>&lt;code>[&amp;quot;EOSE&amp;quot;, &amp;lt;sub-id&amp;gt;]&lt;/code> - &amp;ldquo;저장된 이벤트 종료&amp;rdquo; - 릴레이가 모든 히스토리 매치를 전송했고 이제 새 이벤트가 도착할 때만 전송&lt;/li>
&lt;li>&lt;code>[&amp;quot;OK&amp;quot;, &amp;lt;event-id&amp;gt;, &amp;lt;true|false&amp;gt;, &amp;lt;message&amp;gt;]&lt;/code> - 이벤트가 수락 또는 거부되었는지(그리고 이유) 확인&lt;/li>
&lt;li>&lt;code>[&amp;quot;NOTICE&amp;quot;, &amp;lt;message&amp;gt;]&lt;/code> - 릴레이의 사람이 읽을 수 있는 메시지&lt;/li>
&lt;/ul>
&lt;p>구독 흐름: 클라이언트가 구독 ID와 필터로 &lt;code>REQ&lt;/code>를 전송, 릴레이가 일치하는 &lt;code>EVENT&lt;/code> 메시지로 응답, 그런 다음 히스토리를 따라잡았음을 알리기 위해 &lt;code>EOSE&lt;/code>를 전송. &lt;code>EOSE&lt;/code> 이후 새로운 &lt;code>EVENT&lt;/code> 메시지는 실시간입니다. 완료되면 클라이언트가 &lt;code>CLOSE&lt;/code>를 전송합니다.&lt;/p>
&lt;p>&lt;strong>필터&lt;/strong>는 검색할 이벤트를 지정합니다. 필터 객체는 다음을 포함할 수 있습니다: &lt;code>ids&lt;/code>(이벤트 ID), &lt;code>authors&lt;/code>(pubkey), &lt;code>kinds&lt;/code>(이벤트 유형), &lt;code>#e&lt;/code>/&lt;code>#p&lt;/code>/&lt;code>#t&lt;/code>(태그 값), &lt;code>since&lt;/code>/&lt;code>until&lt;/code>(타임스탬프), &lt;code>limit&lt;/code>(최대 결과). 하나의 필터 내 모든 조건은 AND 논리를 사용합니다. &lt;code>REQ&lt;/code>에 여러 필터를 포함할 수 있으며, OR 논리로 결합됩니다 - 하나의 구독으로 다른 이벤트 유형을 가져오는 데 유용합니다.&lt;/p>
&lt;h3 id="nip-19-bech32-인코딩-식별자">NIP-19: Bech32 인코딩 식별자&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/ko/topics/nip-19/">NIP-19&lt;/a>는 Nostr 어디서나 볼 수 있는 사용자 친화적 형식을 정의합니다: npub, nsec, note 등. 이들은 프로토콜 자체(hex 사용)에서 사용되지 않지만 공유와 표시에 필수적입니다.&lt;/p>
&lt;p>&lt;strong>왜 bech32인가?&lt;/strong> 원시 hex 키는 복사하기 쉽지 않고 시각적으로 구별하기 어렵습니다. Bech32 인코딩은 사람이 읽을 수 있는 접두사와 체크섬을 추가합니다. &lt;code>npub&lt;/code>(공개 키)과 &lt;code>nsec&lt;/code>(개인 키) 또는 &lt;code>note&lt;/code>(이벤트 ID)를 즉시 구별할 수 있습니다.&lt;/p>
&lt;p>&lt;strong>기본 형식&lt;/strong>은 원시 32바이트 값을 인코딩합니다:&lt;/p>
&lt;ul>
&lt;li>&lt;code>npub&lt;/code> - 공개 키(당신의 신원, 공유해도 안전)&lt;/li>
&lt;li>&lt;code>nsec&lt;/code> - 개인 키(비밀 유지, 서명에 사용)&lt;/li>
&lt;li>&lt;code>note&lt;/code> - 이벤트 ID(특정 이벤트 참조)&lt;/li>
&lt;/ul>
&lt;p>예시: hex pubkey &lt;code>3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d&lt;/code>는 &lt;code>npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6&lt;/code>가 됩니다.&lt;/p>
&lt;p>&lt;strong>공유 가능 식별자&lt;/strong>는 TLV(Type-Length-Value) 인코딩을 사용하여 메타데이터를 포함합니다:&lt;/p>
&lt;ul>
&lt;li>&lt;code>nprofile&lt;/code> - 릴레이 힌트가 있는 프로필(클라이언트가 사용자를 찾는 데 도움)&lt;/li>
&lt;li>&lt;code>nevent&lt;/code> - 릴레이 힌트, 작성자 pubkey, kind가 있는 이벤트&lt;/li>
&lt;li>&lt;code>naddr&lt;/code> - 주소 지정 가능 이벤트 참조(pubkey + kind + d-tag + relays)&lt;/li>
&lt;/ul>
&lt;p>이들은 핵심 문제를 해결합니다: 누군가 노트 ID를 공유하면 어떤 릴레이에 있는지 어떻게 알 수 있을까요? &lt;code>nevent&lt;/code>는 이벤트 ID와 제안된 릴레이를 함께 묶어 공유를 더 안정적으로 만듭니다.&lt;/p>
&lt;p>&lt;strong>중요:&lt;/strong> 프로토콜 자체에서는 bech32 형식을 사용하지 마세요. 이벤트, 릴레이 메시지, NIP-05 응답은 반드시 hex를 사용해야 합니다. Bech32는 순전히 사람 인터페이스용입니다: 표시, 복사/붙여넣기, QR 코드, URL.&lt;/p>
&lt;h2 id="releases">릴리스&lt;/h2>
&lt;p>&lt;strong>Amber v4.0.4&lt;/strong> - Android 서명자 앱이 NullPointerException을 수정하고, 활동 화면 성능을 개선했으며, 일부 이벤트 kind에 대한 번역을 추가했습니다. 이전 v4.0.3 릴리스에서는 개편된 암호화/복호화 UI, 계정 내보내기/가져오기, 계정별 릴레이 처리, bunker ping 지원, 충돌 보고 기능이 추가되었습니다. &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.0.4">릴리스&lt;/a>&lt;/p>
&lt;p>&lt;strong>Coracle 0.6.28&lt;/strong> - 웹 클라이언트 버그 수정 릴리스. 토픽 피드, imgproxy 비활성화 시 이미지 처리, 비링크 하이라이트 소스의 링크화 문제가 수정되었습니다. &lt;a href="https://github.com/coracle-social/coracle/releases/tag/0.6.28">릴리스&lt;/a>&lt;/p>
&lt;p>&lt;strong>Flotilla v1.6.2&lt;/strong> - Discord 유사 커뮤니티 클라이언트가 모달 스크롤 및 스타일 문제를 수정했습니다. 이 사이클의 이전 릴리스에서는 알림을 위한 선택적 배지와 사운드, 개선된 링크 렌더링, 초대 링크용 QR 코드 스캔, 간소화된 지갑 설정이 추가되었습니다. &lt;a href="https://github.com/coracle-social/flotilla/releases/tag/1.6.2">릴리스&lt;/a>&lt;/p>
&lt;p>&lt;strong>nak v0.17.2&lt;/strong> - 명령줄 Nostr 도구에 빠른 NIP 참조 조회를 위한 새로운 &lt;code>nip&lt;/code> 명령이 추가되었고, git 저장소 처리 및 stdin 이벤트 처리 수정이 포함되었습니다. &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.17.2">릴리스&lt;/a>&lt;/p>
&lt;p>&lt;strong>White Noise v0.2.1&lt;/strong> - MLS 기반 암호화 메시징 앱의 주요 릴리스로 Blossom을 통한 이미지 공유, 백그라운드 동기화, 푸시 알림, 8개 언어 현지화, 그룹 멤버 관리가 추가되었습니다. &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v0.2.1%2B14">릴리스&lt;/a>&lt;/p>
&lt;p>&lt;strong>Amethyst v1.04.2&lt;/strong> - 팔로우 리스트/팩, 새로운 타임라인 필터, 이미지 갤러리, H.265 비디오 압축(50% 더 작은 파일)을 도입한 기능 릴리스. Kotlin Multiplatform 마이그레이션 완료. &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.04.2">릴리스&lt;/a>&lt;/p>
&lt;p>&lt;strong>Mostro v0.15.5&lt;/strong> - NIP-69 주문 만료 지원 및 개선된 거래 내역 응답이 포함된 P2P 거래 플랫폼 업데이트. &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.15.5">릴리스&lt;/a>&lt;/p>
&lt;p>&lt;strong>Nosflare v8.9.26&lt;/strong> - Cloudflare 인프라에 구축된 서버리스 Nostr 릴레이. 이 릴리스는 websocket 실패를 일으킬 수 있는 버그를 해결하는 중요한 핫픽스를 제공하여 릴레이에 의존하는 사용자와 애플리케이션에 더 안정적인 연결을 보장합니다. &lt;a href="https://github.com/Spl0itable/nosflare/releases/tag/v8.9.26">릴리스&lt;/a>&lt;/p>
&lt;p>&lt;strong>Noscall v0.4.1&lt;/strong> - Nostr 기반 보안 오디오 및 비디오 통화 앱. 이 릴리스는 Me 페이지의 팝업 UI를 개선하고 여러 알려진 문제를 수정하여 더 나은 안정성과 통화 신뢰성을 제공합니다. &lt;a href="https://github.com/sanah9/noscall/releases/tag/v0.4.1-release">릴리스&lt;/a>&lt;/p>
&lt;p>&lt;strong>Gitplaza v0.25.0&lt;/strong> - Git 관련 활동에 중점을 둔 데스크톱 Nostr 클라이언트. 이 릴리스는 인박스 피드를 위한 고급 kind 필터를 도입하고, 필터에 일반 zaps를 포함하며, 탭 텍스트 형식을 단순화합니다. 성능 개선으로 코멘트 트리 로딩을 최적화하고, 불필요한 데이터베이스 쿼리를 줄이며, 더 빠른 표시를 위해 캐시된 코멘트 브랜치를 사용합니다. &lt;a href="https://codeberg.org/dluvian/gitplaza/releases/tag/v0.25.0">릴리스&lt;/a>&lt;/p>
&lt;h2 id="notable-code-and-documentation-changes">주목할 만한 코드 및 문서 변경&lt;/h2>
&lt;h3 id="damus">Damus (iOS)&lt;/h3>
&lt;p>안정성에 초점을 맞춘 충돌 및 UI 수정: compose 뷰의 &lt;a href="https://github.com/damus-io/damus/pull/3377">커서 점프 수정&lt;/a>, 트랜잭션 안전성을 위해 Swift의 &lt;code>~Copyable&lt;/code> 타입을 사용한 &lt;a href="https://github.com/damus-io/damus/pull/3366">NostrDB 인터페이스 재설계&lt;/a>, 액션 바 재인스턴스화를 수정한 &lt;a href="https://github.com/damus-io/damus/pull/3341">스레드 UI 안정성&lt;/a>, AttributeGraph 사이클로 인한 &lt;a href="https://github.com/damus-io/damus/pull/3346">뮤트 리스트 프리즈&lt;/a>, 크로스 스레드 트랜잭션 정리로 인한 &lt;a href="https://github.com/damus-io/damus/pull/3334">프로필 충돌&lt;/a>. 또한 AI 코딩 에이전트를 위한 &lt;a href="https://github.com/damus-io/damus/pull/3293">AGENTS.md&lt;/a> 가이드라인 추가.&lt;/p>
&lt;h3 id="notedeck">Notedeck (데스크톱/모바일)&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck/pull/1191">보안 키 저장소&lt;/a>가 nsec를 자동 마이그레이션과 함께 OS 보안 저장소로 이동. &lt;a href="https://github.com/damus-io/notedeck/pull/1201">미래 노트 필터링&lt;/a>이 24시간 이상 미래 날짜의 이벤트를 숨김(스팸 방지). &lt;a href="https://github.com/damus-io/notedeck/pull/1183">nevent 복사&lt;/a>가 이제 릴레이 힌트를 포함. 또한: &lt;a href="https://github.com/damus-io/notedeck/pull/1212">프로필 컬럼 빠른 추가&lt;/a>, &lt;a href="https://github.com/damus-io/notedeck/pull/1208">키보드 탐색&lt;/a>, &lt;a href="https://github.com/damus-io/notedeck/pull/1210">미디어 로딩 최적화&lt;/a>.&lt;/p>
&lt;h3 id="amethyst">Amethyst (Android)&lt;/h3>
&lt;p>Nostr Connect를 위한 [&lt;a href="https://nostrcompass.org/ko/topics/nip-46/">NIP-46&lt;/a> 원격 서명](&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1555">https://github.com/vitorpamplona/amethyst/pull/1555&lt;/a>) 지원. 공개/비공개 리스트 관리가 포함된 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1586">북마크 구성&lt;/a>. 릴레이 정보 파싱 엣지 케이스에 대한 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1596">strfry 호환성&lt;/a> 수정.&lt;/p>
&lt;h3 id="primal">Primal (Android)&lt;/h3>
&lt;p>&lt;code>nostrconnect://&lt;/code> URL을 위한 &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/788">Nostr Connect 딥 링크&lt;/a>. bunker 연결을 위한 QR 스캔을 통한 &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/787">원격 로그인&lt;/a>. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/783">연결 경쟁 조건 수정&lt;/a>.&lt;/p>
&lt;h3 id="white-noise">White Noise (암호화 메시징)&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/890">앱 데이터 보존 수정&lt;/a>이 프라이버시를 위해 Android 자동 백업을 비활성화. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/861">채팅 스크롤 동작&lt;/a>이 히스토리를 읽을 때 위치를 유지.&lt;/p>
&lt;h3 id="zeus">Zeus (Lightning Wallet)&lt;/h3>
&lt;p>배치 zap 처리량 향상을 위한 [&lt;a href="https://nostrcompass.org/ko/topics/nip-47/">NIP-47&lt;/a> 병렬 결제](&lt;a href="https://github.com/ZeusLN/zeus/pull/3407%29">https://github.com/ZeusLN/zeus/pull/3407)&lt;/a>.&lt;/p>
&lt;h2 id="개발자-모범-사례">개발자 모범 사례&lt;/h2>
&lt;p>&lt;strong>Auth 이벤트를 방어적으로 검증&lt;/strong> - go-nostr가 릴레이 태그가 누락된 경우 &lt;a href="https://github.com/nbd-wtf/go-nostr/pull/182">NIP-42 검증에서의 패닉&lt;/a>을 수정했습니다. 잘 형식화된 이벤트를 기대하는 인증 흐름에서도 항상 필수 태그를 액세스하기 전에 확인하세요.&lt;/p>
&lt;p>&lt;strong>인증 상태에 따라 속도 제한&lt;/strong> - khatru가 &lt;a href="https://github.com/fiatjaf/khatru/pull/57">NIP-42 기반 속도 제한&lt;/a>을 추가하여 릴레이가 인증된 연결과 익명 연결에 다른 제한을 적용할 수 있습니다. 일괄 제한 대신 인증 상태에 따른 계층화된 제한을 고려하세요.&lt;/p>
&lt;p>&lt;strong>리스트에 커서 페이지네이션 사용&lt;/strong> - Blossom이 &lt;code>/list&lt;/code> 엔드포인트에서 &lt;a href="https://github.com/hzrd149/blossom/pull/65">날짜 기반 페이지네이션을 커서 기반으로 교체&lt;/a>했습니다. 날짜 기반 페이지네이션은 항목이 타임스탬프를 공유할 때 깨집니다; 커서가 안정적인 반복을 제공합니다.&lt;/p>
&lt;p>&lt;strong>이벤트 유형에 대한 스키마 검증&lt;/strong> - &lt;a href="https://github.com/nostrability/schemata">nostrability/schemata&lt;/a> 프로젝트가 NIP 준수 이벤트 검증을 위한 JSON 스키마를 제공합니다. 잘못 형식화된 이벤트가 릴레이에 도달하기 전에 잡기 위해 개발 중 스키마 검증 통합을 고려하세요.&lt;/p>
&lt;hr>
&lt;p>이번 주는 여기까지입니다. 무언가를 만들고 계신가요? 공유할 뉴스가 있으신가요? 프로젝트를 다뤄주길 원하시나요? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">NIP-17 DM으로 연락하세요&lt;/a> 또는 Nostr에서 찾아주세요.&lt;/p></content:encoded></item></channel></rss>