IMCAT.DEV
로그인 가입
Dart 고급 도구

Dart 로깅 및 모니터링

Dart 로깅 및 모니터링 — 고급

로깅 및 모니터링

1. 도입 (왜 배워야 하는가)

로깅과 모니터링은 소프트웨어 개발 및 운영에서 필수적인 요소입니다. 실무에서는 애플리케이션의 동작을 추적하고, 오류를 발견하며, 성능을 개선하는 데 필수적인 도구입니다. 로깅을 통해 개발자는 애플리케이션의 상태를 파악하고, 문제 발생 시 원인을 분석할 수 있습니다. 만약 로깅과 모니터링을 무시한다면, 애플리케이션에서 발생하는 문제를 빠르게 파악하지 못해 사용자 경험이 떨어지고, 최악의 경우 비즈니스에 심각한 손실을 초래할 수 있습니다.

2. 핵심 개념 설명

로깅 (Logging)

로깅은 애플리케이션의 실행 중 발생하는 사건들을 기록하는 과정을 의미합니다. 마치 일기장을 쓰는 것처럼, 로깅은 시스템의 상태와 동작을 기록하여 문제 발생 시 원인을 분석하는 데 도움을 줍니다.

모니터링 (Monitoring)

모니터링은 애플리케이션의 상태를 실시간으로 감시하는 과정을 의미합니다. 이는 마치 건강 체크업과 같아서, 시스템의 성능과 상태를 지속적으로 점검하여 문제가 발생하기 전에 예방할 수 있습니다.

용어정의
로깅애플리케이션의 이벤트를 기록하는 것
모니터링애플리케이션의 상태를 실시간으로 감시하는 것

3. 기본 코드 예제

Dart에서 logging 패키지를 사용하여 간단한 로깅을 구현해보겠습니다.

import 'package:logging/logging.dart';

void main() {
  // 로거 생성
  Logger logger = Logger('MyApp');

  // 로깅 레벨 설정
  Logger.root.level = Level.ALL; // 모든 레벨의 로그를 기록
  Logger.root.onRecord.listen((record) {
    print('${record.level.name}: ${record.time}: ${record.message}');
  });

  // 로그 메시지 기록
  logger.info('앱이 시작되었습니다.');
  logger.warning('경고: 처리 시간이 길어질 수 있습니다.');
  logger.severe('에러 발생: 데이터베이스에 연결할 수 없습니다.');
}

실행 결과:

INFO: 2023-10-01 12:00:00.000: 앱이 시작되었습니다.
WARNING: 2023-10-01 12:00:00.000: 경고: 처리 시간이 길어질 수 있습니다.
SEVERE: 2023-10-01 12:00:00.000: 에러 발생: 데이터베이스에 연결할 수 없습니다.

코드 설명:

  • Logger logger = Logger('MyApp');: 'MyApp'이라는 이름의 로거 인스턴스를 생성합니다.
  • Logger.root.level = Level.ALL;: 모든 레벨의 로그를 기록하도록 설정합니다.
  • Logger.root.onRecord.listen(...): 로그 레코드가 생성될 때마다 실행될 리스너를 설정합니다.
  • logger.info(...): 정보 로그를 기록합니다.
  • logger.warning(...): 경고 로그를 기록합니다.
  • logger.severe(...): 심각한 오류 로그를 기록합니다.
  • 4. 실전 활용 예제

    예제 1: 쇼핑몰 장바구니 구현

    쇼핑몰 애플리케이션에서 사용자가 장바구니에 상품을 추가할 때마다 로깅을 통해 사용자의 행동을 기록할 수 있습니다.

    void addToCart(String productId) {
      logger.info('사용자가 장바구니에 상품 추가: $productId');
      // 장바구니에 상품 추가하는 로직
    }

    예제 2: API 호출 모니터링

    API 호출 시 응답 시간을 로깅하여 성능 문제를 사전에 파악할 수 있습니다.

    Future<void> fetchData() async {
      final stopwatch = Stopwatch()..start();
      logger.info('API 호출 시작');
      
      // API 호출 로직
      await Future.delayed(Duration(seconds: 1)); // 예시로 1초 대기
      
      stopwatch.stop();
      logger.info('API 호출 완료, 소요 시간: ${stopwatch.elapsedMilliseconds}ms');
    }

    5. 흔한 실수와 주의사항

    실수 1: 로그 레벨 설정을 하지 않음

  • 잘못된 코드:
  •   Logger.root.level = Level.OFF; // 로그가 기록되지 않음
  • 올바른 코드:
  •   Logger.root.level = Level.ALL; // 모든 로그 기록

    실수 2: 로그 메시지에 유용한 정보를 포함하지 않음

  • 잘못된 코드:
  •   logger.info('상품 추가됨');
  • 올바른 코드:
  •   logger.info('상품 추가됨: ID - $productId, 사용자 - $userId');

    6. 정리

  • 로깅과 모니터링은 애플리케이션의 동작을 추적하고 문제를 예방하는 데 필수적입니다.
  • 로깅은 사건을 기록하고, 모니터링은 시스템 상태를 감시합니다.
  • Dart에서 logging 패키지를 사용하여 간단하게 로깅을 구현할 수 있습니다.
  • 실무에서는 사용자 행동이나 API 호출 성능을 로깅하여 효과적으로 문제를 관리합니다.
  • 다음에 학습하면 좋은 주제로는 에러 처리와 성능 최적화가 있습니다.