속성 - 속성은 사용자 데이터와 속성 자체에 대한 메타데이터(속성 유형, 보안 권한 등)를 포함한다. - ATT 서버와 클라이언트 간, 또는 GATT 서버와 클라이언트 간의 데이터 교환은 속성의 형태로 이루어진다. - 속성만을 논할 때 => ATT 서버에 저장된다고 한다. - 반면, 속성을 서비스와 특성으로 분류할 때 => 이를 GATT 서버의 데이터 구조라고 한다.
속성은 네 가지 주요 구성 요소로 이루어져 있다.
속성 (Attributes)
핸들 (Handle): 특정 속성에 할당된 16비트 고유 인덱스
유형 (UUID): 속성의 유형을 나타내는 범용 고유 식별자(UUID).
권한 (Permissions): 속성에 접근하기 위해 필요한 보안 수준과 읽기/쓰기 가능 여부를 정의
값 (Value): 속성에 저장된 실제 데이터
범용 고유 식별자 (UUID)
UUID는 속성과 그 중요성을 식별하는 데 중요하다. BLE에서는 두 가지 유형의 UUID가 있다.
SIG 정의 16비트 UUID: 효율적이고 메모리를 절약하지만 고유 ID의 수가 제한적
128비트 UUID: 사용자 정의 서비스와 특성에 사용되며, 더 넓은 범위의 고유 ID를 제공 EX) 기본 UUID는 4A98-xxxx-1CC4-E7C1-C757-F1267DD021E8과 같으며, 이 중 xxxx 부분에 16비트 ID를 삽입하여 사용.
서비스 (Services)
서비스는 표준화된 형식으로 조직된 속성의 모음이다. 서비스 정의(Service Define)는 **서비스 선언 속성 (Service Declaration Attribute)**으로 시작한다. Service Declaration Attribute는 다음을 포함한다.
핸들 (Handle): 속성의 주소를 나타내는 행 번호와 유사.
유형 (UUID): 서비스 시작을 나타내는 고유 SIG 정의 UUID(예: 0x2800).
권한 (Permissions): 일반적으로 읽기 전용이며, 인증이 필요하지 않음.
값 (Value): 선언된 서비스의 UUID를 저장 ex) 심박수 서비스: UUID 0x180D로 식별
특성 (Characteristics)
서비스는 0개 이상의 특성 정의로 구성될 수 있다. 특성은 최소 두 개 이상의 속성으로 구성된다.
특성 선언 속성 (Characteristic Declaration Attribute) 아래의 세 가지 Field를 가진다
Type :특성의 시작을 나타내며, UUID 0x2803을 사용
Permissions :읽기 전용 권한을 가지며, 클라이언트는 값을 읽을 수 있지만 쓸 수는 없다.
Value : 선언된 특성에 대한 중요한 정보를 포함하며, 세 개의 개별 Field 로 구성된다.
특성 속성 (Characteristic properties): 해당 특성에서 허용되는 GATT 작업 유형을 나타냄.
특성 값 핸들 (Characteristic value handle): 사용자 데이터(값)를 포함하는 속성의 핸들(주소)로, 특성 값 속성을 의미함.
특성 UUID (Characteristic UUID): 선언된 특성의 UUID
특성 값 속성 (Characteristic Value Attribute)
실제 사용자 데이터를 저장
Handle과 Type은 위 선언 속성에서 참조하며, 값 필드에 실제 유저 데이터를 저장한다.
특성 설명자 속성 (Characteristic Descriptor Attribute, 선택 사항)