RN으로 개발을 하던 중 IOS가 아닌 안드로이드 에뮬레이터에서만 발생하던 이슈가 있었다.
apk를 빌드해서 디바이스에서 실행했을때는 조금 버벅거리는 느낌은 있었는데 에뮬레이터에서는 해당 스크린이 열리자마자 앱이 죽어버렸다. (스크린이 열리다가 도중에 멈추고, 이어서 열리는 경우도 있었고 대부분 바로 앱이 종료되었다.)
문제는 로그가 남지 않는 것이였다. 런타임 에러나 렌더 에러, 또는 빌드 에러가 없었기에 아무런 로그 없이 원인을 찾아서 문제를 해결해야했다.
OOM은 프로그램이 과도한 메모리를 사용하거나, 메모리 누수로 인해 발생하며, 운영체제에서는 OOM killer가 문제를 해결하기 위해 프로세스를 종료시켜버린다.
문제가 발생하는 스크린(열리면 앱이 종료되는)에서 대략적으로 예상이 되는 원인은 WebView와 react-native-map 이였다.
초기 렌더에 RapView + WebView + 고해상도의 여러 이미지가 동시에 렌더되며 OOM 현상이 나타나는 것으로 보였다.
우선 Mapview를 liteMode로 변경해주었다. 이후 위와 같이 무거운 View는 지연 마운트를 적용해주었다. 하지만 문제는 여전히 해결되지 않았다. 사실 에뮬레이터긴 해도 저정도로 메모리가 죽는게 좀 이상하긴 했다.
logcat으로 에뮬레이터 네이티브 로그를 자세하게 확인해보았다.
MESA: Failed to open rendernode → Fatal signal 7 (SIGBUS)
libharfbuzz.ng.so에서 터지고, 스택에 TextView.onMeasure/ReactTextView가 보이는걸 확인한 뒤 폰트 관련 네이티브 이슈인 것을 확인할 수 있었다. 안드로이드 시스템 텍스트 엔진에서 앱이 죽고있었다.
기본적으로typhography.ts에서 Pretendard폰트를 사용하고 있었는데 웹뷰나 서버에서 내려오는 텍스트(이모지/특수문자 포함 등)와 충돌해서 에러가 난 것으로 보여진다. 우선 타이포그래피 예외처리를 통해 문제를 해결했다.
이제 정확히 어떤 텍스트에서 문제가 일어난 것인지 찾아봐야겠다.
'React-Native' 카테고리의 다른 글
| [RN] firebase dynamic link없이 딥링크를 사용한 공유하기 기능 구현 (1) | 2026.01.12 |
|---|---|
| [RN] Google Spread Sheet를 이용한 다국어 처리 설계 (0) | 2025.12.30 |
| [RN] React-Native에 Toss PG 연결하기 (version1) (0) | 2025.12.23 |
| [RN] Expo eas IOS 빌드 & TestFlight테스트 (0) | 2025.12.22 |
| [RN] Expo54버전 채널톡 연동 NOT_INITIALIZED 이슈 (0) | 2025.12.18 |