신원준의 개발 기록

휴대폰을 루팅하던 초등학생이 안드로이드 개발자가 됐다

초등학교 4학년 때 휴대폰을 벽돌로 만든 적이 있다.

지워지지 않는 시스템 앱을 지워보겠다고 루팅을 시도하다가 그렇게 됐다. 덕분에 다섯 달쯤을 폰 없이 살았다. 그래도 결국 루팅에는 성공했다. 남이 만든 앱을 지우려고 애쓰다 보니 생각이 하나 따라왔다. 이 안에 내가 만든 앱이 있으면 좋겠다.

그 생각은 몇 년 동안 막연한 꿈으로만 있었다. 고등학교 1학년 때 안드로이드 동아리에 들어가 체중 관리 앱을 만들면서, 처음으로 “내가 만든 앱”이 생겼다.

큰 프로젝트인 줄 알았다

2021년에 마인드로직에 입사했고, 지금까지 다닌 회사는 여기 하나다.

첫 앱은 영어 학습 앱 딥러닝잉글리시였다. 둘이서 처음부터 만들었다. 그때는 큰 프로젝트라고 생각했는데, 지금 돌아보면 테스트 삼아 맡긴 일이었던 것 같다. 채팅을 보내면 잠시 뒤 평가 결과가 그 채팅 셀에 피드백으로 붙어야 했고, 이 RecyclerView 갱신 문제로 한참을 헤맸다.

그해에 Compose가 정식으로 나왔다. 나는 XML을 고집했다. 이 선택은 뒤에서 다시 나온다.

모바일에서 버튜빙을

다음 앱은 오픈타운이었다. AI 캐릭터를 만들고, 그 캐릭터가 되어 다른 캐릭터와 채팅하는 앱이다.

인앱 결제를 붙였고, 결제는 됐는데 충전이 안 되는 문제를 에러 경로를 하나씩 추적해 고쳤다. 단체 채팅방에서 유튜브를 같이 보는 기능도 만들었다.

그리고 버튜빙이 왔다. PC에서도 만만치 않은 걸 모바일에서 만들어야 했다. MediaPipe로 얼굴과 손 동작을 읽고, Filament로 렌더링한 3D 모델이 그 동작을 따라 하고, 그 화면을 Agora SDK로 방송한다. 어려웠던 지점은 두 가지다. Agora SDK 자체가 어려웠고, MediaPipe의 값을 Filament 모델로 넘기는 것도 어려웠다. 사람 얼굴에서 나온 값은 모델에 그대로 맞지 않아서, 값을 조금씩 조정해가며 맞춰야 했다. 해결책은 따로 없었다. 다른 안드로이드 개발자, 대표님과 함께 새벽 3시까지 시간을 갈아 넣어서 완성했다.

그 뒤에는 앱을 정리했다. Koin을 Hilt로, RxJava를 Coroutine으로 바꿨다.

안드로이드 개발자인데요

그러다 앱 일거리가 사라졌다. 2023년 한 해 동안 나는 웹 개발자였고, 지금 마인드로직의 인포미가 된 ChatAPI를 만들었다.

가장 힘들었던 시기다. 속으로는 “아니, 난 안드로이드 개발자인데”를 계속 되뇌었다. 그러면서도 이게 커리어를 넓힐 기회일지도 모른다고 계산하고 있었다.

1년 뒤, 회사가 A2O 엔터테인먼트와 협업해 블루밍톡을 만들게 됐다. A2O 아티스트와 팬이 소통하는 앱이다. 앱이 생겼으니 나는 안드로이드 개발자로 복귀했다.

XML을 고집한 사람의 근황

2021년에 XML을 고집했던 나는, 지금 블루밍톡의 XML을 Compose로 옮기고 있다. 내가 쌓은 걸 내가 치우는 중이다.

Compose가 대세가 되는 걸 보면서 습관이 생겼다. 새 기술은 일단 작은 앱에 써보고, 장단점은 그다음에 판단한다. MVI도 개인 앱에 먼저 써봤다. 써보고 내린 결론은 이렇다. MVI의 장점은 모든 상태를 하나의 객체로 관리한다는 것이고, 단점도 모든 상태를 하나의 객체로 관리한다는 것이다. 상태 추가는 copy 한 번이면 끝난다. 대신 그 객체 안에서 지금 뭐가 바뀌는지 따라가기 힘들고, 상태가 많아질수록 더 그렇다.

그걸 알고서 블루밍톡에 MVI를 적용하고 있다. Compose 마이그레이션과 CI/CD 구축도 같이 진행 중이고, 디자인 시스템도 시작하려 한다. 하면서 알게 되는 것들을 여기에 적겠다.