첫 직장에서 게임 SDK 클라이언트 개발자로 일하며 값진 경험을 했다. 인원이 3명인 작은 개발팀이었던 덕분에, 나는 일반적인 경우라면 신입이 맡기 힘들었을 큰 역할을 맡아 소프트웨어 개발의 다양한 영역에 참여할 수 있었다.
전체 SDK 프로젝트 중 내가 개발을 맡은 안드로이드 라이브러리는 내가 입사했을 때 이미 구조 설계가 끝나 있었다. 나는 사수님께 업무 지식을 배우고 현재 서비스 중인 타사 SDK들을 참고해가며 인증, 결제, 네이티브 UI 등 라이브러리의 핵심 기능들을 구현했다. 또한 이 라이브러리를 Maven 레포지토리에 배포하는 것도 담당했다. 이제 갓 업계에 발을 디딘 신입으로서 프로젝트에 참여하면서 고민했던 것, 배운 것들을 정리해 보려 한다.
입사 첫날 내가 쓰게 될 PC를 수령했다. 입사 전에 다녔던 코딩 학원에서 '첫날에 개발환경 구축도 못 하고 헤매면 첫인상에 엄청 안 좋다' 라는 이야기를 들었기에, 나는 누가 시키지도 않았는데 안드로이드 스튜디오를 깔아놓고 이런저런 초기 세팅을 하고 있었다. 그때 마침 사수님이 내 쪽으로 오시더니 "어? 벌써 스튜디오 까셨네요? 버전 몇으로 하셨어요?" 하고 물으셨다. 나는 별 생각 없이 그냥 최신 버전으로 깔았다고 대답했다. 그러자 사수님은 "그래요? 흠... 신입이시니까 한번 직접 겪어보는 게 좋을 수도 있겠네요." 하고 의미심장한 표정으로 말하셨다. 그때는 이 버전이라는 것이 SDK 개발 전체에 걸쳐서 얼마나 중요한 고려대상인지 모르고 있었다.
사수님은 내게 처음부터 개발 업무를 맡기지는 않으셨다. 내게 게임 SDK 개발에 대한 지식이 거의 없었기 때문이다. 대신 나는 처음 몇 주 동안 현재 회사에서 서비스 중인 구버전 SDK 코드를 보며 프로젝트 구조와 기능을 파악하고, 스스로 SDK 토이프로젝트를 하나 만들어 보라는 숙제를 받았다. 나는 최신 버전 안드로이드 스튜디오와 최신 버전 외부 라이브러리들을 써가며 토이프로젝트를 완성했다. 거기까지는 크게 문제가 없었다. 그러나 내 SDK가 실제로 유니티 환경에서 작동하는지 확인하기 위해 유니티 샘플 앱에 연동시켰을 때 문제가 터졌다.
내 SDK 라이브러리를 임포트한 유니티 샘플 앱을 빌드하려 하자 처음 보는 에러가 꼬리에 꼬리를 물고 터져나왔다. 에러메시지로 구글링해 보면 대부분이 버전 호환성에 대한 것들이었다. 문제가 뭔가 내 생각보다 훨씬 복잡하다는 것을 깨달은 나는 사수님께 도움을 요청했고, 사수님은 이제 때가 되었다고 생각하셨는지 게임 SDK에서 호환성 관리가 왜 중요한지를 설명해 주셨다.
근본적인 문제는 아래와 같았다.
그래서 호환성 문제가 생기는 요소들을 파악해서 각 요소들의 버전을 맞춰 줘야 하는데, 골치아픈 점은 유니티-안드로이드 환경에서 이런 요소들이 한두 개가 아니라는 것이었다. 안드로이드 빌드의 핵심인 JDK와 Gradle, Android Gradle Plugin, 그리고 코딩에 쓰는 Kotlin 플러그인과 안드로이드 스튜디오 자체도 제각기 물고 물리는 관계였다. 유니티 버전 하나만 달라져도 이 모든 것들의 호환성을 맞춰 주어야 했다. 심지어 외부 라이브러리 중에서도 이 호환성 관계에 물리는 것들이 더러 있어서, 프로젝트 개발 내내 최대한 외부 라이브러리 사용을 지양해야만 했다.
이런 호환성 문제는 구글링보다는 각 프레임워크 및 빌드 도구들의 공식문서를 전부 체크해서 공식에서 밝힌 버전 호환성 정보를 정리해놓고 버전업을 할 때마다 모든 호환성을 검토해보는 식으로 대응할 수밖에 없었다. 이 글에 유니티-안드로이드 호환성 정보를 정리해 놓았다.
이 시기에 하도 시달린 덕분에, 그때까지는 크게 신경쓰지 않았던 버전 호환성에 대해 많이 공부했고 여러 가지 지식을 얻을 수 있었다. 그리고 원래 나는 개발을 할 때 일단 코딩을 왕창 해놓고 마지막에야 빌드 테스트를 해보는 습관이 있었는데, 빌드시 호환성 문제까지 고려해야 한다는 것을 알게 된 후로는 최대한 문제 파악의 변수를 줄이기 위해 코딩 도중에 자주 빌드를 하는 습관을 갖게 되었다.