Tinder는 새로운 사람들을 만나기 위한
앱 중 세계에서 가장 인기 있는 앱입니다. Tinder는 사람들 간의 만남과 데이트 방식을 변화시킨 것으로
잘 알려져 있으며 오른쪽으로 스와이프하면 다른 사람과 연결되어 채팅할 수 있습니다. Tinder는
하루에 2,600만 건이 넘는 매칭을 성사시키며 2012년 출시 이래
200억 건이 넘는 매칭을 달성했습니다.
Tinder에서는 사용자의 요구에 따라
앱을 신속하게 확장했지만
앱에서 사용하는 데이터베이스는 처음에 사용했던 상태 그대로 유지되어
이를 기반으로 확장하기가 점점 더 어려워졌습니다.
또한 Tinder는 수명 주기의 복잡성을 줄이기 위해 뷰가 많은 아키텍처를 사용했지만
어떤 수명 주기 이벤트가 어떤 활동에 관련되는지 파악해야 했습니다. 또한 Cursor 객체를 도메인 객체에 마샬링하거나, 데이터베이스를 이전하거나,
지속적으로 쿼리하는 등의 작업을 처리하기 위한
일관된 프레임워크가 없었습니다.
Tinder 개발팀은 LifecycleObserver 및 플러그인 아키텍처를 2주 만에
구현할 수 있었으며, 고작 이틀 만에 내부 Ads SDK용으로 Room을
구현해냈습니다.
Tinder의 Android 부서 수장인 앤디 로튼은 "우리는 더 이상 플러그인이나 뷰 내부의
활동 수명 주기를 관리하는 데 많은 시간을 투자하지 않아도 됩니다.
잘 설계된 Room을 사용하면 지속성 레이어를 간편하게 구현할 수
있습니다. 내부 Ads SDK용으로 Room을 사용한 덕분에 초기 개발 단계에서
1주일 정도 절약했습니다."
결과
Ads SDK 관련 성과에 크게 만족한 Tinder는 전체 데이터베이스
레이어를 Room으로 이전하고 있습니다. 테스트도 간편했으며, Room은 특정 항목을
등록 취소하는 일을 잊지 않게 해 주므로 메모리 누수도 줄었습니다.
Android 아키텍처 구성요소는 메모리 사용량을 줄이는 데도 도움이 되고 있습니다.
"Android 아키텍처 구성요소는 개발자들이 직면하는 크고 작은 여러 가지
문제를 해결할 수 있는 방법을 제공했습니다."라고 로튼은 말합니다.
"Tinder는 수명 주기를 인식하는 구성요소를 사용하여 개발자의 생산성,
테스트 가능성, 모듈성을 개선하는 한편 뷰 우선 아키텍처를 지원할 수
있습니다. Room을 사용하면 SQLite를 관리하기 위한 다른 솔루션을
사용할 필요가 없으며, 데이터베이스 관리 및 쿼리를 간단한
구성 작업으로 바꿔줍니다."
측정항목
LifecycleObserver / 플러그인 아키텍처를 통해 MainActivity에서 500개 이상의 코드 행을 삭제했습니다.
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2018-05-03(UTC)
[null,null,["최종 업데이트: 2018-05-03(UTC)"],[],[],null,["# Tinder solves dating-app pain points with Android Architecture Components\n\n[Tinder](https://tinder.com) is the world's most popular app for\nmeeting new people. Known for changing how people meet and date, it empowers\nusers to swipe right to connect and chat with others. Tinder sparks over 26 million\nmatches a day, with more than 20 billion matches made since their launch in\n2012.\n\nThe company needed to scale up the\n[app](https://play.google.com/store/apps/details?id=com.tinder)\nquickly, based on user demand, but their database implementation was left over\nfrom their early days, making it increasingly more complicated to expand upon.\nThey also had a view-heavy architecture to reduce lifecycle complexities, but\nneeded to know which lifecycle events were specific to an activity. They lacked\na consistent framework for handling tasks such as marshalling\n[`Cursor`](/reference/android/database/Cursor) objects into domain objects, making\ndatabase migrations, or consistently performing queries.\n\nWhat they did\n-------------\n\n**Figure 1:** A photo of a photographer on Tinder\n\nTinder turned to [Android Architecture\nComponents](/topic/libraries/architecture) for solutions for upgrading their\ncode. They used [`Lifecycle`](/reference/androidx/lifecycle/Lifecycle) to\nlet a [`View`](/reference/android/view/View) observe its host activity's\nlifecycle, and they used [`LifecycleObserver`](/reference/androidx/lifecycle/LifecycleObserver)\nto facilitate a decentralized plugin architecture and to prevent bloat in\n[`Presenter`](/reference/androidx/leanback/widget/Presenter),\n[`Activity`](/reference/android/app/Activity), and [`View`](/reference/android/view/View)\nobjects. The [Room persistence library](/topic/libraries/architecture/room)\nprovided a turnkey method for defining, managing, and querying their local\ndatabase.\n\nThe Tinder development team was able to implement the\n[`LifecycleObserver`](/reference/androidx/lifecycle/LifecycleObserver) and\nplugin architecture in only two weeks, while seamlessly implementing Room for\ntheir internal Ads SDK took just two days.\n\u003e \"We no longer had to invest significant time managing the Activity Lifecycle\n\u003e inside of plugins or views,\" says Andy Lawton, Head of Android at Tinder.\n\u003e \"Room's design is well- thought-out and makes our persistence layer easy to\n\u003e implement. Using Room for the internal Ads SDK probably saved a week of time\n\u003e in upfront development.\"\n\nResults\n-------\n\nTinder was so pleased with their results with their Ads SDK that they're\nmigrating their entire database layer to Room. Testing was easy, and Room's\nprotection against forgetting to unregister something reduced memory leaks.\nAndroid Architecture Components is also helping to produce smaller memory\nfootprints.\n\u003e \"Android Architecture Components has provided a prescription for solving many\n\u003e of the pain points that developers face at all different scales,\" Lawton says.\n\u003e \"Through the use of lifecycle-aware components, Tinder has managed to improve\n\u003e developer productivity, testability, and modularity, while being conducive to\n\u003e a view-first architecture. Room eliminates the need for other solutions for\n\u003e managing SQLite, and turns database management and querying into an exercise\n\u003e in configuration.\"\n\nMetric\n------\n\n**500+** lines of code removed from `MainActivity` via\n[`LifecycleObserver`](/reference/androidx/lifecycle/LifecycleObserver) /\nplugin architecture\n\nGet started\n-----------\n\nAndroid Architecture Components is open to all developers as part of Android\nJetpack. [Get started with Android Architecture\nComponents](/topic/libraries/architecture)."]]