💡 오늘의 개발상식
조인 성능은 키 중복도가 결정한다
조인 결과 크기는 테이블 행 수가 아니라 조인 키의 중복도로 결정된다. 1:N 체인을 겹치면 중간 결과가 곱셈으로 불어 메모리를 넘겨 디스크로 흘러가고, 실행 계획의 예상 행 수와 실제가 크게 벌어지면 통계가 낡은 신호다.
개발하며 겪은 판단을 적어요
개발 기록
도입할까 말까 고민했던 기술, 막상 쓰고 보니 마주친 문제들. 까먹지 않으려고 적어두는 곳이에요.
💡 오늘의 개발상식
조인 결과 크기는 테이블 행 수가 아니라 조인 키의 중복도로 결정된다. 1:N 체인을 겹치면 중간 결과가 곱셈으로 불어 메모리를 넘겨 디스크로 흘러가고, 실행 계획의 예상 행 수와 실제가 크게 벌어지면 통계가 낡은 신호다.
Next.js App Router에서 'use client' 한 줄이 서버·클라이언트 영역을 가르면 번들 크기, 데이터 페칭, 상태 관리 전략이 전부 흔들린다. 경계를 잘못 그으면 번들 비대화와 중복 페칭이 뒤늦게 한꺼번에 터진다. 이 메모는 계층별 책임과 데이터 소유권을 기준으로 경계를 다시 그리는 판단 원칙과, 이미 잘못 그어진 경계를 리팩터링하는 우선순위를 정리한다.
웹훅 수신부는 외부의 불신을 전제로 설계해야 한다. 재전송과 처리 지연, 심지어 위조 시도까지 뒤따르는 불안정한 요청을 믿으면 안 되기에, 시그니처 검증과 멱등 처리, 재전송 ID 추적, 지연 시 큐잉 판단 등 수신부 설계에서 빼먹기 쉬운 요소를 모두 챙겨야 비로소 안정적 수신이 시작된다. 특히 재전송은 멱등키 없이 또다시 도착해도 중복 처리되지 않도록, 지연이 길어지면 즉시 큐에 넣어 처리를 미루어야 한다는 점을 잊지 말자
의존성 캐시와 빌드 캐시, 매트릭스 전략은 CI 실행 시간을 반으로 줄이지만 무효화 기준을 잘못 잡으면 오래된 패키지가 그대로 빌드를 통과시키는 예상 밖의 사고로 돌아온다. 이 글은 캐시가 실제로 빌드를 깨뜨리는 구체적인 상황들을 짚고, 잠금 파일·해시 입력·매트릭스 키 설계에서 무효화 시점을 정확히 읽는 원칙을 정리해 캐시를 안전하게 쓰는 기준을 제시한다.
인덱스를 만들어도 EXPLAIN에 풀스캔이 찍히는 일은 흔하다. 함수로 감싼 컬럼, 타입 불일치, LIKE의 선행 와일드카드, 낮은 선택도라는 네 가지 패턴이 쿼리와 인덱스 사이의 연결을 끊는다. 이 글은 각 패턴이 실행 계획을 어떻게 왜곡하는지 실제 예시로 짚고, EXPLAIN 해석부터 원인 확정까지 원인을 좁혀 고치는 절차를 정리한 결정 메모다.
한글 웹 폰트는 글리프 하나당 용량이 커서 로딩을 지연시키고, 폰트가 늦게 뜰수록 CLS 지표가 요동친다. 이 글에서는 subset으로 글리프를 걸러내고 preload 타이밍을 잡고 font-display 전략을 고르는 과정을 실제 수치와 함께 살펴본다. Next.js의 next/font가 자체적으로 처리하는 일과 처리하지 않는 일을 구분해, 퍼포먼스 예산을 넘지 않으면서 텍스트가 안정적으로 렌더링되는 폰트 파이프라인을 설계하는 방법을 다룬다.
느슨하게 태어난 TypeScript 프로젝트에서 strict를 하루아침에 켜면 수백 개의 에러가 쏟아진다. 이 글은 신규 기능 개발과 버그 수정 틈새에서 strict 계열 옵션을 하나씩 켠 실제 진행 기록으로, 옵션별 난이도와 효과를 따져 최적의 적용 순서를 정리했다. any 소탕 순서부터 strictNullChecks, noImplicitAny까지 실무에서 겪은 장애와 회귀를 함께 담았다.
DevInsight Digest
과장된 알림 대신 발행한 글 전체를 RSS로 제공합니다.
AI부터 개발 도구까지, 지금 읽고 싶은 흐름을 카테고리별로 묶었습니다.
LLM, AI 도구, 자동화 흐름과 제품 업데이트를 따라갑니다.
React, Next.js, 브라우저 생태계와 UI 개발 흐름을 다룹니다.
API, 서버, 데이터 흐름과 운영에서 드러나는 변화를 정리합니다.
배포, 관측, 자동화, 인프라 운영 이슈를 실무 관점으로 봅니다.
보안 사고, 취약점, 인증과 권한 설계 흐름을 정리합니다.
데이터 플랫폼, 분석, 검색, 파이프라인 이슈를 다룹니다.
개발 도구, 생산성 앱, 오픈소스 도구 변화를 살펴봅니다.