The RED_슈퍼앱 운영을 위한 확장성 높은 앱 아키텍처 구축 by 노수진
![모바일 A/B테스트](https://storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202111/124659-472/section-1.jpg)
모바일 개발자의 Scalability와 앱 아키텍처
회사나 서비스가 망하지 않는 이상 앱은 계속해서 커지고 복잡해질 거예요.
8개국 1억 8천만 사용자를 보유한
동남아 최대 슈퍼앱 Grab은 어떻게
100명이 넘는 iOS 개발자가 병목 현상 없이
한 달에 수십 개의 새 기능을 매주 배포할 수 있을까?
.
.
.
그 답은,
바로 확장 가능한 아키텍처 덕분입니다.
![](https://storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202109/154859-472/red-s-4-web.png)
![](https://storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202109/165135-472/sc-3-1.png)
프레임워크나 언어의 종류와 상관없이
아키텍처에 확장성을 갖추기 위한
개념을 학습합니다.
![](https://storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202109/165143-472/sc-3-2.png)
비즈니스 로직 구현부터,
리팩토링을 통해 앱의 확장성을
높일 수 있는 방법을 실습해봅니다.
![](https://storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202109/165149-472/sc-3-3.png)
테스트 종류와 특징, 그리고
테스트를 전략적으로
활용하는 방법을 배웁니다.
라인, 네이버웹툰을 거쳐 글로벌 슈퍼앱 Grab에서 iOS 프로젝트를 리드한
노수진이 생각하는 모바일 아키텍처에서의 확장성(Scalability)이란?
![](https://storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202109/165532-472/frame-1325.png)
모바일 팀과 앱의 규모가 계속 커져도 사용자 경험과,
개발자 경험 모두를 안정적으로 유지하는 것이라고 생각합니다.
개발자의 기술력은 개발 과정에서 발생하는 병목 현상을 얼마나 잘 처리하는지에서 보여지죠.
서버의 경우에는 많은 사용자가 서버에 몰릴 때 병목 현상이 발생하지만, 모바일의 경우에는 오히려 하나의 프로그램에 다수의 개발자들의 코드가 몰릴 때 병목현상 발생한다고 볼 수 있습니다.
Grab 모바일 개발 팀은 확장 가능한 아키텍처 덕분에 100명 이상의 iOS 개발자가 모빌리티, 푸드, 페이먼트, CX 등 10개 미만의 큰 Tech Family로 나뉘어져 있지만, 각 팀은 다른 팀이 만드는 기능을 활용하면서도 소비자에게 안정적인 서비스를 제공하면서, 개발자의 생산성도 높일 수 있었습니다.
![](https://storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202109/090049-472/group-1881.png)
![](https://storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202109/090055-472/group-1880.png)
Overview
확장성이 높은 아키텍처를 만들기 위해서는 무엇이 필요할까요?
3가지 필수 개념 & 함께 시너지 효과를 낼 수 있는 인프라까지 알려드립니다!
-
1부. 코드 레벨 아키텍처
▪객체를 조립해서 사용하는 방식
▪언어, 프레임워크 종류를 초월하여 아키텍처를 잘 설계하는 법 -
2부. 모듈 레벨 아키텍처
▪앱 아키텍처의 확장성을 위해 필수적인 작업
▪개발 속도 증가, 유지 보수 및 테스트가 쉬워짐
▪느슨한 결합을 위한 의존성 주입의 개념과 패턴 -
3부. 자동화 테스팅
▪버그를 줄여 개발자 경험을 높이는 법
▪테스트의 종류와 전략적 활용법 -
4부. 확장성 있는 인프라
▪피처플래그
▪품질 모니터링
▪좋은 개발 문화 사례
Project | 미니 슈퍼앱 만들기
확장성이 높은 아키텍처를 만들기 위해 Composition, 모듈화, 테스트를
실제 슈퍼앱 축소판 프로젝트를 만들어보며 단계별로 실습해봅니다!
![](https://storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202109/170305-472/group-1883.png)
▪Swift 기반 iOS 앱으로, 앱 내 각종 서비스들(택시, 마트 등)이 있고, 자체 결제 플랫폼(페이)이 있습니다.
▪각 서비스는 모듈로 분리되어 각 파트 개발자들이 서로에게 영향을 주지 않고, 소스코드 의존성이 없기 때문에 병렬로 개발할 수 있습니다.
▪결제나 유저 프로필처럼 다른 모듈에서도 사용해야하는 공통 기능은 인터페이스를 통해 다른 모듈에 제공되기 때문에 아무리 기능이 커지고 복잡해져도 다른 모듈과 개발자에 영향을 주지 않습니다.
STEP 1    복잡한 뷰와 플로우 만들기
▪인터랙션이 복잡한 뷰를 composition 아키텍처로 작게 분해한 뒤 조립해봅니다.
▪비즈니스 로직이 앱을 주도할 수 있다는 RIBs 아키텍처의 장점을 활용하여 복잡한 플로우도 재사용 가능하게 개발해봅니다.
![](https://storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202109/175447-472/group-1884.png)
STEP 2    리팩토링 & 잘못 설계된 모듈 고치기
▪1부에서 작성한 코드는 객체끼리 강하게 결합 되어 있습니다.
▪확장성을 높이기 위해 새로운 코드를 추가해서 모듈로 분리시키고, 조립하는 리팩토링을 진행합니다.
▪모듈을 제공할 때 고려해야할 사항을 알아보고, 잘못 설계된 모듈을 수정하며 코드의 사용성과 OCP(열림-닫힘 원칙)을 다뤄봅니다.
![](https://storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202109/104338-472/group-1885.png)
STEP 3    4가지 방법으로 테스트 하기
▪2부에서 모듈화한 코드에 Unit Test, Snapshot Test, UI Test, Integration Test 4가지 테스트를 적용해봅니다.
▪각 테스트의 특징과 어떤 상황에서 어떤 테스트를 적용하면 좋은지 비교해봅니다.
![](https://storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202109/175855-472/group-1886.png)
⚠ 잠깐 ⚠
혹시 당신의 팀에서 하나라도 고민하고 있는 문제가 있나요?
![](https://storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202109/204722-472/section-5-3.png)
앱 또는 팀의 규모가 커져서 늘어난 빌드 시간이나 잦은 코드 충돌 때문에 생산성이 떨어진다.
![](https://storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202109/204722-472/section-5-3.png)
버그 발생 빈도가 늘어나고, 디버깅에 소요되는 시간이 증가되었다.
![](https://storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202109/204722-472/section-5-3.png)
자동화 테스트(유닛 테스트, UI 테스트)를 도입하고 싶지만 어떻게 시작해야할지 모르겠다.
![](https://storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202109/204722-472/section-5-3.png)
사용자가 앱을 최초 실행할 때 걸리는 시간이 증가하고, 앱의 안전성이 떨어진다.
확장 가능한 아키텍처 도입이 당장 필요한 시점입니다!
네이버웹툰, Grab, Amazon 개발자들이 인정한
iOS 앱 개발자 노수진에게 배우는 모바일 아키텍처는 다릅니다!
Top of Top
네이버웹툰·Grab을 거치며
슈퍼앱 개발에 참여하고 아키텍처를 개선했던 iOS 개발자, 노수진
![](https://storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202008/110232-11/artboard-1.png)
1인 앱 개발부터 iOS 앱 개발자만 100명이 넘는 슈퍼앱 개발까지 경험한 iOS 앱 개발자
앱 개발을 시작할 때 개인 프로젝트로 보안카드 위젯 앱을 개발했고, 앱스토어에서 금융 1위/전체 2위를 하며 2015-2017년 올해를 빛낸 앱으로 선정되었습니다. 그 뒤로 라인, 네이버웹툰을 거치면서 국내에서 규모가 있는 앱 서비스 개발에 참여했는데요, 서비스 규모가 커져가면서 발생하는 문제를 해외의 더 복잡하고 규모가 있는 앱 서비스는 어떻게 해결하는지 궁금한 마음을 안고 Grab에 합류했습니다. 소규모부터 대규모의 팀에서 개발을 하다보니 팀과 서비스가 커지면 앱의 아키텍처부터 달라야 한다는 걸 느꼈죠.
![](https://storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202008/110232-11/artboard-1.png)
동남아 슈퍼앱 Grab에서 Flutter를 팀에서 최초로 도입하여 미스터리 경품타기 신규 기능 개발 리딩
동남아시아의 우버인 Grab에서 iOS 개발을 하며 여러 프로젝트를 리딩했습니다. 그 중 Flutter를 팀에서 최초로 도입해서 미스터리 경품타기 기능 개발 프로젝트를 리딩할 때 아키텍처의 가장 기본이 되는 Composition에 대해 깊게 이해하고 있었기 때문에 새로운 언어와 아키텍처를 빠르게 이해하고, 프로젝트에 적용할 수 있었습니다.
![](https://storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202008/110232-11/artboard-1.png)
GrabPay Wallet 충전 프레임워크 2.0 개발 프로젝트 iOS 파트 리딩
유저들이 더 쉽고 빠르게 지갑을 충전할 수 있게 UI/UX를 전면 재개편하고 동남아 여러 국가/은행/충전방식을 확장성있게 지원하기 위한 프레임워크 개발 프로젝트에서 iOS 파트를 리딩했습니다. 사업적으로 중요도가 높고, 기술적으로 난이도가 높았고, 프로젝트 중간에 투입이 되어 시간마저 촉박했죠.
이 때 팀원들과 개발하는 방식을 통일하기 위해 아키텍처 설계부터 다시했고, 결과적으로 개발 속도를 높여 기한 내 개발을 완료했고, 배포 후 유저들의 평균 충전 금액이 높아졌고 conversion rate 또한 기록적으로 높아져서(95% 이상) 회사의 수수료 비용 절감하는 성과를 만들었습니다.
![이승민](https://storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202206/063606-472/group-1895.png)
Momenti / Senior iOS Engineer
- 인터랙티브 멀티미디어 플랫폼 개발
• 2020 ~ 2021
Grab / Senior iOS Engineer, Engineering Owner
- GrabPay Wallet 충전 프레임워크 2.0 개발 프로젝트에서 iOS 파트 리딩
- 미스터리 경품타기 기능 개발 프로젝트에서 최초로 Flutter 도입하여 프로젝트 리딩
- P2P 송금 기능 모듈화
• 2018 ~ 2020
네이버웹툰 / iOS Developer
- 새 컨텐츠 유료 모델(너만무료) 개발 리딩, 신규 유저를 위한 작품 추천 기능,유니버셜 앱 전환, 배너 광고 통합 및 개선
네이버랩스 / iOS Developer
- AWAY 차량용 인포테인먼트 앱, AKI 보호자용 앱 개발
• 2015
라인 / Android Developer
- 라인 Lite 안드로이드 앱 개발
• 2020 ~ 현재
DevChat.tv iPhreaks / Panelist
• 2019
SwiftFest Boston / Speaker
• 2019
try! Swift NYC / Speaker
• 2019
NAVER Tech Concert: Mobile / Speaker
• 2019
Notable Me 앱/ 개인 프로젝트
• 2015
보안카드 위젯 앱 / 개인 프로젝트
- 2015-2017 App Store 올해를 빛낸 인기 앱 선정
iOS Developer 노수진의 아키텍처 설계 방법
지금 최저가로 만나보세요!
![](https://storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202009/185526-11/sc4-copy.png)
Intro.
1부. 코드 레벨 아키텍처 : 재사용 가능한 코드를 만드는 스킬
2부. 모듈 레벨 아키텍처 : 유지 보수와 개발 속도를 고려하는 모듈화
3부. 자동화 테스팅
4부. 확장성 있는 인프라 : 코드만으로 해결할 수 없는 문제들
FAQ
사전지식이 있나요?
▫️[권장] 하나 이상의 iOS 아키텍처(MVC, MVVM, ReSwift, VIPER, RIBs 등)를 사용해 앱을 개발해 본 경험이 있다면 더욱 많은 인사이트를 가져갈 수 있습니다.
* 본 강의는 Swift에 대한 기초 지식을 다루지 않습니다.
가장 도움이 될까요?
▫️하나 이상의 아키텍처를 사용해 앱을 개발한 경험이 있는 사람
▫️실습은 iOS 앱을 기반으로 하지만, Swift 문법에 대한 지식이 있다면 학습하는 이론에 대한 내용은 다른 플랫폼 모바일 앱(Android, Flutter 등)에도 적용 가능 합니다.
*본 수업에서 진행하는 모든 실습은 iOS 앱을 기반으로 하고 있으며, Mac으로 진행되며 windows 사용자는 수강에 어려움이 있을 수 있습니다.
사용하는 Tool
▫️Swift
▫️Swift Package (퍼스트파티 의존성 관리툴)
▫️Combine (퍼스트파티 비동기+이벤트 기반 프레임워크)
▫️RIBs(우버에서 만든 아키텍처 프레임워크)
▫️XCTest (테스트 프레임워크)
![패스트캠퍼스](https://storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202008/132857-199/sc5.png)