“문제가 발생했을 때, 같은 문제를 반복하지 않기 위한 시스템과 프로세스가 점점 더 단단해져 가는 것 같아요.”
안녕하세요. KREAM iOS 팀 Wanya라고 합니다. KREAM엔 22년에 입사했고, 이전엔 OTT서비스 회사에서 근무했어요.
전반적인 KREAM iOS 개발 업무를 담당하고 있어요. 주로 상품 상세페이지, 결제 프로세스, 결제 내역의 기능 개발, 개선 작업 및 버그 수정을 하고 있어요. 현재는 상품 상세 페이지 개선 작업에 특히 집중하고 있고, 사용자 경험을 향상시키는 데 주력하고 있습니다.
KREAM에 대해 처음 알게 된 것은 앱이 출시되고 얼마되지 않은 시기였어요. 당시 학생이었고, 옷과 신발에 큰 관심이 있었기에, 리셀 플랫폼 중 KREAM이 가장 좋다는 친한 형의 추천으로 사용하기 시작했습니다. (실제로 제 첫 거래는 20년 5월이네요.) 자주 사용하던 앱이었기에 친숙함을 느꼈고, 이직을 고려하고 있던 시점에 지원하였고 좋은 결과를 받아 입사하게 되었습니다.
저는 좀 즉흥적인 성향이 있는데요. 대학교 4학년 때, 안드로이드 개발을 해야 겠다고 마음을 먹었는데, 어느 날 취업한 선배의 맥북 상단에 있는 터치바를 보고 마음이 한 순간에 돌아섰어요. 마침 친한 형이 같이 iOS 개발을 시작해 보자고 제안을 하였고, 빠르게 맥북을 구입하여 iOS 개발을 시작했습니다. 즉흥적인 결정이었지만, 잘한 결정으로 만들기 위해서 열심히 노력했어요. 취업 막바지에 다 같이 영등포에 정말 추운 작업실을 얻어서 사이드 프로젝트를 마무리했던 추억도 있네요. 돌이켜 봐도 잘한 선택이었고 iOS 개발을 하자고 제안해 준 형에게 지금까지 고마움을 느낍니다. 결과적으로 1년 정도 지난 2021년 5월 말에 처음 iOS 개발자로 전 회사에 입사하여 지금은 KREAM에서 커리어를 이어가고 있어요.
KREAM 앱은 현재(23년 11월 기준) 최소 iOS 15를 지원하고 있고, 최신 iOS의 두 가지 버전을 지원하는 것을 원칙으로 하고 있어요.
이에 따라 곧 iOS 16, 17만을 지원할 예정이에요. 이 원칙은 기술적으로 최신 트렌드를 따를 수 있게 해줍니다.
UI 구성으로 CompositionalLayout과 UICollectionViewDiffableDatasource를 주로 사용하고 있고, 최소 지원 버전을 iOS 16으로 올리는 것과 동시에 SwiftUI를 적극적으로 도입할 예정입니다.
아키텍처 측면에서는 상태 관리를 위해 Swift로 구현된 Redux인 ReSwift를 사용하고 있습니다.
KREAMNetwork, 자주 사용하는 Utility 성격의 것들은 KREAMUtility 모듈로 따로 관리를 하고 있고요.
그 외 Fastlane과 GitHub Actions를 통해 배포과정을 자동화하고, SPM을 이용하여 의존성을 관리하고 있어요.
4가지 키워드로 설명드릴 수 있을 것 같은데요.
① 테크 스펙
기본적으로 새로운 기능들은 모두 테크 스펙을 작성해요.
어느 시점에 포함될 기능인지부터 시작해서 기능 요약, 요구사항, 실제 코드에 준하는 수준의 자세한 설계, 테스트 고려 사항, 예상 일정 등 작성하여 팀원들에게 공유해요.
테크 스펙을 리뷰하는 동안 고민이 되는 구조나 변수명에 대해 서로 이야기하기도 하는데요.
이런 과정이 서로의 작업에 대한 이해도를 높이고, 의견이 다를 경우에는 자연스럽게 개발 규칙이나 컨벤션을 정립해 나가며 전반적으로 발전적인 방향으로 나아가게 합니다.
② 파트너 제도
각 기능 별 메인 개발자 외 파트너 개발자 역할을 지정합니다. 파트너 개발자는 함께 개발해야 할 기능 관련 회의에 함께 참여해요.
메인 개발자가 간과할 수 있는 부분들을 파트너 개발자가 함께 챙기기도 하면서요.
파트너 개발자는 해당 기능에 대한 이해도가 높아져 있기 때문에, 메인 개발자가 휴가 등 부재중 일 때 대신 쉽게 업무를 처리하고 있습니다.
③ Pull Request
작성된 코드들은 Pull Request(PR)을 통해 리뷰 과정을 거치게 되는데요.
앞선 테크 스펙, 파트너 제도 등을 통해 이해도가 높아진 상태이기에 리뷰다운 리뷰가 가능해요.
④ iOS 개발자 테스트
QA 프로세스를 진행하기 전에, iOS 팀원들끼리 모여 기능들을 같이 테스트하는 과정을 거칩니다.
아무래도 메인 개발자는 코드도 알고 있고 익숙한 시나리오에 국한되어 테스트하게 되다 보니, iOS 개발자 테스트에서 다른 개발자들에 의해 버그들이 많이 나오게 돼요.
또 버그뿐만 아니라 UI/UX 관점에서 아쉬운 점들을 찾아 더 좋은 프로덕트가 나올 수 있도록 지속적으로 노력하고 있어요.
그리고 매주 월요일마다 진행하는 iOS Weekly를 통해 Crashlytics를 보며 앱의 안정성 추세를 파악해요.
프로젝트 진행 상황에 대해 서로 싱크를 맞추고 개선 사항이나 공유할 내용, 그리고 새로운 제안들에 대해 팀원 모두가 함께 논의하고 의견을 교환하고 있어요.
이러한 과정을 통해 전체 팀의 목표와 방향성을 설정합니다.
개인적으로 협업 능력이 가장 중요하다고 생각하는데요. 제가 말씀 드리는 협업 역량이란 좀 넓은 범위인 것 같아요. 스펙 관련 의미 있는 의견도 내고, HIG와 앱 내 UI/UX 통일성을 함께 고려하여 디자인 리뷰를 하고, 팀원이 납득할 수 있는 코드를 작성하며 알게 된 것들이나 문제점들을 문서화하여 공유하는 것 등 개발자로서 필요한 많은 역량들이 결국 협업 역량 이라는 범위 안에 포함된다고 생각해요.
경험이 많은 동료들로부터 배울 수 있는 점이 많다는 것이 KREAM의 개발자로서 느끼는 가장 큰 매력 중 하나인데요. 어떤 팀원에게는 고민이 되는 부분 혹은 비효율을 반복하는 포인트들에 대해서 다른 팀원이 효과적인 방법을 제안을 하며 서로 배워갈 때가 많습니다. 그리고 문제가 발생했을 때, 같은 문제를 반복하지 않기 위한 시스템과 프로세스가 점점 더 단단해져 가는 것 같아요. 이런 경험들이 자연스럽게 쌓이며, 서로의 실력이 향상되는 과정을 느끼고 있고 KREAM에서의 시간은 굉장히 밀도 높은 시간이라고 생각해요. 더불어, iOS 개발자로서 KREAM은 iOS 사용자의 비율이 높기 때문에, 더더욱 앱의 안정성을 고려해 신중에 신중을 기한 코드를 작성해야만 하는데요. 이런 과정에서 얻는 경험들이 저를 더 좋은 개발자로 성장시킨다고 생각합니다.
KREAM에서 게시글을 올리는 플로우 중에 사진을 선택하는 페이지가 있어요. 해당 페이지를 스크롤하며 선택할 사진을 고르는 뷰가 너무 좁게 느껴져, 비슷한 플로우를 가진 타사 앱을 살펴봤었는데요. 유저 동작에 알맞게 화면이 접혔다 펼쳤다 하며 편한 UX를 제공하고 있었고, 저희도 이 부분이 개선되면 좋을 것 같아 건의를 했고 정말 바로 작업을 시작해 빠르게 기능으로 포함시켰어요. 기술적으로 난이도가 높은 작업이어서 기억에 남는다기보다 자유롭게 의견을 내고 받아들여지는 과정을 몸으로 체감했던 순간이라 재미있었습니다.
저는 각자의 일에 책임감을 가진 동료와 일할 때 큰 시너지를 낼 수 있을 것 같아요. 좋은 아이디어와 좋은 코드 모두 책임감을 가지면 나오는 자연스러운 결과물이라고 생각하기 때문인데요. 그런 동료와 함께하면 KREAM의 iOS 개발을 더 발전시킬 수 있을 거라고 생각해요. 물론 저도 더 열심히 해야 하고요!
KREAM 서비스의 안정성과 편안함을 지속적으로 유지하고 향상시키는 것과 사용자 경험에 직접적으로 영향을 미치는 부분에 기여하고 싶습니다. 더 나아가서는 서비스가 사용자들의 삶에 자연스럽게 녹아들 수 있도록 해보고 싶어요. 개인적으로는, 나중의 일이겠지만 팀을 이끄는 리더로서의 역량을 발휘해 보고 싶어요!