소개
물류 플랫폼 센디에서 iOS를 담당하고 있습니다. 팀에 iOS 개발자가 저 혼자여서, 맡은 영역의 기술 선택과 우선순위를 직접 정하고 결과를 책임집니다.
기능은 실험으로 검증합니다. 홈 화면부터 오더폼, 결제 수단까지 A/B 실험을 반복 운영했고, 이긴 안은 기본으로 확정하고 진 실험은 화면을 되돌린 뒤 분기 코드까지 정리했습니다.
문제를 iOS 네이티브 안에서만 풀지 않습니다. 실험을 빠르게 검증하기 위해 운영 중인 앱에는 React Native를 브라운필드로 도입했고, 새 B2B 프로덕트는 AI 에이전트를 중심에 둔 방식으로 그린필드에서 만들어 운영하고 있습니다.
설계 문서를 먼저 쓰고 나서 구현에 들어갑니다. 반복 구현은 AI 에이전트에 맡기고 제 시간은 설계와 검토에 쓰는데, 모듈 분리나 배포 파이프라인처럼 단계가 긴 작업일수록 이 방식의 효과가 컸습니다.
경력
총 2년 2개월2024.11 ~ 현재
센디
재직 중1년 9개월iOS 엔지니어
DX 스쿼드
2026.04 ~ 현재
운수사 TMS 앱 신규 구축 담당
- •운수사 관리 기능이 웹에만 있어 앱을 처음부터 만들어야 했습니다. 혼자 전부 만들 수 없는 일정이라 기능 화면 대신 네트워크와 인증 패키지, 3환경 빌드 구성을 먼저 만들었고, 그 경계 덕분에 동료가 화면 개발을 곧바로 병렬로 시작했습니다
- •심사를 거치지 않고 JS 번들을 배포할 채널이 필요했는데 AppCenter CodePush는 이미 종료된 상황이었습니다. Supabase 의존으로 시작했다가 비용과 통제 문제로 자체 호스팅으로 옮겼고, 데이터베이스가 필요 없다는 결론에 이르러 저장 구조를 S3 블롭으로 한 번 더 바꾸면서 처음 가정이 틀렸던 지점을 검토 문서에 남겼습니다. OTA는 결국 원격 코드 주입이라 번들 서명이 관건이었는데, 직접 만든 검증기를 버리고 라이브러리가 공식 지원하는 RSA-2048 경로를 택했고 구버전 되돌림 방어와 Detox E2E 검증까지 붙인 뒤에야 운영에 올렸습니다
- •첫 스토어 출시까지 배포를 막는 문제가 연달아 나왔습니다. 아이콘 알파 채널로 인한 심사 거부와 번들에 dSYM이 섞여 들어가던 ITMS-90171 오류를 각각 진단해 풀었고, 같은 일이 반복되지 않도록 iOS와 Android 모두 빌드와 배포, 알림을 분리한 파이프라인으로 만들어 두었습니다
- •React Native의 JS 예외와 네이티브 크래시가 서로 다른 경로로 종료돼 Crashlytics에 잡히지 않았습니다. 안 잡히는 크래시는 없는 크래시가 돼버리기 때문에 분석 문서부터 쓰고 부팅 시점에 양쪽 훅을 설치했으며, 일부러 크래시를 심어 실제로 수집되는지 확인하고 제거했습니다
플랫폼 스쿼드
2024.12 ~ 현재
유입부터 결제까지 화주 앱 오더 전환 퍼널과 A/B 실험 운영 담당
- •빌링 카드 등록에서 카드번호 수기 입력이 이탈 지점이었습니다. 카드 스캐너로 대체하되 정확도가 곧 신뢰라서, Vision 온디바이스 인식과 CLOVA OCR을 함께 쓰고 같은 번호가 반복 인식될 때만 확정하도록 잡았습니다. 그래도 오인식이 남아 출시 후 한 차례 뺐다가 보강해 다시 넣었고, 별도 SPM 패키지로 분리하면서 자릿수별 다수결 투표와 블러 감지를 더해 외부 OCR 호출을 세션당 1회 수준까지 줄였습니다. 국내전용 카드가 Luhn 검사에 걸려 스캔되지 않던 문제는 검사를 필수 조건에서 참고 신호로 낮춰 풀었습니다. 재투입 후 등록 전환율은 38% → 73% (Hackle A/B), 등록 소요 시간은 3.3분 → 1.9분 (Mixpanel 코호트)으로 개선됐습니다
- •PG사 전환은 결제가 걸린 변경이라 실패하면 매출이 바로 멈춥니다. 한 번에 바꾸는 대신 A/B 분기로 신구 결제를 함께 운영하며 검증한 뒤 확정했고, 자주 바뀌는 결제 수단 프로모션 문구는 코드에 두면 배포가 병목이 돼서 Remote Config로 옮겨 운영했습니다
- •홈 화면이 오더 시작에 영향을 준다는 가설로 세 차례 실험을 이어갔습니다. 진입점 실험은 승자를 확정하고 나머지 코드를 지웠지만, 전면 개편 실험은 결과가 나빠 과거 화면으로 되돌렸습니다. 매칭 대기 중 예상 시간을 보여주면 취소가 줄어드는지처럼 가설 단위로 실험을 설계했고, 실험 로그의 측정 시점이 잘못돼 분모가 왜곡된 것을 발견하고 계측부터 바로잡은 적도 있습니다
- •오더폼 작성 중 이탈하면 내용이 유실돼 재작성 부담이 컸습니다. 임시저장이 완주율에 영향을 주는지 실험군에만 기능을 켜서 검증했고, 운영 중 드러난 저장 경합은 저장 책임을 별도 객체로 분리해 해결했습니다. 이사 카테고리를 새로 열 때는 차량 제한과 사진 필수, 마감 시간 같은 카테고리별 규칙을 구현하고 사진 입력 시점 실험으로 승자를 확정했습니다
- •예약 취소가 상담 채널로만 가능해 사용자와 운영 양쪽에 비용이었습니다. 취소 사유와 환불 계좌 입력까지 앱 안에서 끝나는 흐름으로 만들었고, 이후 위약금과 환불 시나리오가 세분화된 신규 취소 정책 개편까지 이어서 맡아 구 취소 흐름을 완전히 걷어냈습니다
- •운송 현황 화면이 실제 운송 상태와 어긋나고 재연결 배너가 깜빡이는 문제를 맡았습니다. 원인이 콜백 기반 WebSocket 채널의 갱신 누락이라 판단해 AsyncStream 기반으로 재설계했고, 그 위에 기사 경로 이탈 감지와 OSRM 경로 재탐색을 얹었습니다. 이탈 판정은 오탐이 곧 기사에게 잘못된 안내라서, 저속 구간을 거르고 복합 규칙을 실험한 끝에 50m 단일 임계값으로 고정했습니다
RN TF
2025.08 ~ 2025.09
운영 중인 네이티브 앱에 React Native New Architecture를 브라운필드로 도입
- •운영 중인 앱을 다시 쓰지 않고 React Native를 검증해야 해서 브라운필드 구조를 택했습니다. TurboModule 브릿지를 Objective-C++로 먼저 구현해 검증하고 이후 Swift 구현으로 다시 설계했으며, 첫 화면 교체는 잘못돼도 바로 끌 수 있게 기능 플래그로 점진 배포했습니다
- •Firebase 메서드 스위즐링 충돌, 패키지 매니저가 겹치며 생긴 중복 심볼, CocoaPods 서브모듈 경로 문제처럼 브라운필드 특유의 통합 문제를 하나씩 풀고 재현 절차를 Makefile과 문서로 남겼습니다. RN을 포함하지 않는 빌드 구성을 분리해 RN이 필요 없는 작업의 빌드 영향도 차단했습니다
- •운송 플랜 온보딩 화면을 RN으로 옮기고 A/B 실험으로 검증했습니다
iOS 파트
2025.02 ~ 현재
CI/CD, 프로젝트 구조, 사내 도구 등 iOS 앱의 중장기 기반 작업 담당
- •아카이브와 업로드를 기다리는 수동 배포가 실험 반복 속도를 잡아먹고 있었습니다. 배포를 GitHub Actions 파이프라인으로 자동화했고, React Native가 섞인 뒤 길어진 CI 클린 빌드는 RN 코어 사전 빌드와 ccache로 6분 5초 → 3분 58초로 줄였습니다. fastlane에 빌드와 서명까지 맡겨 봤다가 App Store Connect 인증만 남기고 셸 스크립트로 되돌렸는데, 그 이유를 설계 문서에 남겨 두었습니다
- •Xcode 프로젝트 파일은 손으로 관리하는 한 충돌과 실수를 계속 만들어냅니다. 두 단계에 걸쳐 이 관리 자체를 없앴는데, 먼저 Xcode 16의 파일시스템 동기화 폴더 전환으로 프로젝트 파일 5,187줄을 줄이고 CocoaPods를 걷어내 SPM으로 통일했으며, 이후 Tuist로 옮겨 pbxproj를 git 추적에서 제외했습니다
- •원격 SPM 패키지로 분리돼 있던 디자인 시스템은 수정할 때마다 별도 배포를 기다려야 해서 git subtree로 앱 저장소 안에 들여왔습니다. 전환은 스크립트로 자동화했고, 새 디자인 언어의 색과 타이포그래피 체계를 그 위에 구축했습니다
- •실험이 끝나면 코드도 끝나야 한다는 기준으로 종료 실험의 분기 코드 정리를 정례 작업으로 만들었습니다. 한 번에 실험 14건의 잔재를 걷어냈고, Periphery를 도입해 미사용 이벤트 리포터 24건과 죽은 코드를 함께 제거했습니다
- •실기기에서 통신 문제를 조사할 때마다 확인 수단이 마땅치 않아, 네트워크 요청을 앱 안에서 바로 확인하는 사내 디버깅 도구를 Swift Package로 만들고 macOS 뷰어 앱까지 붙였습니다. 처음에는 HTTP 로그만 지원했지만 운송 도메인의 실시간 기능을 다루게 되면서 WebSocket 로그와 원격 제어로 넓혔습니다
- •
Skill Keywords
UIKitSwiftUICombineSwift ConcurrencyReact NativeSPMTuistFastlaneGitHub ActionsWebKitFirebase CrashlyticsHackleMixpanel
2023.01 ~ 2023.05
카젠
5개월iOS 엔지니어 (학부 인턴)
- •
Skill Keywords
SwiftUITCACombine
교육
2019.03 ~ 2024.08
국민대학교
소프트웨어전공
- •로봇 동아리 영상 처리 파트와 일반대학원 비쥬얼 컴퓨팅 연구실에서 이미지 처리를 다뤘고, 이 경험이 카드 스캐너의 Vision 파이프라인 작업으로 이어졌습니다
기타
2023.12
K-PaaS 활용 디지털 사회 혁신 서비스 개발 공모전 은상
과학기술정보통신부
2022.06
정보처리기사
자격증
2022.04
SQL개발자 (SQLD)
자격증
2021.12
제19회 임베디드 소프트웨어 경진대회 지능형 휴머노이드 부문 최우수상
산업통상자원부