CodeSOD: 복사본의 복사본 노트

CodeSOD: 복사본의 복사본

제시카는 오래된 API를 사용하는 레거시 Windows Forms 애플리케이션을 작업하고 있었습니다. 그녀는 성능이 저조한 보고서를 조사하는 임무를 맡았습니다. 코드베이스는 비효율성이 많은 스파게티 코드로 묘사되었습니다. 제시카는 SQL 쿼리를 실행하는 GetReportDiscounts라는 메서드를 발견했는데, 역설적으로 SQL에 이미 존재하는 요약을 C#에서 수행하고 있었습니다. 이 메서드는 자체 날짜 매개변수를 무시하고 필터링에 매직 넘버를 사용했습니다. GetReportTotals라는 또 다른 메서드는 거의 동일하지만 다른 매직 넘버를 사용했습니다. 이 두 메서드는 모두 날짜 매개변수를 올바르게 활용하는 이전 메서드인 GetCancelledInvoices에서 파생되었습니다. 그러나 GetCancelledInvoices는 데이터베이스 쿼리가 아닌 C#에서 필터링을 수행하기도 했습니다. 제시카는 실제 문제가 되는 보고서가 이러한 메서드의 변형으로, 데이터 조작을 위해 클라이언트 측 처리에 의존한다는 것을 발견했습니다. 이 보고서를 적절한 인덱싱을 갖춘 SQL 저장 프로시저로 리팩토링함으로써 성능이 크게 향상되었습니다. 이 글은 애플리케이션 계층 내에서 코드 복사 및 붙여넣기와 비효율적인 데이터베이스 작업을 수행하는 일반적인 문제를 강조합니다.