안드로이드 (Android)
개요
안드로이드는 구글이 개발한 리눅스 커널을 기반으로 한 오픈소스 모바일 운영체제입니다. 2008년 첫 번째 상용 버전이 출시된 이후, 현재 전 세계 스마트폰 시장의 약 70% 이상을 차지하는 가장 널리 사용되는 모바일 운영체제입니다.
안드로이드의 특징
- 리눅스 커널 기반: 안드로이드는 리눅스 커널을 기반으로 하여 안정성과 보안성을 확보
- 오픈소스: 대부분의 소스코드가 공개되어 있어 개발자들이 자유롭게 수정하고 배포 가능
- 다양한 기기 지원: 스마트폰뿐만 아니라 태블릿, 스마트워치, TV, 자동차 등 다양한 기기에 적용
- 풍부한 앱 생태계: 구글 플레이 스토어를 통해 수백만 개의 앱 제공
안드로이드 아키텍처
안드로이드 운영체제는 계층적 구조로 설계되어 있으며, 각 계층은 명확한 역할과 책임을 가지고 있습니다.
1. 리눅스 커널 (Linux Kernel)
안드로이드의 가장 하위 계층으로, 하드웨어 추상화와 시스템 리소스 관리를 담당합니다.
주요 기능:
- 하드웨어 드라이버 관리: 디스플레이, 카메라, 센서, 네트워크 등 하드웨어 장치 제어
- 메모리 관리: 프로세스별 메모리 할당 및 관리
- 프로세스 관리: 멀티태스킹 환경에서 프로세스 스케줄링
- 보안: 파일 시스템 권한, 사용자 권한 관리
- 네트워킹: TCP/IP 스택, 무선 네트워크 지원
2. 하드웨어 추상화 계층 (HAL - Hardware Abstraction Layer)
하드웨어와 상위 소프트웨어 계층 사이의 인터페이스를 제공합니다.
역할:
- 하드웨어 제조사별 차이점을 추상화하여 일관된 API 제공
- 카메라, 오디오, 센서 등의 하드웨어 기능을 표준화된 인터페이스로 제공
- 새로운 하드웨어 추가 시 상위 계층 수정 없이 HAL만 수정하면 됨
3. 네이티브 라이브러리 (Native Libraries)
C/C++로 작성된 네이티브 라이브러리들로, 성능이 중요한 기능들을 담당합니다.
주요 라이브러리:
- SQLite: 데이터베이스 관리
- WebKit: 웹 브라우저 엔진
- OpenGL ES: 3D 그래픽 렌더링
- Media Framework: 오디오/비디오 재생 및 녹화
- Surface Manager: 화면 표시 관리
4. 안드로이드 런타임 (Android Runtime)
안드로이드 애플리케이션이 실행되는 환경을 제공합니다.
구성 요소:
- Dalvik Virtual Machine (DVM): 안드로이드 4.4 이전 버전에서 사용
- Android Runtime (ART): 안드로이드 5.0부터 기본 런타임으로 사용
- AOT(Ahead-of-Time) 컴파일로 성능 향상
- 메모리 사용량 최적화
- 배터리 수명 개선
5. 애플리케이션 프레임워크 (Application Framework)
안드로이드 애플리케이션 개발을 위한 고수준 API를 제공합니다.
주요 컴포넌트:
- Activity Manager: 애플리케이션 생명주기 관리
- Window Manager: 화면 레이아웃 및 윈도우 관리
- Content Providers: 데이터 공유 및 접근
- View System: UI 구성 요소
- Notification Manager: 알림 시스템
- Package Manager: 애플리케이션 설치 및 관리
6. 애플리케이션 (Applications)
사용자가 직접 사용하는 애플리케이션들입니다.
기본 애플리케이션:
- 전화, 메시지, 연락처
- 웹 브라우저, 이메일
- 카메라, 갤러리
- 음악 플레이어, 비디오 플레이어
- 설정, 파일 관리자

안드로이드 시스템 접속
안드로이드는 리눅스 커널을 기반으로 하기 때문에, 리눅스 시스템과 유사한 방식으로 접속할 수 있습니다.
1. ADB (Android Debug Bridge) 접속
가장 일반적이고 안전한 방법으로, 개발자 옵션을 활성화하여 사용할 수 있습니다.
설정 방법:
- 설정 → 휴대전화 정보 → 빌드 번호 7번 탭
- 설정 → 개발자 옵션 → USB 디버깅 활성화
- PC에 ADB 설치 후 USB 연결
주요 ADB 명령어:
# 디바이스 연결 확인
adb devices
# 쉘 접속
adb shell
# 파일 전송
adb push [로컬파일] [원격경로]
adb pull [원격파일] [로컬경로]
# 앱 설치
adb install [apk파일]
2. Telnet 접속
안드로이드 에뮬레이터나 루팅된 기기에서 사용 가능합니다.
에뮬레이터에서 사용:
# 에뮬레이터 포트 확인 (기본: 5554)
telnet localhost 5554
# 쉘 접속
shell
루팅된 기기에서 사용:
- Telnet 서버 앱 설치 필요
- 보안상 위험하므로 개발 환경에서만 사용 권장
3. SSH 접속
루팅된 기기에서 SSH 서버를 설치하여 사용할 수 있습니다.
설정 방법:
- SSH 서버 앱 설치 (예: SSHDroid)
- 서비스 시작 및 포트 설정
- PC에서 SSH 클라이언트로 접속
4. 루팅 (Rooting)과 관련된 주의사항
루팅의 의미:
- 안드로이드 기기의 최고 권한(root)을 획득하는 과정
- 시스템 파일 수정 및 삭제 가능
- 커스텀 ROM 설치 가능
루팅의 장점:
- 시스템 레벨 앱 설치 가능
- 성능 최적화 및 커스터마이징
- 백업 및 복원 기능 강화
루팅의 단점:
- 보안 위험 증가
- 금융 앱, 결제 서비스 사용 제한
- 구글 플레이 스토어 일부 앱 설치 불가
- 보증 무효화
- 시스템 불안정 가능성
안드로이드와 리눅스의 관계
1. 리눅스 커널 활용
안드로이드는 리눅스 커널의 핵심 기능들을 그대로 활용합니다.
활용되는 리눅스 기능:
- 프로세스 관리: 멀티태스킹, 프로세스 스케줄링
- 메모리 관리: 가상 메모리, 페이지 관리
- 파일 시스템: ext4, FAT32 등 지원
- 네트워킹: TCP/IP, 무선 네트워크 프로토콜
- 보안: SELinux, 파일 권한 관리
2. 안드로이드 전용 수정사항
리눅스 커널을 모바일 환경에 최적화하기 위해 여러 수정사항이 적용되었습니다.
주요 수정사항:
- Wake Lock: 배터리 절약을 위한 CPU 깨우기 제어
- Binder IPC: 프로세스 간 통신 최적화
- Low Memory Killer: 메모리 부족 시 프로세스 종료
- Power Management: 전력 관리 최적화
학습 목표
이번 학습을 통해 다음 사항들을 이해할 수 있습니다:
- 안드로이드의 기본 개념과 특징
- 안드로이드 아키텍처의 각 계층별 역할
- 리눅스 커널과 안드로이드의 관계
- 안드로이드 시스템 접속 방법
- 루팅의 개념과 주의사항
실습 과제
- ADB 환경 구축: 개발자 옵션 활성화 및 ADB 설치
- 기본 명령어 실습: adb devices, adb shell 등
- 시스템 정보 확인: CPU, 메모리, 저장공간 정보 조회
- 파일 시스템 탐색: 안드로이드 파일 시스템 구조 이해