우당탕탕 beauty 풀한, 컬리 앱 서비스 런칭기

iOS 개발자 관점에서 뷰티 컬리를 어떻게 오픈했을까?

우당탕탕 일정

안녕하세요. 저는 미소가 아름다운 (그래서 조커리라 불렸던🤡)
​ 적극적인 오지라퍼 앱 개발자​ 이규현입니다. ​
​ ​
​ 일 년 동안 컬리를 다니면서 샛별 배송 확장, 연관 추천상품, 상품 개편, 뷰티 컬 리, 필터
​크고 작은 프로젝트를 진행하였는데요, 그중에 뷰티 컬리를 개발하면서 제가 어떻게 마켓 컬리에 뷰티를 채웠는지
​ 우당탕탕 뷰티 풀한, 컬리 앱 서비스 론칭기를 소개하려 합니다.

일정
© 2023. Kurly. All rights reserved.

22년 컬리에는 커다란 산이 두 개 있었습니다. 상품 개편과 뷰티컬리…​
8월이 오기 전에 배포가 되어야 한다!!! ​

이미 저는 상품 개편에서 장바구니 영역을 처리하고 있었고 개발은 완료되었지만,
QA 기간이 겹치는 부분이 있었습니다. ​ ​

상품 개편의 경우 코어시스템이 변경되면서 정책 미스나, 예상치 못한 사이드 이펙트가 발생할 수 있기 때문에​
두 가지를 안고 가져가야 하는 상황이었습니다.​

제니
© 2023. Kurly. All rights reserved.

일정이 촉박하지만​
회사 입장에서는 소량 취급하던 뷰티 제품을 본격적으로 판매하여 next generation을 준비하고 있었고, ​
사업전략, 마케팅 등 비즈니스 요구사항에 의해 배포 시점이 타켓팅 되어 있었습니다. ​
다음을 향한 시발점이기에 열정을 들이붓기로 하였습니다.

이를 위해서는 선택과 집중이 필요한 상황!!! ​
​ 그래서 저는 초기 일정에는 상품 개편 QA에 집중하고, ​
​ 뷰티 컬리에 대해서는 빠르게 개념과 정책을 이해하고, ​
​ 언제든지 개발에 착수할 수 있는 환경을 만들기로 했습니다​.

환경을 만들기 위해 다음과 같은 일련의 작업을 시작하였습니다.​

놓치지 않을 거예요 - 사이트, 그게 뭔가요?

gif
© 2023. Kurly. All rights reserved.

뷰티 컬리 개발하면서 site라는 개념이 생겼습니다. ​
특정한 상품, 사업에 집중하는 버티컬 서비스는 상품이 카테고리의 하위 개념인데. ​
컬리에서 말하는 site는 ​앱 상위의 개념으로 기존의 버티컬 서비스와 방향성이 다르다고 해석하였습니다. ​
그 이유는 ​
site가 변화하면 API path가 변경됩니다. 이에 따라 홈, 카테고리, 검색은 site에 종속되어 상품의 노출이 달라집니다!​

기존
변경
© 2023. Kurly. All rights reserved.

이를 반영하기 위해서는 레거시 코드의 이해가 필요했습니다. ​ ​
레거시 코드를 보면 하나의 클래스에서 앱 전체에 대한 의존성을 생성하고 주입하는 구조를 가지고 있었습니다. ​ ​
그래서 site가 변경되면 기존 의존성 주입을 유지하고 ​​
추가로 site를 주입하여 단방향으로 흐름이 생성되도록 수정하였습니다. ​​
​ 이를 통해 site에 대한 상태 불일치 현상을 방지하여​​
팀원들에게 데이터 및 뷰 흐름을 쉽게 파악하여 사이드이펙트 발생을 최소화하고 싶었습니다. ​​

타 플랫폼과의 협업은?

포스트맨
© 2023. Kurly. All rights reserved.

또한, 기존 API에서 site 구분을 위한 path가 추가되었기에​

이를 안드로이드 개발자와 중복되는 일, ​
그리고 응답 데이터 정합성을 위해 site path를 적용한 포스트맨을 구성하여 ​
공유하는 방법을 채택하였습니다. ​

Recycle, 재활용!

구좌
© 2023. Kurly. All rights reserved.

사이트 전환 시 구좌의 변화가 가장 컸습니다. ​​
구좌란 컬리 앱을 실행하게 되면, 홈 - 컬리 추천에서 상품정보를 볼 수 있습니다. ​​
​ 해당 화면의 요소들을 구좌라 하는데, ​​
구좌는 템플릿 화하여 백오피스를 통해 동적으로 받아 처리할 수 있는 구조를 가지고 있습니다. ​​
​ 짧은 개발 일정 속에 빠른 판단이 필요했습니다. ​​
레거시 코드를 분석해서 개선하면서 처리할지 아니면 새롭게 만들어서 교체할지! ​​

다행히도 마켓 또는 뷰티로 나뉘긴 했지만 노출하는 상품 내용이 다르지 않고 구좌 형태는 동일하였습니다. ​​
​마켓/뷰티 컬리 추천 페이지가 유사한 UI를 채택한 덕분에 공통된 성질 기준으로 ​​
모델링 하는 것만으로도 코드의 많은 부분을 재사용할 수 있게 되었습니다. ​​

완료
© 2023. Kurly. All rights reserved.

드디어!!!
7월 29일 새벽 3시 앱스토어에서 심사 승인가 완료되었고 오전 11시에 배포를 할 수 있었습니다. ​

​이는 서두에 말씀드린 대로 미리 개념과 방향성을 정하고 ​
상품 개편 QA에 집중 후 뷰티 컬리를 작업해서 할 수 있었던 부분도 있지만 ​
먼저 개발을 하고 있던 안드로이드 개발자가 선행하면서 이슈 등을 공유하고 가이드를 해주었고​
기획자의 MVP 조율 등을 통해 타 플랫폼 보다 늦게 개발이 들어가면서 ​
개인적으로 우당탕탕 걸렸지만, ​
뷰티 컬리 프로젝트 협업하는 동료분들이 미리 길을 닦아놔서 잘 따라가며 완료할 수 있는 프로젝트였습니다. ​

FIXME: 내(우리)가 고쳐야 해!

aka (구좌)로딩속도

문제점
© 2023. Kurly. All rights reserved.

서두에 말한 마켓/뷰티 site 전환 시 의존성 주입을 통해 서비스를 새로 만드는데 ​ ​
이는 곧 RootViewController를 새로 만드는 구조였습니다. ​ ​
​ ​
오픈 이후 위와 같은 형태에서 ​기본 앱 구성과 컬리 추천의 구좌를 불러오는 API 호출의 낭비 ​
​ 그리고 API 응답이 늦는 경우, 화면 로딩 속도가 느리다는 내부적인 피드백을 받았습니다. ​ ​
이를 개선하기 위하여 site 주입의 구조가 변경되는 조금 크리티컬 한 구조적인 이슈가 발생하였습니다……. ​

구조
© 2023. Kurly. All rights reserved.

기존에는 하위 계층으로 site 프로퍼티를 계속 주입하고 있었지만, ​ ​
site 프로퍼티 대신 site 서비스 클래스를 주입하고 ​ ​
내부에서 site 프로퍼티를 관리함으로써 항상 같은 값을 갖도록 유지하였으며 ​ ​
필요한 부분에서만 subscribe를 하여 사용하는 방식으로 채택하였습니다. ​ ​

이를 통해 사이트 전환 시 매번 새로 생성하지 않고 서비스 레이어에서​ ​
이벤트 처리 방식으로 처리하여 루트 뷰 컨트롤러를 생성하기 위한 API 호출을 줄여, ​ ​
로딩되는 시간을 줄일 수 있었습니다. ​ ​

해당 작업은 다른 팀원이 작업을 하게 되었는데요. ​
제가 어떤 콘셉트를 가지고 이를 개발하였는지 다른 팀원에게 설명을 해주고 ​
이를 다른 팀원이 효율적인 방안을 제안하고 ​
같이 코드 리뷰하면서 최대한 사이드 이펙트를 줄일 수 있도록 진행되었습니다. ​

이처럼, 제가 개발한 작업이라도 같은 플랫폼의 다른 팀원들을 통해 ​
고도화, 의견 교류, 간접적인 페어 프로그래밍 등을 통해 기술적 업그레이드를 경험할 수 있었습니다. ​

개인적인 회고를 해보자면 뷰티 컬리를 오픈하고 전환 속도에 대해서는 개인적으로는 불편함을 느끼지 못하였지만 ​​
​ 다양한 사용자의 시각, UX 개념이 다르기에 주관적인 느낌보다는 ​​
데이터 기준 또는 협업하는 다양한 직군들의 시각을 참고하며 개발을 임해야겠다는 점을 배웠습니다. ​​

둥둥이는 귀여워

둥둥
© 2023. Kurly. All rights reserved.

뷰티 컬리 오픈 이후 예측보다 상단 스위칭 버튼의 전환율이 낮아, ​
이를 개선하고자 뷰티 컬리 유입을 위한 플로팅 버튼 개발 프로젝트에 참여하게 되었습니다. ​
처음 노출되는 컬리 추천 탭에 플로팅 버튼을 노출시키고, ​
이를 클릭을 유도하는 UI을 통해 뷰티 컬리의 전환율 높이자! ​
가칭 둥둥이는 시선 강탈자..라는 콘셉트를 가지게 되었습니다. ​

둥둥규칙
© 2023. Kurly. All rights reserved.

심플하기에! 실험적인 프로젝트이기에! ​
디자인과 개발이 병행되어야 했습니다. ​
먼저 UI가 나오기 전에 목업 기준으로 정책을 코드에 녹여놨습니다. ​
그리고 기획/디자이너와 상호 피드백을 통해 인터렉션을 확인하고 애니메이션을 추가하는 등​
면밀한 소통을 통해 만족하는 결과물이 나올 수 있었습니다. ​

​​둥둥검증
© 2023. Kurly. All rights reserved.

심플하고 명확한 목표인 “뷰티 컬 리 유입을 늘리자”라는 공통된 목표가 있었기에 ​
출시 이후 데이터 기반으로 검증하는 시간을 가졌습니다. ​
정확히는 데이터 분석 결과물을 공유 받았고, 내가 개발한 프로젝트가 유의미한 수치를 발생하고 있다는 걸 인지함으로써 ​
소소하지만 나의 가치를 확인할 수 있는 프로젝트였습니다. ​

​이것으로 저의 뷰티 컬 리 론칭기를 마치겠습니다.