iOS 개발일기

[Android] 블루투스 RFID 리더기 검색 안되는 문제 원인 및 해결 방법 본문

Android

[Android] 블루투스 RFID 리더기 검색 안되는 문제 원인 및 해결 방법

맨날 까먹으니 적어두자 2026. 8. 28. 18:01

이번에 프로젝트를 새로 계약한 회사에 신규 태블릿을 사용하는데, 기종이 Galaxy Tab S10 Lite 였다.

이 기기가 근데 계속 RFID 리더기를 블루투스로 신호를 잡지 못하는 문제가 발생했었다.

 

테스트 기기가 몇 가지 있었는데, 이전 구형 기기들은 문제없이 잘 검색되어 연결이 가능했었다. 비교적 최신 기기는 와이파이를 꺼야 검색이 되는 상황도 있었기 때문에, 그 기억을 살려 와이파이를 끈 다음 검색을 해봤다.

 

결과는 동일했다.

 

검색이 계속 되지 않아 더욱 최신 기기들은 내부에 뭔가 달라져서 안되는건가? 아니면 소프트웨어가 업데이트 되면서 보안이 추가가 된건가? 등등 가능성에 대해서 파악해나갔다.

 

결론부터 이야기하자면, 

1. 기기의 위치 정보(위치 서비스)를 켜야 블루투스 검색이 된다.
2. 앱의 위치 권한만 허용하는 걸로는 안된다. (이 둘은 완전히 별개다.)
3. 와이파이 2.4GHz 간섭은 실제로 존재하는 문제이긴 하지만, 이번 건의 원인은 아니었다.
    (중간 세대 태블릿에서 겪었던 별개의 이슈)

 

 

기기 세대별로 다른 증상

안드로이드 프로젝트를 초기부터 개발에 참여하지 않았기 때문에, 구형 태블릿에 어떤 설정이 되어 있는지 파악하지 않은 상태로 계속 검색을 진행했었고 문제가 전혀 없었다. 심지어 개인적으로 가지고 있는 구형 안드로이드 휴대폰에서도 잘 되었기 때문에 의심을 할 수 없었다.

 

이 외 중간 세대 태블릿이 하나 있었는데, 이 태블릿은 와이파이가 켜져 있으면 검색이 되지 않는 문제가 있었다. 이 문제는 블루투스가 2.4GHz 대역을 사용하는데 와이파이도 2.4GHz를 쓰기 때문에 서로 전파가 겹쳐서 검색이 방해받는다는 것이었고, 와이파이를 끄고 검색을 진행하면 문제없이 되었다. 

(와이파이 5GHz 대역에서는 전파가 겹치지 않기 때문에 5GHz를 사용할 경우 문제는 거의 생기지 않는다.)

 

그리고 한 번 연결된 후에는 멀쩡하다는 것이다. 연결된 상태에서는 블루투스가 방해받는 채널을 알아서 피해 다니는데, 기기를 처음 찾는 검색 단계에서는 그 회피 기능이 동작하지 않는다고 한다. 그래서 연결은 잘되는데 검색만 안되는 상황이 나온 것이다.

 

 

최선을 다한 헛발질

그래서 이번에 새로 도입된 태블릿도 처음 검색이 되지 않는다는 문제를 발견했을 때는 와이파이가 원인인 줄 알았다. (2.4GHz 사용 중이었음) 그런데 이 기기는 초기 설정만 된 완전 새 기기였어서 다른 어떤 설정을 해야되는지 자세하게 모르는 상태였고, 와이파이를 껐는데도 리더기가 검색되지 않았다.

 

그 후에는 권한이 문제인가 싶어 권한부터 확인했다.(앱을 지웠다 다시 깔면 권한을 새로 받을 수 있는데, 그럴 수 없는 상황이었다.) 그런데 블루투스, 위치, 카메라 전부 허용된 상태였고 권한 상으로는 문제가 없어 보였다.

그래서 이번에는 기기 자체를 의심했다. 삼성 자동 차단 같은 보안 기능이 막는 건가 싶어 꺼보기도 하고, 최신 안드로이드에서 블루투스 정책이 바뀐 게 있나 찾아보기도 했다. 결과적으론 전부 헛발질이었다.

 

결국 와이파이 문제가 아닌가? 다른 시스템 설정이 문제인가? 좀 더 다른 시각으로 문제를 파악하려 했고, 기기 내 위치 서비스에 의해 블루투스가 검색되지 않을 수 있다는 것을 알게 되었다.

 

처음에는 [설정] → [위치] → [앱 권한] → [해당 앱]에 들어가 권한을 허용해줬다. (멍청하게 권한만 허용해줌)

그 후에 검색이 또 되지 않아서 쉐도우 복싱 오지게 하면서 원인을 찾아나갔다. 근데 앱에서만 위치 권한을 허용하고, 기기에 존재하는 위치 정보 자체를 켜지 않았던 것이다...

 

기기의 위치 정보 권한을 허용하니 검색은 문제없이 진행되었다. 심지어 와이파이를 켠 상태에서도 검색이 잘 됐다.

 

 

왜 위치 정보가 필요한 걸까?

블루투스 검색이랑 위치가 무슨 상관인가 싶었는데, 이유가 있었다.

블루투스로 주변 기기를 검색하면, 그 결과만으로 사용자가 어디 있는지 추정할 수 있다. 요즘 매장이나 건물마다 블루투스 신호를 뿌리는 장치들이 깔려 있어서, 어떤 기기들이 잡히는지만 봐도 대략의 위치가 나온다는 것이다.

 

그래서 안드로이드는 블루투스 검색 결과를 위치 정보로 취급하는 것이었다. 기기의 위치 기능이 꺼져 있으면 블루투스 검색 결과도 주지 않는다.

 

또, iOS 개발자이다 보니 iOS에서 블루투스 권한과 위치 권한이 완전히 별개라 처음에 위치 서비스를 의심하지 못했었다.

이야기가 나온 김에 iOS는 13부터 블루투스 권한이 생겼는데 위치와는 독립된 별개의 권한이라, 위치를 꺼도 블루투스 검색에는 아무런 영향이 없다.

흥미로운건 두 OS가 같은 문제 의식에서 출발했다는 점이다. 블루투스 스캔 결과로 위치를 추적할 수 있다는 우려는 양쪽 다 똑같았고 실제로 iOS 13에서 블루투스 권한이 생긴 이유이다. 

  • 안드로이드 : 기존 위치 권한 체계에 묶음 → 위치가 꺼지면 블루투스도 막힘
  • iOS : 블루투스 권한을 새로 만듦 → 위치와 서로 별개

결국 이번 헛발질들은 기술적인 문제보다는, 다른 플랫폼의 상식을 그대로 가져온 대가였다.

 

 

그럼 매번 위치를 켜야 하나?

해결을 하고 나서 위치를 켜면 된다고 하지만, 만약 다른 계약사에서 이런 문제가 계속 발생할 수 있고 그때마다 매번 대응을 해야되는 상황을 생각하니 아찔했다.

 

다행히도 안드로이드 12부터 방법이 하나 생겼다. 앱이 우리는 블루투스 검색 결과로 위치를 알아내지 않습니다라고 선언할 수 있다. 앱 설정 파일에 한 줄만 추가하면 된다.

<uses-permission
    android:name="android.permission.BLUETOOTH_SCAN"
    android:usesPermissionFlags="neverForLocation" />

 

말 그대로 위치 용도로는 절대 안씀이라는 뜻이다.

이 선언을 하면 안드로이드가 우리 앱의 검색 결과를 더 이상 위치 정보로 취급하지 않는다. 그러면 애초에 위치를 검사할 이유가 없어지니까, 위치가 꺼져있어도 검색이 정상적으로 된다. 조건부로 봐주는게 아니라 검사 자체가 사라지는 것이다.

 

우리는 리더기 하나 찾자고 검색하는 거지 사용자 위치를 알아내려는게 아니니, 선언 내용도 사실 그대로다. 실제로 적용하고 나니 위치를 끈 상태에서도 리더기가 바로 잡혔다.