저전력을 최우선으로 설계한 근거리 무선 통신(Bluetooth Low Energy). Bluetooth 4.0에서 도입됐으며 클래식 블루투스와 호환되지 않는 별개 규격이다.
클래식과의 차이
| Bluetooth Classic | BLE | |
|---|---|---|
| 목적 | 연속 스트리밍(오디오) | 간헐적 소량 데이터 |
| 전력 | 높음 | 매우 낮음(코인 전지로 수년) |
| 연결 시간 | ~100ms | ~3ms |
| 데이터율 | 1~3 Mbps | 125kbps~2Mbps |
| 채널 | 79개 | 40개 |
저전력의 비결 — 대부분의 시간을 자는 것
연결 간격(7.5ms ~ 4s) 마다 잠깐 깨어나 통신하고 다시 잔다
깨어 있는 시간 : 수 밀리초
- 자는 시간 — : 나머지 전부 평균 소비 전류 : 수 μA
"통신을 빨리 끝내고 자는 것" 이 설계 철학의 전부다. 그래서 연결 수립도 3ms로 짧다.
역할
광고자(Advertiser) → 관찰자(Observer) : 방송만 주변장치(Peripheral) ↔ 중앙장치(Central) : 연결 후 양방향
일반적으로 센서·웨어러블 = Peripheral (광고를 보낸다)
- 스마트폰 — = Central (스캔하고 연결한다)
GATT — 데이터 구조
Profile
└── Service (예: 심박수 서비스, UUID 0x180D)
├── Characteristic (심박수 측정값, 0x2A37)
│ ├── Value — 실제 데이터
│ ├── Properties — Read / Write / Notify / Indicate
│ └── Descriptor — CCCD 등 부가 정보
└── Characteristic (센서 위치, 0x2A38)
모든 데이터가 이 계층 구조에 담긴다. 표준 서비스(심박, 배터리, 온도)는 UUID가 정해져 있어 제조사가 달라도 앱이 동작한다.
커스텀 데이터는 128비트 UUID를 직접 만들어 쓴다.
데이터 전송 방식 네 가지
| 방향 | 응답 | 특징 | |
|---|---|---|---|
| Read | Central ← Peripheral | 있음 | 요청 시 |
| Write | Central → Peripheral | 있음 | 확인됨 |
| Write w/o Response | → | 없음 | 빠르다 |
| Notify | ← | 없음 | 서버가 밀어 준다 |
| Indicate | ← | 있음 | 확인이 필요한 알림 |
Notify가 저전력의 핵심이다. 폴링하면 계속 깨어 있어야 하지만, Notify는 데이터가 생겼을 때만 보낸다.
CCCD(Client Characteristic Configuration Descriptor)에 Central이 1을 써야 Notify가 시작된다. 이것을 빠뜨려 "데이터가 안 온다"고 하는 경우가 매우 흔하다.
연결 파라미터 — 전력과 지연의 트레이드오프
Connection Interval : 7.5ms ~ 4s — 통신 주기
- Slave Latency — : 0 ~ 499 — 건너뛸 수 있는 횟수 Supervision Timeout : 100ms ~ 32s — 끊김 판정 시간
간격이 짧으면 → 반응 빠름, 전력 소모 큼
-
간격이 길면 — → 절전, 반응 느림
-
Slave Latency = 데이터가 없으면 몇 번 건너뛰어도 된다
-
반응성을 유지하면서 평균 전력을 낮추는 절충
iOS는 연결 파라미터에 제약이 엄격하다(최소 간격 15ms 등). 안드로이드에서 되던 설정이 iOS에서 거부되는 일이 있다.
MTU와 처리량
기본 MTU = 23바이트 (실제 데이터 20바이트)
-
확장 시 — = 최대 517바이트
-
MTU를 늘리지 않으면 큰 데이터 전송이 매우 느리다
-
연결 후 MTU 교환을 반드시 시도한다
"BLE가 너무 느리다" 는 대부분 MTU와 연결 간격 설정 문제다.
주파수 호핑
2.4GHz 대역을 40채널로 분할
- 37개 데이터 채널
- 3개 광고 채널 (37, 38, 39) — Wi-Fi 채널과 겹치지 않는 위치에 배치
적응형 주파수 호핑(AFH)으로 간섭이 심한 채널을 피한다
광고 채널 3개의 주파수가 Wi-Fi 1/6/11 채널 사이 틈에 놓이도록 설계된 것이 특징이다. 공존을 고려한 설계다.
보안
-
페어링 → 본딩(키 저장) → 암호화
-
Just Works — : 인증 없음. MITM에 취약
-
Passkey Entry — : 6자리 숫자
-
Numeric Comparison : 양쪽 화면에 숫자 비교 (LE Secure Connections)
-
Out of Band — : NFC 등 다른 채널로
Just Works가 기본으로 쓰이는 경우가 많은데 중간자 공격에 취약하다. 의료·결제 기기라면 LE Secure Connections를 써야 한다.
실무에서 겪는 문제
- 연결이 자주 끊긴다 — → Supervision Timeout, 간섭, 안테나 배치
- 데이터가 안 온다 — → CCCD 미설정
- 너무 느리다 — → MTU, 연결 간격, Write w/o Response 사용 검토
- 전력이 예상보다 크다 — → 광고 간격, 연결 간격, TX 파워, 슬립 진입 실패