재시도, 지수 백오프, 지터 — 실패한 호출자들이 같은 순간에 돌아오지 않게 하기
일시적 실패를 다시 시도할 때 간격을 늘리고(백오프) 무작위성을 섞어(지터) 재시도가 상대를 다시 두드리는 폭풍으로 변하지 않게 하는 방법과, 재시도할 에러를 고르는 기준
TIL에서 일반화한 재사용 가능한 지식 문서입니다. 카테고리별로 정리되어 있습니다.
일시적 실패를 다시 시도할 때 간격을 늘리고(백오프) 무작위성을 섞어(지터) 재시도가 상대를 다시 두드리는 폭풍으로 변하지 않게 하는 방법과, 재시도할 에러를 고르는 기준
느리거나 한 번에 하나만 처리하는 외부 시스템 앞에 큐와 워커를 두어, 요청은 즉시 접수하고 처리는 자기 속도로 하게 만드는 패턴과 ack·폴백·재시도 설계
브라우저가 동시 입력도 keydown 이벤트로 쪼개 보내기 때문에 생기는 '같이 눌렀을 때만 한 방향' 버그를, 짧고 상한이 있는 수집창과 고정 스텝 소비로 푸는 방법
큐가 같은 메시지를 두 번 이상 배달할 수 있다는 전제에서, 성공했을 때만 ack하고 멱등 키로 중복 실행을 막으며 재배달이 끝났을 때 보고하는 방법
바뀐 파일에서 import 그래프를 거꾸로 따라 관련 테스트만 돌리는 방식에서 기준점을 정하는 법, 불확실할 때 전체 실행으로 되돌리는 fail-closed 규칙, 최종 게이트를 분리하는 이유
명세와 증명에 나오는 집합·논리·한정 기호를 TypeScript 코드와 Bend 문법에 1:1로 대응시켜 읽는 법과, 공허한 참·반례·역방향 함의처럼 기호를 잘못 읽을 때 생기는 테스트 구멍
같은 코드가 저장소 설정에 따라 통과하기도 실패하기도 하는 이유와, 타입 계약을 만들기 전에 실효 tsconfig·lockfile 컴파일러 버전을 한 번 고정해 두는 절차
런타임 테스트의 경계값 분석을 타입 수준으로 옮겨, 타입 격자의 극단 7축마다 통과·거절 witness 쌍을 짜는 방법과, 시간축·부작용 횟수처럼 타입이 끝내 덮지 못하는 축
파생 가능한 값은 저장하지 않고, 라이브러리가 이미 소유한 union은 복사하지 않고, 그래도 남는 client 상태만 union으로 만드는 순서와, 상태에 action을 넣으면 안 되는 이유
Record가 약속하는 totality, 검사하지 않는 type predicate, 실행 시점이 다른 wrapper의 ReturnType, sanitizer로 착각하는 excess property check처럼 구현이 지키지 않는 것을 타입이 약속하는 패턴들
assertNever, satisfies Record, 패턴 매칭 라이브러리 세 계층 중 무엇을 언제 쓸지와, catch-all 기본 분기가 누락을 숨기는 이유
Dog가 Animal의 하위 타입일 때 Dog[]와 (x: Dog) => void도 그 관계를 물려받는지, 어느 방향으로 물려받는지를 정하는 규칙과, strictFunctionTypes를 켜도 메서드 문법에 구멍이 남는 이유
실행 결과가 아니라 컴파일 결과를 검증해 '이 타입이 실제로 어떤 잘못된 코드를 막는가'를 코드로 고정하는 방법과, @ts-expect-error·mutation 검증으로 테스트가 살아 있는지 확인하는 절차
const 선언에 타입 파라미터를 붙일 수 없다는 제약을 우회해, 제네릭 함수 안에서 context를 만들고 컴포넌트들이 클로저로 붙잡게 하는 패턴과 렌더 중 호출 시 조용히 리마운트되는 함정
허용값 목록을 타입과 값 두 곳에 각각 적는 대신 값 하나만 정답의 출처로 두고 타입을 계산해 내는 기법, 그리고 widening 때문에 이 보호가 에러 없이 사라지는 함정
실행 결과가 맞는지 틀린지를 판정하는 기준을 어디서 가져올지의 문제와, 구현에서 기대값을 역산해 만든 테스트가 아무것도 검증하지 못하는 이유
DOM 좌표만으로는 깨지는 하이라이트 복원을 인용문·문맥·위치 selector의 가중 점수와 신뢰 임계값으로 해결하는 방법
코드에 인위적인 결함을 심어 기존 테스트가 실패하는지 확인함으로써, 커버리지가 숨기는 빈 assertion과 느슨한 검증을 찾아내는 기법
오프라인에서 발생한 사용자 명령을 IndexedDB에 보존하고 재접속·새로고침 뒤 안전하게 재전송하는 React outbox 전략
서로 메모리를 공유하지 못하는 확장 프로그램 실행 공간을 메시지 API, runtime 검증, handler 라우팅, 응답 봉투와 변경 알림으로 안전하게 연결하는 방법