# AAC

[Android] AAC 파헤치기 - 6) Room Database
Room이란? 안드로이드 앱을 사용하다보면 네트워크 연결이 끊어져도 새로운 사진만 로딩 중이고 이전에 봤던 사진들은 계속 보이는 것을 경험할 수 있다. 이는 캐싱된 데이터가 로컬 데이터베이스에 남아서 보여지고있기 때문인데, 이처럼 Android에서는 SQLite이라는 가벼운 내부 DB를 이용할 수 있다. Room Database는 SQLite를 완벽히 활용하면서 원활한 데이터베이스 액세스가 가능하도록 SQLite의 추상화 계층을 제공하는 AAC 라이브러리이다. Room을 사용하면 얻을 수 있는 이점으로는 다음과 같다. SQL 쿼리의 컴파일 시간 확인 반복적이고 오류가 발생하기 쉬운 상용 코드를 최소화하는 주석 간소화된 데이터베이스 이전 경로 이러한 장점들로 인해 Android 공식 문서에서는 SQLite API를 직접 사용하는 것보다 Room 데이터베이스를 활용하는 것을 권장하고 있다. Room 기본 구성요소 `Ro

[Android] Android에서 MVVM 패턴 (feat. AAC)
목차 MVC 패턴의 문제점 MVVM 패턴이란? 안드로이드에서 MVVM 패턴의 활용 MVVM 활용을 도와주는 AAC 라이브러리 MVC 패턴의 문제점 기존의 Android 앱 개발에서 자주 쓰이는 MVC 패턴에는 치명적인 문제점이 존재한다. 바로 Activity 클래스에 모든 앱 동작 코드를 집어 넣게 됨으로써 점점 스파게티 코드가 된다는 점이다. 특히 Android에서는 Activity 클래스가 Controller 역할을 함과 동시에 사실상 View 의 역할도 같이 수행하기 때문에 더욱 더 Activity 클래스에 쌓이는 코드의 양이 많아지게 된다. 물론 1인 개발이거나 소규모 프로젝트라면 크게 문제되지 않을 수 있지
[Android] AAC 파헤치기 - 5) ViewModel, Lifecycle, LiveData 활용 예제 (Codelab)
이 포스트는 안드로이드 공식 Codelab 을 기반으로 작성되었습니다. https://developer.android.com/codelabs/android-lifecycles#0 이 Codelab 에서는 ViewModel , Lifecycle , LiveData 생명 주기를 인식하는 3가지 구성요소를 활용한 예제를 구현해본다. 1단계 - 환경 설정 아래 명령어를 실행해 예제 코드를 다운받는다. 코드를 다운받았으면 안드로이드 스튜디오를 열어서 프로젝트를 실행하고 root 디렉토리에서 아래 명령어를 실행한다. 맥OS / 리눅스 윈도우 처음 git 으로 코드를 다운 받았을 때 빌드 오류가 발생했는데 Android Studio에서 지시하는대로 gradle wrapper 버전을 업그레이드 해주었더니 정상적으로 진행되었다. 
[Android] AAC 파헤치기 - 4) LiveData
원래는 ViewModel 클래스에 대해 다뤄야할 차례이지만 ViewModel 에 대해서는 최근에 한번 간단하게 다뤄본 적이 있기 때문에 건너 뛰고 LiveData 클래스에 대해 알아보자. LiveData LiveData 는 관찰 가능한 (Observable) 데이터 홀더 클래스이다. 관찰 가능한 다른 클래스들과 달리 생명 주기를 인식한다는 게 가장 큰 특징이다. LiveData 는 Activity , Fragment , Service 등 앱 컴포넌트들의 생명 주기를 인식하고 활동 중인 상태의 앱 컴포넌트의 관찰자만 업데이트해준다. Observer 클래스가 STARTED 또는 RESUMED 상태이면 활성화 상태로 간주하고 데이터 업데이트 정보를 알린다. 만약 비활성 상태이면 업데이트를 알리지 않는다. 
[Android] AAC 파헤치기 - 3) Lifecycle 라이브러리
일반적으로 안드로이드에서 생명 주기 관련 동작을 정의할 때 Activity 나 Fragment 의 생명 주기 관련 메소드를 Override해서 구현하는 경우가 많다. 하지만 이는 좋지 못한 코드를 만들게 되고 오류도 자주 발생시킨다. 기존 생명 주기 메소드 재정의 방식의 문제점 위의 예시처럼 코드를 구성할 경우의 문제점은 아래와 같다. Activity 의 생명 주기 변화에 따라 UI 및 다른 컴포넌트를 관리하기 위한 호출이 지나치게 자주 발생한다. 화면 구성요소가 많아질수록 onStart() 나 onStop() 과 같은 생명 주기 메소드의 코드량이 증가한다. Activity 나 Fragment 가 종료되기 전에 컴포넌트가 시작된다는 보장이 없다. 이를 해결하기 위해 나온 게 AAC의 Lifecycle 라이브러리이다. Lifecycle Lifecycle 은 Activity나 `Fragm

[Android] AAC 파헤치기 - 2) 최신(권장) 앱 아키텍처
최신(권장) 앱 아키텍처 이전 포스트의 일반 앱 아키텍처에서 더 나아가 최신 앱 아키텍처는 다음 기법을 사용하도록 권장한다. 반응형 및 계층형 아키텍처 앱의 모든 레이어에서의 단방향 데이터 흐름(UDF) 상태 홀더가 있는 UI 레이어로 UI의 복잡성 관리 코루틴 및 흐름 종속 항목 삽입 권장사항 UI 레이어 UI 레이어의 역할은 화면에 애플리케이션 데이터 표시이다. 상호작용이나 외부 입력으로 인해 데이터가 변할 때마다 변경사항이 UI에 업데이트 되어야 한다. UI 레이어는 아래 2가지로 구성된다. 데이터를 렌더링하는 UI 요소 (TextView, ImageView...) 데이터를 보유하고 이를 UI에 노출하며 로직을 처리하는 State Holder (ViewModel) <img src="https://velog.velcdn.com/images/moonliam_/post/3b220b

[Android] AAC 파헤치기. 1) 일반 앱 아키텍처 설계
개발 블로그를 시작하고 첫 글로 ViewModel 에 대해서 공부하는 글을 썼는데, 순서가 잘못되었다는 생각이 들었다. ViewModel 은 Android에서 제공하는 AAC(Android Architecture Components)의 구성요소 라이브러리 중의 하나이며, 따라서 ViewModel 에 대해서만 알고 끝낼 게 아니라 AAC에 대해서 먼저 알아보고 그 다음 각 AAC의 구성요소들에 대해서 차례대로 알아보기로 했다. AAC(Android Architecture Components)란? AAC는 안드로이드에서 공식 발표한 유지관리가 쉬운 앱을 디자인하도록 돕는 라이브러리들의 모음이다. Lifecycles (Activity, Fragment 생명 주기 관리) LiveData (생명 주기를 인식하는 Observable 클래스) ViewModel (생명 주기 안에서 데이터 관리) Room (ob

[Android] - AAC(Android Architecture Components)란 무엇일까?
안녕하세요 오늘은 AAC(Android Architecture Components)에 대해 포스팅 해보려고 합니다. 먼저 간단하게 AAC란 2017년도에 발표한 안드로이드 앱의 아키텍처를 구축하고 관리하기 위한 라이브러리의 모음입니다. AAC는 총 8개의 구성 요소로 이루어져있습니다. Lifecycles(Easy handling lifecycles) LiveData(Lifecycle aware observable) ViewModle(Managing data in lifecycle) Room(Object Mapping for SQLite) Paging(Gradually loading information) Databinding Navigation WorkMa

[AAC] Database 와 Room
Database 란? Database의 정의는 무엇일까요? ‘데이터의 집합’으로, 데이터의 저장소를 뜻한다 Database는 어디서 주로 사용될까요? 일상생활 대부분 정보에 사용된다. ex) 카카오톡 메세지, 인스타그램 사진, 카페 구매 커피 정보 등 앱,웹 서비스등 거의 모든 일상생활 IT 서비스에서 활용된다 DBMS 란? DBMS란 무엇일까요? 데이터베이스 관리 시스템의 약자 데이터베이스를 운영하고 관리하는 소프트웨어 대표적인 DBMS는 무엇이 있을까요? MySQL - Window / Linux PostgreSQL - Window / Linux SQLite - AOS / IOS 관계형 저장 방식은 무엇일까요? 아래 두가지 특징을 가지는 저장방식 SQL 이용해서 데이터를 테이블에 저장 미리 작성된 스키마를 기반으로 정해진 형

[AAC] Room 사용법
여태껏 SharedPreferences 만 이용하여 LocalDB를 활용했었다. 사용은 간편했으나, 사이즈가 큰 데이터 혹은 복잡한 데이터를 저장해야 할때는, 한계가 분명히 존재했다. 해서 SQLite의 업그레이드 버전인 Room 을 공부해야할 필요성이 있었다 초기셋팅 → 이런식으로 각각 파일을 만들어야 편하다 1. Dpendencies 추가 module 범위 project 범위 2. Entity 선언 테이블에 저장될 데이터형태 선언 Class 생성 → MemoEntity 생성 id 값을 꼭 넣어줘야 한다 tableName / PrimaryKey / ColumnInfo / Value 또한 설정 가능 3. DA
LiveData
LiveData 관찰 가능한 데이터 홀더 클래스로서, 액티비티, 프래그먼트, 서비스등 다른 앱 구성요소의 수명주기를 인식하고, 수명주기가 활성상태인 구성요소의 관찰자만 업데이트해주는 역할을 한다. 옵저버 패턴을 활용해 구성요소의 수명주기에 따라 데이터를 관리 항상 최신 데이터를 보증한다 관찰자의 수명 주기가 STARTED, RESUMED상태를 활성상태로 간주하고, 활성된 관찰자에게만 업데이트 LifeCycleOwner인터페이스를 구현하는 객체와 페어링 된 옵저버를 등록하고, DESTROYED상태가 되면 옵저버를 삭제한다 장점 UI와 데이터 상태의 일치 옵저버 패턴을 따르며, 데이터가 변경 될 때 옵저버 객체에 알림 옵저버에 UI 업데이트 코드를 작성하여 데이터가 변경되면 자동으로 UI가 업데이트 됨 메모리 누수 없음 옵저버는 LifeCycle객체에 결합되어 있으며, 연결된 수명주기가
Android AAC LifeCycle
androidx.lifecycle패키지는 액티비티나 프래그먼트의 현재 수명 주기 상태를 기반으로 동작을 자동으로 조절할 수 있는 구성요소를 빌드할 수 있는 클래스 및 인터페이스를 제공한다. LifeCycle 패키지를 이용하기 위해서는 아래와같이 선언한다 지금까지의 수명주기 사용방법 일반적으로 액티비티의 수명주기 메서드(onStart, onResume, onPause, onStop.....)에서 필요한 작업을 정의했었다. 아래 코드는 ExoPlayer를 다루는 액티비티 코드중 일부이다 일반적으로는 이래도 문제가 없는데, 다른 구성요소들을 다루는 코드가 많아질수록, onStart, onStop과 같은 수명주기 메서드는 점점 방대해지고, 때에 따라서는 수명주기 상태에 맞지 않는 호출이 일어날 수도 있다. checkUserStatus 메서드가 onStop 호출 이후에 불리는 경우가 있다면????? 아 물론 조건을 따져서 예외처리를 하면 되긴 한다.
Paging3
페이징 라이브러리를 사용해 로컬 저장소나 네트워크를 통해 대규모 데이터 세트의 페이지를 로드하고 표시할 수 있다. 페이징 라이브러리의 이점 페이징된 데이터의 메모리 캐싱 지원 요청 중복 제거 기능이 기본으로 제공됨 RecyclerView의 어댑터를 통해 스크롤의 끝에 도달할 때 자동으로 데이터를 요청함 코루틴, Flow, Rx, LiveData를 지원 새로고침 및 재시동 기능을 지원 build.gradle 설정 라이브러리 아키텍쳐 총 3개의 계층으로 구성된다 라이브리러구조 레포지토리 기본 구성요소는 PagingSource로서 이 객체는 데이터 소스와 이 소스에서 데이터를 검색하는 방법을 정의 한다. 단일

안드로이드 AAC (Android Architecture Components)와 Jetpack
AAC란 > AAC는 Android Architecture Components의 약자로, 테스트와 유지보수가 쉬운 앱을 디자인할 수 있도록 돕는 라이브러리의 모음이다. Google I/O 2017에서 새로운 라이브러리를 AAC로 묶어서 발표하여 AAC라는 것이 사용되게 되었고, Google I/O 2018에서 Android Jetpack을 발표할 때는 Jetpack의 구성요소 중 하나로 AAC가 들어가 있다. 필자는 그전에 AAC와 Jetpack을 따로 이해하여, 17년도에 발표한 AAC에 대한 내용들은 AAC라고 부르고, Jetpack에 포함된 내용들은 AAC가 아닌 Jetpack으로 부르기도 하였으며 Jetpack의 구성 요소중 하나로 AAC가 들어가 있다는 것을 명확하게 인지하지 못한 상황에서 이 두 개가 헷갈렸다.  컬렉션의 양이 비교적 적은 경우 사용 앱 안에 xml 형식으로 저장 자동로그인 기능 구현할 때 유용하게 써본 경험 有 2. Room Android Architecture Component SQLite의 추상화 계층을 제공하여 SQLite의 기능을 사용하면서 원활한 액세스가 가능 객체 매핑을 통해 DB에 접근하는 ORM(Object Relational Mapping) 방식 3. Realm 데이터를 객체 형태로 저장 큰 용량의 데이터를 저장해야할 경우 사용 크로스 플랫폼 DB로 AOS, IOS간 공유가 가능 👉 Query문을 작성하는게 익숙한 나.. A

AAC (Android Architecture Component)
1.Lifecycles(Easy handling lifecycles) 2.LiveData(Lifecycle aware observable) 3.ViewModel(Managing data in a lifecycle) 4.Room(object Mapping for SQLite) 5.Paging(Gradually loading information) 6.Databinding 7.Navigation 8.WorkManager Lifecycles (앱의 수명주기를 관리) Lifecycles는 라이브러리 이름 답게 생명주기 모니터링을 돕습니다. 크게 2가지로 구성되어 있습니다. Lifecyle Owner : Activity, Fragment에서 생명주기를 분리하여 Lifecycle 객체에 담습니다. Lifecycle 객체를 통해 다른 곳에서 해당 화면의 생명주기를 모니터링 할 수 있는데 자신의 생명주기를 담은 Lifecycle 객체가 Lifecycle Owner 입니다. Life

[Android] AAC ViewModel의 onCleared()는 정확히 언제 호출될까?
궁금증 수 많은 생명주기의 변화가 이뤄지는 Android의 Activity에서는 특정 상태일 때 처리해야 하는 일이 벌어진다. 예를들면 Pause상태일 때 연속적인 동작을 멈추던지 ex - 스트리밍, 애니메이션, Destroy상태일 때는 특정 객체의 관찰을 해제한다. 하지만, 어떠한 상황에서는 Activity가 Destroy됐지만 다시 ReCreate되는 상황이 발생한다. 이 때, 사용자는 같은 화면을 보고 있기에 동적인 작업이 진행되었을 때는 데이터를 보존시켜야 한다. 아마 여기서 onSavedInstance의 인자로 오는 Bundle에 보존시킬 데이터를 넣거나, 이번 주제인 쉽고 간편한 AAC ViewModel을 사용한다. 아마 ViewModel을 사용하려 검색해봤다면 위와 같은 그림을 수

Account Assignment Categories Configuration
AAC Configuration (SPRO) Material management-Purchasing-Account Assignment-Maintain Account Assignment Categories Descrption : cost center(K), unknown(U)... Detailed information Distribution : 수량 base로 나눌건지, 퍼센트 base로 나눌건지, 금액 base로 나눌건지 배분자 Acct assign changeable during in
Blanket Purchase Orders
잘 사용하는 프로세스는 아니다. Requirement Vlaue Versus Procurement Costs 어떤 경우에 이거 사용하는지 low : 회사식당, 수리부속, 임시직 high : 하나의 dummy po를 생성하고 계속해서 인보이스 문서 생성 그래서 한도를 정하고 유효기간을 정하는것이 특징이다. 입고처리는 하지 않는다. Blanket Purchase order PO문서타입은 FO 유효날짜 필수 아이템카테고리 B로 하면 Limit 탭 활
Invoiceing Plans
Invoiceing Plans Periodic Invoice plans Partical Invoice plans PO 문서타입은 FO, 보통 소모성 자재라서 AAC 필수 Periodic : 일정한 기간에 같은 금액 지불 ex. 렌탈 Partial : 전체금액을 나눠서 지불, 기간과 금액 일정하지