본문 바로가기

Develop

Bluetooth에서 사용하는 UUID 정리 (BLE UUID 이해)

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