Bluetooth 및 BLE: 개념, Classic과 Low Energy의 차이, 작동 방식

저자: IT Sectr 게시일: 2026-03-24 읽는 시간: 12 분

Bluetooth와 Bluetooth Low Energy는 단거리 데이터 전송을 위한 무선 통신 표준입니다. Bluetooth Classic(BR/EDR)은 오디오 및 파일을 위한 안정적인 스트리밍 채널을 제공하는 반면, BLE는 센서 및 주변 장치와의 에너지 효율적인 작동에 최적화되어 있습니다. Bluetooth SIG, 2025에 따르면, 매년 50억 개 이상의 BLE 지원 장치가 출하되며, 이 표준은 IoT, 웨어러블 전자 기기 및 모바일 액세서리의 기반이 되었습니다.

핵심 사항

  • Bluetooth Classic — 최대 3Mbit/s, 10~30mA 전력 소비로 연속 오디오 및 데이터 전송을 위한 BR/EDR 표준
  • Bluetooth Low Energy — 피크 전류 5~15mA, 최대 수년의 배터리 수명으로 소량 데이터를 간헐적으로 전송하는 프로토콜
  • GATT 프로필 — 모바일 앱이 주변 장치의 특성을 읽는 방법을 정의하는 통합 클라이언트-서버 모델
  • Advertising — BLE 장치가 중앙 장치(스마트폰)에 의해 발견되기 위해 주기적으로 비콘 패킷을 보내는 메커니즘
  • iOS 및 Android — 플랫폼은 서로 다른 API(Core Bluetooth 및 android.bluetooth)를 사용하지만 둘 다 GATT를 지원하므로 코드를 최소한의 변경만으로 이식 가능

Bluetooth와 BLE란?

Bluetooth는 2.4GHz ISM 대역에서 작동하는 무선 개인 영역 네트워크(WPAN) 표준으로, 최대 100미터 거리에서 장치 통신을 위해 설계되었습니다. IEEE 802.15.1 사양은 물리 계층과 MAC 계층을 정의하고, Bluetooth SIG 스택은 특정 시나리오(오디오 헤드셋(HSP), 파일 전송(OPP), 키보드 입력(HID))에 대한 고급 프로필을 정의합니다.

이 표준은 버전 4.0(2010)부터 두 가지 분기로 나뉘었습니다: Bluetooth Classic(BR/EDR — Basic Rate / Enhanced Data Rate)과 Bluetooth Low Energy(BLE, 이전 Bluetooth Smart)입니다. Classic은 연속 스트림(오디오 통화, 음악, 파일)용으로 설계되었습니다. BLE는 수십 초 또는 수 분의 간격을 두고 짧은 패킷으로 데이터가 전송되는 애플리케이션(심박수 모니터, 태그, 온도 센서)을 위해 만들어졌습니다.

Bluetooth SIG(2025)에 따르면, 새로운 스마트폰의 99%가 두 버전을 모두 지원하며, BLE 생태계는 Blood Pressure부터 Environmental Sensing까지 15개 이상의 프로필 유형을 포함합니다.

Bluetooth Classic vs BLE: 비교

Classic과 BLE의 선택은 시나리오에 따라 달라집니다: 오디오 스트리밍에는 Classic만 적합하고, 한 시간에 한 번 센서를 폴링하는 경우에는 BLE만 적합합니다. BR/EDR은 1MHz 간격으로 79개 채널을 사용하고 적응형 주파수 호핑(AFH)을 사용하여 Wi-Fi 간섭에 대한 내성을 제공합니다.

매개변수Bluetooth Classic(BR/EDR)Bluetooth Low Energy(BLE)
데이터 전송 속도1~3Mbit/s(EDR)125kbit/s ~ 2Mbit/s(LE 2M PHY)
피크 전류10~30mA5~15mA
에어 타임~100ms~3ms
토폴로지Piconet(마스터 1개, 슬레이브 최대 7개)Broadcaster / Observer / Peripheral / Central
프로필HFP, A2DP, HSP, SPP, OPPGATT 기반(HRS, BLS, CTS 등)
일반적인 장치헤드셋, 스피커, 자동차 핸즈프리피트니스 트래커, 태그, 심박수 모니터, IoT 센서
호환성물리 계층에서 BLE와 호환되지 않음듀얼 모드 칩이 두 스택 모두 지원

BLE 5.x는 최대 1km(개방된 공간)까지 범위를 늘리는 LE Coded PHY와 LC3 코덱을 사용하는 LE Audio를 추가했습니다. 새 버전은 오디오 시나리오에서 Classic과 BLE 간의 경계를 점차적으로 흐릿하게 만들고 있습니다.

BLE 아키텍처: 컨트롤러, 호스트 및 애플리케이션

BLE 스택은 세 계층으로 나뉩니다: 컨트롤러(Controller)(물리 계층 및 링크 계층), 호스트(Host)(L2CAP, ATT, GATT, 보안 관리자), 애플리케이션(Application)(앱 내 프로필 구현). 이 분리를 통해 칩 제조업체는 펌웨어에 컨트롤러를 구현하고, 모바일 앱 개발자는 GATT 추상화만 처리하면 됩니다.

링크 계층(LL)은 에어 타임을 관리합니다: 장치는 Standby, Advertising, Scanning, Initiating 및 Connection 상태 간에 전환합니다. 연결 상태에서 Central과 Peripheral은 연결 간격(데이터 패킷을 교환하는 빈도)에 동의합니다. 일반적인 간격은 7.5~1000ms입니다. 교환이 더 빈번할수록 처리량이 높아지고 전력 소비가 증가합니다.

보안 관리자(SM)는 페어링 프로토콜을 통한 키 교환으로 AES-128 암호화를 구현합니다. 세 가지 모드가 있습니다: Just Works(PIN 입력 없음), Passkey Entry(화면에 6자리 코드), OOB(NFC 또는 QR)입니다. 웨어러블 장치의 경우 일반적으로 Just Works가 사용되고, 의료 기기의 경우 추가 확인이 있는 OOB가 사용됩니다.

Bluetooth Core Specification 5.4(2023)에 따르면, LE Secure Connections 모드에서 보안 연결 설정 시간은 연결 간격 30ms에서 300ms를 초과하지 않습니다.

GATT 프로필: 서비스, 특성 및 디스크립터

ATT(속성 프로토콜)는 서버(주변 장치)가 속성을 저장하고 클라이언트(스마트폰)가 이를 읽거나 쓰는 기본 전송 모델입니다. GATT(일반 속성 프로필)는 ATT 위에 계층 구조(Service → Characteristic → Descriptor)를 구축합니다.

각 서비스는 하나의 장치 기능을 설명하는 특성의 논리적 그룹입니다: Heart Rate Service(UUID 0x180D)에는 알림을 제어하는 Client Characteristic Configuration Descriptor(0x2902)가 있는 Heart Rate Measurement 특성(UUID 0x2A37)이 포함됩니다. 모바일 앱 개발자는 discoverServices()를 통해 서비스 목록을 가져온 다음 UUID로 필요한 특성을 찾아 알림을 구독합니다.

BLE는 표준화된 Bluetooth SIG 서비스에는 16비트 UUID를, 사용자 정의 제조업체 서비스에는 128비트 UUID를 사용합니다. 예를 들어, 트래커 케이스는 배터리 충전 수준을 전송하기 위한 특성이 있는 A000-… 서비스를 정의할 수 있습니다.

Kotlin(Android)에서 GATT 작업 예시

kotlin
private val gattCallback = object BluetoothGattCallback() {
    override fun onServicesDiscovered(
        gatt: BluetoothGatt, status: Int
    ) {
        val service = gatt.getService(UUID.fromString("0000180d-0000-1000-8000-00805f9b34fb"))
        val char = service?.getCharacteristic(
            UUID.fromString("00002a37-0000-1000-8000-00805f9b34fb")
        )
        gatt.setCharacteristicNotification(char, true)
    }

    override fun onCharacteristicChanged(
        gatt: BluetoothGatt, char: BluetoothGattCharacteristic
    ) {
        val heartRate = char.getIntValue(BluetoothGattCharacteristic.FORMAT_UINT8, 1)
        updateUi("맥박: $heartRate bpm")
    }
}

예시에서 앱은 표준 Bluetooth SIG UUID로 Heart Rate 서비스를 찾고, 심박수 측정 특성을 가져와서 알림을 구독합니다. 심박수가 변경될 때마다 주변 장치가 Central의 명시적 요청 없이 데이터를 보냅니다.

Advertising, 스캔 및 연결 설정

Advertising은 BLE의 주요 메커니즘으로, Peripheral 장치가 세 개의 기본 채널(37, 38, 39)에서 주기적으로 브로드캐스트 패킷(advertising PDU)을 보냅니다. 중앙 장치는 이러한 채널을 스캔하고, advertising 데이터를 수신하여 연결을 시작할 수 있습니다.

Advertising 패킷에는 최대 31바이트의 페이로드(플래그, TX 전력 레벨, 로컬 이름, 서비스 UUID, 제조업체별 데이터)가 포함됩니다. 이는 연결을 설정하지 않고 센서 판독값을 전송하기에 충분합니다(연결 없는 모드, Broadcaster 유형). 지속적인 데이터 전송(예: 1분에 한 번 온도)의 경우 최대 1000ms의 연결 간격으로 연결이 사용됩니다.

모바일 플랫폼에서 스캔은 startScan()(Android) 또는 scanForPeripherals()(iOS)를 통해 시작됩니다. 서비스 UUID로 필터링하면 보이는 모든 장치를 처리하지 않아 에너지를 절약할 수 있습니다. 앱은 관련 태그 또는 센서에 대해서만 콜백을 받습니다.

Swift(iOS)에서 BLE 장치 스캔 예시

swift
import CoreBluetooth

class ScannerViewController: UIViewController {
    private var centralManager: CBCentralManager!

    override func viewDidLoad() {
        centralManager = CBCentralManager(
            delegate: self, queue: nil
        )
    }

    func centralManagerDidUpdateState(central: CBCentralManager) {
        if central.state == .poweredOn {
            centralManager.scanForPeripherals(
                withServices: nil, options: nil
            )
        }
    }

    func centralManager(
        central: CBCentralManager,
        didDiscover peripheral: CBPeripheral,
        advertisementData: [String : Any],
        rssi RSSI: NSNumber
    ) {
        if let name = advertisementData[CBAdvertisementDataLocalNameKey] {
            print("기기를 찾았습니다: \(name)")
        }
    }
}

장치를 발견한 후 Central은 CBPeripheral 객체를 전달하며 connect()를 호출합니다. 연결 매개변수(간격, 대기 시간, 감독 타임아웃)는 링크 계층 수준에서 협상됩니다. 개발자가 직접 관리하지는 않지만 Android의 requestConnectionPriority를 통해 영향을 줄 수 있습니다.

모바일 개발의 Bluetooth LE: Core Bluetooth 및 android.bluetooth

두 모바일 플랫폼 모두 BLE 작업을 위한 네이티브 API를 제공합니다. Core Bluetooth(iOS)는 위임 접근 방식을 사용합니다. 중앙 관리자가 작업을 시작하고 주변 객체가 위임 메서드를 통해 결과를 보고합니다. android.bluetooth(Android)는 콜백 인터페이스 위에 구축되어 있으며 여러 장치와의 병렬 GATT 작업을 지원합니다.

플랫폼 간 주요 차이점:

  • iOS — 최대 7개의 동시 연결 지원; 백그라운드 BLE 모드에는 UIBackgroundModes = bluetooth-central 필요; 포그라운드를 떠난 후 시스템이 콜백을 몇 분 지연시킬 수 있음
  • Android — 고정 연결 제한 없음(메모리에 의해 제한됨); BLUETOOTH_SCAN 및 BLUETOOTH_CONNECT 권한 필요(Android 12+); 안정적인 백그라운드 스캔을 위해 포그라운드 서비스 필요
  • Flutter — flutter_blue_plus 패키지는 통합된 Dart 인터페이스로 플랫폼 API를 추상화합니다. 스캔 및 GATT 작업 코드는 두 플랫폼에서 동일합니다

Bluetooth SIG 테스트(2024)에 따르면, 스마트폰과 피트니스 트래커 간의 BLE 연결 시간은 Android에서 평균 150~300ms, iOS에서 100~250ms입니다. 차이는 무선 주파수 모듈 관리 정책 때문입니다.

Dart(Flutter)에서 BLE 연결 예시

dart
import 'package:flutter_blue_plus/flutter_blue_plus.dart';

class BleService {
  final FlutterBluePlus fbp = FlutterBluePlus();

  Future<void> scanAndConnect(String deviceName) async {
    await fbp.startScan(timeout: Duration(seconds: 15));

    await for (final result in fbp.scanResults) {
      if (result.device.advName == deviceName) {
        await fbp.stopScan();
        await result.device.connect();
        break;
      }
    }
  }
}

Flutter 개발자는 통합된 API 인터페이스를 얻습니다. 내부적으로 flutter_blue_plus는 호출을 네이티브 android.bluetooth 또는 Core Bluetooth로 변환합니다. 이 접근 방식은 두 플랫폼에서 BLE 주변 장치 작업을 위한 앱 개발 시간을 단축합니다.

자주 묻는 질문

Bluetooth Classic과 BLE의 차이점은 무엇인가요?

Bluetooth Classic(BR/EDR)은 연속 스트리밍(오디오 통화, 음악, 파일 전송)용으로 설계되었습니다. BLE는 최소 전력 소비로 짧은 데이터 패킷(센서, 태그, 피트니스 트래커)에 최적화되어 있습니다. Classic은 10~30mA, BLE는 피크 시 5~15mA를 소비합니다.

Bluetooth Classic과 BLE는 서로 호환되나요?

물리 계층에서는 호환되지 않습니다. 변조 방식과 채널 맵이 다릅니다. 그러나 최신 칩의 대부분은 듀얼 모드이며 두 스택을 모두 구현합니다. 듀얼 모드 칩이 있는 스마트폰은 Classic 헤드셋과 BLE 트래커와 동시에 통신할 수 있습니다.

BLE에서 연결 간격이란 무엇인가요?

연결 간격은 설정된 연결에서 두 데이터 패킷 사이의 시간입니다. 값의 범위는 7.5ms에서 4초까지입니다. 간격이 짧을수록 처리량이 높아지고 전력 소비가 증가합니다. 1분에 한 번 보고하는 온도 센서의 경우 1000ms 간격이 사용됩니다.

BLE에서 페어링은 어떻게 작동하나요?

페어링은 Central과 Peripheral 간의 암호화 키 교환 프로세스입니다. BLE는 세 가지 방법을 지원합니다: Just Works(확인 불필요), Passkey Entry(화면에 PIN 입력), OOB(NFC 또는 QR을 통한 교환)입니다. 페어링 후 장치는 키를 저장(본딩)하고 이후 연결에서 재인증을 요청하지 않습니다.

모바일 애플리케이션에서 어떤 BLE 프로필이 사용되나요?

가장 일반적인 것: 심박수 모니터용 Heart Rate Profile(0x180D), 혈압계용 Blood Pressure Profile(0x1810), 온습도 센서용 Environmental Sensing(0x181A), 충전 수준용 Battery Service(0x180F), 모델 및 일련 번호용 Device Information(0x180A)입니다.

요약

  • Bluetooth는 2.4GHz 대역의 WPAN 표준으로, 버전 4.0부터 Classic(BR/EDR)과 Low Energy(BLE)로 나뉩니다
  • Bluetooth Classic은 최대 3Mbit/s의 속도를 제공하며 오디오 헤드셋 및 파일 전송에 사용됩니다
  • BLE는 저전력(5~15mA)에 최적화되어 있으며 IoT, 피트니스 트래커 및 센서에 사용됩니다
  • GATT 프로필은 ATT 프로토콜을 통한 교환으로 데이터를 Service → Characteristic → Descriptor 계층 구조로 구성합니다
  • Advertising을 통해 주변 장치는 세 개의 기본 채널에서 연결을 설정하지 않고 데이터를 전송할 수 있습니다
  • iOS(Core Bluetooth) 및 Android(android.bluetooth)는 백그라운드 작업 및 권한에 대한 다양한 접근 방식으로 네이티브 API를 제공합니다
  • Flutter(flutter_blue_plus)는 크로스 플랫폼 개발을 위해 단일 Dart 인터페이스로 플랫폼 API를 통합합니다

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

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

프로젝트 논의

더 읽어보기