코드의 악몽(CodeSOD): 첫 10,000개 노트

코드의 악몽(CodeSOD): 첫 10,000개

알리시아는 배치 처리가 필요한 기업용 애플리케이션을 상속받았지만, 쿼리 때문에 발생하는 불명확한 IllegalStateException을 마주하게 되었다. 문제가 된 쿼리는 "select * from data_import where id > 10000"이었는데, 이는 행의 존재 여부를 확인하고 행이 발견되면 예외를 발생시켰다. 이 쿼리는 행을 반환하는 대신 COUNT(*) 쿼리가 되어야 했다. 이 문제는 코드가 ID를 레코드의 상태 정보를 나타내는 데 사용했기 때문에 발생했다.프로그램은 ID에 10000을 더하고, ID 1부터 시작하는 새로운 데이터를 삽입하고, ID가 10000을 초과하는 레코드를 삭제하는 과정을 수행했다. 이 과정은 트랜잭션이나 오류 처리 없이 단일 메서드 내에서 수행되었으며, 순차적 ID를 사용하여 처리 실패를 추적했다. 이 과정은 데이터가 10,000행을 초과할 때 실패하기 시작했으며, INSERT 명령어를 실패하게 했다. 알리시아는 이 과정을 수정하고 싶었지만, 그녀의 상사는 빠른 해결책을 선택하여 ID 임계값을 10000에서 100000으로 변경했다. 이 변경으로 인해 과정은 계속 작동할 수 있었지만, 기본적인 문제는 여전히 해결되지 않았고, 과정은 여전히 결함이 있는 설계에 의존했다. ID 임계값을 변경한 결정은 기존 과정에 대한 의존성 때문에 이루어진 것으로 보인다.이러한 상황에서 알리시아는 다음과 같은 문제를 해결해야 했다.- 불명확한 IllegalStateException을 해결하기 위해 쿼리를 수정해야 했다. - ID를 사용하여 레코드의 상태 정보를 나타내는 결함이 있는 설계를 수정해야 했다. - 트랜잭션과 오류 처리를 추가하여 과정의 안정성을 향상시켜야 했다. - 기존 과정에 대한 의존성을 줄여야 했다.이러한 문제를 해결하기 위해 알리시아는 다음과 같은 단계를 수행할 수 있다.- 쿼리를 COUNT(*) 쿼리로 수정하여 불명확한 IllegalStateException을 해결한다. - ID를 사용하여 레코드의 상태 정보를 나타내는 결함이 있는 설계를 수정하여 레코드의 상태 정보를 별도의 필드로 저장한다. - 트랜잭션과 오류 처리를 추가하여 과정의 안정성을 향상시킨다. - 기존 과정에 대한 의존성을 줄이기 위해 새로운 설계를 구현한다.