본문 바로가기
Flutter/Study

💥Flutter에서 앱이 갑자기 꺼진다고요? runZonedGuarded()로 막아보세요!

by Maccrey Coding 2025. 5. 20.
반응형

 

"앱이 에러로 꺼졌어요..." 이런 경험 있나요?

Flutter 앱을 만들다 보면, 가끔 예기치 못한 에러 때문에 앱이 뻥! 하고 꺼질 때가 있어요.
사용자는 당황하고, 우리는 디버깅도 어렵고 속상하죠.

이럴 때 등장하는 슈퍼 히어로가 바로 runZonedGuarded()입니다!

🧠 runZonedGuarded()란?

Dart의 "Zone" 기능을 이용해
"앱 전체"를 안전한 울타리 안에서 실행시키고,
예외가 발생해도 앱이 꺼지지 않도록 보호하는 함수입니다.

📦 쉽게 말하면?

  • "앱을 안전한 감싸기(wrapper)" 안에서 실행한다
  • 에러가 나도 앱이 뻗지 않고, 내가 지정한 코드에서 에러를 잡아 처리할 수 있다

✅ 사용 방법

Flutter 앱 시작 코드를 아래처럼 바꿔보세요.

import 'dart:async';
import 'package:flutter/material.dart';

void main() {
  runZonedGuarded(() {
    runApp(MyApp());
  }, (error, stackTrace) {
    // 여기에 에러 처리 코드!
    print('❗ 앱에서 에러 발생: $error');
    print('📌 스택 트레이스: $stackTrace');
    // 예: 에러를 서버에 전송하거나 로컬에 저장할 수도 있어요
  });
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'runZonedGuarded Demo',
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("runZonedGuarded 테스트")),
      body: Center(
        child: ElevatedButton(
          child: Text("에러 발생시키기"),
          onPressed: () {
            // 일부러 에러를 발생시켜봅니다!
            throw Exception("테스트용 예외입니다!");
          },
        ),
      ),
    );
  }
}

🔍 코드 설명

코드설명
runZonedGuarded(() { ... }) 이 안에 앱 실행 코드를 넣어요.
runApp(MyApp()) 평소처럼 앱을 실행시켜요.
(error, stackTrace) => {} 에러가 나면 이곳에서 에러를 처리해요. 콘솔에 출력하거나 서버 전송 가능.
 

✅ 언제 사용하면 좋을까?

  • 앱 전체의 예외를 한 곳에서 관리하고 싶을 때
  • 앱이 갑자기 종료되지 않게 하고 싶을 때
  • 에러를 로깅(logging) 하거나 버그 리포트 전송 기능을 만들 때

🚨 주의할 점

  • UI에서 발생하는 모든 예외가 다 잡히는 건 아니에요.
    예: FlutterError.onError 도 함께 설정해야 할 수도 있어요.
FlutterError.onError = (FlutterErrorDetails details) {
  FlutterError.presentError(details);
  // 여기서도 로그 전송이나 사용자 알림 가능
};

🧁 정리하자면

runZonedGuarded()는 앱 전체를 감싸 안전하게 실행시켜주는 보호막 같은 함수입니다.
초보자라도 main() 함수에 적용하면 앱의 안정성을 높일 수 있어요!

✨ 마무리 한 줄 요약

Flutter 앱이 갑자기 죽는 걸 막고 싶다면?
main()을 runZonedGuarded()로 감싸세요!

째깍째깍...흘러가는 시간 붙잡고 싶다면? 

Study Duck 학습 타이머 즉시 ON! 랭킹 경쟁 참여하고 학습 습관 만들 기회, 놓치지 마세요!

www.studyduck.net

Study Duck팟빵
https://www.podbbang.com/channels/1792491

반응형