GitHub Actions 장애로 배포와 검증이 함께 멈췄다. 모든 워크플로를 복제하지 않고 고객 장애 복구와 운영 배포에 필요한 경로부터 이중화하는 기준을 정리한다.
[Read More]
AI와 Google Sheets로 필요한 앱 만들기: 아이 투약 기록 도구 공개
이 글에서 공개하는 도구는 보호자가 이미 의료진에게 안내받은 투약 계획을 기록하기 위한 개인용 보조 도구다.
약의 종류, 용량, 투약 간격, 휴약 여부를 판단하지 않으며 처방전과 의료진·약사의 안내를 대신하지 않는다.
[Read More]
API를 당장 바꿀 수 없다면 호출 시점을 당겨본다: prefetch라는 합법적 꼼수
프리페치는 느린 API를 빠르게 만들지 않지만 네트워크 대기를 화면 전환과 겹칠 수 있다. 캐시를 안전하게 재사용하기 위한 QueryClient, queryKey, staleTime 조건을 정리한다.
[Read More]
content-visibility: auto를 적용했더니 position: fixed가 고정되지 않았다
content-visibility: auto를 적용하자 fixed 요소가 뷰포트에 고정되지 않았다. containment가 새로운 containing block을 만드는 원인과 적용 경계를 좁힌 해결책을 정리한다.
[Read More]
동시에 처리한다는 것: AI 에이전트와 작업 규칙으로 병렬 개발하기
기능 개발, 성능 실험, 코드 리뷰를 여러 에이전트와 작업 폴더에서 병렬로 진행했다. 작업은 동시에 흐르게 하되 판단은 한 사람의 규칙을 통과하게 만든 방법을 정리한다.
[Read More]
얇은 훅은 혼자 오지 않는다: 훅이 쌓이고 엮일 때
얇은 훅 하나보다 그것들이 탑을 쌓을 때 생기는 탐색 비용이 더 크다. 각 계층이 어떤 계약을 제공하는지 묻고 접어도 되는 추상화를 구분한다.
[Read More]
레거시를 다음으로 옮기는 전환용 피처 플래그, 지우기 쉽게 설계하기
전환용 피처 플래그의 목표는 분기를 오래 유지하는 것이 아니라 쉽게 삭제하는 것이다. 레거시와 신규 정책을 섞지 않고 호출부 한 곳에서 전환한 구조를 정리한다.
[Read More]
침묵은 중립적인 기록이 아니었다
장애를 복구하고도 사실과 역할을 기록하지 않으면 책임의 빈칸은 대응한 사람에게 남는다. 침묵이 어떻게 사실상의 동의와 책임으로 읽히는지 돌아본다.
[Read More]
TypeScript 7 도입 전에 팀이 확인할 것들
TypeScript 7이 정식 출시됐다. 가장 눈에 띄는 변화는 새로운 타입 문법이 아니다. TypeScript로 작성했던 컴파일러와 언어 서비스를 Go 기반 네이티브 구현으로 옮겼고, 공식 사례에서는 전체 빌드가 대체로 8~12배 빨라졌다.
[Read More]
AI 도구를 바꾸는 비용을 낮추는 법 (2) — Cursor에서 Claude로, 구체 사례
Cursor의 스킬과 MCP 설정을 Claude Code로 옮기며 포맷, 전송 방식, 중복 설정의 차이를 확인했다. 실제 전환에서 그대로 가져갈 것과 다시 판단할 것을 나눈다.
[Read More]
AI 도구를 바꾸는 비용을 낮추는 법
AI 도구가 바뀌어도 작업 규칙까지 다시 만들 필요는 없다. 공통 규칙, 실행 절차, 비공개 설정을 분리해 Cursor에서 Codex로 옮긴 과정을 정리한다.
[Read More]
이상한 얇은 훅 만들지 말고, 그냥 useEffect 쓰자
값을 더하지 않는 얇은 커스텀 훅은 추상화보다 간접 참조에 가깝다. postMessage 브리지 사례로 useEffect를 직접 쓰는 편이 더 읽기 쉬운 이유를 살펴본다.
[Read More]