IT/React-native

Expo) Sentry 소스맵 업로드

프티 2025. 3. 9. 00:19
반응형

1. Sentry의 역할

  • 빌드 파일은 기존 코드를 난독화하고, 압축하기 때문에 정확한 에러 지점을 파악하기 어렵다.
  • Sentry에 소스맵을 업로드하면, 에러가 발생한 코드에 대한 원본 코드 위치를 소스맵을 통해 알 수 있다.
  • 또한 에러 발생 즉시 리포트가 이루어지기 때문에 즉각적인 대응이 가능하다.

2. 소스맵 업로드

  • 각 버전별로 소스맵을 Sentry에 업로드할 수 있다.
  • 다만, 아래 2가지 상황별로 소스맵 업로드 방식이 다르게 존재한다.

2-1 EAS Cloud 빌드

  • 자동으로 Sentry에 소스맵이 업로드 된다.
  • 별도의 소스맵 업로드 처리가 필요하지 않다.

2-2 EAS Update

  • EAS Update 명령 실행 시 소스맵이 생성된다. (위치: root/dist/bundles)
  • bundle 폴더에 생성된 소스맵 파일은 Android / IOS 각각 .hbc와 .map 파일로 구성된다.

3. 배포 절차

아래는 소스맵 수동 업로드가 필요한 EAS Update에 대한 배포 방법이다.

3.1. EAS Update 실행

터미널에서 아래 명령어를 실행한다.

npx eas update
  • 실행 결과로 Group ID, Android ID, iOS ID 총 3개의 업데이트 ID가 출력된다.
  • Group ID는 iOS와 Android를 일괄 업데이트하는 데 사용할 수 없다. 따라서 각 플랫폼별 업데이트 ID를 각각 사용해야 한다.
  • root/dist/bundles 경로에 생성된 파일 이름을 통해 각 OS 별로 다른 ID를 가진 것을 확인할 수 있다.

3.2. Sentry CLI를 이용한 소스맵 업로드

3.2.1. 소스맵 업로드

업데이트 ID를 활용해 소스맵을 업로드한다. 명령어 형식은 아래와 같다.

npx sentry-cli releases files <앱_패키지_name>@<패키지_version>+<버전_code> \\
    upload-sourcemaps --dist <업데이트_ID> --rewrite \\
    <번들_파일_경로> <소스맵_파일_경로>

플랫폼 별 위 변수에 들어갈 값 정리

IOS Android

앱_패키지_name <패키지.이름> <패키지.이름>
패키지_version (package.json).version (package.json).version
버전_code App Store 버전 코드 Play Store 버전 코드
업데이트_ID eas update 시 IOS ID eas update 시 Android ID
번들_파일_경로 …/main.jsbundle …/index.android.bundle
소스맵_파일_경로 …/ios-업데이트_ID.map …/android-업데이트_ID.map

Android

npx sentry-cli releases files <패키지.이름>@1.0.0+100 \\
    upload-sourcemaps --dist <android_update_id> --rewrite \\
    dist/bundles/index.android.bundle dist/bundles/android-<android_update_id>.map
    
?) 번들파일 생성시 index.android.bundle의 실제 이름: <android_update_id>.hbc
?) **<android_update_id>.hbc -> index.android.bundle로 이름 변경**

iOS

npx sentry-cli releases files <패키지.이름>@1.0.0+100 \\
    upload-sourcemaps --dist <ios_update_id> --rewrite \\
    dist/bundles/main.jsbundle dist/bundles/ios-<ios_update_id>.map
    
?) 번들파일 생성시 main.jsbundle의 실제 이름: <ios_update_id>.hbc
?) **<ios_update_id>.hbc -> main.jsbundle로 이름 변경**
  • Sentry에서는 번들파일인 index.android.bundle과 main.jsbundle을 <update_id>.hbc 형식으로 생성한다.

3.2.2. Sentry 릴리즈 최종화

소스맵 업로드가 완료되면, 릴리즈를 최종화한다.

npx sentry-cli releases finalize "<패키지.이름>@<패키지_version>+<버전_code>"

사용 예시

npx sentry-cli releases finalize "<패키지.이름>@2.0.5+62"

3.2.3. 배포 등록

최종화된 릴리즈를 배포 환경(dev 또는 prod)에 등록한다.

npx sentry-cli releases deploys new -r "<패키지.이름>@<패키지_version>+<버전_code>" -e <sentry_등록한_환경변수명>

사용예시

// sentry 환경변수로 prod가 있다고 가정
npx sentry-cli releases deploys new -r "<패키지.이름>@2.0.5+62" -e prod

// sentry 환경변수로 dev가 있다고 가정
npx sentry-cli releases deploys new -r "<패키지.이름>@2.0.5+62" -e dev

4. 토큰 및 환경변수

  • 환경변수는 Sentry에서 발급한 토큰과 설정한 프로젝트, organization이 필요하다.
  • EAS Update 시에는 로컬에서 작업이 수행되기 때문에, 로컬 환경변수에 export한다.
  • EAS Build 시에는 EAS 클라우드에서 빌드되기 때문에, EAS 환경변수에 등록한다.
export SENTRY_AUTH_TOKEN=<SENTRY_AUTH_TOKEN>
export SENTRY_PROJECT=<SENTRY_PROJECT>
export SENTRY_ORG=<SENTRY_ORG>

 

반응형