글
지금까지 작성한 글들을 모아봤습니다.
-
테스트 메타데이터는 왜 Map 하나로 끝나지 않았는가 — 공개 API의 가변성 경계
Kotest에 type-safe test metadata API를 기여하며, 등록 시점의 가변성·실행 시점의 불변성·설정 계층의 우선순위를 어떻게 나눴는지 PR 리뷰와 코드로 설명합니다.
-
브라우저 worker는 CPU worker도 I/O worker도 아니었다 — 작업 시간의 꼬리가 만든 용량 경계
browser worker의 병목은 CPU나 네트워크 하나로 설명되지 않았습니다. 계정별 session lock의 force-release가 60일 동안 1,129회 기록된 운영 신호를 출발점으로, browser process·page·proxy·외부 응답의 긴 꼬리가 queue 적체로 이어지는 경로와 용량 판단 기준을 정리합니다.
-
세션을 잃지 않으려면 요청을 어디로 보내야 하는가 — affinity와 계정 단위 직렬화
브라우저 세션은 인스턴스의 메모리에 있고, 같은 계정의 로그인·조회·댓글 등록은 서로 영향을 줍니다. Redis affinity로 기존 세션이 있는 인스턴스로 요청을 보내고, REST·메시징·관리 경로를 계정 단위 lock으로 직렬화하며, 소유 인스턴스 장애 때 health check 기반으로 새 세션을 수립하도록 바꾼 과정을 정리합니다.
-
큐가 가득 찼을 때 작업을 잃지 않으려면 — 6,397건 거절에서 배운 backpressure
브라우저 작업이 포화된 실제 운영 구간에서 3일간 6,397건의 publish가 queue-full로 거절됐습니다. bounded queue·publisher confirm·재예약·stale recovery로 수용 불가를 유실이 아닌 추적 가능한 상태 전이로 바꾼 과정을 정리합니다.