Today I Learned

Daily reflections on work and learning—what I did and what I learned.

2026년 9월

2026-09-18

In front of a server that handles one request at a time behind a lock, jittered retries inside the worker come before a queue

A record of splitting a form into a queue and a worker after several simultaneous submissions failed with 'busy', and of confirming that queue redelivery alone does not resolve the contention and that acking an exception silently loses the message

  • If the other side processes one request at a time behind a lock, queue redelivery alone does not resolve the contention. Redeliveries also arrive at the same moment and collide again, so random-jitter retries inside the worker come first, and the queue's backoff is meant for outages
  • Once you have already answered 'received', the worker must not ack an unexpected exception. An ack is a silent loss

2026년 7월

2026-07-14

General concepts I hit while tidying up my dev environment: shell quoting, monorepo publishing, CI runners, guard design

A TIL distilling shell word splitting, workspace publish rewriting, CI runner mismatches, and fail-open guards into general concepts encountered while maintaining tooling and infrastructure

  • A path held in a shell variable, if it contains spaces, splits into multiple arguments when used unquoted and the command silently breaks
  • Internal monorepo dependencies should be linked with the workspace protocol and published with a manager that rewrites them to real versions