[트러블 슈팅] 예외 처리 개선 - 데이터베이스 반환값을 활용하여 예외 처리 강화

이희수·2025년 2월 3일

트러블 슈팅

1. 문제 상황

일정 관리 서비스를 구현하는 과정에서, deleteTaskById() 메서드는 id를 파라미터 값으로 받아서 task 테이블에서 해당 id의 행을 삭제하는 기능을 수행한다. 기존 코드는 아래와 같이 작성되어 있었다.

이 코드의 문제점은, 존재하지 않는 id가 입력되었을 때 예외 처리가 없어 사용자에게 적절한 피드백을 제공하지 못한다는 것이었다.

이로 인해 사용자는 일정이 정상적으로 삭제되었는지 여부를 알 수 없었고, 시스템의 신뢰성이 떨어지는 문제가 발생할 수 있었다.

2. 문제 원인

jdbcTemplate.update() 메서드는 반환 타입으로 int를 갖는다. SQL 문을 실행한 다음, 이 메서드의 영향을 받은 행(row)의 수를 반환하는 것.

기존 코드에서는 삭제된 행의 개수를 반환하도록 되어있었는데,
이 반환값을 활용하지 않았기 때문에, 삭제할 행이 존재하지 않아도 별도의 예외를 발생시키지 않았다.
이로 인해 사용자는 삭제가 실패했는지 여부를 알 수 없었다.

3. 해결 방법

이 문제를 해결하기 위해, jdbcTemplate.update() 메서드의 반환값인 영향을 받은 행의 수를 체크하고,
삭제할 행이 없는 경우(affectedRows == 0) 예외를 발생시키도록 코드를 수정하였다.
수정된 코드는 다음과 같다.

4. 해결 결과

이제 deleteTaskById() 메서드는 삭제할 행이 없는 경우 IllegalArgumentException을 발생시키면서 사용자에게 적절한 피드백을 제공할 수 있게 되었다.

이를 통해 시스템의 신뢰성이 향상되었고, 사용자는 삭제 작업의 성공 여부를 명확히 알 수 있게 되었다.

5. 결론

이번에 deleteTaskById() 메서드의 예외 처리 부족 문제를 해결한 방식으로 데이터베이스 작업 시 반환값을 적극 활용하여 예외 처리를 강화하면 시스템의 안정성과 사용자 경험을 개선할 수 있다. 앞으로도 비슷한 문제가 발생할 경우, 이와 같은 접근 방식을 활용하여 문제를 해결할 예정이다.

6. 추가 개선 가능성

  1. 예외 처리의 세분화: 현재는 IllegalArgumentException을 사용하고 있지만, 더 구체적인 예외 클래스를 정의하여 사용하면 더욱 명확한 에러 처리가 가능할 것이다. 예를 들어, TaskNotFoundException과 같은 커스텀 예외 정의
  2. 로깅: 예외 발생 시 로그를 남겨, 문제 발생 시 원인을 더 쉽게 추적할 수 있도록 할 수 있을 것이다.
  3. 테스트 코드 작성: 수정된 코드에 대한 테스트 코드를 작성하여, 예외가 정상적으로 발생하는지 확인한다.

이와 같은 추가 개선 사항을 통해, 더욱 견고하고 유지보수하기 쉬운 코드를 작성할 수 있을 것이라 기대된다.

0개의 댓글