주간 다이제스트 // WEB_DEV_GENERAL — 2026년 33주차
folder_open주간 보고서

Vercel이 발견한 durable state의 숨은 비용 — 33주 웹 개발

Datastore migration, 공정한 queue, 안정적 E2E test, 재현 benchmark와 progressive context가 production 전 가정을 드러냅니다.

calendar_todaysummarize2026년 33주차
모든 Vercel build의 database를 migration한 방법
태그: 아키텍처읽기_시간: 9분

모든 Vercel build의 database를 migration한 방법

Vercel은 dual write, shadow read, dashboard, flag, rollback 가능한 단계로 build warm-pool state를 ephemeral Redis에서 durable DynamoDB로 production 중단 없이 옮겼습니다. 저장 값은 일치했지만 container를 만들 때마다 먼저 count하는 supply loop가 stall했습니다. P95 count latency는 1.29 ms에서 5.13 ms로 늘었고 가장 큰 P90 차이는 약 17배여서 수백 번의 직렬 read가 일부 run을 몇 분으로 늘렸습니다. Concurrent supply call은 고정 batch ratio 없이 store speed 가정을 제거하고 stale state로 생길 수 있는 소수의 extra container만 허용했습니다. 조사 과정에서 Redis에서도 있었지만 주목받지 못한 분 단위 stall도 드러났습니다.

개발자 경험23:57

OpenAI engineer 세 명이 100만 line을 출시했습니다. 10시간 agent run은 여기서 시작합니다

OpenAI의 engineer 세 명은 수작업 예상 시간의 약 10분의 1로 내부 제품을 만들며 사람이 구현을 직접 입력하지 않고 약 1,500개 pull request100만 line 이상 codebase를 만들었다고 전해집니다. 지속 가능한 기법은 거대한 instruction file이 아니라 active plan, decision log, design document, architecture, quality grade를 가리키는 짧은 map이었습니다. Nate B. Jones는 이를 progressive context shaping이라 부르며 근거가 goal, next action, stopping condition을 바꿀 때 compact current-state record를 갱신합니다. Stable rule, current state, resource map, history를 분리해 stale guidance가 오늘의 plan처럼 행동하지 못하게 합니다. Human judgment가 방향과 완료를 소유하고 agent는 실행과 structured handoff를 맡습니다.

AI_인포그래픽
OpenAI engineer 세 명이 100만 line을 출시했습니다. 10시간 agent run은 여기서 시작합니다 — 인포그래픽
태그: 아키텍처읽기_시간: 20분

공정성을 설계하다: Ruby background job orchestration

FIFO background queue는 전체 throughput을 유지하면서도 큰 tenant 하나 때문에 작은 모든 사용자를 기다리게 해 fairness를 product 문제로 만들 수 있습니다. Evil Martians는 Sidekiq, Sidekiq Pro, Solid Queue, GoodJob을 비교하지만 필요한 reliability와 efficiency를 가진 동적 weighted per-tenant queue를 직접 제공하는 선택지는 없다고 봅니다. 권장 출발점은 성숙한 processor를 유지하고 virtual tenant queue를 저장하며 main-queue latency를 감시해 제한된 fair batch를 승격하는 planner를 추가하는 것입니다. Shuffle sharding은 tenant를 격리하고 interruptible iteration은 자연 batch에 시간 제한을 두며 throttling은 지속적으로 greedy한 workload를 우회시킵니다. Active tenant가 매우 많으면 planner가 bottleneck이 될 수 있어 wake frequency, batch size, utilization, waiting depth를 관찰해야 합니다.

태그: 도구읽기_시간: 6분

Shopify가 mobile E2E test 안정성을 98%로 높인 방법

Shopify의 mobile E2E suite는 안정성 50%까지 떨어져 나쁜 PR보다 좋은 PR을 더 자주 막았고 required CI에서 제거됐습니다. Opinionated Appium wrapper는 guarded action만 노출하고 모든 step에 예상 결과를 요구하며 custom timeout이나 script injection을 UNSAFE_로 표시합니다. PaddleOCR와 OpenCV가 screenshot의 visible text와 Polaris icon을 찾고 Test ID는 fallback으로만 남으며 annotated video가 실패 step의 search와 touch를 보여 줍니다. 반복 실행 promotion gate는 flaky test가 blocking이 되기 전에 거부합니다. 재구축 suite는 iOS와 Android에서 98% 안정성을 달성했고 agent도 같은 visual grammar로 test를 작성하기 쉬워졌습니다.

태그: 성능읽기_시간: 11분

M5 Max에서 측정한 local model 성능

Scott Chacon은 동일한 coding-agent harness로 128 GB M5 Max의 local model 6개를 Opus 5, GPT-5.6 Sol과 비교했습니다. Suite는 DuckDB SQL, pytest fix, JSON extraction, output prediction, fact, 장문 lookup을 포함한 6개 category 22개 task1,056회 run으로 구성됩니다. Frontier model은 전반적으로 더 빠르고 정확했지만 Qwen3 Coder는 SQL에서 특히 빨랐고 모든 local model이 7,900-token runbook lookup을 처리했습니다. Local failure는 reasoning-sensitive output prediction, SQL dialect 발명, permission arithmetic에 몰렸습니다. Cache와 token efficiency 때문에 실제 API 청구액이 단순 정가 곱셈보다 훨씬 낮아 비용 비교는 근사치입니다.

태그: 개발자 경험읽기_시간: 9분

작은 progressive enhancement를 보너스로

Piccalilli의 music page는 Last.fm과 Open Scrobbler link를 항상 일반 HTML로 render하고 data가 있을 때 custom element가 다른 streaming service를 추가합니다. Same-origin Astro API route가 MusicBrainz request를 CORS와 원치 않는 공개 사용에서 보호하고 1시간 in-memory cache491개 item collection의 반복 lookup을 줄입니다. Data layer는 score가 가장 높은 release group을 고르고 streaming·purchase relation을 filter하며 platform을 deduplicate하고 실패 시 빈 array를 반환합니다. 따라서 JavaScript는 discovery를 개선하지만 사용 가능한 baseline을 소유하지 않습니다. 글은 불완전한 third-party coverage와 personal-site tradeoff를 받아들여 비핵심 enhancement가 build-time dependency가 되지 않게 합니다.

summarize다이제스트_요약

Vercel은 dual write, shadow read, feature flag, rollback 가능한 단계로 build warm-pool state를 Redis에서 DynamoDB로 옮겼습니다. 데이터는 일치했지만 P95 count가 1.29 ms에서 5.13 ms로, P90은 약 1 ms에서 15 ms로 느려지며 container마다 count하는 N+1 control loop가 드러났습니다. Concurrent supply call이 직렬 dependency를 제거하고 Redis 시절부터 있던 stall도 발견했습니다.

Evil Martians는 background-job fairness를 product 속성으로 다룹니다. Per-tenant queue와 planner가 기존 processor의 retry·recovery를 보존하면서 제한된 fair batch를 승격합니다. Shopify는 action마다 assertion을 요구하는 Appium wrapper, PaddleOCR, OpenCV로 같은 원칙을 API에 적용해 mobile E2E 안정성을 50%에서 98%로 올렸습니다.

재현 가능한 local-model benchmark는 6개 category 22개 문제1,056회 run으로 6개 local model과 2개 frontier model을 비교했습니다. Cloud model이 전반적으로 더 빠르고 정확했지만 local model도 SQL, bug fix, document lookup 일부에서 강했습니다. Cache와 output 효율 때문에 token 정가만으로 비용을 비교할 수 없다는 caveat도 남습니다.

장시간 coding agent에도 명시적인 state boundary가 필요합니다. OpenAI의 세 engineer는 하나의 거대한 manual 대신 짧은 map, current plan, decision log, architecture document를 사용해 100만 line 이상과 약 1,500개 pull request 규모의 내부 제품을 만들었다고 전해집니다. Progressive context shaping은 stable instruction, current state, resource map, history를 분리해 새 근거가 이후 작업을 다시 지시하도록 합니다.

Piccalilli의 music link는 두 static link를 항상 render하고 custom element와 same-origin Astro route가 선택적으로 서비스를 늘립니다. 공통된 engineering 동작은 암묵적 가정을 측정·거부·재시도·재지정하거나 무시할 수 있는 좁은 계약으로 바꾸면서 baseline 경험을 지키는 것입니다.

핵심 요점
  • Datastore migration에서는 query별 percentile뿐 아니라 누적 workflow latency와 호출 수를 비교하십시오. 작아 보이는 round trip이 N+1 control-loop failure가 될 수 있습니다.
  • 공유 worker pool이 포화되면 workload 형태에 맞춰 fairness를 선택하고 실행은 성숙한 job processor에 남기십시오. Custom scheduler에서 retry와 crash recovery를 다시 만들지 마십시오.
  • 신뢰 가능한 동작을 가장 쉬운 API 경로로 만드십시오. E2E test에 post-action assertion을 요구하고 no-JavaScript baseline을 보존하며 benchmark task·run·caveat를 함께 공개하십시오.