반응형
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>
반응형
'IT > React-native' 카테고리의 다른 글
Expo) 카카오 로그인 구현하기 - 라이브러리 설치 및 빌드 (0) | 2024.04.17 |
---|---|
eslint, husky, lint-staged, commitlint 설정 (0) | 2024.01.11 |