시리즈: ponswarp-concept-classroom에 해당하는 글입니다.
![[PonsWarp 개념 교실 25] 멱등성 — 같은 결제 이벤트를 두 번 처리하지 않는 법](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-idempotent-webhook-cover-imagegen.webp)
쉽게 말하면, **멱등성은 같은 요청을 한 번 처리하든 열 번 처리하든 최종 결과가 한 번 처리한 것과 같게 만드는 성질**이다.  결제 Webhook은 네트워크 오류
![[PonsWarp 개념 교실 24] 토큰버킷 — API 요청을 어떻게 일정하게 제한하나](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-token-bucket-cover-imagegen.webp)
쉽게 말하면, **토큰버킷은 요청이 들어올 때마다 토큰을 하나씩 꺼내고, 토큰이 없으면 잠시 기다리거나 거부하는 요청 제한 장치**다.  무조건 초당 N개만 허용하는 고정 창보다 순간 bur
![[PonsWarp 개념 교실 26] 헥사고날 아키텍처 — 외부 기술을 갈아끼우는 구조](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-26-hexagonal-cover-imagegen.webp)
쉽게 말하면, **헥사고날 아키텍처는 핵심 업무 로직이 WebRTC·파일시스템·클라우드 같은 외부 기술을 직접 알지 않게 만드는 구조**다.  외부 기술을 바꾸더라도 안쪽
![[PonsWarp 개념 교실 23] presigned URL — 서버를 거치지 않고 R2에 올리는 법](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-23-presigned-url-cover-imagegen.webp)
Cloud Drop은 서버가 파일을 받아 저장하는 방식이 아니다. 서버가 잠깐 유효한 업로드 URL을 발급하고, 브라우저가 R2에 직접 PUT한다.
![[PonsWarp 개념 교실 22] TURN 자격증명 — coturn REST API와 HMAC-SHA1](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-22-turn-credential-cover-imagegen.webp)
쉽게 말하면, **TURN 자격증명은 "잠깐만 쓸 수 있는 릴레이 이용권"이고, username 안에 만료시각을 넣고 그 전체를 HMAC-SHA1으로 서명한다.**  직접 WebRTC 연결이
![[PonsWarp 개념 교실 21] 시그널링 — 방 모델과 메시지 라우팅](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-21-signaling-room-cover-imagegen.webp)
쉽게 말하면, **시그널링 서버는 파일 운반자가 아니라 두 브라우저를 소개하는 교환원**이다.  파일 바이트는 WebRTC DataChannel로 직접 흐르고, 서버는
![[PonsWarp 개념 교실 20] Resume 커서 — 끊긴 전송을 중간부터 이어가는 법](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-20-resume-cursor-cover-imagegen.webp)
전송이 끊겼을 때 처음부터 다시 보내는 것은 가장 비싼 복구다. PonsWarp는 global offset을 file offset·sequence·next partition으로 바꿔 정확한 위치부터 재개한다.
![[PonsWarp 개념 교실 19] 백프레셔 — high/low watermark로 전송을 보호하는 법](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-19-backpressure-cover-imagegen.webp)
받는 쪽 디스크가 느린데 보내는 쪽이 계속 달리면 버퍼가 쌓인다. PonsWarp는 48MiB에서 PAUSE하고 16MiB까지 내려오면 RESUME하는 high/low watermark를 사용한다.
![[PonsWarp 개념 교실 18] AIMD — 혼잡 제어의 고전](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-18-aimd-cover-imagegen.webp)
네트워크가 괜찮을 때는 조금씩 키우고, 혼잡해지면 한 번에 줄인다. AIMD는 이 단순한 규칙으로 전송량을 안정화한다. PonsWarp는 RTT와 bufferedAmount를 보고 cwnd를 조절한다.
![[PonsWarp 개념 교실 17] 파티션 배리어 — PARTITION_ACK와 연속 프론티어](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-17-partition-barrier-cover-imagegen.webp)
암호화된 파일 조각을 끝없이 보내면 수신측 writer가 따라가지 못한다. PonsWarp는 일정 구간마다 PARTITION 마커를 보내고, 수신측의 연속 오프셋이 그 지점에 도달했을 때 다음 구간을 보낸다.
![[PonsWarp 개념 교실 16] in-flight 윈도우 — BDP와 슬라이딩 윈도우](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-16-sliding-window-cover-imagegen.webp)
보내지 않은 데이터를 무한히 큐에 넣으면 브라우저 버퍼가 터진다. PonsWarp는 네트워크 경로와 RTT를 보고 동시에 날아갈 수 있는 바이트를 정하고, bufferedAmount를 뺀 만큼만 더 요청한다.
![[PonsWarp 개념 교실 15] prepare-ahead 크레딧 — 생산자·소비자 큐](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-15-prepare-ahead-cover-imagegen.webp)
암호화 워커가 파일을 너무 빨리 읽으면 준비된 암호문이 메모리에 쌓인다. PonsWarp는 12MiB 크레딧을 두고 소비된 만큼만 다시 만들게 하는 생산자·소비자 흐름을 구현했다.
![[PonsWarp 개념 교실 14] WebRTC DataChannel — SCTP 신뢰성과 bufferedAmount](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-14-datachannel-cover-imagegen.webp)
WebRTC 연결이 됐다고 파일이 자동으로 안전하게 흐르는 것은 아니다. DataChannel은 SCTP 위에서 신뢰성과 순서를 제공하지만, 애플리케이션은 control/bulk 분리와 bufferedAmount 흐름 제어를 직접 설계해야 한다.
![[PonsWarp 개념 교실 13] Reed-Solomon — GF(2^8) 이레이저 코딩](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-13-reed-solomon-cover-imagegen.webp)
패킷이 손실돼도 원본을 복구할 수 있다면 재전송을 기다릴 필요가 없다. Reed-Solomon은 데이터에 패리티를 더해 일부를 잃어도 나머지로 복원하는 FEC다.
![[PonsWarp 개념 교실 12] LZ4 블록 압축 — 속도를 위해 만든 비표준 포맷](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-12-lz4-block-cover-imagegen.webp)
DEFLATE보다 훨씬 빠른 압축이 필요한 순간이 있다. LZ4는 압축률을 희생하고 속도에 올인한 블록 압축이다. PonsWarp는 LZ4를 표준 프레임이 아닌 자체 블록 포맷으로 구현했는데, 그 선택의 이유와 대가를 파헤친다.
![[PonsWarp 개념 교실 11] DEFLATE — zip64 속의 압축 (miniz_oxide)](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-11-deflate-cover-imagegen.webp)
ZIP64 편에서 압축은 옵션이라고 했다. 그 옵션을 켰을 때 실제로 데이터를 줄이는 DEFLATE는 어떤 원리로 동작하고, 스트리밍에서 어떻게 조각 단위로 압축을 이어가는지 파헤친다.
![[PonsWarp 개념 교실 10] ZIP64 스트리밍 — LFH·CEN·EOCD64 구조](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-10-zip64-stream-cover-imagegen.webp)
여러 파일을 묶어 하나의 다운로드로 만들 때, 전체를 메모리에 올리지 않고 스트리밍으로 ZIP을 쓸 수 있다. PonsWarp의 수신측은 ZIP64 구조(LFH→데이터→CEN→EOCD64)를 조각 단위로 만들어 4GB 이상도 무손실로 표현한다.
![[PonsWarp 개념 교실 9] 재정렬 버퍼 — Arena·free-list·BTreeMap·LRU](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-09-reordering-buffer-cover-imagegen.webp)
조각이 순서대로 도착한다는 보장은 없다. 수신측은 뒤섞인 조각을 정렬해 파일 순서대로 디스크에 써야 한다. PonsWarp는 Arena+free-list로 메모리를 관리하고, BTreeMap으로 인덱스를 유지하며, 128MiB 한도를 넘으면 LRU로 밀어낸다.
![[PonsWarp 개념 교실 8] 청크 크기 16~192KiB — 어떻게 정해졌나](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-08-chunk-size-cover-imagegen.webp)
청크가 크면 패킷 수가 줄어 빨라질 것 같지만, SCTP 메시지 상한과 메모리·재전송 비용이 가로막는다. PonsWarp가 경로별로 16~192KiB를 고르는 기준과, 크면 무조건 빠르다가 아닌 이유를 파헤친다.
![[PonsWarp 개념 교실 7] 22바이트 패킷 헤더 — 한 조각이 자신을 설명하는 법](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-07-packet-header-cover-imagegen.webp)
파일을 조각내 보내면 수신측은 이 조각이 파일의 어디에 붙는지 알아야 한다. PonsWarp는 22바이트 고정 헤더에 그 정보를 담는다. 각 필드가 왜 그 크기인지, 왜 그 순서인지, 그리고 CRC 필드가 0으로 비워진 사연까지 파헤친다.
![[PonsWarp 개념 교실 6] 무결성 3총사 — CRC32 vs SHA-256 vs Merkle Tree](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-06-integrity-trio-cover-imagegen.webp)
데이터가 전송 중 변조되지 않았는지 확인하는 방법은 세 가지 층위가 있다. CRC32는 빠르지만 약하고, SHA-256은 강하지만 무겁고, Merkle 트리는 부분 검증이 가능하다. PonsWarp가 실제로 고른 조합과 그 이유를 파헤친다.
![[PonsWarp 개념 교실 5] HMAC과 상수시간 비교 — 키 확인과 타이밍 공격](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-05-hmac-constant-time-cover-imagegen.webp)
두 브라우저가 같은 키를 가졌는지 확인하려면 문자열 비교로 충분할 것 같지만, 그 비교 방식이 보안 구멍이 될 수 있다. HMAC과 상수시간 비교가 왜 함께 필요한지 파헤친다.
![[PonsWarp 개념 교실 4] GCM nonce — 왜 4B 카운터 + 8B random prefix인가](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-04-gcm-nonce-cover-imagegen.webp)
GCM에서 nonce가 두 번 재사용되면 암호문 두 개를 XOR하는 것만으로 키를 역산할 수 있다. PonsWarp가 nonce를 4바이트 카운터와 8바이트 랜덤 프리픽스로 쪼갠 이유와, 그 설계에 남은 위험이 무엇인지 파헤친다.
![[PonsWarp 개념 교실 3] AES-256-GCM — 암호화의 구조 (CTR + GHASH + tag)](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-03-aes-256-gcm-cover-imagegen.webp)
AES-256-GCM은 암호화와 위변조 감지를 한 번에 해결한다. CTR 모드로 데이터를 섞고, GHASH로 인증 태그를 만들어 붙인다. 이 태그가 16바이트로 파일 무결성을 지키는 이유를 파헤친다.
![[PonsWarp 개념 교실 2] HKDF-SHA256 — 공동 비밀을 안전한 키로 가공하기](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-02-hkdf-sha256-cover-imagegen.webp)
ECDH가 만든 공동 비밀은 좋은 AES 키라고 바로 가정하면 안 된다. 그 사이에 키 제조 공장 하나를 두는데, 그게 HKDF-SHA256이다.
![[PonsWarp 개념 교실 1] ECDH P-256 — 둘만 아는 공동 비밀 만들기](/tistory/ponswarp/concept/2026-08-21-ponswarp-concept-01-ecdh-p256-cover-imagegen.webp)
서로 비밀키를 직접 보내지 않고, 두 기기만 똑같은 암호화 키를 만들어내는 방법.