Advertising(광고)은 Bluetooth Low Energy에서 Peripheral 장치가 세 개의 전용 채널(37, 38, 39)을 통해 짧은 데이터 패킷을 전송하여 자신의 존재를 알리는 메커니즘입니다. Bluetooth Core Specification 5.4(2023)는 두 가지 유형의 광고를 정의합니다: connectable — 장치가 연결 준비가 됨, non-connectable — 양방향 통신 없이 데이터만 전송하는 비콘(Beacon)에서 사용됩니다. 광고 매개변수 — 간격 20 ms ~ 10.24 s, 송신 전력 -20 ~ +10 dBm 및 패킷 유형 — 은 장치 감지 속도와 전력 소비에 직접적인 영향을 미치며, 배터리로 작동하는 IoT 장치 개발에 중요합니다.
핵심 요점
Advertising(광고)은 BLE 장치가 짧은 데이터 패킷을 주기적으로 전송하여 자신의 존재와 가용성을 알리는 프로세스입니다. 장치 감지에 몇 초가 걸리는 클래식 Bluetooth와 달리, BLE 광고는 최소한의 전력을 소비하면서 밀리초 단위로 장치를 감지할 수 있습니다.
BLE 아키텍처는 장치를 두 가지 역할로 나눕니다: Peripheral(광고 전송) 및 Central(스캔). Peripheral이 광고 패킷을 보내고 Central이 공기를 스캔하여 연결 여부를 결정합니다. 이 비대칭 모델은 BLE의 주요 이점입니다: 광고 장치는 지속적으로 공기를 청취하는 대신 짧은 패킷 전송에만 에너지를 소비합니다.
광고 프로세스는 세 단계로 구성됩니다: advertising event(세 채널 모두에 패킷 전송), scan request/response(Central과의 선택적 교환), connection request(Central의 연결 시작). 각 단계는 Link Layer 수준에서 Bluetooth Controller에 의해 관리됩니다.
BLE는 2.4GHz 대역에서 40개 채널을 사용하며, 그중 37(2402MHz), 38(2426MHz), 39(2480MHz)는 광고 전용으로 할당됩니다. 세 개의 채널은 감지 신뢰성과 처리량 간의 절충안입니다: 하나의 채널이 Wi-Fi나 다른 간섭으로 사용 중이어도 다른 두 채널에서 장치가 감지됩니다.
채널 37은 Wi-Fi 채널 1 근처, 채널 39는 Wi-Fi 채널 6 근처, 채널 38은 그 사이의 최소 간섭 영역에 위치합니다. 세 채널의 선택은 수십 개의 Wi-Fi 액세스 포인트가 있는 쇼핑센터와 같은 혼잡한 무선 환경에서도 장치가 감지되도록 보장합니다.
Peripheral은 세 채널 모두에 순차적으로 광고 패킷을 전송합니다 — 이를 advertising event라고 합니다. 중앙 장치는 한 번에 하나의 채널을 스캔하며 Bluetooth Controller에 구현된 알고리즘에 따라 채널을 전환합니다. 충돌이 없는 경우 단일 advertising event 내 감지 확률은 100%에 가깝습니다.
Bluetooth Core Specification은 각각 고유한 목적을 가진 여러 유형의 광고 PDU(Protocol Data Unit)를 정의합니다. 주요 유형은: ADV_IND(connectable undirected advertising) — 연결 가능한 표준 광고, ADV_NONCONN_IND(non-connectable undirected advertising) — 연결 없는 광고만, ADV_SCAN_IND(scannable undirected advertising) — 스캔 요청 지원, ADV_DIRECT_IND(directed advertising) — 특정 Central을 위한 광고입니다.
ADV_IND는 대부분의 BLE 장치에서 사용되는 가장 일반적인 유형입니다. ADV_IND를 수신하면 Central이 연결 요청을 보내고 연결을 설정할 수 있습니다. ADV_NONCONN_IND는 비콘(Beacon)에서 사용됩니다: 장치가 광고는 하지만 연결 요청을 수락하지 않습니다 — 단방향 데이터 전송만 가능합니다.
| PDU 유형 | 설명 | 연결 | Scan response |
|---|---|---|---|
| ADV_IND | 표준 광고 | 예 | 예 |
| ADV_DIRECT_IND | 특정 Central에 광고 | 예 | 아니요 |
| ADV_NONCONN_IND | 연결 없음(비콘) | 아니요 | 아니요 |
| ADV_SCAN_IND | 스캔 지원 | 예 | 예 |
| ADV_EXT_IND | 확장 광고(BLE 5.0) | 예 | 예 |
ADV_DIRECT_IND는 대상 Central의 주소를 포함하여 스캔을 기다리지 않고 빠르게 연결을 설정할 수 있습니다. 장치가 서로를 “인식”하는 경우에 사용됩니다 — 예를 들어, 이전에 페어링된 스마트폰에 다시 연결할 때. 이 유형은 모든 채널에서 광고할 필요가 없으므로 전력 소비를 줄입니다.
Advertising interval은 연속적인 advertising event 간의 시간입니다. 사양은 0.625ms 단계로 20ms ~ 10.24s의 간격을 허용합니다. 실제 간격은 고정값과 무작위 지연(0–10ms)의 합으로 계산되어 여러 광고 장치 간의 충돌 확률을 줄입니다.
간격 선택은 감지 속도와 전력 소비 간의 균형입니다. 20ms 간격에서는 장치가 20–30ms 내에 감지되지만 평균 전류는 약 1–2mA입니다. 1000ms 간격에서는 감지에 최대 1초가 걸리지만 평균 전류는 50–100µA로 떨어집니다. 대부분의 IoT 장치에서는 200–1000ms 간격이 권장됩니다.
Texas Instruments Application Report SWRA478(2024)에 따르면 광고 간격을 100ms에서 1000ms로 늘리면 전력 소비가 90% 감소합니다. 장치가 즉각적인 감지를 필요로 하지 않는 경우(예: 분당 한 번 데이터를 전송하는 온도 센서) 최적의 간격은 1000–2000ms입니다.
추가 매개변수는 advertising timeout입니다 — 장치가 광고하는 최대 시간입니다. iOS에서 Peripheral은 백그라운드에서 180초 후에 자동으로 광고를 중지합니다. Android에는 그러한 제한이 없지만 제조업체가 자체 제한을 추가할 수 있습니다.
Scan Response는 Peripheral이 Central의 스캔 요청에 응답하여 보내는 추가 데이터 패킷(최대 31바이트)입니다. 스캔 요청은 Central이 광고 패킷을 수신한 후 연결 전에 더 많은 정보가 필요할 때 보냅니다. Scan Response는 추가 광고가 필요하지 않으며 요청 시에만 전송되어 에어타임을 절약합니다.
일반적인 데이터 분포: advertising PDU(31바이트)에는 플래그(3바이트), 서비스 UUID(2–16바이트), 제조업체 데이터(나머지 바이트)가 포함됩니다. scan response에는 전체 장치 이름(최대 28바이트)과 추가 UUID 또는 TX Power Level이 포함됩니다. 이 분리를 통해 Central은 scan response를 읽지 않고 UUID로 장치를 빠르게 필터링할 수 있습니다.
광고 패킷을 설계할 때 고려사항: advertising PDU에서 31바이트 모두가 사용 중이면 Central이 장치가 scan response를 지원하는지 확인할 수 없습니다. scan response 기능을 표시하려면 advertising PDU에 최소 3–5바이트를 비워두는 것이 좋습니다.
확장 광고(Extended Advertising BLE 5.0)는 광고 메커니즘의 확장으로 광고 패킷 크기를 31바이트에서 251바이트로 늘리고 새로운 패킷 유형을 추가합니다. Extended Advertising은 또한 개방된 지역에서 통신 범위를 최대 1km까지 확장하는 coded PHY와 여러 Central을 동기화하는 주기적 광고(Periodic Advertising)를 지원합니다.
주요 혁신: ADV_EXT_IND — 단일 패킷으로 최대 251바이트 데이터를 전송할 수 있는 확장 광고 PDU입니다. Extended Advertising은 기본 채널(37, 38, 39)을 전체 데이터가 전송되는 보조 채널(0–36)을 표시하는 데만 사용합니다. 이는 광고 채널의 부하를 줄이고 시스템 전체 처리량을 증가시킵니다.
주기적 광고(Periodic Advertising)는 Peripheral이 고정 간격으로 보조 채널에 데이터를 전송하고 Central이 이 시퀀스와 동기화할 수 있는 추가 메커니즘입니다. 정기적인 데이터 업데이트가 필요한 서비스(예: 오디오 스트리밍 또는 실시간 센서 판독값)에 사용됩니다.
| 매개변수 | 표준 BLE | 확장 BLE 5.0 |
|---|---|---|
| 최대 패킷 크기 | 31바이트 | 251바이트 |
| 채널 | 37, 38, 39만 | + 보조 0–36 |
| 범위 | 최대 100m | 최대 1000m(coded PHY) |
| 속도 | 1Mbps | 125kbps ~ 2Mbps |
| 주기적 | 아니요 | 예 |
iOS(Core Bluetooth)는 광고 관리를 위해 CBPeripheralManager를 제공합니다. 광고 매개변수는 advertisementData 사전에서 CBAdvertisementDataLocalNameKey(장치 이름), CBAdvertisementDataServiceUUIDsKey(서비스 UUID), CBAdvertisementDataTxPowerLevelKey(전력 수준) 키로 설정됩니다. iOS는 광고 간격을 자동으로 관리하며 수동 설정을 허용하지 않습니다.
import CoreBluetooth
class AdvertiserManager: NSObject, CBPeripheralManagerDelegate {
private var peripheralManager: CBPeripheralManager!
func startBLEAdvertising() {
let data: [String: Any] = [
CBAdvertisementDataLocalNameKey: "BLE Beacon",
CBAdvertisementDataServiceUUIDsKey: [
CBUUID("180F")
],
CBAdvertisementDataIsConnectable: true
]
peripheralManager.startAdvertising(data)
}
}
Android(BluetoothLeAdvertiser)는 더 세부적인 제어를 제공합니다. 사용 가능: AdvertiseSettings — 모드 구성(LOW_POWER, BALANCED, LOW_LATENCY), 송신 전력 및 간격; AdvertiseData — 패킷 데이터. Android는 호환 장치에서 확장 광고(BLE 5.0)를 지원하지만 시장에서 이러한 장치의 비율은 약 30–40%입니다.
BluetoothLeAdvertiser advertiser =
BluetoothAdapter.getDefaultAdapter()
.getBluetoothLeAdvertiser();
AdvertiseSettings settings = new AdvertiseSettings.Builder()
.setAdvertiseMode(
AdvertiseSettings.ADVERTISE_MODE_LOW_POWER
)
.setTxPowerLevel(
AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM
)
.build();
AdvertiseData data = new AdvertiseData.Builder()
.setIncludeDeviceName(true)
.addServiceUuid(new ParcelUuid(
UUID.fromString(
"0000180F-0000-1000-8000-00805F9B34FB"
)
))
.build();
advertiser.startAdvertising(
settings, data, advertiseCallback
);
크로스 플랫폼 BLE 애플리케이션을 개발할 때 차이점을 고려하십시오: iOS는 광고 간격을 직접 제어할 수 없지만 모든 장치에서 안정적인 작동을 보장합니다; Android는 완전한 제어를 제공하지만 버전 및 제조업체의 파편화로 인해 비호환성이 발생할 수 있습니다. 두 플랫폼의 실제 장치에서 광고를 테스트하는 것이 좋습니다.
자주 묻는 질문
Connectable 광고(ADV_IND)는 Central이 장치와 양방향 연결을 설정할 수 있게 합니다. Non-connectable(ADV_NONCONN_IND)은 단방향 데이터 전송만 가능하며, 연결 기능 없이 식별자를 브로드캐스트하는 비콘(Beacon)에서 사용됩니다.
표준 광고 패킷은 31바이트, scan response는 추가로 31바이트입니다. 확장 광고(BLE 5.0+)는 데이터 전송에 보조 채널을 사용하여 한도를 251바이트로 늘립니다.
대부분의 IoT 장치에는 500–1000ms가 권장됩니다. 빠른 감지가 필요한 경우(예: 헤드폰 연결) 20–50ms를 사용하세요. 데이터 전송이 드문 센서의 경우 전력 절약을 위해 1000–2000ms를 사용하세요.
세 채널(37, 38, 39)은 감지 신뢰성과 처리량 간의 절충안입니다. 하나의 채널이 Wi-Fi로 사용 중이어도 다른 두 채널에서 장치가 감지됩니다. 채널 38은 Wi-Fi 채널 사이의 최소 간섭 영역에 위치합니다.
광고는 BLE의 주요 전력 소비원입니다. 1000ms 간격에서 평균 전류는 50–100µA로 CR2032 배터리로 1년 동안 작동할 수 있습니다. 20ms 간격에서는 전류가 1–2mA로 증가하여 작동 시간이 몇 주로 줄어듭니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.