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
와 다른 모듈 간의 버전 불일치로 인한 충돌이 원인이었습니다.
해결 과정은 다음과 같습니다:
- Sentry 관련 패키지 제거
flutter pub remove sentry_flutter flutter pub remove sentry
- 최신 버전 재설치
flutter pub add sentry_flutter@^8.14.0
- 프로젝트 정리 및 재빌드
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
로 Dart 종속성 확인flutter pub deps --style=compact
- Sentry CLI (sentry-cli releases)로 릴리즈 관리
로 환경별 설정 분리sentry.properties
- Fastlane과 연동해 릴리즈 기반 오류 추적
마무리
Sentry는 Flutter와 FastAPI 환경에서 강력한 에러 추적 기능을 제공하며, 안정적인 애플리케이션 개발 및 운영에 기여합니다.
외부 라이브러리의 동작 방식을 정확히 파악하고 명시적으로 통제하는 것이 안정적인 운영의 핵심임을 다시 한 번 체감했습니다.
종속성 충돌과 같은 문제는 언제든 발생할 수 있으므로, 외부 라이브러리에 대한 깊이 있는 이해와 철저한 관리가 중요합니다.
본 포스트에서 공유한 경험이 유사한 환경에서 개발하는 분들께 도움이 되기를 바랍니다.