학습
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. 정리
logging 패키지를 사용하여 간단하게 로깅을 구현할 수 있습니다.에러 처리와 성능 최적화가 있습니다.