블로그목적
안드로이드관련 아키텍처를 공부및 정리 후 공유한다.
안드로이드(Android)란?
안드로이드사(Android, Inc)에서 개발한 리눅스 기반의 운영체제를 말함.
그 이후, 우리에게 잘알려진, 구글(
)에서 인수를 하게됨.
개인적인 생각으로, 구글은, 우수한 인재들이 모여있어서인지, M&A도 시대에 맞게 잘하는 것 같음.
암튼, 구글에서 인수를 한 이후로 안드로이드는,
스마트폰, 태블릿, 카메라, 셋톱박스등의 장치에 최적화되어 설계되고 현재까지 발전되고 있음.
결국, IOS(
) 와 AOS(
) 는 현재 스마트폰의 OS 로 양대산맥이 됨.
양대산맥이 되기전, 마이크로소프트(
)도 스마트폰 시장의 선점을 위해서 노력을 많이 했었음.
잠깐, 제 개인적인 경험을 풀자면, IOS / AOS 가 양대산맥으로 굳어지기전에 윈도우폰도 있었는데..^^;
참고로, 제 경력 중 마이크로소프트사의 윈도우폰 CMAS(Commercial Mobile Alert System) TB 구축이 존재함.
국내에서 3GPP 규격서를 기반으로한 CMAS 서버 개발을 마무리하고, 직접 미국 시애틀 마소 본사에 한달 정도 출장해서 테스트 진행
그 당시, 마이크로소프트사는 윈도우OS를 기반한 서피스RT(
) / 윈도우폰(
)을 출시하려고 노력 중이였음.
그래서 TB를 구축및 테스트할때, 쉴드룸에 가서 직접 윈도우폰 개발자와 중국화웨이 통신코어망 개발자와 이야기하기도 많이 했었는데..^^
앞으로, 출시할 윈도우폰을 위해서 CMAS 서버 납입기일(?)을 무슨일이 있어도 맞춰야 했고,
그런이유로, 테스트할때 윈도우폰 개발자 / 중국 화웨이(
/코어망)와 살얼음판(?) 속의 고생도 정말 많이 했지만, 성공적으로 마무리하고 지금은 즐거운 추억으로 제 머리 속에 남아있음.
아무튼, 그 경험이 지금까지 나름 열심히 개발자로 겪는 여러가지 어려움을 잘 견디게 해주고 지혜를 가질 수 있는 원동력이 됨.
즉, 고난은 실패하라고 주는 것이 아니라, 더욱 큰 성공을 위한 발판임을 직접 경험으로 깨닫게 됨.
지금도 어려움이 있으면, 그때를 떠올리며, 일억만리를 날아간 타지에서 더 어려운일도 차근차근 묵묵하게 해냈는데 뭘하고, 모든일을 나름 성공적/긍정적인 마인드로 훌륭히 잘 해결하고 있음!
본론으로 넘어가자면, 마이크로소프트사도 물밑으로 엄청난 노력을 했지만...
10년 정도가 지난 지금 결과론적으로 윈도우OS 를 탑재한 서피스RT / 윈도우폰은 도태되어 역사의 뒤안길로 사라지게되어, IOS/AOS 양강체제가 되어짐.
여기서, 제가 분석하고 깨닫는 점은
모든 현상과 상황을 관찰할때, 해당 현상과 상황에 대한 핵심요소를 정확히 판단해야하고, 또 판단을 했으면 빠른 실행력을 바탕으로 실천에 나서야 된다는 것을 깨닫게됨.
만약, 가정이지만,
마이크로소프트가 자기가 가진, PC의 최적화된 OS 기술을 이용하는 것이 아니라 스마트폰에 최적화된 안드로이드를 인수하고, 발전시켰다면, 스마트폰 시장은 또다른 시장이 되었을 것도 같다는 생각을 조심스럽게 해보네요..^^;
그리고 삼성전자 주주로써 말씀드리는게 아니라,
삼성전자가 옴니아(윈도우 OS)를 버리고 갤럭시(안드로이드 OS)로 운영체제를 바꾼것도 신의 한수인것 같음...
그리고, 안드로이드 사용자는 꾸준히 증가함.
국내에서는 안드로이드를 80% 이상을 사용하고 있는 추세임.
저 역시도 안드로이드 폰을 사용하고 있음.
그럼, 안드로이드의 아키텍처에 대해서 알아보자.
안드로이드 아키텍처
출처 및 참고페이지
https://www.techdesignforums.com/practice/technique/android-for-the-rest-of-us/
리눅스 커널
최하위 층은 리눅스 커널로 구성됨.
안드로이드 운영체제는 일부를 구조적으로 변경한 리눅스 커널 2.6으로 구현되어 있다고 함.
카메라, 오디오, 무선와이파이 등과 같은 다양한 드라이버로 구성됨.
보안, 메모리관리, 프로세스관리, 네트워크 스택, 드라이버 모델과 같은 주요 시스템 서비스를 리눅스에 의존함.
라이브러리
리눅스 커널 위에 있는 층은 안드로이드의 네이티브 라이브러리임.
제가 좋아하고 주특기및 밥벌이인 C/C++ 언어로 작성되어있는 것이 특징.
라이브러리에는 안드로이드 시스템의 다양한 컴포넌트가 사용됨.
또한, 개발자들에게 안드로이드 어플리케이션 프레임워크를 통해 노출됨.
라이브러리는 단지 장치에 여러 종류의 데이터를 처리하는 방법을 알려주는 명령어들의 집합일 뿐.
안드로이드 런타임
라이브러리 층과 같은 곳에 위치함.
핵심 자바 라이브러리와 달빅(Dalvik) 가상 머신으로 구성됨.
핵심 자바 라이브러리는 안드로이드 기반의 어플리케이션을 개발하는 데 사용됨.
달빅(Dalvik)
아이슬란드의 마을이름
구글 사의 반 번스테인(Ban Bornstrein)과 그 의 팀에 의해 개발됨.
달빅 가상 머신은, 덱스 컴파일러(Dex Compiler)로 변환한 후 달빅 바이트 코드를 생성하여 동작함.
모바일 환경에 맞춰 성능을 고려한 것.
특징
메모리 관리가 개선
각 어플리케이션이 권한 없이 다른 어플리케이션을 제어할 수 있는 권한을 제한할 수 있음.
스레딩을 지원함.
각, 안드로이드 어플리케이션은
별도의 가상 인스턴스에서 실행되고, 각 어플리케이션에는 할당된 고유 사용자 ID가 부여됨.
안드로이드에 설치된 모든 응용 프로그램은 일반사용자 권한으로 실행됨.
그럼, 안드로이드 필수 구성 요소에 대해서 알아보자
안드로이드는 액티비티, 서비스, 콘텐츠 프로바이더, 브로드캐시트 리시버라는 4가지 주요기능으로 구성되어 있음.
액티비티
사용자에게 보여주는 디바이스의 인터페이스를 말함.
화면은 메뉴를 클릭하거나, 버튼을 클릭하는 등과 같은 특정한 액션에 의해 전환되는데, 각 화면이 모두 액티비티라고 할 수 있음.
액티비티는 대체로 하나의 화면에서 표시됨.
액티비티의 실행은 자바에서 설명하고 있는 생명주기와 비슷함.
서비스
사용자들에게 보여주지 않고, 백그라운드에서 액티비티가 실행되는 것과 비슷한 프로세스로 동작함.
하나의 어플리케이션이 동작하면서도, 백그라운드에서 실행되는 것은 바로 서비스의 기능 때문임.
액티비티들과 서비스들은 UI 스레드라고 불리는 동일한 어플리케이션 스레드로 실행됨.
콘텐츠 프로바이더
각 어플리케이션 사이에서 데이터를 공유하기 위한 인터페이스를 말함.
기본적으로 각 어플리케이션마다 샌드박스(sandbox)에서 동작하기 때문에 시스템에 있는 다른 어플리케이션들끼리의 데이터 접근은 격리됨.
콘텐츠 프로바이더는 CRUD(Create, Read, Update, Delete)원칙을 준수함.
음악파일, 사진파일등과 같이 용량이 큰 데이터들을 공유하는데 적합함.
브로드캐시트 리시버
실시간으로 시스템의 상태를 확인하여 이벤트가 발생했을 때 응답함.
디바이스에 의해 발생하는 노티피케이션등을 이용하여 사용자에게 알람을 발생함.
결론
안드로이드는 안드로이드사(Android, Inc)에서 개발한 리눅스 기반의 운영체제를 말함.
그 이후, 우리에게 잘알려진, 구글에서 인수를 하게됨.
구글에서 인수를 한 이후로 안드로이드는 스마트폰, 태블릿, 카메라, 셋톱박스등의 장치에 최적화되어 설계되고 현재까지 발전되고 있음.
안드로이드 아키텍처는 리눅스 커널, 라이브러리, 안드로이드 런타임으로 구분됨.
안드로이드 필수 구성요소는 액티비티, 서비스, 콘텐츠 프로바이더, 브로드캐시트 리시버로 구성됨.
목표
- 나의 강점을 바탕으로 나의 일을 잘해냄으로써 타인과 사회를 아릅답게 만든다.
- 현재 내가 가진 능력으로 누군가에 도움이 될 수 있을까? 에 대해서 항상 생각하기
- 나는 블로그 생태계에서 IT 테크관련 파워블로거및 인플루언서가 반드시 된다!
목표를 이루기 위한 실천방안
- 꾸준한 블로깅/기록법/독서법으로 넘버원이 아닌 온리원이 되보자.
- 천사불여일행(千思不如一行)을 항상생각하며 체화 및 각인시키자.
- "천번 생각하는것보다 한번 행동하는 것이 더 중요하다."
- 기기일약 불능십보(騏驥一躍 不能十步) / 노마십가 공재불사(駑馬十駕 功在不舍)
- 천리마도 한번에 열걸음을 뛸 수 없고, 느리고 둔한말이라도 열흘이면 하룻길을 간다.
- 모든 실수에는 마술이 숨어 있다. 따라서 나는 실수하면 실수할수록, 그런 실수에서 더 많이 배울수록 삶에서 더 많은 마술을 갖는다.
'좋아하는 것_매직IT > 20.android' 카테고리의 다른 글
안드로이드 액티비티 생명주기: 앱의 핵심 (0) | 2023.10.18 |
---|---|
안드로이드 volley 라이브러리에 대해서 깔끔하게 정리하기 (0) | 2023.10.16 |
안드로이드 앱 개발자가 반드시 알아야 할 기술과 지식 (0) | 2023.04.21 |
안드로이드 LinearLayout, 박스모델 개념과 속성 깔끔하게 정리하기 (0) | 2023.02.27 |
안드로이드 스튜디오 끊김현상 개선 꿀팁! (ft.사용 메모리 변경) (0) | 2023.02.24 |