목차.
앱에서 발생하는 오류는 개발자 도구 콘솔에서 확인하거나 오류가 발생한 사용자 디바이스와 동일한 환경에서 재현하며 원인을 파악할 수 있습니다. 하지만 사용자 디바이스는 워낙 다양하며, 오류가 발생한 환경조차 파악하기 쉽지 않습니다. 또한 개발자 도구에서 테스트가 성공하더라도 실제 사용자 환경에서 예상치 못한 에러가 발생할 수 있으며, 사용자 에러 발생 시 사용자가 리뷰를 달지 않으면 에러 발생 사실조차 모를 수 있습니다.
사용자 경험을 제대로 파악하며 오류를 개선하고 비즈니스 연속성을 유지하기 위해서는 모니터링 도구를 사용해야 합니다.
이전에 진행했던 원격진료 프로젝트에 모니터링 도구 Sentry를 도입한 과정을 기록합니다.
Sentry
Sentry는 에러 트래킹, 실시간 로그 분석, 모니터링을 제공해 주는 서비스입니다. 깃허브, 디즈니, 마이크로소프트 등 다양한 기업이 사용 중인 서비스입니다.
- 다양한 언어, 프레임워크 지원
Android, iOS, Dart, Go, JavaScript, Node, Python, Ruby 등 다양한 언어와 프레임워크를 지원합니다. 기술 스택이 늘어나도 Sentry는 대부분의 플랫폼을 지원하기 때문에 에러 모니터링을 일원화할 수 있습니다.
- 다양한 알림 채널 지원
서비스를 운영하면서 가장 불안한 점은 언제 오류가 발생할지 모른다는 점인데 Sentry는 서비스에 오류가 났을 때 실시간으로 알림을 받을 수 있도록 GitHub, Slack, Teams 등 다양한 채널을 지원합니다.
- 오류 추적을 위한 다양한 정보 제공
오류와 관련된 다양한 정보를 제공합니다.
Device - 기기 정보
EXCEPTION - 에러가 발생한 코드 라인과 에러 메시지 App - 애플리케이션 정보
Browser - 브라우저 정보
Operating System - 유저가 사용하는 OS
BREADCRUMBS - 유저가 오류 발생 시 거친 과정 및 경로
- 공식 문서 제공
각 플랫폼별 공식 문서를 제공합니다. 공식 문서를 보면 다양한 기능을 지원하고 기능에 대한 설명도 잘 돼있다고 느낄 수 있습니다. 공식 문서만 잘 참고한다면 도입에 큰 어려움은 없습니다.
- 가격
개발자용 무료 플랜을 지원하며, 가격정책을 투명하게 공개하고 있습니다.
Sentry 안드로이드 연동
1. 먼저 공식 문서를 참고해 안드로이드 프로젝트에 Sentry SDK를 설치합니다.
// Make sure mavenCentral is there.
repositories {
mavenCentral()
}
// Enable Java 1.8 source compatibility if you haven't yet.
android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
}
// Add Sentry's SDK as a dependency.
dependencies {
implementation 'io.sentry:sentry-android:6.6.0'
}
2. Manifest에 추가합니다.
<application>
<meta-data android:name="io.sentry.dsn" android:value="ClientKeys(DSN)" />
</application>
Client Keys(DSN)는 Sentry 프로젝트의 Settings에서 확인할 수 있습니다.
3. 아래 코드로 오류가 잘 수집되는지 연동을 테스트해봅니다.
try {
throw new Exception("This is a test.");
} catch (Exception e) {
Sentry.captureException(e);
}
Sentry를 사용한 에러 트래킹
사용자 정보 설정
사용자 로그인, 로그아웃 등에 Sentry 사용자 정보 설정 기능을 적용할 수 있습니다. 사용자 정보를 설정하면 이벤트에 대한 사용 자를 분석할 수 있게 됩니다.
이벤트 관리
Sentry는 scope 단위로 이벤트를 관리하며 4개의 관련 함수가 있습니다. 주로 쓰이는 것은 configureScope입니다.
configureScope
Sentry는 사용된 SDK, 운영체제, 기기 정보 등 다양한 정보를 자동으로 제공하며, 추가로 범위에 저장된 데이터를 구성할 때 configureScope를 사용합니다. setContexts를 통해 데이터를 설정할 수 있습니다.
Slack으로 Sentry알림 받기
Sentry는 알림을 위한 많은 채널을 지원합니다. 저는 기존에 사내 협업 툴로 Slack을 사용하고 있었기 때문에 Slack으로 알림을 연동하였습니다.
Level 기능을 활용한 알람 구현
이벤트에 Level 을 설정해 이벤트 중요도를 식별할 수 있으며 특정 레벨에 알림이 전송되도록 설정할 수 있습니다.
scope.level = SentryLevel.FATAL
5가지 이벤트 레벨을 지원합니다.
DEBUG - 디버깅용 이벤트
INFO - 일반적인 사용에 대한 이벤트
WARNING - 아직 오류는 아니지만 오류 경고 이벤트
ERROR - 오류 이벤트
FATAL - 심각한 오류 이벤트
적용 예시)
ERROR 레벨의 이벤트 발생 시 문제 담당자에게만 알림을 전송하도록,
FATAL 레벨의 이벤트 발생 시 개발 구성원 모두를 타깃으로 알림을 전송하도록 설정하였습니다.
Error 레벨 오류 발생 시 담당자에게 보내지는 Slack 알림 테스트
Tag 기능을 활용하여 알람 구현
이벤트에 tag를 설정할 수 있으며, 특정 tag가 발생할 경우 알림이 전송되도록 설정할 수 있습니다.
Sentry.setTag('key', 'value');
적용 예시)
Sentry.setTag('api-response', 'internal server error');
Sentry.setTag('api-response-code', '500');
Sentry.setTag('api-response', 'not found error');
Sentry.setTag('api-response-code', '404');
'api-response-code'가 400번 대일 때는 클라이언트 개발자에게, 500번 대일 때는 서버 개발, 클라이언트 개발자 모두에게 알림이 가도록 설정하였습니다.
로그인 api response code 500 발생 시 Slack 알림 테스트
Sentry 도입 후기
오류 추적과 모니터링을 한눈에 쉽게 할 수 있도록 ui가 잘 구성되어 있다고 느꼈습니다. 다양한 기능들을 편리하게 제공해 줘서 프로젝트에 필요한 기능을 쏙쏙 적용할 수 있었습니다. 특히 알림 기능을 활용해 프로젝트에 이상이 생겼을 때 곧바로 알림을 받고 빠르게 대처할 수 있게 되었습니다. 전체적으로 오류 추적이 훨씬 수월해졌고 더 견고한 서비스를 만드는 데 정말 많이 도움 되었습니다.
읽어주셔서 감사합니다 :)
'Main' 카테고리의 다른 글
[Android] Service를 활용한 Timer 개발 (0) | 2022.11.30 |
---|---|
MVP 앱 개발 (4) | 2022.11.06 |
[Android] 앱 아키텍처 설계 (0) | 2022.11.03 |
[Android] 스트리밍 서비스 개발 기록 (0) | 2022.10.14 |
[Git] 개발팀 협업을 위한 실용적인 커밋 방법 (4) | 2022.08.04 |
댓글