Flutter
Android 에뮬레이터와 실기기에서 다르게 나타날 때
Flutter 앱을 개발할 때 에뮬레이터에서는 잘 작동하는데 실제 기기에서만 문제가 생기는 경우가 있다. 이때 빠르게 진단하는 방법을 정리했다.
Flutter로 Android 개발할 때 가장 답답한 순간 중 하나가 에뮬레이터에서는 완벽한데 실기기에서만 터지는 상황이다. 이런 때는 화면만 봐서는 원인을 찾을 수 없고, 로그와 실제 설정을 함께 확인해야 한다.
먼저 환경부터 정리하기
Flutter 문제를 진단할 때 가장 먼저 할 일은 현재 환경이 제대로 설정돼 있는지 확인하는 것이다. 에뮬레이터와 실기기가 다르게 동작하는 경우는 대부분 버전 차이나 설정 불일치에서 나온다.
flutter doctor -v
flutter run --verbose
이 명령들을 실행하면 Flutter가 설정한 각 환경의 상태를 자세히 보여준다. -v 플래그는 숨겨진 정보까지 다 드러낸다.
권한 확인이 중요한 이유
에뮬레이터와 실기기의 동작이 다른 경우, 권한 문제를 먼저 의심해봐야 한다. 에뮬레이터는 개발 환경이라 권한 체크가 느슨할 수 있지만, 실제 기기는 매우 엄격하다. 같은 코드라도 권한이 없으면 API 응답이 달라진다.
로그를 읽는 습관
에뮬레이터와 실기기의 차이를 파악하는 가장 빠른 방법은 각각의 로그를 비교하는 것이다. 실기기에서 flutter run --verbose를 실행하면 콘솔에 상세한 디버그 정보가 출력된다. 이 로그에서:
- 네트워크 요청이 제대로 가는지
- API 응답 코드는 무엇인지
- 에러 메시지는 정확히 뭔지
이런 것들을 직접 눈으로 확인할 수 있다.
빌드 모드도 영향을 미친다
때로는 에뮬레이터는 debug 모드로, 실기기는 release 모드로 빌드한 결과를 테스트한다. 이 두 빌드 모드는 최적화 수준부터 다르기 때문에 성능이나 메모리 문제에서 차이가 날 수 있다. 같은 상황을 진단할 때는 두 기기 모두 같은 빌드 모드로 테스트하는 게 중요하다.
진단 순서 정하기
원인을 찾을 때는 무턱대고 수정하기보다는 다음 순서로 접근하는 게 낫다:
- 같은 상황에서 에뮬레이터와 실기기에서 동시에 재현해본다.
- 각각의 로그와 네트워크 응답을 기록한다.
- 바뀐 부분을 한 줄로 설명해본다.
이렇게 기록을 남기면 다음에 비슷한 문제가 나올 때 훨씬 빨리 해결할 수 있다.