
테스트가 전부 통과했는데도 저는 그 코드를 다시 열었습니다. 긴 음성을 여러 조각으로 나눠 분석하는 기능이었는데, 결과는 맞게 나오지만 시간이 이상하게 오래 걸렸습니다. 확인해 보니 조각 하나를 처리할 때마다 무거운 모델 파일을 처음부터 다시 올리고 있었습니다. 이 글은 통과한 뒤에 제가 무엇을 더 보는지에 대한 기록입니다.
통과는 ‘맞다’만 보장한다
테스트는 결과가 기대한 값과 같은지를 봅니다. 같은 일을 몇 번 반복했는지, 필요 없는 준비 작업을 몇 번 되풀이했는지는 보지 않습니다. 그래서 통과했다는 사실만으로는 낭비가 있는지 알 수 없습니다.
제 경우 모델을 올리는 작업은 한 번에 수 초가 걸립니다. 조각이 다섯 개면 그 준비만 다섯 번 반복됩니다. 결과는 정확했으니 테스트는 당연히 통과했습니다.

준비와 실행을 분리했다
고친 방식은 단순합니다. 모델을 올리는 준비와 조각을 처리하는 실행을 나눴습니다. 통화 한 건을 분석하는 동안 준비는 한 번만 하고, 조각마다 필요한 작업 공간만 새로 만들었다가 정리합니다.
같은 구조를 다른 곳에도 적용할 수 있습니다. 반복문 안에 ‘매번 똑같은 무거운 준비’가 들어 있지 않은지 보는 것입니다. 파일 열기, 연결 맺기, 설정 읽기처럼 결과에는 영향이 없지만 시간은 먹는 작업들이 여기 해당합니다.
같은 점검에서 다른 문제도 나왔다
이 부분을 들여다보다가 별개의 버그도 발견했습니다. 코틀린에서 정적으로 선언한 함수 하나가 실제로는 엉뚱한 내부 클래스에 연결돼 있었습니다. 동작은 하고 있었지만 연결 지점이 의도와 달랐습니다.
이건 눈으로 코드를 읽어서는 잡히지 않습니다. 그래서 컴파일된 결과에서 함수의 실제 모양을 직접 뽑아 확인하는 검사를 추가했습니다. 사람이 읽는 코드가 아니라 기계가 만든 결과를 확인 대상으로 삼은 것입니다.

그래서 통과 뒤에 한 번 더 본다
저는 이제 테스트가 통과하면 세 가지를 확인합니다. 결과가 맞는지, 같은 일을 반복하고 있지 않은지, 고친 뒤 같은 검사를 다시 돌렸는지입니다. 세 번째를 빠뜨리면 고치는 과정에서 다른 걸 망가뜨려도 모릅니다.
이번 수정 뒤에도 기존 검사를 전부 다시 돌렸고, 모두 통과했습니다. 다만 실제 기기에서의 속도는 아직 측정하지 못했습니다. 그 수치는 기기 실행이 가능해진 다음에 다시 기록할 예정입니다.
공식 문서가 말하는 ‘느린 테스트’의 기준
이 글의 문제는 “결과는 맞는데 준비 작업이 반복돼 느리다”였습니다. 비슷한 기준은 공식 문서에도 있습니다. 마이크로소프트의 .NET 단위 테스트 모범 사례 문서는 좋은 단위 테스트의 특징으로 빠를 것(Fast), 독립적일 것(Isolated), 반복해도 같은 결과가 나올 것(Repeatable)을 듭니다. 같은 문서의 ‘인프라 의존성 피하기’ 항목은 외부 의존성이 테스트를 느리고 깨지기 쉽게 만들므로 통합 테스트에 두라고 설명합니다. .NET 기준 문서이지만 테스트 전반에 옮겨 볼 수 있는 원칙이고, 문서는 단위 테스트가 밀리초 단위로 끝나야 한다고 말합니다. 한 번에 수 초가 걸리는 모델 로딩이 조각마다 반복된다면 이 기준과 거리가 멀어집니다.
모델을 쓰는 시스템이라면 구글의 머신러닝 규칙 모음(Rules of Machine Learning)도 참고할 만합니다. 5번 규칙은 인프라를 모델과 별개로 시험하라고 하면서, 고정된 모델을 서비스 환경에서 불러와 쓸 수 있는지도 테스트하라고 적습니다. 모델을 올리는 일 자체가 따로 점검할 대상이라는 뜻이므로, 이 글에서 ‘준비’와 ‘실행’을 나눈 판단과 방향이 맞습니다.
| 공식 문서의 원칙 | 이 글의 사례에 대응시키면 |
|---|---|
| 빠를 것: 단위 테스트는 밀리초 단위 | 조각마다 수 초짜리 모델 로딩이 들어가면 테스트도 서비스도 느려집니다 |
| 독립적일 것, 무거운 외부 의존성은 분리 | 무거운 준비 작업은 실행 단계와 떼어 한 번만 합니다 |
| 모델 로딩과 사용을 따로 시험 | 준비가 한 번만 일어나는지, 결과가 같은지를 각각 확인합니다 |
이 표는 두 문서의 원칙을 이 글의 사례에 맞춰 옮긴 것이며, 문서가 이 사례를 직접 다루는 것은 아닙니다.
참고 자료
- Microsoft Learn: Best practices for writing unit tests (.NET) (2026년 10월 18일 기준)
- Google for Developers: Rules of Machine Learning (2026년 10월 18일 기준)