개요
나는 안드로이드 개발자가 되기 위해서 공부를 하고 있는 취준생이다.
문득 이런 생각이 들었다.
나는 무엇을 하고 있는가?
나는 그냥 학교에서, 인터넷에서 배운데로 안드로이드 스튜디오를 키고 무작정 코드를 따라 치고 있었을 뿐이었다.
나는 엘리트 안드로이드 개발자가 되고 싶기 때문에, 더 이상은 이렇게 하지 않을 것이다.
엘리트 개발자들을 모방하고 그들의 태도까지 싹 다 훔쳐올 것이다.
그러기 위해서 먼저 사고방식부터 바꾸기로 했다.
근본적인 질문을 던져보자.
나는 무엇을 하고 있는가?
내가 하는 일과 컴퓨터가 하는 일
결국 내가 하는 일은 코드를 작성하고 몇 가지 파일들을 알맞은 위치에 넣는 일이다.
간단하게 보면 그렇다.
거창하게 갈 필요가 없다. 사용자에게 가치를 제공하고 뭐 유지보수를 하고 다 나중 얘기다.
다 부수적인 얘기들이다. 그건 본질이 아니다.
나는 코드를 치고 리소스들을 알맞은 위치에 넣는다.
여기까지가 내가 하는 일이다.
그 이면에는 어떤 일들이 벌어지고 있을까?
ART vs JVM
내가 하는 일이 코드를 치는 일이라면 이 일을 더 잘하기 위해 그 이면에 있는 것을 보아야 한다.
사용자에게 가치를 제공해주고 비즈니스 효과를 가져오는 그 앱.
우리에게 돈을 벌어다 주는 그 앱.
그 앱은 어떻게 작동하는 것일까.
그 이면에는 ART라는게 있다.
ART는 안드로이드 휴대폰을 가지고 있는 사람들의 휴대폰에는 모두 깔려있는 일종의 소프트웨어다. 프로그램이다.
이런 소프트웨어를 시스템 소프트웨어라고 부른다고 하더라.
ART는 Android OS 위에서 작동하는 일종의 시스템 소프트웨어다.
이 소프트웨어의 역할은 크게 3가지다.
첫째, DEX 바이트코드를 실행한다. 이 과정에서 AOT 컴파일이라는 개념이 나온다.
AOT 컴파일 방식은 쉽게 말해 앱이 휴대폰에 설치될 때, 기계어로 미리 변환해두는 방식이다.
이렇게 하면 더 효율적으로 DEX 바이트코드를 실행시킬 수 있다.
휴대폰에서는 배터리 사용량을 절감하는게 중요한 이슈이므로 이러한 방식은 성능을 최적화시킨다.
ART의 자체적인 작동 방식도 성능을 최적화하기 위한 코드들로 짜여있다.
둘째, 메모리를 관리한다.
C언어의 경우 언어 레벨에서 메모리를 관리할 수 있다는 것이 큰 장점이라고들 한다.
안드로이드 앱 실행 과정에서는 메모리 관리를 내 코드가 하지 않고 주로 ART가 자동적으로 하게 된다.
ART의 중요한 역할 중 하나다.
셋째, 실제 앱 실행 과정에서 성능을 추적한다.
이게 JVM과는 확연하게 다른 점이다. 약간 JDK 같은 느낌이랄까.
ART는 안드로이드 앱의 실행 환경에 맞게 디버깅, 프로파일링 및 성능 분석 도구를 제공한다.
안드로이드 스튜디오에서 Android Profiler와 같은 도구들을 사용할 수 있는 이유도 ART가 이런 기능을 제공하기 때문이다.
JVM vs ART
보통 자바 프로그램을 만들고 실행하기 위해서는 OS와 JVM이 필요하다.
JVM 위에는 JRE라는 개념이 있고 이는 몇 가지 공식 라이브러리들을 포함한 개념이다.
JRE 위에는 JDK라는 개념이 있다. JDK는 java 코드를 작성하는 데에 필요한 몇 가지 도구들을 제공한다.
쉽게 말해, JDK와 자바 코드가 있다면 자바 프로그램을 만들 수 있다.
그렇다면 안드로이드 앱은 어떻게 만들 수 있을까?
결론부터 얘기하자면 안드로이드 OS와 ART가 있어야 한다. 그래야 실행시킬 수 있기 때문이다.
ART는 덱스 바이트코드라는게 필요하다.
결국 ART와 덱스 바이트코드가 있으면 안드로이드 앱을 만들 수 있는 것이다.
DEX 바이트코드 만들기
ART는 내 앱을 사용할 누군가의 핸드폰에 이미 설치되어 있다.
그렇다면 DEX 바이트코드는? 내가 만들어서 플레이 스토어에 주어야 한다.
결국 앱이 동작한다는 것은 안드로이드 OS 그리고 ART 그리고 apk 파일의 협력의 결과물이다.
apk 파일은 일반적인 실행 파일이 아니다.
dex 파일뿐 아니라 Manifest.xml 파일, 리소스 파일들, 자원 압축 파일, 라이브러리 파일, META-INF 등의 정보를 담고 있다.
결국 apk를 실행시키는 주체는 안드로이드 OS이다. ART가 아니라.
ART는 OS가 apk를 사용할 수 있도록 도와주는 보조 기구일 뿐이다.
ART가 OS를 사용하는 것이 아니라 OS가 ART를 사용하는 것이다.
'Computer' 카테고리의 다른 글
[ Tebah ] Tebah 앱 개발기 : 도메인 설계를 시작하며 (1) | 2025.04.19 |
---|---|
[CS] 프로세스와 스레드 (0) | 2025.03.26 |
[Android] Kapt Error (2) | 2024.12.10 |
[Kotlin] 클래스를 상속받을 때 주의할 점 (0) | 2024.12.09 |
[Jetpack Compose] Compose, 최적화를 위한 원칙 (0) | 2024.11.21 |