개발현황

크레플의 R&D를 소개합니다.

R&D

개발현황

Flutter + FastAPI 환경에서 Sentry를 활용한 효율적인 에러 추적 시스템 구축 경험

  • 관리자
  • 2025.05.12

Flutter + FastAPI 환경에서 Sentry를 활용한 효율적인 에러 추적 시스템 구축 경험

작성자: 조현진

머릿말

안정적인 애플리케이션 개발에서 로그의 중요성은 아무리 강조해도 지나치지 않습니다. 특히 다중 플랫폼 및 기술 스택을 이용하는 환경에서는 에러 모니터링 시스템이 필수적입니다. 본 글에서는 Flutter와 FastAPI 기반 프로젝트에 Sentry를 도입한 환경에서 발생했던 문제를 해결해 나간 경험을 공유하고자 합니다.

왜 Sentry인가?

Sentry는 실시간 오류 모니터링 및 보고 기능을 제공하는 강력한 도구입니다. 주요 기능은 다음과 같습니다:

  • 실시간 에러 감지 및 자동 수집
  • 상세한 오류 컨텍스트 제공
  • 다양한 플랫폼 및 언어 지원 (Flutter, Python 등)

Sentry의 초기 연동 과정

Flutter에 Sentry를 연동하기 위해

sentry_flutter
패키지를 추가하고,
main.dart
에 다음과 같은 코드를 적용했습니다:

 

await SentryFlutter.init(
  (options) {
    options.dsn = 'https://your-dsn@sentry.io/project-id';
    options.debug = true;
  },
  appRunner: () => runApp(ChangeNotifierProvider(
    create: (context) => appState,
    child: const MyApp(),
  ))
);

Android 환경의 설정은

android/sentry.properties
파일을 사용했습니다:

 

defaults.environment=debug
auto-upload=false

효율적인 로그 수집을 위한 유틸 함수 추가

기존

debugPrint
대신 Sentry로 전송하는 유틸 함수를 작성했습니다:

 

void debugPrintSentry(String message, {SentryLevel level = SentryLevel.debug}) {
  Sentry.captureMessage(message, level: level);
}

// 사용 예시
debugPrintSentry('Login failed. Status code: ${_model.responseRequestLogin?.statusCode}');
debugPrintSentry('Login failed with exception: ${e.toString()}');

실제 문제 해결 - 안드로이드 런타임 크래시

Android 환경에서 앱이 예기치 않게 종료되었고, 분석 결과

io.sentry:sentry-android-fragment:7.8.0
와 다른 모듈 간의 버전 불일치로 인한 충돌이 원인이었습니다.

 

해결 과정은 다음과 같습니다:

  1. Sentry 관련 패키지 제거
    flutter pub remove sentry_flutter
    flutter pub remove sentry
  2. 최신 버전 재설치
    flutter pub add sentry_flutter@^8.14.0
  3. 프로젝트 정리 및 재빌드
    flutter clean
    flutter pub get
    cd android && ./gradlew clean
    flutter run

이후 크래시 문제는 재현되지 않았습니다.

Sentry 도입 효과

  • Flutter 및 FastAPI 양쪽의 에러를 통합적으로 관리
  • 사용자 컨텍스트 기반 디버깅 환경 구축
  • 실시간 에러 모니터링으로 운영 효율성 향상
  • 재현 어려운 오류 식별률 개선

종속성 충돌은 왜 발생하는가?

  • 동일한 라이브러리의 버전 불일치: sentry_flutter와 다른 패키지가 sentry-android의 서로 다른 버전을 요구할 경우
  • 플랫폼 간 의존성 관리의 복잡성: Flutter는 pubspec.yaml, Android는 build.gradle로 의존성을 관리
  • 전이적 의존성(Transitive Dependency) 충돌: 간접 의존성 간 버전 불일치
  • Flutter와 Gradle 간 상호작용: Flutter 패키지가 Gradle 의존성을 암묵적으로 포함하는 경우 충돌 가능

종속성 충돌 분석 팁

  • ./gradlew app:dependencies > deps.txt
    grep
    으로 충돌 탐색
  • ./gradlew dependencyInsight
    로 의존성 추적
  • flutter pub deps --style=compact
    로 Dart 종속성 확인
  • Sentry CLI (sentry-cli releases)로 릴리즈 관리
  • sentry.properties
    로 환경별 설정 분리
  • Fastlane과 연동해 릴리즈 기반 오류 추적

마무리

Sentry는 Flutter와 FastAPI 환경에서 강력한 에러 추적 기능을 제공하며, 안정적인 애플리케이션 개발 및 운영에 기여합니다.

외부 라이브러리의 동작 방식을 정확히 파악하고 명시적으로 통제하는 것이 안정적인 운영의 핵심임을 다시 한 번 체감했습니다.

종속성 충돌과 같은 문제는 언제든 발생할 수 있으므로, 외부 라이브러리에 대한 깊이 있는 이해와 철저한 관리가 중요합니다.

본 포스트에서 공유한 경험이 유사한 환경에서 개발하는 분들께 도움이 되기를 바랍니다.