안드로이드 Device ID(디바이스 ID)는 무엇을 써야 할까? IMEI, ADID, ANDROID_ID 비교
개발/안드로이드1 2025. 12. 17. 13:02안드로이드 앱을 개발하다 보면, 기기를 식별해야 하는 상황이 종종 생깁니다.
로그인 기기 관리, 비정상 접근 감지, 간단한 통계 수집 등 다양한 이유로 기기 단위의 식별값이 필요해지곤 합니다.
안드로이드에서 고유식별자를 가져오는 방법은 여러 가지가 있지만, 대표적으로 아래 세 가지가 많이 언급됩니다.
- IMEI / MEID
- 광고 ID (ADID)
- Settings.Secure.ANDROID_ID
기기 고유 식별자(Device ID) 방법 선정
안드로이드에서 기기 고유 식별자(Device ID)를 가져온다고 하면, 가장 먼저 IMEI나 광고 ID를 떠올리는 경우가 많습니다.
하지만 실제 서비스 앱을 개발하다 보면, 이 두 가지를 그대로 사용하기에는 현실적인 제약이 상당히 많습니다.
그래서 대부분의 앱에서는 최종적으로 ANDROID_ID(소프트웨어 기반 식별자)를 선택하게 됩니다.
왜 그런지 하나씩 짚어보고, 얻어올 수 있는 코드도 살펴보겠습니다.
1. IMEI / MEID
IMEI와 MEID는 단말기 자체에 부여된 하드웨어 기반 식별자입니다.
- IMEI: GSM 기반 단말
- MEID: CDMA 기반 단말
장점
- 기기 단위로 거의 변경되지 않는 강력한 식별자
- 통신사, 단말 관리 목적에는 매우 정확함
단점
- Android 10(Q) 이후부터는 일반 앱에서 접근 불가
- READ_PHONE_STATE 권한 필요
- 개인정보 이슈로 사용이 사실상 제한됨
현재는 시스템 앱이나 통신사 전용 앱이 아닌 이상 사용하기 어렵다고 보시면 됩니다.
2. 광고 ID (ADID, Advertising ID)
광고 ID는 구글이 제공하는 사용자 단위 식별자입니다.
주로 광고 추적, 마케팅 분석 목적으로 사용됩니다.
장점
- 구글에서 공식적으로 제공
- 사용자 단위 식별 가능
- 재설정 가능하여 개인정보 보호 측면에서 비교적 안전
단점
- 사용자가 직접 재설정 가능
- 광고 개인 최적화 제한 설정 시 사용 불가
- “기기 고유” 개념과는 거리가 있음
광고 목적이 아니라면, 고유 식별자로 쓰기에는 적합하지 않은 편입니다.
2. ANDROID_ID (소프트웨어 기반 식별자)
장점
- 별도 권한 요청 불필요
- 구현이 간단함
- 대부분의 기기에서 안정적으로 사용 가능
주의사항
- 기기 초기화(공장 초기화) 시 변경될 수 있음
- Android 8.0(Oreo) 이상에서는 앱 서명 + 사용자 기준으로 생성
- 서로 다른 앱에서는 값이 다를 수 있음
즉, "앱 내에서 사용하는 기기 식별자" 정도로 이해하는 것이 가장 정확합니다.
안드로이드 고유식별자 비교 정리
안드로이드에서 사용 가능한 대표적인 고유식별자들을 한눈에 비교하면 아래와 같습니다.
| 구분 | IMEI / MEID |
광고 ID (ADID) | ANDROID_ID |
| 식별 기준 | 단말기(하드웨어) | 사용자 | 앱 + 기기 |
| 변경 가능 여부 | 거의 불가 | 사용자가 직접 재설정 가능 | 기기 초기화 시 변경 가능 |
| 접근 권한 | READ_PHONE_STATE 필요 | 별도 권한 없음 | 별도 권한 없음 |
| Android 정책 | 일반 앱 사용 제한 | 사용 가능 | 사용 가능 |
| 기기 고유성 | 매우 높음 | 낮음 | 중간 |
| 앱 간 동일 여부 | 동일 | 동일 | 앱마다 다를 수 있음 |
| 개인정보 민감도 | 매우 높음 | 중간 | 낮음 |
| 주 사용 목적 | 통신, 단말 관리 | 광고, 마케팅 | 앱 내 기기 식별 |
| 일반 앱 사용 적합성 | 낮음 | 보통 | 높음 |
Settings.Secure.ANDROID_ID 가져오는 방법
안드로이드에서 ANDROID_ID를 가져오는 코드는 매우 간단합니다.
String androidId = Settings.Secure.getString(
context.getContentResolver(),
Settings.Secure.ANDROID_ID
);
콜론(:)이 포함된 형태로 내려오는 경우, 서버 전송이나 비교 용도로 사용한다면 아래처럼 가공해서 쓰는 경우도 많습니다.
String androidId = Settings.Secure.getString(
context.getContentResolver(),
Settings.Secure.ANDROID_ID
).replace(":", "");
이 값은
- 앱을 다시 실행해도 유지되고
- 일반적인 사용 환경에서는 호출할 때마다 바뀌지 않습니다.
에뮬레이터의 경우 초기화나 이미지 변경에 따라 값이 달라질 수는 있습니다.




