미리보기


맡은 일
키보드 익스텐션과 iOS 앱의 기능 개발, 성능 개선, 배포를 담당했습니다.
- 웹 입력 중 화면이 깜빡이는 문제를 분석하고 완화 기능을 배포했습니다.
- 이미지와 GIF의 메모리 사용을 줄이고 사진으로 만드는 커스텀 테마를 2주 안에 출시했습니다.
- Combine, Swift Concurrency, OneWay, Pure DI를 도입하고 배포 파이프라인을 정비했습니다.
자세한 개발 기록
기간
2022.01.03 - 2022.07.15
2023.07.03 - 2023.10.03
2023.12.27 - 2024.09.30
담당한 일
2023.12 - 2024.09
- iOS 앱테크 출시
- 키보드로 타자를 치면 포인트가 적립되는 앱테크를 출시했습니다.
- 앱테크로 전환하며 여러 기능을 담는 슈퍼앱을 준비했습니다. 이 과정에서 PureDI, Combine, OneWay 도입을 주도했습니다.
- 웹 입력 깜빡임 완화
- iOS 키보드 익스텐션에서 공통으로 발생하던 웹 입력 깜빡임 문제를 분석하고 완화 기능을 적용·배포했습니다. (전 세계 최초)
개선 전(왼쪽)과 후(오른쪽)
- Combine 도입
- 레거시 코드를 제거하고 뷰를 반응형으로 바꿨습니다. 이후 SwiftUI로 옮기기 쉽도록 코드를 작성했습니다.
- Keyboard Extension에 Pin&Flex Layout 도입
- Keyboard Extension에 Pin&Flex Layout을 도입해 성능을 개선하고 안정성을 60% 초반에서 98~99%로 높였습니다.
- 이 과정에서 FlexLayout 오픈소스에도 기여했습니다.
- 미디움 링크
미리보기

- Multi Thread 활용
- 자원이 제한된 iOS 키보드 Extension에서 Modern Concurrency와 GCD로 Thread를 운용했습니다. 성능을 개선하면서 Thread Safe하게 코드를 작성했습니다.
- Swift Concurrency & OneWay 도입
- Swift Concurrency와 Alamofire를 함께 도입하면서 네트워킹을 추상화해 두 기술을 쓰기 쉽게 했습니다.
- Concurrency 코드를 정리하려고 MVI 아키텍처인 OneWay로 View와 ViewModel의 역할을 나눴습니다. PureDI도 도입해 테스트할 수 있게 했습니다.
- PureDI 도입 & Storyboard 코드 제거
- TDD를 적용하기 쉽도록 protocol 기반 PureDI 서비스 컨테이너를 설계했습니다. 도입 과정에서 Storyboard 코드를 제거했습니다.
- 키보드 자동완성 기능
- UITextChecker로 키보드 자동완성 기능을 만들고 배포하는 데 기여했습니다.
- BaseViewController 도입
- BaseViewController를 도입해 뷰의 클래스 구조를 통일하고 코드 스타일을 점검했습니다.
- AirBridge 도입 & 딥링크 로직 정리
- 문제가 많던 Firebase dynamic link를 Airbridge로 대체했습니다. 링크 스키마를 사용한 딥링크와 디퍼드 딥링크 로직도 정리했습니다.
- 키보드 아스키아트 기능
- 키보드에서 아스키아트를 보내는 기능을 만들고 배포하는 데 기여했습니다.
- CI/CD 파이프라인 유지보수
- 기존 CI/CD 파이프라인을 유지보수하면서 환경을 최신화하고 최적화했습니다.
- 빌드 캐싱을 적용해 빌드 속도를 20% 개선했습니다.
- Realm 의존성 제거
- 키보드에서 쓰기 무거운 Realm 의존성을 제거해 앱 용량을 줄이고 성능을 개선했습니다.
- 라이브러리를 SPM으로 이관
- 이후 Tuist를 도입하려고 라이브러리를 SPM으로 옮겼습니다.
- 그 외 버그 수정 및 유지보수
2023.07 - 2023.10
- 나만의 테마 기능 출시
- 나만의 테마 기능을 2주 안에 개발·출시했습니다. 사진을 넣어 커스텀 키보드를 만들 수 있는 기능입니다.
- 키보드의 50MB 메모리 제한을 지키려고 이미지를 다운스케일링했습니다.
- 이미지를 합성해 썸네일을 만들었습니다.
- Gif 최적화 기술을 공부하고 적용했습니다.
- 터치 영역 보정
- hitArea를 시각화해 잘못된 터치 영역을 확인했습니다. 의도한 대로 동작하도록 뷰 사이 간격을 다시 맞췄습니다.
- CI/CD 파이프라인 구축
- 오류로 멈춘 Fastlane과 Circle CI 배포 파이프라인을 고쳐 자동 배포를 복구했습니다.
- RxSwift 코드 제거 및 Combine으로 이전
- 일부 RxSwift 코드를 Swift Concurrency와 Combine으로 옮겼습니다.
2022.01 - 2022.07
- Firebase로 iOS 앱 관리
- Firebase Crashlytics에서 충전소 화면에 진입할 때 발생하는 충돌을 확인했습니다. 같은 문제를 겪는 사용자 규모를 파악한 뒤 우선순위를 높여 수정했습니다.
- layoutSubviews()에서 하던 API 호출을 적절한 라이프 사이클로 옮겨 해결했습니다.
- Firebase로 유저 event를 수집해 추가한 기능을 검증하는 데 썼습니다.
- Remote Config로 앱 심사 없이 설문 폼 링크를 바꾸고 버전에 따라 강제 업데이트를 안내하도록 했습니다.
- 선물하기 / 조르기 기능 추가
- 키보드 상품 구매 전환율을 높이려고 디자인 가이드라인에 맞춰 신규 기능을 개발했습니다.
- 출시 후 2주 동안 판매건의 34%가 선물하기/조르기에서 나왔습니다.
- Firebase의 Dynamic Links로 구현했습니다.
- RxSwift 이관 작업
- 레거시 코드 일부에 Rx를 적용해 리액티브 프로그래밍으로 옮겼습니다.
- 한 페이지에서 많은 비동기 이벤트를 동시에 관리하고 있었습니다. RxSwift로 처리 방식을 정리했습니다.
- 키보드 최적화
- 배열로 검색하던 라이브 테마 키워드를 해쉬로 인덱싱해 검색과 반응 속도를 높였습니다.
- UI 일부를 AutoLayout에서 PinLayout & FlexLayout으로 옮겼습니다. 메인 스레드에서만 하던 로딩 작업에 멀티 스레드도 활용해 키보드 로딩 속도를 높였습니다.
- 테마 무료사용 기능 추가
- 인기 테마는 구매해야만 쓸 수 있었습니다. 결제 부담이 활성화 유저 수를 줄인다고 보고 구글 Admob 광고를 보면 테마를 무료로 체험하는 기능을 추가했습니다.
- 랭킹 시스템 추가
- 무료사용과 구매 전환율을 높이려고 랭킹 시스템을 추가했습니다.
- 랭킹 페이지에 접속한 유저는 접속하지 않은 유저보다 무료사용이 약 5.5배, 구매가 약 2배 높았습니다.
- NUX 개선 업데이트
- 사용자 이탈을 줄이려고 기존 NUX 플로우를 개선했습니다.
- 전체 이탈률은 낮추지 못했지만 테마 구매 전환율을 3%에서 10~15%로 높였습니다. 키보드 활성화 후 메인화면에 도달하는 전환율도 약 8% 높였습니다.
- 컨플릭트를 줄이려고 스토리보드로 만든 레거시 코드 일부를 코드 기반 UI로 옮겼습니다.
- 키보드 이모티콘 기능 추가
- 키워드에 반응하는 라이브 테마의 가치를 높이려고 다운로드한 테마의 이모티콘을 쓰는 기능을 추가했습니다.
- 이전에는 해당 라이브테마를 적용해야 이모티콘을 쓸 수 있었습니다. 다른 테마를 쓰는 중에도 보유한 테마의 모든 스티커를 고를 수 있게 바꿨습니다.
- 모든 스티커(사진)를 그대로 표시하면 iOS 키보드의 30MB 메모리 제한을 넘어 키보드가 종료됐습니다.
- 콜렉션 뷰를 스크롤할 때마다 메모리가 크게 늘어 이 기능은 구현하기 어렵다고 봤습니다. 이미지 다운프로세싱과 gif 프레임 로딩 관리로 메모리 부족을 해결하고 스티커 기능을 추가했습니다.
- iOS 앱 전체 유지보수
- 인수인계로 기존 프로젝트 구조를 익히고 기능 개발과 유지보수를 맡았습니다.
- 내부테스트로 QA를 진행하고 배포까지 맡았습니다.