์๋ ํ์ธ์. ์คํ๋ผ์ธ ๊ธฐ๋ฅ์ด ๋ฐฐํฌ๋ ์น ์ฑ์ด ์์ผ๋ฉฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ชจ๋ํฐ๋ง์ Sentry๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ ๊ทธ๊ฒ์ ๋ฐฑ์๋์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ํ๋ฅญํ๊ฒ ์๋ํฉ๋๋ค!
๋ถํํ๋ raven js์์ ์ด์ ๋ํ ์ง์์ด ํ์๋์ง ์์ผ๋ฏ๋ก ์์ฒด ์๋ฃจ์ ์ ์ถ์ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๊ฒ์ ํ์ธํ ์ ์์ต๋๊น? ์งํ ๋ฐฉ๋ฒ์ ๋ํด ์ด๋ค ์ ์์ ํ์๊ฒ ์ต๋๊น? raven js์ ์ผ๋ถ ๋ก์ง์ ์ฌ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๊น?
์ฌ์ฉ์๊ฐ ์คํ๋ผ์ธ์ธ์ง ๊ฐ์งํ ์ ์์ต๋๊น?
๊ทธ๋ ๋ค๋ฉด ์ด๋ฒคํธ๋ฅผ ์์งํ๊ณ ํ์ ๋ฃ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ์ง๋ ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ ๋ค์ ์จ๋ผ์ธ ์ํ๊ฐ ๋๋ฉด Raven.captureException
ํตํด ๋ค์ ๋ณด๋
๋๋ค.
์๋ ๋ฐฉ์์ ๋ํด ๋์์ ์ฃผ๊ฑฐ๋ ์ด๋ฅผ ๋๊ธฐ ์ํด ํํฌ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์ข์ต๋๋ค. ํ๋ ฅํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. Sentry ์ฐ๊ฒฐ ๊ฐ๋ฅ์ฑ์ ํ ์คํธํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ฌ์ฉ์๊ฐ ์จ๋ผ์ธ ์ํ์์ ๊ฐ์งํ ์ ์์์ต๋๋ค. ์ด๋ฅผ ์ํด ์ ์ก ์คํจ ์ด๋ฒคํธ๋ฅผ ์์ ํ ์ ์์ง๋ง ๋ค์ ์๋ํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
captureException
์ฌ์ฉ์ ๊ดํด์๋ ๊ด์ฐฎ๊ฒ ์ง๋ง ์ฒ๋ฆฌ๋์ง ์์ ์์ธ์ ๋ํด ์ฐ์ํ ์ฒ๋ฆฌ๊ธฐ raven์ด ์ ๊ณตํ๋ ๊ฒ์ ์ ์งํ๊ณ ์ถ์ต๋๋ค. ๊น๋ง๊ท ์ค๋ฅ ๊ฐ์ง์ ์ค๋ฅ ์ ์ก ์ฌ์ด์ ์ค๊ฐ ๋
ผ๋ฆฌ๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
์, ์ ์ ์๊ฐํด ๋ณด์ญ์์ค. raven-js์์ ์ด๊ฒ์ ์๋์ผ๋ก ์ง์ํ๊ฑฐ๋ ์ด๋ฅผ ์ํํ๋ ํํฌ๋ฅผ ์ ๊ณตํ ์ ์๋ ์ข์ ๋ฐฉ๋ฒ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ณต์ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ ๋ ๊ฐ์ ๊ธฐ๋ฅ์ ์ฐพ๊ณ ์์ต๋๋ค. ๋ฌธ์๋ฅผ ๊ฒํ ํ ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ด shouldSendCallback
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
shouldSendCallback: function(data) {
localStorage['queued-errors'] = (localStorage['queued-errors'] || []).push(data);
return false;
}
๊ทธ๋ฐ ๋ค์ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ์์ ํ๊ณ Raven.captureException
์ฌ์ฉํ์ฌ ๋๊ธฐ์ด์ ์ฒ๋ฆฌํฉ๋๋ค.
window.addEventListener('online', checkAndProcessQueue);
์ด๊ฒ์ ์ฝ๊ฐ ํธ์นํ์ง๋ง ๋น์ทํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ํธ์คํธ์ ๋ํ ์ฐ๊ฒฐ์ด ๋์ด์ง๋ฉด ์ค๋ฅ๋ฅผ ๋ณด๊ณ ํ ์ ์์ต๋๋ค(๋ฐ๋์ ์คํ๋ผ์ธ์ผ ํ์๋ ์์). ์ฃผ๋ณ์ ๋๋ฌ๋ณด๋ ravenFailure
์ด๋ฒคํธ๊ฐ ์ฐฝ์์ ํธ๋ฆฌ๊ฑฐ๋๊ณ ์์ง๋ง ์ด ์ด๋ฒคํธ์์ ์ถฉ๋ถํ ๋ฐ์ดํฐ๋ฅผ ์ป์ ์ ์์ด ๋ด๊ฐ ํ๋ ค๋ ์์
์ ์ํํ ์ ์์ต๋๋ค. ์คํจ ์ ์ค๋ฅ ๋ณด๋ด๊ธฐ๋ฅผ ๋ค์ ์๋ํฉ๋๋ค.
์ด์ ๋ํ ๋ช ๊ฐ์ง ๊ฐ๋ฅํ ์ ๊ทผ ๋ฐฉ์์ด ์์ต๋๋ค.
retry
์ต์
captureException(),
sendMessage()` ๋ฑ์ ์ฝ๋ฐฑ/์ฝ๋ฐฑ์ ์ฑ๊ณต/์คํจ ์ ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค.๋์ค์ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ์ ์๋๋ก ์คํ๋ผ์ธ ์ ์ฅ ๊ธฐ๋ฅ์ด ์์ด์ผ ํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์ฑ์ ๋ซ์๋ค๊ฐ ๋์ค์ ์จ๋ผ์ธ ์ํ์์ ๋ค์ ์ฐ ํ์๋ ๊ฐ๋ฅํฉ๋๋ค. "์คํ๋ผ์ธ ์ฐ์ " ์ ๊ทผ ๋ฐฉ์๊ณผ ์ ์ฌ:
http://offlinefirst.org/
๋๋ ๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉดํ๋ค. ์ฒ์์๋ ์๋น์ค ์์ปค๋ก ์คํ๋ผ์ธ ๊ตฌ๊ธ ์ ๋๋ฆฌํฑ์ค ๋ฌธ์ ๋ฅผ ํธ๋ ๋ฐฉ์๊ณผ ๋น์ทํ๊ฒ ํ๊ณ ์ถ์๋ค. ์ ๊ทผ ๋ฐฉ์์ ์ฌ๊ธฐ ์์ Google์ ์ํด ์ ์ค๋ช ๋์ด
๊ทธ๋ฌ๋ Cordova๋ฅผ ๋์์ผ๋ก ํ๋ ๊ฒฝ์ฐ Service Worker๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ _hacky_ ์๋ฃจ์
์ด ํ์ํฉ๋๋ค. ๋๋ ์ด๊ฒ์ ์๊ฐํด ๋์ต๋๋ค.
https://gist.github.com/oliviertassinari/73389727fe58373eef7b63d2d2c5ce5d
import raven from 'raven-js';
import config from 'config';
const SENTRY_DSN = 'https://[email protected]/YYYY';
function sendQueue() {
const sentryOffline = JSON.parse(window.localStorage.sentryOffline);
if (sentryOffline.length > 0) {
raven._send(sentryOffline[0]);
}
}
// ...
@webberig์ ๋์ํฉ๋๋ค. ๋ค๋ฅธ ๋ง์ ๋ฉ์ง ๋ฐฉ๋ฒ์ผ๋ก ๊ฝค ์ธ์์ ์ด๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ์ด๋ฏธ ๊น๋ง๊ท์ ์ผ๋ถ๊ฐ ์๋๋ผ๋ ์ฌ์ค์ ์ฌ์ค ์กฐ๊ธ ๋๋์ต๋๋ค. ์ฑ์ ์ํคํ ์ฒ์ ๋ฐ๋ผ ์คํ๋ผ์ธ ์ํ์ ๊ฒฐ๊ณผ์ธ ์ค๋ฅ์ ์ฌ์ํ ๋น์จ์ด ์ ์ฌ์ ์ผ๋ก ์์ ์ ์์ต๋๋ค. ์ด์ ๋ํด ๋ณด๊ณ ํ ์ ์๋ ๊ฒ์ ๋ง์ ๊ตฌํ์์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
๊ทธ๋์ ๋ด ํฌํ๋ ์ด๊ฒ์ด ์๋์ผ๋ก ๊ตฌ์์ ธ์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. Sentry๋ก ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ์ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ๋ฉ์์ง๋ฅผ ์ ์ฅํ๊ณ ๋์ค์ ๋ค์ ์๋ํด์ผ ํฉ๋๋ค(ํ์ด๋จธ, ์ด๋ฒคํธ ๋๋ ๋จ์ํ๊ฒ ์ ์งํ๋ ค๋ ๊ฒฝ์ฐ ๋ค์ ๋ฉ์์ง ์ ์ก ์).
๋ํ "DDN"๋ ์ด๋ธ์ ๋ฌด์์ ์๋ฏธํฉ๋๊น?
๋ค๋ฅธ ๋ง์ ๋ฉ์ง ๋ฐฉ๋ฒ์ผ๋ก ๊ฝค ์ธ์์ ์ด๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ์ด๋ฏธ ๊น๋ง๊ท์ ์ผ๋ถ๊ฐ ์๋๋ผ๋ ์ฌ์ค์ ์ฌ์ค ์กฐ๊ธ ๋๋์ต๋๋ค. ์ฑ์ ์ํคํ ์ฒ์ ๋ฐ๋ผ ์คํ๋ผ์ธ ์ํ์ ๊ฒฐ๊ณผ์ธ ์ค๋ฅ์ ์ฌ์ํ ๋น์จ์ด ์ ์ฌ์ ์ผ๋ก ์์ ์ ์์ต๋๋ค.
์์ ํ ๊ณต์ ํฉ๋๋ค. ํ์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก ์ํ๋์ด์ผ ํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์คํฌ๋ฆฝํธ๊ฐ ๋ก๋๋์ง ์์ผ๋ฉด ๋ฌด์จ ์ผ์ด ์์ด๋ ์ฑ์ด ์๋ํ์ง ์๋ ์๋๋ฆฌ์ค๊ฐ ๋ง์ด ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ถ๋ถ์ ์ฑ์ ์คํ๋ผ์ธ์์ ์๋ํ์ง ์์ผ๋ฉฐ ๊ธฐ๋ํ์ง๋ ์์ต๋๋ค. ๊ทธ๊ฒ์ด ์ข์ ์ต๊ด์ธ์ง ์๋์ง๋ ๋ค๋ฅธ ๋ฌธ์ ์ ๋๋ค.
๋ง์ Raven ์ฌ์ฉ์๊ฐ ๊ทธ๋ ๊ฒ ํ๋ ์ฝ๋๋ฅผ ์์ฑํ์์๋ ๋ถ๊ตฌํ๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก AJAX ์ค๋ฅ๋ฅผ ๊ธฐ๋กํ์ง ์๋ ์ด์ ์ ๋๋ค. ํ์ง๋ง _์ํ์ ๋ค๋ฉด_ ์ฝ๊ฒ ํ ์ ์๋๋ก ๋ ธ๋ ฅํ๊ฒ ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์๋ ๊ฐ์ ์ผ์ ํ๊ณ ์ถ์ต๋๋ค.
๋ํ "DDN"๋ ์ด๋ธ์ ๋ฌด์์ ์๋ฏธํฉ๋๊น?
ํ์คํ์ง ์๋ค. @๋งคํธ๋ก๋ฒ ๋ํธ?
๋์์ธ ๊ฒฐ์ ์ด ํ์ํฉ๋๋ค. :)
๊ธฐ๋ณธ์ ์ผ๋ก ์ํ๋์ด์ผ ํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๋ค ๋ง์ด ๋๋ค์.
ํ์ง๋ง ์ํ์ ๋ค๋ฉด ์ฝ๊ฒ ํ ์ ์๋๋ก ๋ ธ๋ ฅํ๊ฒ ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์๋ ๊ฐ์ ์ผ์ ํ๊ณ ์ถ์ต๋๋ค.
๋ฐ๋ผ์ ๋์์ธ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๋ฐ ๋์์ด ๋๋๋ก ๋ช ๊ฐ์ง ์๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
๋ฌธ์๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํด transport
๊ตฌ์ฑ ์ต์
์ ์ฌ์ฉํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก Sentry๊ฐ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ๋ณด๋ด๋ ํ์ดํ๋ผ์ธ์ ๋ง์ง๋ง ๋ถ๋ถ์ ์ ์ดํ๊ณ ํด๋น ์ ์ก์ ์ํํ๋ ์ฑ
์์ ๋งก์ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์คํ๋ผ์ธ ๋๊ธฐ์ด์ ํ๋ฌ๊ทธ์ธํ๊ธฐ์ ๊ฐ์ฅ ์ข์ ์ฅ์์ธ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ๋ณด๋ด๋ ๋์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์๋ฒ์ ์
๋ก๋ํ๋ ๋๊ธฐ์ด๋ก ๋ณด๋ด์ญ์์ค. ๋๊ตฐ๊ฐ๊ฐ ๊ทธ๊ฒ์ ์คํํ๊ธฐ ์ํด ์์ ์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ์ผ ๊ฒ์
๋๋ค.
๋น์ทํ ๋งฅ๋ฝ์์ ๊ธฐ๋ณธ HTTP ์ ์ก์ ๊ณต์ Raven ๋กค๋ง ์คํ๋ผ์ธ ๊ฐ๋ฅ ๋๊ธฐ์ด๋ก ๋์ฒดํ๋ ๊ตฌ์ฑ ์ต์
( includeOffline
?)์ ๋
ธ์ถํ๋ ๊ฒ์ด ์ถฉ๋ถํ ๊ฐ๋จํ ๊น์?
์ด ๊ธฐ๋ฅ์ด ์ด์ ์ด๋ป๊ฒ๋ ๊น๋ง๊ท์ ๋ด์ฅ๋์ด ์์ต๋๊น?
@Freundschaft ์๋์, ์์ง ์๋๋๋ค. ๋ด๊ฐ ์ดํดํ๋ ํ, ์ง๊ธ์ transport
์ต์
์ ๋ฌด์ํ๊ฑฐ๋ shouldSendCallback
๋ฅผ ์ฌ์ฉํ์ฌ ๋์ค์ ๋ณด๋ผ ๋๊ธฐ์ด์ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
@cudaste ๊ฐ์ฌํฉ๋๋ค!
๋๊ตฐ๊ฐ ์์
์ํ ๊ตฌํ์ ์ป์์ต๋๊น? ๊ทธ๋ ์ง ์๋ค๋ฉด ๋๋ ๊ทธ๊ฒ์ ์์ฑํ๊ณ ์ฌ๊ธฐ์ ๊ฒ์ํ๋ ค๊ณ ๋
ธ๋ ฅํ ๊ฒ์
๋๋ค
@Freundschaft ์ด๊ฒ์ ๋งค์ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๋ ๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉดํด ์๋ค
++1 ์ ๋ฐ
+1
+1
์ฐ๋ฆฌ์ ์๋ฃจ์ :
shouldSendCallback
์ ๋ฌ์ฐ๊ฒฐ์ด ์์ผ๋ฉด logStorageService์์ ์ด๋ฒคํธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค.
var options = {
...
shouldSendCallback: function(data) {
if (connectionStatus.check() && Raven.isSetup()) {
return true;
} else {
// store log data somewhere
logStorageService.set(data);
return false;
}
}
...
};
Raven.config(SENTRY_KEY, options).install();
Queue๋ 25์ด๋ง๋ค ์ด ์ฝ๋๋ฅผ ์คํํ์ฌ ๊ฒฐ๊ตญ ๋ชจ๋ ์ด๋ฒคํธ๋ฅผ Sentry์ ์ ๋ฌํฉ๋๋ค.
queue.enqueue(function () {
logStorageService
.getKeys()
.then(function (keys) {
if (keys && keys[0]) {
logStorageService
.get(keys[0])
.then(function (log) {
Raven.captureMessage('', log);
logStorageService.remove(keys[0]);
});
}
...
});
});
์์ ๋ช ๊ฐ์ง ์๋ "๋น๊ณต๊ฐ" ํจ์์ ๋ํ ํธ์ถ์ ๋ณด์ฌ์ฃผ์์ต๋๋ค. ๊ทธ๋ฌ๋ Raven._sendProcessedPayload
๋๋ Raven._send
์ ํธ์ถํ ์ ์์ต๋๋ค.
์์ค ์ฝ๋๋ฅผ ๋ณด๋ฉด Raven()์ด ์ด๋ป๊ฒ ๊ฐ์ฒด๋ก ๊ตฌ์ฑ๋๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ด๋์๋ "new Raven()"์ด ๋ณด์ด์ง ์์ต๋๋ค.
์ด๋ฌํ ๊ธฐ๋ฅ์ ์ด๋ป๊ฒ ํธ์ถํ ์ ์์ต๋๊น?
์ ๊ฒฝ์ฐ์ง ๋ง์ธ์. ๋ฌธ์ ๋ raven.min.js
์ผ ๋๋ง ๋ฐ์ํ์ผ๋ฉฐ raven.js
์๋๋ผ ํด๋น ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ด์์ต๋๋ค.
๊ทธ๋์ _sendProcessedPayload
ํจ์์ ์ถ์๋ ์ด๋ฆ์ ์ฐพ์๊ณ ๋ค์์ ๋ด ์ฝ๋์์ ๋๋ธ ๊ฒฐ๊ณผ์
๋๋ค(ํ์ฌ๋ก์๋).
/**
* HACK: Using a private function that gets minified!
* Pinned Raven-js to version 3.8.1.
*/
Raven._sendProcessedPayload = Raven._sendProcessedPayload || Raven.Y;
...
function processQueue(items) {
// Stop if we're not online.
if (!canSend())
return;
// Process the given items or get them from the queue.
items = items || queue.getItems();
if (!items || items.length < 1)
return;
// First in, first out.
var next = items.shift();
// Send the next item.
Raven._sendProcessedPayload(next, function processed(error) {
// If no errors, save the queue and process more items.
if (!error) {
queue.save(items);
processQueue(items);
}
});
}
function shouldSend(data) {
if (canSend())
return true;
if (data.extra.retry)
return false;
data.extra.retry = true;
queue.add(data);
return false;
}
...
setInterval(processQueue, OFFLINE_QUEUE_TIMEOUT);
์ด๊ฒ์ ๋์ฐํ HACK ์ผ๋ก ์ธํด ์ด์์ ์ด์ง ์์ผ๋ฉฐ ๋ํ ์ด ๋๊ธฐ์ด์ ์ฒ๋ฆฌํ๋ ๋์ ๋ ๋ง์ ์ค๋ฅ๊ฐ ์บก์ฒ๋ ์ ์์ผ๋ฏ๋ก ์์๊ฐ ๋ง์ง ์๊ฒ ์ ์ก๋ฉ๋๋ค...
์ค๋์ ๋ง์ง๋ง ๋ฉ๋ชจ: _sendProcessedPayload
๊ณต๊ฐํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. shouldSendCallback
๊ฐ false๋ฅผ ๋ฐํํ ๋ _send
์ข
๋ฃ๋๋ ์์น์์ ๋ฐ๋ก ์ ํํ๋ฏ๋ก ๋ณด๋ด๊ธฐ๋ฅผ ๋ค์ ์๋ํ๋ ค๋ ๊ฒฝ์ฐ ํธ์ถํ๋ ๊ฒ์ด ํ์คํ ์ ํ์
๋๋ค...
๊ทธ๋ฌ๋ ํ์ด๋ก๋๋ฅผ ์์ ํ๋ ๊ฒ์ ๋ง์์ ๋ค์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด์์ ์ธ ๋ฐฉ๋ฒ์ ์๋๋๋ค.
์ด ๊ธฐ๋ฅ์ด ์์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ถ๊ฐ๋์ง ์์์ต๋๊น?
๋๋ ์คํ๋ผ์ธ ๊ธฐ๋ฅ์ด ์๊ธฐ ๋๋ฌธ์ ์ค๋ ์ด๊ฒ์ด ํ์ํ์ต๋๋ค. ๋๋ indexdb๋ฅผ ์ฌ์ฉํ์ฌ ๋ด ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง๋ง Sentry์ ๋ํ ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์คํ๋ผ์ธ ๊ธฐ๋ฅ์ ๊ฐ๋ ๊ฒ์ด ์ข์ ๊ฒ์ ๋๋ค. ์์ฒด ๋ก์ปฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฒคํธ๋ฅผ ์ ์ฅํ๊ณ ์ฃผ๊ธฐ์ ์ผ๋ก/๋คํธ์ํฌ ๋ณ๊ฒฝ์ ํตํด ๋งค์ฐ ์ ์ฉํ db๋ฅผ ๋ณด๋ด๊ณ ์ง์ฐ๋ ค๊ณ ์๋ํ ์ ์๋ค๋ฉด.
์ฌ๊ธฐ์์ ์ฃผ์ https://github.com/getsentry/raven-js/pull/1165
๋์ค์ ์จ๋ผ์ธ ์ํ๊ฐ ๋์์ ๋ ๋ณด๋ด๊ธฐ ์ํด ์์ธ๋ฅผ ์ ์ฅํ๋ ๊ฒฝ์ฐ ์์ธ์ ํ์์คํฌํ๋ฅผ ์ค์ ํ์ฌ ๋ด๊ฐ ์ผํธ๋ฆฌ๋ก ๋ณด๋ผ ๋ ์์ธ๊ฐ ๋ฐ์ํ์ง ์์์์ ๋ํ๋ด๋๋ก ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ง๋ง ์ด๋ ์์ ์์ ๊ณผ๊ฑฐ? ๋๋ ๊ทธ๊ฒ์ ์ถ๊ฐ๋ก ์ถ๊ฐ ํ ์ ์๋ค๊ณ ์๊ฐํ์ง๋ง ์ค์ ํ์ ์คํฌํ๋ฅผ ์ค์ ํ ์ ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
captureException
๊ทธ๋ฐ ์ต์
์ด ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ฐ๋ฆฌ์ ์๋ฃจ์ :
Raven ์ด๊ธฐํ์
shouldSendCallback
์ ๋ฌ์ฐ๊ฒฐ์ด ์์ผ๋ฉด logStorageService์์ ์ด๋ฒคํธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค.
๋ก๊ทธ ์ ์ก์ ์๋ํ๋ ๋๊ธฐ์ด
Queue๋ 25์ด๋ง๋ค ์ด ์ฝ๋๋ฅผ ์คํํ์ฌ ๊ฒฐ๊ตญ ๋ชจ๋ ์ด๋ฒคํธ๋ฅผ Sentry์ ์ ๋ฌํฉ๋๋ค.