Daniel은 데이터가 있을 것으로 예상했음에도 불구하고 데이터베이스 쿼리가 결과를 반환하지 않는 문제를 겪었습니다. 그는 데이터베이스 상호 작용을 위해 execute_read라는 래퍼 함수를 사용하고 있었습니다. 이 함수는 몇 가지 의심스러운 설계 선택을 보였습니다. 한 가지 문제는 only_one 매개변수였는데, 이는 전용 데이터베이스 라이브러리 함수와 달리 반환 유형을 상당히 변경했습니다.또 다른 문제는 쿼리 타이밍 임계값을 결정하기 위해 env.is_production()을 사용하는 것이었는데, 이는 구성 매개변수가 이를 처리해야 함을 시사했습니다. 그러나 가장 치명적인 결함은 광범위한 예외 처리기였습니다. 이 처리기는 모든 오류를 무차별적으로 잡아서 기록했지만 함수가 계속 진행되도록 허용했습니다.결과적으로 Daniel의 쿼리에 구문 오류가 발생했을 때 함수는 예외를 잡고 빈 결과 집합을 반환했습니다. 이는 실제 오류를 숨겨 Daniel이 상당한 시간을 디버깅하는 데 소비하게 만들었습니다. 그는 결국 로그에서 오류를 발견했습니다. 저자는 이러한 침묵하는 실패의 위험, 특히 네트워크 문제가 발생할 수 있는 프로덕션 환경에서의 위험을 강조했습니다. 오류에 대한 명확한 표시 없이 빈 결과를 반환하는 것은 상당한 혼란과 디버깅 어려움으로 이어집니다.
execute_read라는 래퍼 함수를 사용하고 있었습니다. 이 함수는 몇 가지 의심스러운 설계 선택을 보였습니다. 한 가지 문제는only_one매개변수였는데, 이는 전용 데이터베이스 라이브러리 함수와 달리 반환 유형을 상당히 변경했습니다.또 다른 문제는 쿼리 타이밍 임계값을 결정하기 위해env.is_production()을 사용하는 것이었는데, 이는 구성 매개변수가 이를 처리해야 함을 시사했습니다. 그러나 가장 치명적인 결함은 광범위한 예외 처리기였습니다. 이 처리기는 모든 오류를 무차별적으로 잡아서 기록했지만 함수가 계속 진행되도록 허용했습니다.결과적으로 Daniel의 쿼리에 구문 오류가 발생했을 때 함수는 예외를 잡고 빈 결과 집합을 반환했습니다. 이는 실제 오류를 숨겨 Daniel이 상당한 시간을 디버깅하는 데 소비하게 만들었습니다. 그는 결국 로그에서 오류를 발견했습니다. 저자는 이러한 침묵하는 실패의 위험, 특히 네트워크 문제가 발생할 수 있는 프로덕션 환경에서의 위험을 강조했습니다. 오류에 대한 명확한 표시 없이 빈 결과를 반환하는 것은 상당한 혼란과 디버깅 어려움으로 이어집니다.