Peripheral — 정의, BLE에서의 역할 및 서비스 홍보 방법

저자: IT Sectr 게시일: 2026-07-15 읽는 시간: 9 분

Peripheral은 Bluetooth Low Energy 아키텍처에서 advertising 패킷을 통해 서비스를 홍보하고 Central의 연결을 기다리는 기기입니다. IoT 생태계에서 Peripheral은 보통 전력 소비가 작은 기기입니다: 온도 센서, 스마트 램프, 핏니스 목걸이, 비콘 (Beacon)같은 것들이요. Bluetooth Core Specification 5.4 (2023)는 advertising 프로토콜을 정의합니다: Peripheral은 정기적으로 기기 이름, 서비스 목록, 사용자 정보가 담껄 advertising 패킷을 보내고, Central은 이 패킷을 스캔하여 연결할지 결정합니다. 연결 설정 후, Peripheral은 GATT 서버로 작동하여 읽기 및 쓰기를 위한 서비스와 특성을 제공합니다.

중요 포인트

  • Peripheral은 서비스를 홍보하고 Central의 연결을 기다리는 수동적 BLE 기기입니다.
  • Advertising 패킷에는 기기 이름, 서비스 UUID, 제조사 데이터, 거리 추정을 위한 RSSI가 포함됩니다.
  • Peripheral은 Central 액세스를 위한 서비스와 특성을 저장하는 GATT 서버로 작동합니다.
  • Peripheral의 전력 소비는 슬리프 모드에서 5 µA부터 활성 데이터 전송 시 15 mA까지 다양합니다.
  • 연결 후, Peripheral은 전력을 절약하기 위해 advertising을 비활성화하고 필요시 재활성화할 수 있습니다.

BLE에서 Peripheral이란?

Peripheral은 GATT 서버를 구현하고 advertising 채넌을 통해 기능을 홍보하는 BLE 기기입니다. 주동적으로 기기를 탐색하는 Central과 달리, Peripheral은 수동적으로 연결을 기다립니다. 이는 배터리 구동 기기의 에너지 효율성을 위해 최적화된 비대칭 모델입니다.

Peripheral은 여러 모드로 작동할 수 있습니다: advertising (홍보), connected (Central과 연결), sleeping (advertising 비활성화 상태로 졸면). advertising 모드에서 Peripheral은 최소 전력을 사용하여 정기적으로 짧은 데이터 패킷을 보냅니다. 연결 후, Peripheral은 connected 모드로 전환하여 합의된 연결 간격에 따라 Central과 데이터를 교환합니다.

Bluetooth Core Specification 5.4 (2023)에 따르면, 기기는 Peripheral과 Central 사이를 동적으로 전환할 수 있지만, 어떤 순간에도 하나의 연결에 대해 역할은 고정됩니다. 일반적인 시나리오: IoT 센서가 항상 Peripheral로 작동하고, 스마트폰이 Central로 연결을 관리합니다.

개발자가 이해해야 할 중요한 사항: Peripheral은 어떤 서비스와 특성이 사용 가능한지 결정하고 그들에 대한 액세스를 관리합니다. Peripheral의 GATT 서버 구조는 Central이 읽을 수 있는 데이터와 쓸 수 있는 명령을 결정합니다.

Advertising 과정

Advertising은 Peripheral이 존재를 앜네는 메커니즘입니다. Peripheral은 37, 38, 39의 전용 채넌에서 20ms부터 10.24초 간격으로 advertising 패킷을 보냅니다. 각 advertising 패킷에는 고정 정보가 담겨있으며 옵션 데이터를 포함할 수 있습니다.

두 가지 유형의 advertising 패킷이 있습니다: advertising PDU (주 패킷) 과 scan response PDU (Central 요청에 대한 응답). 주 패킷에는 필수 필드가 포함됩니다: 패킷 유형, 솔신자 주소, 데이터. Central이 스캔 요청을 보내면, Peripheral은 더 완전한 정보(예: 전체 기기 이름)를 담은 추가 패킷으로 응답합니다.

Advertising 매개변수는 탐색 속도와 전력 소비에 영향을 미칩니다. Advertising interval은 패킷 전송 간의 시간입니다. 간격이 짧을수록 Central이 기기를 더 빠르게 발견하지만, Peripheral의 전력 소비가 달합니다. 권장 간격: 대부분의 기기에서 100–1000 ms.

Advertising 패킷 구조

BLE advertising 패킷은 advertising PDU에 31 바이트, scan response에 추가로 31 바이트의 제한이 있습니다. 패킷 내에서 데이터는 AD Structure (Advertising Data Structure) 형식으로 조직됩니다: 각 필드에는 타입 (1 바이트), 길이 (1 바이트), 값이 있습니다.

가장 많이 사용되는 AD 타입: Flags (0x01) — 연결 및 탐색 모드, Local Name (0x08 또는 0x09) — 기기 이름, Service UUID List (0x02–0x07) — 서비스 UUID 목록, Manufacturer Specific Data (0xFF) — 제조사 데이터. 31-바이트 패킷에 데이터를 올바르게 패키징하는 것은 임베디드 기기 개발자에게 중요한 작업입니다.

더 많은 데이터를 전송해야 하는 기기를 위해, extended advertising (BLE 5.0+)은 advertising 패킷 크기를 251 바이트로 늦고 새로운 패킷 유형을 추가합니다. Extended advertising은 개방된 공간에서 1km까지의 범위를 위한 coded PHY 채넌도 지원합니다.

Advertising 패킷을 설계할 때 고려하세요: advertising 패킷에 데이터가 많을수록 다른 기기와의 뵤돌 가능성이 높아집니다. 빠른 발견을 위해 advertising PDU에는 중요 데이터(Service UUID)만 넣고, 추가 데이터는 scan response에 넣을 것을 권장합니다.

GATT 서버로서의 Peripheral

GATT 서버는 Peripheral에서 Central이 발견하고 상호작용할 수 있는 모든 서비스와 특성을 포함합니다. 연결 후, Central은 서비스를 발견하고, 그 다음에 특성을 발견하여 GATT 프로토콜을 통해 상호작용합니다.

GATT 서버로서의 Peripheral은 Central의 요청을 올바르게 처리해야 합니다: 읽기 요청, 쓰기 요청, 알림, 확인. 각 요청은 GATT 테이블을 통과하며, 각 속성(서비스, 특성, 설명자)은 Handle — 16-비트 주소에 해당합니다.

Peripheral 개발자는 각 속성에 대한 액세스 권한을 정의합니다: 읽기 전용, 쓰기 전용, 읽기 및 쓰기, 압호화 유무. 민감 데이터(개인 정보, 의료 지표)에 대해서는 MITM Protection을 통한 압호화 요건을 사용할 것을 권장합니다.

iOS에서 Peripheral: CBPeripheralManager

CBPeripheralManager은 iOS에서 Peripheral 역할을 구현하기 위한 Core Bluetooth 클래스입니다. GATT 서버를 관리하고, 서비스와 특성을 게시하고, Central의 요청을 처리합니다. CBCentralManager과 달리, CBPeripheralManager는 스캔하지 않습니다 — 홍보와 연결 관리만 합니다.

iOS에서 Peripheral을 구현하는 주요 단계: CBPeripheralManager 초기화, add를 통한 서비스 추가, startAdvertising을 통한 advertising 시작, CBPeripheralManagerDelegate를 통한 Central 요청 처리.

swift
import CoreBluetooth

class BLEPeripheralManager: NSObject, CBPeripheralManagerDelegate {

    private var peripheralManager: CBPeripheralManager!

    func startAdvertising() {
        let advertisementData: [String: Any] = [
            CBAdvertisementDataLocalNameKey: "BLE Sensor",
            CBAdvertisementDataServiceUUIDsKey: [
                CBUUID("180F")
            ]
        ]
        peripheralManager.startAdvertising(advertisementData)
    }

    func peripheralManagerDidUpdateState(
        _ peripheral: CBPeripheralManager
    ) {
        if peripheral.state == .poweredOn {
            startAdvertising()
        }
    }
}

iOS는 Background Modes에서 bluetooth-peripheral 키로 Peripheral이 백그라운드에서 작동하도록 허용합니다. 백그라운드에서 iOS는 제한된 데이터로 홍보하고 연결을 관리할 수 있습니다. 장시간 홍보(180초 이상)를 위해서는 CBAdvertisementDataWaitForResponseFromCentral 옵션을 사용하여 전력을 절약하세요.

Android에서 Peripheral: BluetoothLeAdvertiser

Android는 Peripheral 역할에서 작동하기 위한 BluetoothLeAdvertiser를 제공합니다 (API 21부터). API를 통해 설정 가능한 매개변수(송신 계정, advertising 간격, 패킷 데이터)로 advertising을 시작할 수 있습니다. Android는 호환 기기에서 extended advertising (BLE 5.0)도 지원합니다.

java
import android.bluetooth.le.*;

private BluetoothLeAdvertiser advertiser;

public void startPeripheral() {
    BluetoothAdapter adapter =
        BluetoothAdapter.getDefaultAdapter();
    advertiser = adapter.getBluetoothLeAdvertiser();

    AdvertiseData data = new AdvertiseData.Builder()
        .setIncludeDeviceName(true)
        .addServiceUuid(
            new ParcelUuid(
                UUID.fromString("0000180F-0000-1000-8000-00805F9B34FB")
            )
        )
        .build();

    AdvertiseSettings settings = new AdvertiseSettings.Builder()
        .setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_POWER)
        .setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM)
        .build();

    advertiser.startAdvertising(
        settings, data, advertiseCallback
    );
}

Android에서 Peripheral 지원은 제조사와 OS 버전에 따라 달립니다. 모든 기기가 BluetoothLeAdvertiser를 지원하는 것은 아닙니다 — adapter.isMultipleAdvertisementSupported()로 확인하세요. Android 10부터는 Peripheral 역할에 BLUETOOTH_ADVERTISE 권한이 필요하고, target SDK 31+ 앙에 대해 러니타임 요청도 필요합니다.

Peripheral의 전력 효율

에너지 효율성은 BLE의 주요 장점이며, Peripheral이 이는 중요한 역할을 합니다. CR2032 배터리(220mAh)로 최적화된 전력 소비 덕분에 기기가 1년 이상 작동할 수 있습니다. 대부분의 시간, Peripheral은 advertising을 비활성화한 슬리프 모드에서 보내며, advertising 패킷을 보내거나 Central의 요청을 처리할 때만 깨어난니다.

다양한 모드에서의 Peripheral 전력 소비: 슬리프 모드 (깊은 졸면) — 1–5 µA, 타이머 활성화된 대기 — 10–50 µA, advertising — 5–15 mA (패킷 전송 시), connected — 5–10 mA (연결 이벤트 시). advertising interval 1000ms와 패킷 지속 시간 4ms의 경우, 평균 전류는 약 50–100 µA입니다.

Texas Instruments Application Report (SWRA478, 2024)에 따르면, advertising interval을 100ms에서 1000ms로 최적화하면 평균 전력 소비가 90% 감소합니다. 추가 절약은 slave latency(연결 이벤트 스킵), 짧은 거리에서 Tx Power 감소, 연결 후 advertising 비활성화(connectable advertising)를 통해 달성됩니다.

자주 묻는 질문

Peripheral이 데이터 전송을 시작할 수 있나요?

네, 알림/확인 메커니즘을 통해 가능합니다. 연결을 시작하는 것은 항상 Central이지만, 연결 후 Peripheral은 Central의 명시적 요청 없이 GATT 알림을 통해 데이터를 보낼 수 있습니다. 이를 위해 Central이 먼저 CCCD를 통해 구독해야 합니다.

Peripheral은 얼마나 오랫동안 advertising할 수 있나요?

Advertising 기간은 사양에 의해 제한되지 않지만, 실제로는 배터리 전력에 의해 제한됩니다. iOS에서 Peripheral은 추가 설정 없이 세션당 최대 180초까지 백그라운드에서 advertising할 수 있습니다. Android에서는 advertising이 무제한으로 작동할 수 있지만, 배터리 수명이 큰 영향을 받습니다.

기능을 욟지 않고 Peripheral의 전력 소비를 줄이려면?

Advertising interval을 늦고(권장 500–1000ms), slave latency를 사용하여 연결 이벤트를 스킵하고, 연결 후 advertising을 비활성화하고, 필요한 거리에서 안정적인 통신에 최소 TX Power를 선택하세요.

non-connectable advertising이란 무엇이고 어떻게 사용되나요?

Non-connectable advertising은 Peripheral이 advertising은 하지만 연결 요청을 수락하지 않는 모드입니다. 양방향 연결 없이 데이터만 전송하는 비콘에 사용됩니다(예: 상점 식별자). Connectable advertising보다 전력 절약이 됩니다.

advertising 패킷(31 바이트)에서 무엇을 전송할 수 있나요?

31 바이트에 포함할 수 있는 것: flags (3 바이트), 기기 이름(축약형으로 최대 28 바이트), 서비스 UUID 목록 (UUID당 2–16 바이트), 제조사 데이터(최대 26 바이트). 최적 전략은 필터링을 위해 advertising PDU에 서비스 UUID를, scan response에 전체 이름을 넣는 것입니다.

요약

  • Peripheral은 서비스를 홍보하고 데이터 교환을 위해 Central의 연결을 기다리는 BLE GATT 서버입니다.
  • Advertising 패킷은 채넌 37, 38, 39에서 20ms부터 10.24초 간격으로 전송되며, 31 바이트의 데이터로 제한됩니다.
  • Peripheral은 GATT 테이블에 서비스와 특성을 저장하고, 읽기, 쓰기, 알림을 통해 Central에 데이터 액세스를 제공합니다.
  • iOS에서는 CBPeripheralManager를 통해, Android에서는 GATT 서버가 있는 BluetoothLeAdvertiser를 통해 Peripheral이 구현됩니다.
  • 슬리프 모드에서 Peripheral의 전력 소비는 1–5 µA로, CR2032 배터리로 최대 1년까지 작동할 수 있습니다.
  • Advertising interval과 slave latency 최적화를 통해 기능 손실 없이 전력 소비를 최대 90% 감소할 수 있습니다.
  • 적절한 advertising 패킷 구조와 GATT 서버 설계는 BLE 기기의 호환성, 발견 속도, 효율성을 결정합니다.

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기