Bluetooth Low Energy(BLE)를 개발하다 보면 Service, Characteristic, Descriptor를 식별하기 위해 UUID를 사용합니다.
하지만 BLE UUID는 일반적인 UUID와 약간 다른 특징을 가지고 있어 처음 보면 헷갈리기 쉽습니다.
이 글에서는 BLE UUID의 구조, 종류, Version 의미, Short UUID 확장 방식까지 한 번에 정리해보겠습니다.
1. UUID란 무엇인가
UUID는 Universally Unique Identifier의 약자로,
전 세계에서 중복되지 않도록 설계된 128-bit 식별자입니다.
UUID는 보통 다음과 같은 형태로 표현됩니다.
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
예시:
550e8400-e29b-41d4-a716-446655440000
UUID는 총 128bit (16byte) 로 구성됩니다.
구분크기
| UUID 전체 | 128 bit |
| Byte | 16 byte |
| Hex 문자 | 32개 |
2. UUID 내부 구조
UUID는 단순한 랜덤 값이 아니라 내부 구조가 정해져 있습니다.
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
↑ ↑
version variant
위치의미
| version | UUID 생성 방식 |
| variant | UUID 규격 |
예시:
550e8400-e29b-41d4-a716-446655440000
↑
version = 4
3. UUID Version 종류
UUID Version은 이 UUID가 어떤 방식으로 생성되었는지를 의미합니다.
Version설명생성 방식
| 1 | Time based UUID | timestamp + MAC address |
| 2 | DCE security UUID | POSIX UID 기반 |
| 3 | Name based UUID | namespace + name (MD5 hash) |
| 4 | Random UUID | 랜덤 값 |
| 5 | Name based UUID | namespace + name (SHA1 hash) |
| 6 | Ordered time UUID | time ordered UUID |
| 7 | Unix time UUID | epoch 기반 UUID |
실제 개발에서 가장 많이 사용되는 것은 다음입니다.
Version 1 → timestamp 기반
Version 4 → random UUID
Version 5 → hash 기반
4. BLE에서 사용하는 UUID
BLE에서는 Service / Characteristic / Descriptor를 식별하기 위해 UUID를 사용합니다.
예:
타입UUID
| Device Information Service | 180A |
| Battery Service | 180F |
| Client Characteristic Configuration Descriptor | 2902 |
하지만 여기서 중요한 점은 BLE는 항상 128bit UUID를 사용한다는 것입니다.
5. Bluetooth Base UUID
Bluetooth SIG는 UUID를 다음 Base UUID를 기준으로 확장합니다.
00000000-0000-1000-8000-00805F9B34FB
여기서 앞부분을 변경하여 사용합니다.
6. Short UUID 확장 방식
BLE에서는 16bit 또는 32bit UUID를 Base UUID에 확장하여 사용합니다.
16bit UUID
180A
확장:
0000180A-0000-1000-8000-00805F9B34FB
32bit UUID
12345678
확장:
12345678-0000-1000-8000-00805F9B34FB
7. BLE UUID 종류
BLE에서는 UUID가 다음 세 가지 형태로 사용됩니다.
UUID 타입크기예시
| 16-bit UUID | 2 byte | 180A |
| 32-bit UUID | 4 byte | 12345678 |
| 128-bit UUID | 16 byte | 550e8400-e29b-41d4-a716-446655440000 |
8. BLE에서 UUID가 사용되는 위치
BLE에서는 다음 항목들을 구분하기 위해 UUID를 사용합니다.
Service
기능 단위
예
180A Device Information Service
180F Battery Service
Characteristic
Service 내부 데이터
예
2A29 Manufacturer Name
2A19 Battery Level
Descriptor
Characteristic 속성
예
2902 Client Characteristic Configuration Descriptor (CCCD)
9. BLE UUID 특징
BLE UUID의 중요한 특징은 다음입니다.
1. 대부분 SIG UUID는 Base UUID를 사용
0000xxxx-0000-1000-8000-00805F9B34FB
2. Vendor Custom UUID 사용 가능
BLE 기기 제조사는 128bit custom UUID를 사용할 수 있습니다.
예
f000aa65-0451-4000-b000-000000000000
3. BLE UUID는 반드시 고유해야 함
Service / Characteristic 구분을 위해 UUID 충돌이 발생하면 안됩니다.
10. BLE 개발에서 자주 보는 UUID 예시
Device Information Service
180A
확장
0000180A-0000-1000-8000-00805F9B34FB
Battery Service
180F
확장
0000180F-0000-1000-8000-00805F9B34FB
CCCD (Notify / Indicate 설정)
2902
확장
00002902-0000-1000-8000-00805F9B34FB
11. BLE 개발 시 알아두면 좋은 포인트
BLE 개발을 하다 보면 다음 상황을 많이 보게 됩니다.
예:
service UUID: 180A
characteristic UUID: 2A29
descriptor UUID: 2902
하지만 실제 BLE Stack 내부에서는 모두 128bit UUID로 처리됩니다.
즉
180A
는 내부적으로
0000180A-0000-1000-8000-00805F9B34FB
로 사용됩니다.
정리
BLE UUID의 핵심 정리입니다.
- UUID는 128bit 고유 식별자
- BLE는 Base UUID 확장 방식 사용
- 16bit / 32bit / 128bit UUID 존재
- 대부분 SIG UUID는
0000xxxx-0000-1000-8000-00805F9B34FB
구조를 사용
- UUID에는 version 필드가 있으며 생성 방식 의미
BLE 개발을 한다면 UUID 구조와 확장 방식을 이해하는 것이 매우 중요합니다.
BLE 관련 추가 글도 정리해볼 예정입니다.
- BLE Service / Characteristic 구조
- Android BLE 연결 구조
- Flutter BLE Plugin 구조
필요하신 분들은 참고해주세요.
'Develop' 카테고리의 다른 글
| SonarQube 사용하기 (Mac OS) (2) | 2024.12.10 |
|---|---|
| Firebase 연결 이슈 (4) | 2024.04.07 |
| Map API 비교 (카카오vs네이버) (2) | 2019.11.02 |
| JitPack을 이용한 Library 배포 (Gradle) (2) | 2019.08.05 |
| 온더로드 제작기 #2 (3) | 2019.07.10 |