[Flutter] Sentry 적용해보기

안녕하세요 . 이번글에서는 모니터링 서비스 Sentry에 대해 작성해볼려고합니다.
우선 모니터링이 필요한 이유를 설명해볼게요.
만약 서비스를 운영중에 특정에러가 발생했습니다. 근데 어떤 에러가 발생했는지, 어디서 발생했는지, 어떤 사용자에게서 발생했는지 체크해야 그 에러를 추적하여 정상화시킬수 있겠죠? 그런 부분에서 Sentry는 잘 알려져 있으며 많은 곳에서 사용되고 있습니다.
발생한 에러가 일시적인게 아니라 지속적으로 발생한다면 AppStore 평점이 낮아질 수 있으며, 이는 유저가 빠져나갈수 있는 지름길이기도합니다. 아래에서 하나씩 소개해보겠습니다. ( 적용하는 방법은 크게 어렵지 않습니다! )
Sentry란?
Sentry는 애플리케이션에서 발생하는 오류를 추적하고, 성능 문제를 모니터링하는 서비스입니다. Flutter와 Sentry를 연동하면 앱에서 발생하는 오류나 성능 저하 문제를 실시간으로 모니터링하고 대응할 수 있습니다.
1. Sentry SDK 설치
dependencies: sentry_flutter: ^8.9.0
pubspec.yaml에 위 내용 추가
2. Sentry 설정하기
import 'package:flutter/material.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
void main() async {
await SentryFlutter.init(
(options) {
options.dsn = 'https://examplePublicKey@o0.ingest.sentry.io/0';
options.tracesSampleRate = 1.0; // 성능 추적을 위해 샘플링 비율 설정
},
appRunner: () => runApp(MyApp()),
);
}
Sentry 프로젝트를 만들고 DSN을 발급받은 후 Flutter 프로젝트에 적용해야 합니다. 파일에 Sentry를 초기화하는 코드를 추가합니다.
앱 전체에서 발생하는 로그를 수집해야되기떄문에 main.dart에서 앱을 SentryFlutter를 최상위 위젯으로 감싸주어야합니다.
3. 에러 보고하기
Sentry에서 에러를 보고하는 방법은 captureMessage, captureException 두가지가 있습니다.
종류 | 사용 방법 |
captureMessage | 커스텀 에러 보고 |
captureException | try-catch문에서 발생하는 예외 보고 |
CaptureException 사용법
try {
throw Exception('에러가 났네...');
} catch (exception, stackTrace) {
await Sentry.captureException(
exception,
stackTrace: stackTrace,
);
}
CaptureMessage 사용법
await Sentry.captureMessage(
"${err.response?.realUri.path}\n"
"Body : ${err.response?.requestOptions.data}\n"
"Data : ${err.response?.data
}",
level: SentryLevel.error,
withScope: (scope) {
scope.transaction = "${err.response?.data["code"]}";
scope.setTag("url", "${err.response?.realUri.path}");
scope.setContexts("response_data", "${err.response?.data}");
scope.setContexts("request_body", "${err.response?.requestOptions.data}");
},
);
저는 네트워크 통신중 500에러가 발생했을때도 로그를 전송하도록 설정해보았습니다.
4. 모니터링
options.tracesSampleRate = 0.5; // 성능 추적을 50%로 샘플링
Sentry는 오류 추적뿐만 아니라 성능 모니터링 기능도 제공합니다. tracesSampleRate 값을 1.0으로 설정하면 모든 트랜잭션을 추적할 수 있으며 화면 전환 시간과 같은 성능 데이터를 수집할 수 있습니다. (이 비율은 조절 가능함)
추가적으로
Sentry를 초기화할때 다양한 옵션이 있습니다! 옵션은 다양하니 사용할 옵션들을 체크하여 사용해보세요.
options.attachScreenshot = true; //스크린샷 첨부 옵션
options.screenshotQuality = SentryScreenshotQuality.low; //스크린샷 첨부시 화질 설정
options.navigatorKey = Constants.navState; //NavigatorKey를 등록하면 위젯 트리를 볼 수 있음