모호한 컬럼명 리팩토링에서 느낀 테스트 코드의 중요성

inho ha·2024년 6월 25일
0

swatchon

목록 보기
3/4

서울의 한 월요일.
내가 작성한 코드가 예상과 다르게 동작했습니다.
모델 인스턴스가 리턴될 것으로 예상했는데 string 이 리턴되었습니다.

문제 발견

customer.country

customer와 country는 연관관계가 있는 모델입니다.
customer에 countryId 컬럼이 있고, 그래서 위 코드는 country 모델 인스턴스를 리턴합니다.

shipment.country

shipment는 모델 인스턴스입니다.
shipment에는 country라는 컬럼이 있고, 이 컬럼에는 KR, JP 등 국가 코드를 저장하고 있습니다.
그래서 위 코드는 string 타입의 국가 코드를 리턴합니다.

modelInstance.country

8개의 테이블에 country라는 이름의 컬럼이 있고, 국가 코드를 저장하고 있습니다.
또 다수의 테이블이 countryId 컬럼이 있고 country 테이블과 연관관계를 가지고 있습니다.

따라서 위의 코드처럼 모델 인스턴스의 country를 호출할 때, 모델링을 확인하지 않으면 어떤 값이 리턴될지 알 수 없습니다.
.country를 사용할 때마다 모델링을 확인해야 하는 리소스가 추가로 필요해집니다.

원인

테이블명과 컬럼명이 일치해서 모호함이 생기는 것이 원인입니다.

이 문제를 깃이슈에 등록하고, 주간 백엔드 회의에서 언급하여 country 컬럼명을 countryCode로 명확하게 변경하여 해결하는 것으로 결론 내렸습니다.

리팩토링 누락 문제

테이블의 컬럼명을 변경하고,
해당 컬럼이 사용되는 곳을 모두 찾아서 변경된 컬럼명을 사용하도록 수정해 줘야 합니다.
뿐만 아니라 해당 컬럼값을 받아서 처리하는 곳도 변수명을 countryCode로 명확하게 변경해 줘야 합니다.

일부 수정이 누락된 곳이 있다면 버그가 발생될 것입니다.
해당 컬럼은 매우 다양한 곳에서 당장은 버그가 안 보이더라도, 나중에 어딘가에서 발견될 가능성이 컸습니다.
따라서 누락된 곳이 없다는 것을 보장해 줄 방법이 필요했습니다.

테스트 코드 사용

테스트 코드를 작성하여 모두 통과하는 것을 확인하여 수정이 누락된 부분이 없음을 보장할 수 있습니다.

  1. 리팩토링 이전에 테스트 코드를 확인하여 기존에 잘 동작하는 것을 확인
  2. 리팩토링 이후 테스트 코드 실행
  3. 테스트 코드가 실패하는 부분을 확인하여 누락된 부분 수정
  4. 테스트 코드가 모두 통과하는 것을 확인하여 신뢰성 있는 코드 배포!

위의 순서로 리팩토링을 진행하기로 결정했습니다.

테스트 코드 개선

기존에 작성되어 있는 테스트 케이스는 2314개였습니다.
그런데 일부 유지 보수가 누락되어 620개의 케이스가 실패하고 있었습니다.
일단 이 코드를 먼저 개선하여 테스트 코드의 신뢰도를 높여주었습니다.

테스트 코드가 잘 통과하는 것을 확인하고 리팩토링을 진행하였고, 테스트 코드를 다시 실행시켰습니다.
리팩토링을 매우 꼼꼼하게 진행을 했다고 생각했지만, 테스트 코드 실행 결과 누락된 부분이 발견되었습니다.
테스트 코드가 실패한 부분을 확인하여 누락된 부분을 수정하는 작업을 테스트 코드가 모두 통과할 때까지 반복하였습니다.

결과

기존의 테스트 코드의 실패하는 케이스를 개선하여 테스트 코드를 사용하여 코드의 신뢰성을 검증할 수 있도록 했습니다.

이 테스트 코드를 사용해서 리팩토링이 누락된 부분을 발견하고 신뢰성 있는 코드를 배포할 수 있었습니다.

소감

테스트 코드를 실행하기 전에는 리팩토링 누락에 대한 불안감이 매우 컸습니다.

리팩토링 이후에 테스트 코드를 통해서 리팩토링이 누락된 부분을 찾았을 때 정말 짜릿했습니다.

테스트 코드가 유지 보수에 중요하다고 익히 들어 알고 있었지만, 이렇게 직접 경험해 보니 진짜 너무 중요하다는 것을 제대로 이해할 수 있었습니다.

profile
inho ha / ian(swatchon) / iha(42seoul)

0개의 댓글