POOOLING FOREST
Mockito 메인테이너가 10년 만에 떠나는 이유, 그리고 지속 가능성에 대하여 - Mockito의 메인테이너 TimvdLippe가 10년 만에 사임을 발표하며 던진 오픈소스 생태계의 지속 가
Culture & Philosophy

Mockito 메인테이너가 10년 만에 떠나는 이유, 그리고 지속 가능성에 대하여

Mockito의 메인테이너 TimvdLippe가 10년 만에 사임을 발표하며 던진 오픈소스 생태계의 지속 가능성과 엔지니어 번아웃에 대한 화두를 살펴봅니다.

송찬영

CTO

안녕하세요. 풀링포레스트 CTO 송찬영입니다.

최근 자바(Java) 생태계에서 가장 널리 쓰이는 테스팅 프레임워크인 Mockito의 메인테이너, TimvdLippe가 10년 만에 자리에서 물러나겠다는 글을 올렸습니다. GitHub 이슈 #3777에 올라온 이 글은 단순한 사임 인사가 아니라, 오픈소스 생태계가 안고 있는 구조적인 문제와 엔지니어의 번아웃에 대한 묵직한 화두를 던지고 있습니다. 저 또한 오랫동안 개발 조직을 이끌며 기술적 의사결정과 팀원의 성장을 고민해온 입장에서, 그의 글을 읽으며 많은 생각이 들었습니다. 오늘은 그가 남긴 이야기를 통해 우리가 기술을 대하는 태도와 지속 가능한 개발에 대해 이야기해보고자 합니다.

JVM 생태계의 변화와 "혼자 남겨진 느낌"

가장 먼저 눈에 띄는 이유는 JVM의 변화에 따른 피로감입니다. Java 21, 22로 넘어오면서 'Dynamic attachment of agents' 기능이 기본적으로 비활성화되었습니다. 이는 보안 관점에서는 타당한 결정이지만, Mockito처럼 런타임에 바이트코드를 조작해야 하는 도구 입장에서는 치명적인 변화였습니다.

문제는 변화 그 자체가 아니라 소통 방식이었습니다. Mockito는 ByteBuddy를 기반으로 JVM의 기능을 한계까지 사용하는 도구입니다. 하지만 이번 JVM 업데이트 과정에서 메인테이너는 "보안을 위해 결정되었으니 따르라"는 식의 통보를 받았다고 느꼈습니다. 대안 없는 변경 사항 앞에서, 그는 마치 Mockito가 자바 생태계의 발전을 가로막는 장애물 취급을 받는 느낌이었다고 토로합니다.

오픈소스는 거대한 협력의 산물처럼 보이지만, 실상은 소수의 헌신적인 개인들이 얇은 기둥처럼 거대한 인프라를 떠받치고 있는 구조입니다. 유명한 XKCD 만화가 풍자하듯 말이죠. 기업이 주도하는 플랫폼의 변경 사항이, 주말과 밤을 쪼개 기여하는 오픈소스 메인테이너에게 "해결해야 할 짐"으로 전가될 때, 그 무게는 개인이 감당하기 힘든 수준이 됩니다.

Kotlin의 화려함 뒤에 숨겨진 복잡성

두 번째 이유는 Kotlin 지원에 대한 기술적 회의감입니다. 우리는 Kotlin의 간결한 문법과 코루틴(Coroutines) 같은 강력한 기능을 사랑합니다. 하지만 도구를 만드는 사람 입장에서 Kotlin은 꽤 골치 아픈 존재였던 모양입니다.

Mockito의 핵심(mockito-core)은 자바 기반으로 설계되어 있습니다. 그런데 Kotlin은 JVM 위에서 동작하지만, 내부적으로는 자바와 꽤 다르게 동작합니다. 특히 suspend 함수 같은 기능은 기존 자바의 방식과는 완전히 다른 바이트코드를 생성합니다. 이를 지원하기 위해 Mockito 내부에는 Kotlin만을 위한 예외 처리와 '꼼수(hack)'들이 쌓이기 시작했고, 코드는 점차 스파게티처럼 얽히게 되었습니다.

우리가 편리하게 사용하는 'Syntactic Sugar' 뒤에는 누군가의 피땀 어린 유지보수 노력이 숨어 있다는 사실을 뼈저리게 느꼈습니다. 언어의 추상화 레벨이 높아질수록, 그 아래를 받치는 도구들의 복잡도는 기하급수적으로 증가합니다.

다시 프로그래밍의 즐거움을 찾아서

결국 그는 Mockito를 떠나 Rust로 작성된 웹 엔진인 Servo 프로젝트에 기여하며 다시 프로그래밍의 즐거움을 찾았다고 합니다. "자발적 봉사가 일이 되어서는 안 된다"는 그의 문장은 개발자라면 누구나 공감할 만한 대목입니다. 자신이 만든 도구가 더 이상 즐거움을 주지 않고, 의무감과 압박감만 남았을 때 떠나는 것은 어찌 보면 가장 건강한 선택일지 모릅니다.

우리는 흔히 기술적 우수성이나 트렌드에 집중하지만, 결국 그 기술을 만들고 유지하는 것은 '사람'입니다. 엔지니어링의 지속 가능성은 코드의 퀄리티뿐만 아니라, 그 코드를 작성하는 사람의 마음 상태에도 달려 있습니다.

마치며

우리가 매일 당연하게 작성하는 when(...).thenReturn(...) 한 줄이, 누군가가 인생의 3분의 1인 10년을 바쳐 지켜온 결과물이라는 사실을 기억했으면 합니다. 풀링포레스트 팀에게도 항상 강조하는 이야기지만, 우리가 사용하는 오픈소스 라이브러리들은 공짜가 아닙니다. 누군가의 시간과 열정이 지불된 결과물입니다.

이번 주에는 우리가 의존하고 있는 오픈소스 프로젝트들의 이슈 트래커를 한 번쯤 들여다보는 건 어떨까요? 버그 리포팅이 아니더라도, 감사의 인사 한 마디를 남기는 것만으로도 그들에게는 큰 힘이 될 것입니다. 개발자로서, 그리고 동료로서 TimvdLippe의 새로운 여정을 진심으로 응원합니다.

지금 읽으신 내용, 귀사에 적용해보고 싶으신가요?

상황과 목표를 알려주시면 가능한 옵션과 현실적인 도입 경로를 제안해드립니다.