지난 글 중 Sentry 도입(1)에서는 프론트엔드 오류 추적의 어려움을 해결하기 위해 Sentry라는 도구를 도입하게 된 배경과, 기존 모니터링 도구인 InterMax와의 차이점에 대해 정리했었다.
이번 글에서는 실제 Vue.js 프로젝트에 Sentry를 적용하기 위해 어떤 과정으로 설정해야 하는지와 Error Boundary를 어떻게 구성할 수 있는지도 함께 정리해보려고 한다.
Sentry는 비교적 간단한 설정만으로 Vue 프로젝트에 통합할 수 있다.
먼저 sentry.io에 접속해 계정을 생성하고, 조직과 프로젝트를 만든다.
플랫폼으로 Vue.js를 선택하면, 초기화 코드와 함께 연동 가이드가 제공된다.
npm install @sentry/vue @sentry/tracing
main.js
혹은 main.ts
에서 아래와 같이 설정한다.
import { createApp } from 'vue';
import * as Sentry from '@sentry/vue';
import { BrowserTracing } from '@sentry/tracing';
import App from './App.vue';
import router from './router';
const app = createApp(App);
Sentry.init({
app,
dsn: 'https://<your-public-key>@o0.ingest.sentry.io/<project-id>',
integrations: [
new BrowserTracing({
routingInstrumentation: Sentry.vueRouterInstrumentation(router),
tracingOrigins: ['localhost', 'yourdomain.com'],
}),
],
tracesSampleRate: 1.0,
});
운영 환경에서 오류가 정상적으로 수집되기 위해서는, 배포된 앱이 sentry.io
와 통신할 수 있어야 한다. 이를 위해 네트워크 설정을 점검해야 한다.
✅ 네트워크 설정 체크리스트
방화벽 설정
sentry.io
로의 TCP 443 포트 아웃바운드 규칙 설정프록시 서버 경유 여부 확인 및 설정
DNS 설정
네트워크 연결 확인
curl https://sentry.io --verbose
UI의 일부분에서 자바스크립트 오류가 발생했다고 해서 전체 애플리케이션이 멈춰서는 안 된다. 이를 방지하기 위해 Sentry와 함께 Error Boundary를 구성하는 것이 좋다.
하위 컴포넌트 트리에서 발생한 자바스크립트 오류를 포착하고, 깨진 UI 대신 fallback UI를 보여주는 방식
try-catch처럼 작동하지만 컴포넌트 단위로 동작한다. Vue에서는 errorCaptured
훅을 활용해 구현할 수 있다.
<template>
<div v-if="error">
<p>문제가 발생했습니다. 새로고침해 주세요.</p>
</div>
<div v-else>
<slot />
</div>
</template>
<script>
export default {
data() {
return {
error: null,
};
},
errorCaptured(err, vm, info) {
this.error = err;
// Sentry로 에러 전송
this.$sentry?.captureException(err);
return false; // true 반환 시 에러가 상위로 전파되지 않음
},
};
</script>
이 컴포넌트를 주요 UI 컴포넌트들을 감싸는 형태로 사용하면, 예기치 못한 에러 발생 시 전체 앱 중단을 막을 수 있다.
우선 내가 실무 미니 프로젝트로 진행했던 회의실 예약 시스템에 시범 적용해보고, 이후 콜센터 운영 시스템에도 점진적으로 도입할 예정이다.
적용 이후에는 다음과 같은 효과를 기대하고 있다.
이번 글에서는 Vue.js에 Sentry를 적용하기 위한 설정 과정과, Error Boundary 구성 방법을 정리해보았다.
아직 실제 도입 전이지만, 테스트 환경에서 충분히 준비를 마친 뒤 운영 시스템으로 확장해갈 계획이다.🚀
실제 운영 환경에서 Sentry가 어떤 성과를 보여줄지 후속 글도 기대됩니다.