CodeSOD: 마지막 ID
Chris의 회사는 웹 애플리케이션이 클라우드 제공업체 B에 호스팅되고 클라우드 제공업체 A의 MySQL 데이터베이스와 상호 작용할 때 예상치 못한 데이터 전송 비용 급증에 직면했습니다. 월별로 기가바이트 정도의 데이터 전송만 예상했지만, 테라바이트 단위로 발생하여 예산을 훨씬 초과했습니다. 조사 결과, 모든 삽입 작업이 엄청난 양의 데이터를 검색하고 있다는 사실이 밝혀졌습니다. 근본 원인은 잘못된 SQL 쿼리였습니다: SELECT last_insert_id() FROM some_table_name. 이 쿼리는 단순히 마지막으로 삽입된 ID를 가져오는 대신, 지정된 테이블의 모든 행에 대해 해당 ID를 반환하도록 지시되었습니다. 테이블에 수백만 개의 행이 있었기 때문에, 각 삽입 시 마지막으로 삽입된 ID가 수백만 번 반복되어 전송되었습니다. 결과적으로, 각 삽입 작업은 약 30MB의 상당한 데이터 전송을 발생시켰습니다. 기술적인 수정은 간단했습니다. 그러나 웹 개발 회사 및 해당 호스팅 환경과의 변경 사항 조정, 테스트 및 배포를 포함하여 6주가 소요되었습니다. 이 시간의 일부는 웹 개발자들에게 문제가 실제로 발생하고 있으며 그들의 코드에 의해 발생했다는 것을 설득하는 데 사용되었습니다.