인덱스는 공짜가 아니다
인덱스는 일부 읽기를 빠르게 하고 모든 쓰기를 느리게 한다. 인덱스가 열한 개 붙은 테이블에서 insert가 타임아웃 나기 시작했을 때 몸으로 배웠다. 쿼리 플랜을 읽는 법, 아무도 쓰지 않는 인덱스를 찾는 법, 그
인덱스는 일부 읽기를 빠르게 하고 모든 쓰기를 느리게 한다. 인덱스가 열한 개 붙은 테이블에서 insert가 타임아웃 나기 시작했을 때 몸으로 배웠다. 쿼리 플랜을 읽는 법, 아무도 쓰지 않는 인덱스를 찾는 법, 그
머지 커밋은 무슨 일이 있었는지를, 리베이스한 히스토리는 무엇이 바뀌었는지를 말해 준다. 몇 년 동안 둘 사이를 오간 끝에 기능 브랜치에는 결국 rebase로 돌아온다. 내가 쓰는 작업 흐름, 그걸 안전하게 지켜 주
캐시는 오래된 데이터가 아직 쓸 만하다는 약속이다. 운영 중에 쫓아다닌 버그 대부분은 그 '쓸 만하다'를 잊어서 생겼다. TTL을 정하는 기준, 영리한 만료보다 쓰기 시점 무효화가 나은 이유, 그리고 어느 계층이 낡
주석은 낡지만 타입은 빌드를 깨뜨린다. 최근 프로젝트에서 문서 주석 대부분을 지우고 같은 지식을 타입 시스템으로 옮겼다. 더 좁은 유니언, 브랜드 ID, 잘못 부를 수 없는 함수. 잘 된 것과 너무 영리해진 것, 그
매일 쓰는 도구에 대한 짧은 시리즈의 첫 편. 내 터미널 설정은 해마다 작아졌다. 셸 하나, 별칭 몇 개, 꼭 필요한 것만 보여 주는 프롬프트. 설정 전체를 공개하고, 하나씩 덜어 낸 이유를 함께 적는다.
이 블로그를 옮기기 전, 예전 서버의 한 달 치 접속 로그를 뒤졌다. 방문자 대부분은 사람이 아니었다. 검색 크롤러, 피드 리더, AI 스크레이퍼, 그리고 정체를 알 수 없는 몇몇. 각자 무엇을 요청하고 무엇을 무시
페이지가 1초 늦게 뜰 때마다 누군가는 첫 줄을 읽기도 전에 떠난다. 내 글들을 재 보니 무게의 대부분은 내가 고른 적 없는 것들이었다. 폰트, 임베드, 잊고 있던 스크립트 하나. 무엇을 덜어 냈는지, 그 뒤 숫자가