Mobile/Flutter

[Flutter] Sentry 적용해보기

펭귄알 2024. 10. 15. 16:49

 

안녕하세요 . 이번글에서는 모니터링 서비스 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를 등록하면 위젯 트리를 볼 수 있음