UnitTest 로 빠른 피드백 얻기 - Prisma 버젼 Update 사례
Prisma의 주요 단점 중 하나는 JOIN 절이 지원되지 않았던 것이었다. 이 문제는 최근 5.7 버젼에서 FeaturePreview로 추가되었고, 이 소식을 듣고 반가운 마음에 즉시 적용을 시작했다. 이렇게 고민 없이 적용할 수 있는 이유는 바로 테스트에 있다.
일반적으로 대부분은 주요 라이브러리의 버전 업데이트를 하지 않거나, 할 경우에도 매우 보수적으로 진행하는 경향이 있다.
그럼 어떻게 진행했는지 진행과정을 공유해 보겠다.
1. 패키지 업데이트 & 전체 테스트 수행
패키지 매니져를 통해서 업데이트를 하고 모든 테스트를 수행했지만, 실패하는 테스트 케이스는 없었다. 일단은 안심이다. 아직 추가된 Feature를 사용하지 않아서 쉽게 성공했을 수도 있다.
2. 기능 리팩토링
이제 가장 중요한 Repository 를 구현체를 새롭게 추가된 Join을 사용할 수 있도록 리팩토링을 해나갔다. 첫 번째 케이스에서 무난이 통과했고 다음 케이스를 작업을 진행했지만, 에러에 직면하게 되었다.
Inconsistent column data: Unexpected conversion failure from String(2023-12-06T17:43:39.515686+00:00) to DateTime. Reason: $trailing input
Github Issues 에 검색해 봤더니 역시 이미 버그 리포팅되어 있었다. 해당 개발자가 버그를 인지하였고 NativeType 들에 대한 케이스를 놓쳤다고 코멘트를 했다. (이슈 링크 참고)
3. 테스트 코드의 빠른 피드백
나는 테스트 코드를 통해서 실제 프로던션 혹은 개발서버에 코드를 배포하지 않고도 라이브러리의 버젼업과 새로운 기능에 대해서 테스트를 진행할 수 있었다. 만약 테스트코드가 없었다면? 코드를 추가하고 Local에서 API 서버를 기동 하고 데이터 셋업 후 API 호출하고 문제가 발생했는데, 어떤 부분이 문제인지 파악하고 있었을지도 모른다.
하지만 테스트 코드를 통해서 극도로 좁은 범위인 Repository 코드만 수행했으며 문제가 발생하더라도 테스트 범위가 적기 때문에 고려 대상이 적다. 그리고 무엇보다 코드 변경후 수초 안에 다시 테스트 가능하며, 심지어 디버깅도 가능해진다.
우리가 겪는 SpringBoot 1.x 버젼이라 어려워요. Java 버전이 너무 낮아요. 관련된 문제들도 테스트를 작성하면서 조금씩 커버리지를 올리다 보면 과감하게 버전업 할 수 있는 날이 올 것이다.