위키득계정 ↗
기술

Goleak

Goleak기술
분야
고루틴 누수 검사
언어
Go
검사 시점
테스트 또는 패키지 종료
주의
병렬 검사 범위 구분
Goleak은 Go 테스트가 끝난 뒤 예상하지 않은 고루틴이 남았는지 확인하는 도구다. 개별 테스트나 패키지 전체의 종료 지점에 검사를 연결해 정리되지 않은 동시 실행 작업을 찾는다.

남은 작업을 찾는 이유

테스트가 값을 올바르게 반환해도 백그라운드 고루틴이 끝나지 않을 수 있다. 이런 작업은 후속 검사에 영향을 주거나 자원을 계속 사용할 수 있다. Goleak은 종료 지점에 남은 예상 밖 고루틴을 찾아 문제를 드러내는 데 쓰인다. 누수를 찾아냈다는 사실과 그 작업을 자동으로 종료하는 것은 다르다.

개별 검사와 패키지 검사

개별 테스트 끝에 확인을 붙이면 어떤 검사와 관련된 작업인지 추적하기 쉽다. 패키지의 TestMain에서 전체 실행 뒤 확인하는 구성도 가능하다. 생성한 작업을 취소하고 끝날 때까지 기다리는 정리 흐름을 먼저 설계해야 한다. 고루틴이 정상적으로 종료되는 시점보다 빨리 확인하면 의도한 작업도 문제처럼 보일 수 있다.

병렬 실행에서의 한계

병렬 테스트가 아직 실행 중이면 한 검사의 종료 시점에 보이는 고루틴이 누수인지 다른 검사의 정상 작업인지 구분하기 어렵다. 이런 경우에는 패키지 전체 종료 검사가 적합할 수 있다. 다만 전체 검사에서 누수를 찾으면 원인 테스트의 특정은 별도 조사가 필요하다. 모든 고루틴을 무시하는 식으로 통과시키지 말고 정상 작업과 정리 누락을 구분한다.

관련 문서

Ginkgo / Gomega / Testify / GoMock