Debugging/2026.05.03/6 min read

모바일 오류를 Sentry scope로 구분하기

앱에서 발생하는 오류를 화면별 console.warn으로만 보지 않고, scope와 context를 붙여 추적 가능하게 만든 기록입니다.

SentryObservabilityMobile

Code notes

코드에서 확인한 구현 포인트

배포 기준 2026.05.03

관련 파일

apps/mobile/lib/logger.tsapps/web/app/global-error.tsxapps/mobile/app/_layout.tsx

구현 메모

모바일 logger는 알 수 없는 오류 값을 name, message, stack, value 형태로 정규화한다.

logError와 logWarn은 scope를 태그로 붙여 Sentry에 보내므로 기능별 오류 분류가 쉬워진다.

Next.js global-error도 Sentry captureException을 호출해 웹 런타임 오류를 놓치지 않게 했다.

console.warn만으로는 배포 후를 볼 수 없다

개발 중에는 console.warn이 충분해 보인다. 하지만 실제 사용자 기기에서 어떤 오류가 얼마나 자주 나는지는 로컬 콘솔로 볼 수 없다.

특히 모바일은 네트워크, 권한, 기기 상태에 따라 같은 코드도 다르게 실패한다. 그래서 오류에 scope와 context를 붙여 Sentry로 보낼 공통 로거가 필요했다.

오류를 먼저 정규화하다

모든 오류가 Error 객체로 오지는 않는다. 문자열일 수도 있고, 알 수 없는 값일 수도 있다. logger는 먼저 name, message, stack, value를 제품이 읽을 수 있는 형태로 정리한다.

개발 모드에서는 stack을 더 볼 수 있게 하고, 운영에서는 scope와 context를 중심으로 추적한다. 민감한 값은 넣지 않고 어느 흐름에서 실패했는지를 알 수 있게 하는 것이 핵심이다.

scope가 있어야 분류가 된다

logError와 logWarn은 scope를 필수로 받는다. 예를 들어 skin-analysis.unhandled처럼 어느 기능의 어느 단계에서 난 오류인지 태그로 남길 수 있다.

이 방식은 오류 목록을 단순한 에러 문자열 모음이 아니라 제품 기능별 디버깅 큐로 바꿔준다.

앞으로의 기준

새 API나 모바일 흐름을 만들 때 catch 안에서 바로 console.warn을 찍기보다, scope와 context를 붙여 남기는 습관을 들여야 한다.

관측 가능성은 나중에 붙이는 장식이 아니라, 배포 후에도 제품을 고칠 수 있게 하는 기본 인프라다.

Keep reading

다른 글 이어서 보기

전체 글 보기