Core Bluetooth로 서비스를 만들고 있기 때문에 해당 기술에 대한 정리를 한 번 해보고자 합니다.
BLE
- BLE 는 Bluetooth Low Energy라는 의미로 저전력 통신을 목적으로 설계된 블루투스 프로토콜
- 배터리 소모를 최소화, 짧은 데이터 교환을 목적으로 사용
Bluetooth Classic
Bluetooth Profile
- 블루투스 프로파일 = “이 연결로 무엇을 할 것인가에 대한 규칙”
- 주된 프로파일 HFP, A2DP
HFP
- 오디오 방향 - 양방향 (마이크 + 스피커)
- 음질 - A2DP에 비해 상대적으로 떨어짐
- 전화, 음성 대화, 음성 인식 등의 기술에 사용됨
- Bluetooth Classic
A2DP
- 오디오 방향 - 단방향(송신 → 수신)
- 음질 - 좋음
- 음악, 소리 등의 기술에 사용됨
- Bluetooth Classic
GATT

GATT는 Client / Server 모델
- Central = GATT Client - 요청
- Peripheral = GATT Server - 제공
즉, 앱은 클라이언트, BLE 기기는 서버
Service
- 기능 카테고리
- service 자체에는 데이터가 없음, characteristic을 담는 컨테이너 역할
- ex) battery 서비스
Characteristic
- 통신의 최소 단위
Core Bluetooth 통신 흐름

1.centralManagerDidUpdateState(.poweredOn)
- central manager가 상태가 업데이트 되었음을 알려줌
- 블루투스가 꺼져있거나 특정 상태에 팝업을 띄워주는 상태로 쓰임
2.scanForPeripherals()
- advertising service를 제공하는 주변 기기들을 검색함
3.didDiscover(peripheral, advData, RSSI)
- central manager가 검색한 peripheral을 알려줌
- 얻은 peripheral를 연결 작업을 진행할 수 있는 상태
4.connect(peripheral)
- 선택된 peripheral에 대해 연결 요청
5.didConnect(peripheral)
- central manager가 peripheral에 연결되었음을 알려줌
- 이 때부터 peripheral에 접근 가능
6.discoverServices()
- peripheral의 서비스를 검색
7.didDiscoverServices()
- 주변 장치 검색이 성공했음을 알림
8.discoverCharacteristics(service)
- 찾은 serivce의 characteristics를 검색
9.didDiscoverCharacteristics()
- Peripheral이 service에 대한 characteristics를 찾았음을 알림.
10.setNotifyValue(true)
- Peripheral → App
- characteristics 값이 변경될 때마다 알림을 받을지 여부를 나타내는 메서드.
- 심박수나 온도 변경 감지와 같이 변경을 알기 위해서는 해당 메서드로 변경을 감지할 수 있도록 함
- 반대로 디바이스 정보, 펌웨어 버전과 같이 1번만 받으면 되는 값들은 해당 메서드를 세팅하지 않고 한번만 read할 수 있도록 함
11.didUpdateValue (Notify)
- Peripheral → App
- 지정된 chracteristics 값을 가져오는데 성공하거나 특성의 값이 변경되었음을 알리는 메서드

12.writeValue(data)
- characteristic에 값을 써서 명령하는 메서드
13.didWriteValueForCharacteristic
- 보낸 요청이 peripheral이 정상적으로 전달됐는지 확인하기 위한 메서드
BLE에서의 잘못된 요청 2가지
- 전송 자체가 실패한 경우
- 이 경우 didWriteValueForCharacteristic에서 에러를 잡고 didUpdateValueFor에서는 응답하지 않음
- Ex) 연결이 끊김
- 전송은 됐지만 내용이 잘못된 경우
- didWriteValueFor은 성공하지만 didUpdateValueFor에서 에러 이벤트를 받음
15.didDisconnect(peripheral)
- central manager가 peripheral와 연결이 끊어졌음을 알리는 메서드
'swift공부' 카테고리의 다른 글
| [Swift] 리픽토링_메서드 정리 - 메서드 내용 직접 삽입, 메서드를 메서드 객체로 전환 (0) | 2025.06.14 |
|---|---|
| [Swift] 리픽토링_메서드 정리 - 메서드 추출 (0) | 2025.06.03 |
| [RealmSwift Test] "오운완" Mock을 활용한 Realm 테스트 (0) | 2023.09.26 |
| DeviceKit 이용해서 기기별 레이아웃 적용 (0) | 2022.12.18 |
| Swift 공부) iOS Google Admob 구현해보기 ,The Google Mobile Ads SDK was initialized without AppMeasurement 에러 해결 (0) | 2022.10.02 |