<블로그 원문은 여기에서 확인하실 수 있으며, 블로그 번역 리뷰는 정승욱(Android GDE)님이 참여해 주셨습니다.>
게시자: Lukas Bergstrom, Android 개발자 프레임워크 팀 제품 관리자

Android는 고급 휴대폰에서 비행기 좌석 시스템에 이르기까지 수십억 개의 기기에서 실행되고 있습니다. Android OS는 이처럼 광범위한 기기에서 제대로 작동하도록 리소스를 공격적으로 관리하는데, 이로 인해 때로는 견고한 앱을 빌드하기가 어렵고 복잡해질 수 있습니다. 이 작업을 좀 더 쉽게 하기 위해, 우리는 Google I/O에서 Architecture Components의 미리보기를 선보임으로써 수명 주기 관리 및 데이터 지속성과 같은 일반적인 작업을 위한 라이브러리와 함께 앱 아키텍처에 대한 지침을 제공했습니다. 이와 함께, 이러한 기본 구성 요소를 통해 더 적은 상용구 코드로 모듈식 애플리케이션을 작성할 수 있으므로 개발자가 쓸데없이 시간을 낭비하는 대신 혁신을 꾀하는 데 집중할 수 있으며, 우리는 앞으로도 이러한 기반을 기초로 앱 빌드가 계속 이루어지기를 바랍니다.

오늘 우리는 Room 및 Lifecycle Architecture Components 라이브러리가 1.0 Stable에 도달했음을 기쁜 마음으로 알려드립니다. 이러한 API는 프로덕션 앱 및 라이브러리에 바로 사용할 수 있으며 앱 아키텍처 및 로컬 저장소와 관련하여 도움을 구하는 개발자들에게 권장합니다(단, 권장 사항일 뿐이지 필수 사항은 아님). Lifecycle은 이제 지원 라이브러리에도 통합되었으므로 AppCompatActivity와 같은 표준 클래스와 함께 사용할 수 있습니다.

우리는 오늘 Stable 버전을 선언하지만 베타 구성 요소가 이미 앱에서 함께 사용되고 있으며 설치 건수가 수십억 건에 이릅니다. Zappos와 같은 주요 개발업체는 다음과 같이 Architecture Components 덕분에 중요한 문제에 더 많은 시간을 할애할 수 있었습니다.

Android Architecture Components 출시 전에는 자체적으로 ViewModel을 구현했었습니다. 로더와 종속성 주입을 사용하여 구성이 변경되는 과정에서 ViewModel을 유지했습니다. 최근에 우리는 Architecture Components ViewModel 구현으로 전환했으므로 이러한 상용구 코드를 더 이상 사용하지 않게 되었습니다. 우리는 설계, 비즈니스 로직 및 테스트에 더 많은 시간을 소비하고 상용구 코드를 작성하거나 Android 수명 주기 관련 문제를 걱정하는 데는 시간을 덜 낭비할 수 있게 되었다는 사실을 확인했습니다.

또한, Activity 수명 주기에 직접 후크되는 LiveData를 사용하기 시작했습니다. LiveData를 사용하여 네트워크 데이터를 검색하고 표시하므로 네트워크 호출 구독 관리에 대해 더 이상 염려할 필요가 없게 되었습니다.

- David Henry, Zappos의 Android 소프트웨어 엔지니어

Architecture Components는 개발자들이 뛰어난 사용 환경을 빌드하는 데 집중할 수 있도록 몇 가지 일반적인 문제를 없애주는 단순하고 유연하며 실용적인 접근 방식을 제공합니다. 이는 앱 아키텍처에 대한 지침에 따라 함께 연결되는 핵심 구성 요소를 기반으로 합니다.

Lifecycle

모든 Android 개발자는 Activity를 시작, 중지 및 제거할 때 운영체제 문제를 다루어야 합니다. 즉, 수명 주기를 거치면서 UI를 업데이트하는 데 사용되는 observable과 같은 구성 요소의 상태를 관리해야 합니다. Lifecycle을 사용하면 자체적인 수명 주기를 관리하는 수명 주기 인식 구성 요소 를 생성할 수 있으므로 누수나 비정상 종료 문제가 발생할 가능성이 줄어들게 됩니다. Lifecycle 라이브러리는 LiveData와 같은 다른 Architecture Components의 기반입니다.

LiveData

LiveData는 데이터를 유지하고 업데이트를 제공하는 수명 주기 인식 observable입니다. UI 코드는 변경 사항을 구독하고 LiveData에 해당 Lifecycle에 대한 참조를 제공합니다. LiveData는 수명 주기를 인식하므로 해당 Lifecycle이 시작되거나 재개될 때 업데이트를 제공하지만 LifecycleOwner가 제거될 때 업데이트 제공을 중지합니다. LiveData는 더욱 안전하고 성능이 좋은 반응형 UI를 간단하게 빌드할 수 있는 방법입니다.

ViewModel

ViewModel은 Activity 및 Fragment와 같은 수명 주기와 연결된 엔터티로부터 로직 및 뷰 데이터에 대한 소유권을 분리합니다. ViewModel은 연결된 Activity 또는 Fragment가 영구적으로 제거될 때까지 유지됩니다. 즉, 회전으로 인해 Fragment가 다시 생성되는 등의 이벤트가 발생해도 뷰 데이터가 유지됩니다. ViewModel은 일반적인 수명 주기 관련 문제를 해결할 뿐만 아니라 더욱 모듈화되고 테스트하기가 더욱 쉬운 UI를 빌드하는 데에도 도움이 됩니다.

Room

거의 모든 앱이 데이터를 로컬 위치에 저장할 필요가 있습니다. Android에서는 버전 1부터 플랫폼에 SQLite를 번들로 포함해 제공하고 있지만 이를 직접 사용하기란 무척 어려울 수 있습니다. Room은 더 적은 상용구 코드로 SQlite의 기능을 완벽히 활용할 수 있는 단순한 객체 매핑 계층입니다. 컴파일 시간 쿼리 검증 및 기본 제공 마이그레이션과 같은 기능을 통해 더욱 쉽게 강력한 지속성 계층을 빌드할 수 있는 동시에, LiveData와의 통합을 통해 Room은 데이터베이스가 지원되고 수명 주기가 인식되는 observable을 제공할 수 있습니다. Room은 로컬 저장소를 관리하는 데 필요한 단순성, 강력한 기능 및 견고성을 모두 아우르고 있으므로 꼭 한번 사용해 보시기를 바랍니다.

앱 아키텍처에 대한 가이드 및 기타 등등

마지막으로, 모든 개발자에게 적용되는 핵심 원리와 Architecture Components를 함께 사용하기 위한 구체적인 지침을 제공하는 앱 아키텍처에 대한 가이드를 작성했다는 점도 알려드립니다. 우리는 개발자들로부터 명확하고 일관된 지침이 중요하다는 의견을 많이 들어왔기 때문에 현재 해당하는 경우 Architecture Components를 참조하도록 개발자 문서를 업데이트하고 있습니다. 또한, Architecture Components 사이트를 통해 풍부한 동영상, 코드랩 및 샘플 앱도 제공하고 있으며 앞으로 더 많은 것들을 제공할 예정입니다.

계속 지켜봐 주세요.

첫 번째 Architecture Components 세트가 이제 Stable 버전으로 제공되지만 할 일이 더 있다는 것을 알고 있습니다. 지난 몇 달 동안 우리는 개발자 여러분의 피드백을 들어왔으며 이에 따라 기능을 개선했습니다. 또한, RecyclerView를 사용하여 대규모 데이터세트를 처리하기가 너무 어렵다는 내용의 피드백에 따라 최근에 PagedList라고 하는 새로운 Architecture Components를 알파 버전으로 출시했습니다. 이는 시작에 불과합니다. 우리는 더 많은 주요 구성 요소를 개발 중에 있으며, 향후 몇 달 내에 발표할 계획입니다.

Architecture Components와 관련하여 우리가 바라는 바는, 개발자가 휴대기기를 위한 독창적이고 새로운 환경을 제공하는 데 집중할 수 있도록 해드리는 것입니다. 마침내 프로덕션용 Stable 버전으로 이들 Architecture Components를 발표할 수 있게 되어 기쁘게 생각합니다. 우리는 그 과정에서 이처럼 유용한 피드백을 제공해 주신 커뮤니티에 감사하다는 인사를 드리고 싶으며 이 게시물의 댓글을 통해 계속해서 논의가 활발하게 이루어지기를 기대합니다. 끝으로, 이 Stable 버전 출시를 기다려 주신 개발자 여러분, 지금 바로 시작해 보시기 바랍니다.