운영 DB에서 특정 화면이 느리다는 제보를 받으면, 저는 제일 먼저 쿼리부터 봅니다. 그런데 쿼리를 열어보면 십중팔구 이런 반응이 나옵니다. "어? 이거 인덱스 있는데?" 인덱스가 있다는 것과 인덱스를 탄다는 것은 완전히 다른 얘기입니다. 이 차이를 모르면 인덱스를 아무리 추가해도 쿼리는 계속 느립니다.이번 글은 제가 실무에서 반복적으로 만난 "인덱스가 있는데도 안 타는" 케이스들을 MySQL 기준으로 정리한 것입니다. 대부분 EXPLAIN 한 번이면 원인이 보이는 것들인데, 처음 겪으면 한참 헤매게 되는 유형들입니다.사진: Unsplash의 Growtika먼저 EXPLAIN 읽는 법부터, 딱 세 컬럼만실행계획을 처음 보면 컬럼이 많아서 부담스러운데, 실무에서 문제를 잡을 때 제가 먼저 보는 건 딱 세 ..
Node.js 컨테이너 종료가 느릴 때 먼저 볼 graceful shutdown 기준배포 버튼을 눌렀을 뿐인데 몇 초 동안 502가 튑니다. 로그에는 에러가 많지 않고, 새 컨테이너도 정상으로 떠 있습니다. 그런데 사용자 입장에서는 방금 누른 저장 버튼이 실패했고, 운영자는 "배포 중 잠깐 그런 것 같다"는 애매한 말만 남깁니다.이런 문제는 보통 배포 도구만 바꿔서는 사라지지 않습니다. 컨테이너가 내려갈 때 애플리케이션이 어떤 순서로 요청을 멈추고, 남은 일을 끝내고, 프로세스를 종료할지 정해져 있어야 합니다. Node.js 서버라면 SIGTERM을 받고도 계속 새 요청을 받는지, server.close() 이후 오래 붙은 연결을 어떻게 다룰지, readiness가 먼저 내려가는지부터 확인해야 합니다.나..
지난주 테크 뉴스 핵심 정리: Gemini 전환, AI 보안, Cloud Run 고가용성지난주 테크 뉴스는 "새 AI 기능이 하나 더 나왔다"보다 조금 더 실무적인 쪽으로 움직였습니다. Google Assistant는 Gemini로 넘어가는 일정이 더 구체적으로 보였고, Microsoft는 보안 운영을 agentic workflow로 재설계하겠다는 메시지를 밀었습니다. Cloud Run은 서버리스 서비스도 다중 리전 장애 대응을 더 진지하게 다뤄야 한다는 신호를 냈습니다.2026-08-03부터 2026-08-09까지의 흐름을 한 문장으로 묶으면 이렇습니다. AI는 제품 안으로 더 깊게 들어오고 있고, 개발팀은 기능보다 운영 경계와 전환 비용을 먼저 계산해야 합니다. 이번 글은 뉴스 제목을 따라가는 대신,..
OpenAPI 문서와 실제 API가 어긋날 때 먼저 잡을 기준Swagger UI에는 분명 email이 필수라고 적혀 있는데, 실제 응답에는 가끔 빠집니다. 문서에는 status가 active | blocked라고 되어 있지만 운영 데이터에는 pending이 섞여 있습니다. 프론트엔드는 타입을 믿고 배포했는데, 어느 날 특정 고객 계정에서만 화면이 깨집니다.이런 문제는 OpenAPI를 "문서 자동 생성" 정도로만 보면 계속 반복됩니다. OpenAPI는 예쁜 API 문서가 아니라, 클라이언트와 서버가 함께 지키는 계약으로 다뤄야 합니다. 계약이 깨지는 순간은 대개 큰 리팩토링 때가 아닙니다. 필드 하나를 optional로 바꾸거나, 에러 응답 형식을 급하게 추가하거나, 테스트 데이터에 없는 케이스가 운영에서..
AI Coding Agent · Open Source Tools AI 코딩 에이전트를 더 똑똑하게 만드는 오픈소스 도구들 Claude Code, Codex, Cursor, Gemini CLI 같은 AI 코딩 에이전트를 실제 개발 워크플로우에 붙일 때 필요한 메모리, 토큰 최적화, 코드베이스 분석, 명세화, 작업 관리 도구를 정리했다. 요약 AI 코딩의 생산성은 모델 성능만으로 결정되지 않는다. 에이전트가 기억하고, 로그를 줄이고, 코드베이스를 이해하고, 요구사항을 명세화하고, 작업 상태를 추적할 수 있어야 실제 개발 환경에서 안정적으로 쓸 수 있다. 목차 AI 코딩 에이전트에 보조 도구가 필요한 이유 mem0 / Honcho: 장기 메모리..
Laravel 애플리케이션을 AWS Lambda에 올리고 PostgreSQL에 붙이려는데 이런 에러가 나올 때가 있다.PDOException: could not find driver (Connection: pgsql, SQL: select * from ...)로컬에서는 잘 되던 게 Lambda에서만 터진다. 원인은 런타임 이미지에 PDO PostgreSQL 확장이 안 들어 있어서다.왜 이런 일이 생기나서버리스 PHP 런타임(Bref 등)은 Lambda의 용량 제한 때문에 확장을 최소한만 넣어서 배포한다. MySQL용 pdo_mysql은 기본 포함이지만 pdo_pgsql은 빠져 있는 경우가 많다.로컬 개발 환경의 PHP에는 대부분 둘 다 깔려 있으니 로컬 테스트에서는 안 잡힌다. 배포하고 나서야 발견하게 ..
