000%
COMMISSION Nº 06 · 2018–20 — TEAM CHAT
GRAP · iOS

GRAP — 옛 빌드와 새 빌드, 두 갈래를 동시에 맡으며 인수까지 거쳤습니다.

GRAP에서 2년 동안 iOS를 혼자 맡았습니다. 기존 팀 채팅 빌드를 계속 내보내는 동시에, 4.0을 Swift로 처음부터 다시 짜고, 그 사이에 Kakao Enterprise 인수까지 거쳤습니다.

FIG. 01GRAP — IOS — GRAP · iOS
COMMISSIONiOS · Swift (Pods Obj-C) · MVVM · RxSwift family · CocoaMQTT-over-TLS2018.02 — 2019.12 → 2020.12

2018년부터 2020년까지 GRAP 개발을 맡았습니다. 앱은 희성촉매, 어메이징브루어리, 삼성전자, 락앤락, 규모가 큰 종교재단 등 다양한 업무영역에 걸쳐서 사용되었습니다. 두 버전을 함께 관리해야 했습니다 — 옛 빌드는 계속 내보내야 했고, 그 옆에서 새 빌드를 처음부터 다시 쌓아야 했습니다. 같은 제품을 서로 다른 코드베이스와 구조로 관리했습니다.

앱은 Swift로 짰고, 외부 라이브러리는 그 시기 한국 iOS의 표준 도구들이라 Objective-C 코드가 만만치 않게 깔려 있었습니다. 네트워킹 · 실시간 메시징 · 인앱 이미지 렌더링 · 캡처와 앨범 · identity · 푸시와 telemetry · 키체인 · attributed text, 그리고 그것들을 묶어 주는 RxSwift 계열까지.

실시간 메시징에는 상호 TLS를 적용한 MQTT를 썼습니다 — 클라이언트가 자체 인증서를 사용하고, 개발 중에는 암호화가 정말 걸려 있는지를 패킷 수준에서 직접 확인했습니다. 같은 앱이 국경 너머 팀들을 위한 실시간 번역도 실었습니다. 메시지 · 게시글 · 댓글을 그 자리에서 번역하되, 결과를 먼저 보여 주고 검토를 거쳐 보내게 했습니다. 그리고 기성 라이브러리가 모자라는 자리는 포크를 떠서 직접 패치했습니다 — 카메라 · 앨범 선택기가 그중 하나입니다.

그 2년 동안 수십 번의 스토어 릴리스가 나갔고, 고객사 앞에서 터진 크래시가 요구하면 당일 긴급 빌드도 있었습니다. 푸시 인증서의 수명 주기는 처음부터 끝까지 제 몫이었습니다 — 매년 갱신했고, 그 절차서를 직접 썼습니다. 툴체인 업데이트가 크래시 리포트의 심볼 복원을 깨뜨렸을 때는, 복원 작업을 자동화된 파이프라인으로 만들었습니다. 운영에는 4개 언어가 실려 나갔습니다.

백엔드는 슬로베니아 출신의 유능한 엔지니어가 이끌었고, 일상 업무 언어는 영어였습니다. 프로토콜 관련 질문은 모두 영어로 적은 디자인 대화로 풀어 갔고, 마지막엔 명시적인 계약으로 정리되었습니다. 유능한 해외 엔지니어와 영어로 적힌 프로토콜 위에서 함께 일한 이 경험은, 엔지니어끼리 어떻게 협업해야 하는지에 대한 제 시선에 지금까지도 영향을 주고 있습니다. (이 시기의 이야기는 Visuals · The Interview No. 004 — The Mission Song에 더 길게 풀어 두었습니다.)

회사가 Kakao Enterprise에 인수된 뒤에도 GRAP과 Kakao Work는 서로 독립된 제품으로 운영되었습니다. 한 사무실에서 두 제품 라인과 서로 다른 출시 일정을 동시에 관리하던 시기가 있었습니다.

— FIN —