https://goni95.tistory.com/173
1๏ธโฃ Android
Android๋ ๊ตฌ๊ธ์์ ์ด์์ฒด์ , ๋ฏธ๋ค์จ์ด, ์ฌ์ฉ์ ์ธํฐํ์ด์ค, ์ดํ๋ฆฌ์ผ์ด์ ๋ฑ์ ์์ฉ ํ๋ก๊ทธ๋จ๋ค์ ํ๋๋ก ๋ฌถ์ด ์ ๊ณตํ๋ ๋ฆฌ๋ ์ค ๊ธฐ๋ฐ์ ๋ชจ๋ฐ์ผ ์ด์์ฒด์ ์ ๋๋ค.
๊ฐ์ฅ ๋ํ์ ์ธ ํ๋ก๊ทธ๋จ ์ธ์ด์ธ ์๋ฐ๋ก ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๊ณ ํ์ฌ ์ฝํ๋ฆฐ์ ์ฃผ๋ ฅ์ผ๋ก ํ๊ณ ์์ต๋๋ค.
์๋ฐ ์ธ์ด๊ฐ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ธ์๋ Third Party ๋ผ์ด๋ธ๋ฌ๋ฆฌ( OpenGL, SQLite, FreeType ๋ฑ )๊น์ง ํฌํจ๋์ด ์์ด ๋ณ๋์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์์ ์ ๋๋ก ๊ฒ์ฆ๋ ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง์ด ํฌํจํ๊ณ ์์ต๋๋ค.
์คํ์์ค๋ฅผ ํตํด ๊ฐ๋ฐํด๊ณผ ๊ด๋ จ ๋ฌธ์๊ฐ ๋ชจ๋ ๋ฌด๋ฃ๋ก ์ ๊ณต๋๊ณ ์ด์์ฒด์ ์ ํต์ฌ์์ค๊น์ง๋ ๋๋ถ๋ถ ๊ณต๊ฐ๋์ด ์์ด, ๊ฐ ์ ์กฐ์ฌ ๋ณ๋ก ๋๋ฐ์ด์ค๋ณ ๊ฐ๋ฐ์ ํ ์ ์๋ ์ฌ๊ฑด์ด ๋๊ณ , ๋ณ๋์ ๋ผ์ด์ ์ค ๋น์ฉ์ด ๋ค์ง ์์ ๋๋ฐ์ด์ค ๊ฐ๊ฒฉ์ด ์ ๋ ดํด์ง๋ ํจ๊ณผ๊ฐ ์๊ณ ๋์คํ์ ์ ๋ฆฌํด ์ํํธ์จ์ด ์์๋ ๋ง์ต๋๋ค.
์ด์์ฒด์ ๋ ์ฌ์ฉ์์๊ฒ ํธ์์ฑ์ ์ ๊ณตํ๊ธฐ ์ํด์ ์ปดํจํฐ์ ์ฑ๋ฅ์ ๋์ด๊ณ ํ๋์จ์ด๋ฅผ ๊ด๋ฆฌํ๋ ์ํํธ์จ์ด ์ ๋๋ค. (Unix, Linux, Android, IOS, MAC OS ๋ฑ)
๋ฏธ๋ค์จ์ด๋ ์ด์์ฒด์ ๊ฐ ์ ๊ณตํ๋ ์๋น์ค ์ธ์ ์ถ๊ฐ์ ์ธ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ์ํํธ์จ์ด ์ ๋๋ค. (DB, WAS, TP-Monitor ๋ฑ)
์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ ๋์คํ๋ ์ด ํ๋ฉด, ํค๋ณด๋, ๋ง์ฐ์ค ๋ฑ๊ณผ ๊ฐ์ด ์ฌ์ฉ์์ ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ด ์ํธ์์ฉ ํ ์ ์๋๋ก ๋งค๊ฐ์ฒด ์ญํ ์ ํ๋ ๊ฒ ์ ๋๋ค.
์ดํ๋ฆฌ์ผ์ด์ ๋ Web ๋ธ๋ผ์ฐ์ , eMail Client, SMS, MMS ๋ฑ์ ์์ฉ ํ๋ก๊ทธ๋จ ์ ๋๋ค.
2๏ธโฃ Android SDK
Android ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ํด ๊ฐ๋ฐ์๋ค์๊ฒ ์ ๊ณต๋๋ API, Compiler, Debugger, IDE, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ์ ๊ฐ๋ฐ ๋๊ตฌ๋ค์ ์ธํธ๋ฅผ ์๋ฏธํฉ๋๋ค.
3๏ธโฃ Platform Architecture
1. System Apps
Email Client, SMS, ์ฃผ์๋ก, Web ๋ธ๋ผ์ฐ์ , Camera ๋ฑ๊ณผ ๊ฐ์ด ์๋๋ก์ด๋์ ํจ๊ป ์ ๊ณต๋๋ ๊ธฐ๋ณธ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋๋ค.
์์คํ ์ฑ์ ์ฌ์ฉ์๊ฐ ์ค์นํ๋ ์ฑ๊ณผ ๊ตฌ๋ณ๋๋ ํน์ง์ด ์์ด ์ผ์ฑ์ด ์๋ ํ์ฌ์ ์ฑ์ ๊ธฐ๋ณธ ์น ๋ธ๋ผ์ฐ์ ๋ก ์ค์ ํ๊ฑฐ๋ ํค๋ณด๋ ์คํจ์ ๋ฐ๊พธ๋ ๋ฑ์ ์์ ์ ํ ์ ์๊ณ , ์ฃผ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ญํ ๋ ๊ฐ๊ณ ์์ด ๋ค๋ฅธ ์ฑ์์ ํธ์ถํ์ฌ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ ์ ์์ต๋๋ค.
2. Java API Framework
์๋๋ก์ด๋ ์ฑ์ ์ ์ํ๋๋ฐ ํ์ํ Android OS์ ๊ธฐ๋ฅ๋ค์ Java API๋ฅผ ํตํด ์ ๊ทผํ ์ ์์ต๋๋ค.
View System๋ ListView, TextView, Button ๋ฑ์ UI๋ฅผ ๋น๋ํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
Resource Manager๋ strings, drawable ๋ฑ๊ณผ ๊ฐ์ ๋ฆฌ์์ค์ ์ ๊ทผํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
Activity Manager๋ ์ฑ์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ๊ณตํต Navigation back stack์ ์ ๊ณต๋ฉ๋๋ค.
Content Provider๋ ๋ค๋ฅธ ์ฑ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
3. Native C/C++ Library
ART(Android Runtime) ๋ฐ HAL(Hadware Abstraction Layer) ๋ฑ์ ํต์ฌ Android ์์คํ ๊ตฌ์ฑ์์์ ์๋น์ค๋ Native ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์๋ก ํ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋น๋๋ฉ๋๋ค.
์๋๋ก์ด๋ ํ๋ซํผ์ Java API Framwork๋ฅผ ํตํด ์ผ๋ถ Native ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ฅ์ ์ฑ์ ๋
ธ์ถ(OpenGL API๋ฅผ ํตํด OpenGL ES์ ์ก์ธ์คํด 2D, 3D ๊ทธ๋ํฝ ์กฐ์)ํ์ง๋ง Java API Framwork๊ฐ ์ ๊ณตํ๋ ์ผ๋ถ ๊ธฐ๋ฅ ๋ณด๋ค ๋ ๋ง์ ๊ธฐ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ(C์ C++ ์ฝ๋๊ฐ ํ์ํ ์ฑ์ ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ) Android NDK๋ฅผ ์ฌ์ฉํ์ฌ ๋คํฐ์ด๋ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ๊ทผ์ด ๊ฐ๋ฅํฉ๋๋ค.
4. Android Runtime
์๋๋ก์ด๋์ฉ ๊ฐ์๋จธ์ ์ ์๋ฏธํฉ๋๋ค.
์๋๋ก์ด๋๋ ๊ธฐ๋ณธ ์ธ์ด๋ฅผ ์๋ฐ๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ VM์ด ํ์์ ์
๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ JVM์ ์ฌ์ฉํ ์ ์์ง๋ง ์ค๋ผํด๊ณผ์ ๋ผ์ด์ผ์ค ๋ฌธ์ ํด๊ฒฐ๊ณผ JVM์ด ์๋๋ก์ด๋์ ๊ตฌ์กฐ์ ๋ง์ถ์ด์ ๊ตฌ๋ํ ์ ์๋๋ก ๋ง๋ค์ด์ง ๊ฒ์ด Dalvik VM๊ณผ ART ์
๋๋ค. ๋์ ์ฐจ์ด์ ์ JIT์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋๋ AOT์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋๋์ ์ฐจ์ด์
๋๋ค.
DVM์ ๊ฒฝ์ฐ ๋ด๋ถ ์ปดํ์ผ๋ฌ์ธ JIT๋ฅผ ํตํด ์์ฃผ ์ฌ์ฉ๋๋ ๋ฐ์ดํธ ์ฝ๋(DEX)๋ฅผ ๊ฐ์๋จธ์ ์์ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฌ์ ์ ์ฅํด๋๊ณ ํด๋น ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์คํํด์ผ ํ๋ ๊ฒฝ์ฐ ์บ์ฌ์ ์ ์ฅํด๋ ๋ด์ฉ์ ๋ถ๋ฌ์ ํผํฌ๋จผ์ค๊ฐ ๊ฐ์ ๋์์ง๋ง, ๋ณ๋์ ๋ฉ๋ชจ๋ฆฌ ์บ์๊ฐ ํ์ํฉ๋๋ค. (์๋๋ก์ด๋ ๋ฒ์ 2.2 ์ด์)
ART์ ๊ฒฝ์ฐ ๋ด๋ถ ์ปดํ์ผ๋ฌ์ธ AOT๋ฅผ ํตํด ์ดํ๋ฆฌ์ผ์ด์
์ด ์ค์น๋๋ ์์ ์ ์ ์ฒด ๋ฐ์ดํธ ์ฝ๋(DEX)๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ์ฌ OAT(ART) ํ์ผ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์ค์น ์๊ฐ์ด ์ค๋๊ฑธ๋ฆฐ๋ค๋ ๋จ์ ์ด ์์ง๋ง, ๋ฐํ์์์ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ํด์ํ๋ ์๊ฐ์ ์ ๊ฑฐํ์ฌ ์ ์ฒด์ ์ธ ํผํฌ๋จผ์ค๊ฐ ์ข๊ณ , ๋ฒ ํฐ๋ฆฌ ์๋ช
์ด ํฅ์๋ฉ๋๋ค. (์๋๋ก์ด๋ ๋ฒ์ 5.0 ์ด์)
Core Libraries๋ ๋ฆฌ๋
์ค ์ปค๋์ ๋ํํ๊ฑฐ๋ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ญํ ์ ํ๋ฉฐ JNI๋ฅผ ํตํด Core Libeary๊ฐ Native ์์ญ์ ์ ๊ทผํ ์ ์๋๋ก ํฉ๋๋ค.
5. HAL
์์ ์์ค์ธ Java API Framework์ ๊ธฐ๊ธฐ ํ๋์จ์ด ๊ธฐ๋ฅ์ ๋ ธ์ถํ๋ ํ์ค ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. Java API Framework๊ฐ ๊ธฐ๊ธฐ ํ๋์จ์ด์ ์ก์ธ์ค ํ๊ธฐ์ํด ํธ์ถ์ ์ํํ๋ฉด, ์๋๋ก์ด๋ ์์คํ ์ด ํด๋น ํ๋์จ์ด ๊ตฌ์ฑ์์์ ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ๋์ ๋ก๋ํ๊ธฐ ๋๋ฌธ์ ํ์ ์์ค์ ๋๋ผ์ด๋ฒ๋ฅผ ๊ตฌํํ์ง ์์๋ ๋ฉ๋๋ค.
6. Linex Kernel
ART๋ ์ค๋ ๋ฉ ๋ฐ ํ์ ์์ค์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๊ฐ์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ Linex ์ปค๋์ ์ฌ์ฉํฉ๋๋ค.
Build(๋น๋)๋ ์์ค์ฝ๋ ํ์ผ์ ์คํ ๊ฐ๋ฅํ ์ํํธ์จ์ด ์ฐ์ถ๋ฌผ๋ก ๋ง๋๋ ์ผ๋ จ์ ๊ณผ์ ์ ๋๋ค.
Navigation back stack์ด๋ back ๋ฒํผ์ ๋๋ฌ ์ด์ ํ๋ฉด์ผ๋ก ๋์๊ฐ๋ ๊ตฌ์กฐ๋ฅผ ์ง์ํ๊ธฐ ์ํด์, ๋ด๋ถ์ ์ผ๋ก ํ๋ฉด์ด ์ ํ๋๋๋ผ๋ ๊ธฐ์กด์ ํ๋ฉด์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํด๋๋ Stack ์
๋๋ค.
NDK๋ C์ C++ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ์ฑ์ ์ผ๋ถ๋ฅผ ๊ตฌํํ ์ ์๊ฒํ๋ ๋๊ตฌ ๋ชจ์ ์
๋๋ค.
JVM์ด๋ OS ์์์์ ๋์ํ์ฌ OS์ ๋
๋ฆฝ์ ์ผ๋ก ์คํ ๊ฐ๋ฅํ ์๋ฐ ์ปดํ์ผ๋ฌ๋ก ๋ถํฐ ์๋ฐ ์ฝ๋๋ฅผ ์ปดํ์ผํ์ฌ ์ป์ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ํด๋น ์ด์์ฒด์ ๊ฐ ์ดํดํ ์ ์๋ ๊ธฐ๊ณ์ด๋ก ๋ฐ๊พธ์ด ์คํ ์์ผ์ฃผ๋ ๊ฐ์ ๋จธ์ ์
๋๋ค.
VM์ด๋ ์ปดํจํฐ์์ ์คํ๋๋ ์ปดํจํฐ์ฒ๋ผ ๋์ผํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ํํธ์จ์ด ์
๋๋ค.
DEX๋ ์๋๋ก์ด๋ ์ฉ์ผ๋ก ์ค๊ณ๋ ๋ฐ์ดํธ ์ฝ๋ ํ์์ผ๋ก ์ต์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ง๊ฒ ์ต์ ํ ๋์ด์์ต๋๋ค.