PR 링크:
안녕하세요. yorkie팀의 멘티 김범기입니다.
저는 위 PR으 개발하면서 생겼던 삽질을 소개해보고자 합니다.
PR에 56개나 되는 코멘트에서 알 수 있듯이 전반적으로 쉽지 않았던 개발이라 생각합니다ㅎ
하지만 그중에서도 가장 당황했던 문제는 새로운 기능 추가에 맞게 추가한 테스트 코드가 제 컴퓨터에서는 문제가 없는데 깃헙에 푸쉬한뒤 Github Actions의 CI툴이 자동으로 테스트가 수행되면 테스트에 실패하는 것이었습니다.
이 문제는 처음 보자마자 거의 멘붕이었다고 생각합니다. 제 컴퓨터에서는 전혀 재현이 안 되는데 계속 문제가 생기는 원인을 도저히 파악할 수 없었기 때문입니다. 이를 해결하기 위해 정말 많은 고민을 했고 코드를 수없이 검토했는데도 문제를 알 수 없어 슬랙에 질문글을 올리기로 생각하고 질문을 작성했습니다.
슬랙에 질문글을 올린뒤 동철 멘토님께서 도움을 주셔서 문제의 원인에 대한 감을 잡을 수 있었는데, 멘토님 컴퓨터에서는 위 문제가 간헐적으로 발생했기 때문입니다. 간헐적으로 발생한다는 말씀을 듣고 바로 타이밍 문제가 아닐까 생각을 하였고 yorkie 서버와의 sync과정에서 스냅샷 생성은 goroutine에서 이뤄지기 때문에 이부분이 문제일것이라 생각했습니다.
바로 time.sleep을 사용해 명시적으로 대기 시간을 주었더니 테스트가 성공하는 것을 확인할 수 있었습니다. 하지만 sleep을 사용하는 것은 테스트가 명확하지 않다는 문제가 있었고 멘토님께서 몽키패치라는 것을 제안해 주셨습니다.
처음 알게된 개념이기에 몽키패치가 무엇인지 공부해 보았고 이를 적용해 문제를 해결할 수 있었습니다....만 사실 이 사연이 진정 삽질인 반전이 었었으니...
최근에 위와 같은 이슈가 올라왔는데 몽키패치를 적용하는데 사용한 라이브러리의 라이센스가 다른곳에서 사용하면 안된다는 것이었습니다..!!!
오픈소스 개발에서 어떠한 라이브러리를 사용할때 해당 라이브러리의 라이센스를 확인했어야 하는데 구글에 go언어 몽키패치를 검색하면 바로 나오는 라이브러리라 안일하게 사용했다고 생각합니다.ㅠㅜ
라이센스 확인의 중요성을 깨닫는 중요한 계기가 되었다고 생각하고 조만간 이를 대체할 방법에 대해 알아볼 예정입니다.