[iOS] CoreBluetooth (1) - 개요

Madeline👩🏻‍💻·2024년 5월 16일
2

iOS study

목록 보기
49/61
post-custom-banner

🩵 1. 개요

CoreBluetooth에 대해 알아보자.

번역한 문서:
https://developer.apple.com/library/archive/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/AboutCoreBluetooth/Introduction.html#//apple_ref/doc/uid/TP40013257

https://developer.apple.com/library/archive/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothOverview/CoreBluetoothOverview.html#//apple_ref/doc/uid/TP40013257-CH2-SW1

At a glance

“블루투스 저전력 무선 기술”은 Bluetooth 4.0 명세를 기반으로 하고 있다.

이 명세는 저전력 장치 간 통신을 위한 일련의 프로토콜을 정의하고 있다.

CoreBluetooth 프레임워크는 블루투스 저전력 프로토콜 스택의 추상화이다.

이는 개발자인 너에게, 명세의 많은 저수준 세부 정보를 숨기므로, 너가 블루투스 저전력 장치와 상호 작용하는 앱을 개발하기가 훨씬 쉽다.

핵심은 중앙(Central)과 주변(Peripheral)이다.

블루투스 저전력 통신에서 두 가지 핵심 주인공이 있다:
중앙주변. 각각 다른 역할을 하고 있다.

다소 전통적인 클라이언트-서버 아키텍처를 기반으로, 주변 장치는 일반적으로 다른 장치가 필요로 하는 데이터를 갖고 있다.

예를 들어, 위 사진에 나와 있는 것처럼 심박수 모니터는 사용자의 심박수를 사용자 친화적인 방식으로 표시하기 위해 Mac 또는 iOS 앱에서 필요한 유용한 정보를 갖고 있을 수 있다.

또 예를 들어, 블루투스 저전력 기술을 갖춘 디지털 온도 조절기는, 온도를 iOS 앱에 제공하여 사용자가 보기 편한 방식으로 온도를 표시할 수 있다.

중앙

  • 중앙은 주변에서 제공하는 정보를 사용하여 어떤 작업을 수행한다.
  • 주변은 일반적으로 다른 장치에서 필요한 데이터를 갖고 있다.

  • 중앙은 관심 있는 주변 장치를 찾아내기 위해 검색한다.
  • 주변 장치는 공중에서 갖고 있는 데이터를 광고하여 존재를 알린다.
  • 중앙이 그런 주변 장치를 발견하면, 중앙주변에 연결을 요청하고 주변의 데이터를 탐색하고 상호 작용하기 시작한다.
  • 주변은 적절한 방식으로 중앙에 응답하는 역할을 담당한다.

주변 장치는 광고 패킷 형식으로 일부 데이터를 broadcast한다. 광고 패킷은 주변 장치가 제공하는 정보에 대한 유용한 정보를 포함할 수 있는 비교적 작은 데이터 번들이다.

예를 들어, 디지털 온도 조절기는 방의 현재 온도를 제공한다는 사실을 광고할 수 있다. Bluetooth 저전력에서 광고는 주변 장치가 자신의 존재를 알리는 주요 방법이다.

반면에 중앙은 광고하는 주변 장치를 검색하고 듣는다. 중앙은 관심 있는 정보를 광고하는 어떤 주변 장치든 검색하고 연결을 요청할 수 있다.

https://developer.apple.com/library/archive/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothOverview/CoreBluetoothOverview.html#//apple_ref/doc/uid/TP40013257-CH2-SW1

CoreBluetooth는 일반 블루투스 작업을 단순화한다.

CoreBluetooth 프레임워크는 Bluetooth 4.0 명세의 저수준 세부 정보를 추상화한다. 결과적으로, 앱에서 구현해야 할 일반적인 블루투스 저전력 작업이 단순화되는거다.

중앙 역할을 구현하는 앱을 개발 중이라면, CoreBluetooth를 사용하여 주변 장치를 발견하고 연결하고 주변의 데이터를 탐색하고 상호 작용하는 것이 쉽다!

게다가, CoreBluetooth는 로컬 장치를 주변 장치로 구현하는 것도 쉽게 해준다.

iOS 앱 상태가 블루투스 동작에 영향을 미친다.

iOS 앱이 백그라운드나 중단된 상태에 있을 때, 블루투스 관련 기능이 영향을 받는다. 기본적으로, 앱이 백그라운드나 중단된 상태에서는 블루투스 저전력 작업을 수행할 수 없다. 하지만, 앱이 백그라운드에서 블루투스 저전력 작업을 수행해야 하는 경우, CoreBluetooth 백그라운드 실행 모드(중앙 역할용과 주변 역할용이 각각 있어)를 지원하기로 선언할 수 있다. 이 백그라운드 실행 모드 중 하나 이상을 선언하더라도, 앱이 백그라운드에 있을 때 일부 블루투스 작업은 다르게 작동한다. 앱을 설계할 때 이러한 차이를 고려해야 한다.

UX를 향상시키는 방법

CoreBluetooth 프레임워크는 여러분의 앱에 일반적인 블루투스 저전력 거래에 대한 제어권을 줄거다. 이 수준의 컨트롤을 책임 있는 방식으로 활용하여, 사용자 경험을 향상시키기 위해 최적의 방법을 따르시오.

예를 들어, 중앙 또는 주변 역할을 구현할 때 수행하는 많은 작업은, 장치의 기본 무선 라디오를 사용하여 공중으로 신호를 전송한다. 장치의 라디오는 다른 형태의 무선 통신과 공유되며, 라디오 사용은 장치의 배터리 수명에 부정적인 영향을 미친다. 따라서 앱을 설계할 때 항상 라디오 사용을 최소화하는 것이 좋다.

🩵 2. 데이터 구조

주변(Peripheral) 데이터 구조

주변 장치에 연결하는 목적은 그 장치가 주는 데이터를 탐색하고 상호 작용하기 위함이다. 그러나 이를 시작하기 전에 주변 장치의 데이터 구조를 이해해야 한다.

주변 장치에는 하나 이상의 서비스가 포함되어 있거나, 연결된 신호 강도에 대한 유용한 정보를 제공할 수 있다.

서비스는 장치의 기능 또는 기능 부분을 수행하기 위한 데이터와 관련 동작의 모음이다. 예를 들어, 심박수 모니터의 한 서비스는 모니터의 심박수 센서에서 “심박수 데이터를 노출하는 것”일 수 있다.

서비스 자체는 특성 또는 포함된 서비스(다른 서비스에 대한 참조)로 구성된다.

특성은 주변 장치의 서비스에 대한 자세한 정보를 제공한다.

예를 들어, 방금 설명한 심박수 서비스에는 장치의 “심박수 센서의 의도된 신체 위치”를 설명하는 특성과 “심박수 측정 데이터를 전송”하는 다른 특성이 포함될 수 있다. 위 사진은 심박수 모니터(주변 장치)의 서비스특성의 한 가능한 구조를 설명한다.

중앙(Centrals)이 주변(Peripheral) 장치의 데이터를 갖다 써

중앙이 주변 장치와 성공적으로 연결을 설정한 후에는, 주변 장치가 제공하는 전체 서비스와 특성을 발견할 수 있다. (광고 데이터는 사용 가능한 서비스의 일부만을 포함할 수 있다).

광고 데이터가 뭐더라?
주변 장치가 주변에 자신의 존재와 제공하는 서비스에 대한 간단한 정보를 알리기 위해 전파하는 작은 데이터 패킷. 이는 주변 장치가 연결되지 않은 상태에서도 주변에 있는 중앙 장치들이 해당 주변 장치를 발견하고 연결을 요청할 수 있도록 하는 데 사용된다. 광고 데이터에는 주변 장치의 이름, 유형, 제공하는 서비스 등이 포함될 수 있다. 이를 통해 중앙 장치는 주변 장치의 존재를 감지하고 필요한 서비스를 찾을 수 있게 된다.

중앙은 또한 주변 장치의 서비스와 상호 작용할 수 있다.

⇒ 이는 해당 서비스의 특성 값을 읽거나 쓰는 것을 의미한다.

예를 들어, 여러분의 앱은 디지털 온도 조절기로부터 현재 방 온도를 요청할 수 있으며, 또는 방 온도를 설정할 값을 제공할 수도 있다.

중앙, 주변 장치, 주변 장치 데이터의 표현 방법

블루투스 저전력 통신에 관여하는 주요 주체 및 데이터는 CoreBluetooth 프레임워크에 간단하고 직관적인 방식으로 매핑된다.

중앙 측 객체 Objects on the Central Side

로컬 중앙을 사용하여 원격 주변 장치와 상호 작용하는 경우, 여러분은 블루투스 저전력 통신의 중앙 측에서 작업을 수행한다.

로컬 주변 장치를 설정하고 중앙의 요청에 응답하기 위해 사용하지 않는 이상, 여러분의 대부분의 블루투스 트랜잭션이 중앙 측에서 이루어질 거다.

로컬 중앙 및 원격 주변 장치

중앙 측에서 로컬 중앙 장치는 CBCentralManager 객체로 표현된다. 이러한 객체들은 발견되거나 연결된 원격 주변 장치(CBPeripheral 객체로 표현됨)를 관리하는 데 사용된다. 이는 광고 주변 장치를 검색하고 발견하며 연결하기 위한 스캔을 포함한다. Core Bluetooth 프레임워크에서 로컬 중앙 및 원격 주변 장치가 어떻게 표현되는지는 아래 사진에서 보여진다.

원격 주변 장치의 데이터 ⇒ CBServiceCBCharacteristic 객체로 표현된다.

원격 주변 장치의 데이터와 상호 작용할 때(CBPeripheral 객체로 표현됨), 해당 서비스특성을 다루게 된다. Core Bluetooth 프레임워크에서 원격 주변 장치의 서비스CBService 객체로 표현된다. 마찬가지로, 원격 주변 장치의 서비스특성CBCharacteristic 객체로 표현된다.

아래 사진은 원격 주변 장치의 서비스특성의 기본 구조를 보여준다.

주변장치 측 객체

macOS 10.9 및 iOS 6부터, 맥과 iOS 기기는 Bluetooth 저전력 주변 장치로 작동하여 다른 기기에 데이터를 제공할 수 있다. 이 때, 장치를 주변 장치 역할로 설정하면 Bluetooth 저전력 통신의 주변 장치 측에서 작업을 수행하게 된다.

로컬 주변 장치 및 원격 중앙

주변 장치 측에서 로컬 주변 장치는 CBPeripheralManager 객체로 표현된다. 이러한 객체들은 로컬 주변 장치의 서비스 및 특성 데이터베이스 내에서 발행된 서비스를 관리하고 이러한 서비스를 원격 중앙 장치(CBCentral 객체로 표현됨)에게 광고하는 데 사용된다.

주변 장치 관리자 객체는 또한 이러한 원격 중앙 장치로부터의 읽기 및 쓰기 요청에 응답하는 데 사용된다. 아래 사진은 CoreBluetooth 프레임워크에서 로컬 주변 장치 및 원격 중앙 장치가 어떻게 표현되는지 보여준다.

로컬 주변 장치의 데이터는 CBMutableServiceCBMutableCharacteristic 객체로 표현된다. 로컬 주변 장치(CBPeripheralManager 객체로 표현됨)의 데이터를 설정하고 상호 작용할 때, 해당 서비스특성의 가변 버전과 다루게 된다. CoreBluetooth 프레임워크에서 로컬 주변 장치의 서비스CBMutableService 객체로, 해당 서비스의 특성CBMutableCharacteristic 객체로 나타낸다. 아래 사진은 로컬 주변 장치의 서비스와 특성의 기본 구조를 설명한다.

profile
🍎 Apple Developer Academy@POSTECH 2기, 🍀 SeSAC iOS 4기
post-custom-banner

0개의 댓글