● 신규 앱 개발 및 운영
초기 멤버로 팀에 참가하여 키덜트 상품을 사용자들에게 제공하는 B2C 플랫폼의 개발 및 운영에 적극적으로 참여 2인 개발하였습니다.
기술 스택
React Native, Typescript
주요 작업
- 결제 시스템 연동(tosspayments)
- 각종 로그 연동(Google Analytics, Google Crashlytics, AirBridge, Facebook, 내부 로깅)
- 코드 푸시 연동
- 개발 환경 분리(local, Dev, Staging, Production)
- 배포 파이프라인 구성 (Firebase Distribution, Google Play Store, App Store)
● PushNotification과 CodePush의 우선 순위 조절을 이용한 이벤트 이탈률 감소
CodePush가 적용된 상태에서 PushNotification으로 앱 실행 시 강제 종료 및 재 실행으로 인한 이탈이 생겼고, 아래 작업을 통해 해결하였습니다.
문제점 파악
PushNotification을 통한 앱 실행 시 CodePush의 업데이트 시점을 조절해야 할 필요를 느끼게 되었습니다.
업데이트 팝업 추가
선택적 업데이트의 경우 앱 실행 시 사용자가 업데이트를 진행할 것인지 말 것 인지에 대한 팝업이 필요하다고 판단하였고, UpdateDialog를 추가하여 사용자가 업데이트 여부를 선택할 수 있게 개선하였습니다.
코드 푸시 업데이트 시점 변경
checkFrequency 옵션을 ON_APP_START에서 MANUAL로 변경, 초기 앱 실행 시, PushNotification을 통한 접근 인지에 대한 여부를 확인 후 CodePush 팝업 노출 여부를 제어하는 방향으로 업데이트 시점을 변경하였습니다
- PushNotification을 통한 앱 실행 인지에 대한 체크
- CodePush의 installMode값 IMMEDIATE -> MANUAL 변경
- Event 참여율 기존 300대 -> 500대로 상승
● 이벤트 페이지 개선 작업
이벤트 페이지를 작업을 하면서 안드로이드에서 긴 이미지에 대해 품질 저하가 발생하였고, 아래 작업을 통해 해결하였습니다.
문제점 파악
AOS의 Fresco Downsampling으로 인해 해당 문제가 발생한다는 것을 파악하였습니다. 먼저 원본 이미지의 길이 자체를 줄이는 것에 대해 논의하였고 이미지를 1000px씩 잘라서 사용하는 방법을 채택했습니다.
이미지 렌더링 최적화
렌더링 시 성능이 떨어지는 Image 태그 대신 FastImage로 사용하였습니다.
FastIamge의 캐싱 기능 사용과 resize 옵션을 이용해서 이미지 렌더링을 최적화 하였습니다.
FlatList 최적화 작업
이미지를 잘라서 사용하면서 너무 많은 이미지가 렌더링 되었고, 이로 인해 프레임 저하가 발생하였습니다.
Perf Monitor를 사용하여 20FPS까지 떨어지는 걸 확인했습니다.
initialNumToRender를 조절하여 초기 렌더링 개수를 수정, WindowSize를 조절하여 동시 렌더링 개수를 변경, getItemLayout을 사용하여 아이템의 크기를 미리 정해주었으며, keyExtractor를 설정하여 각 아이템의 고유한 키 값을 설정함으로써 중간에 아이템이 변경되더라도 불필요한 리렌더링이 일어나지 않도록 수정하였습니다.
- 페이지 로딩 속도 8초 -> 3초로 개선
- 프로모션 페이지 프레임 20FPS -> 60FPS 개선
● 배포 파이프라인 구성
업무 효율성 증대 및 QA 테스트 등을 위해 빌드 환경을 분리하였습니다.
문제점 파악
테스트 진행 시 env의 값을 변경하는 일이 반복되어, 업무 효율성이 떨어진다고 판단했고, 개발 환경 분리 작업을 주도적으로 맡아 진행하였습니다.
빌드 환경 분리 작업
android는 flavor 셋팅, ios는 스키마 생성 및 각 스키마의 pre-action에 빌드 환경에 맞게 env를 가져오는 스크립트를 작성하여 구현하였습니다.
- 빌드 환경 분리로 QA기간 2주 -> 1주 감소
- 기존 배포 주기 3주 -> 2주 변경
더보기