Sentry๋ ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ์ง๋จํ๊ณ ์์ ํ ์ ์๋๋ก ๋์์ค๋๋ค. ์ฐ๋ฆฌ๋ JavaScript SDK์ ์๋ก์ด ์ฃผ์ ๋ฒ์ ์ ๋ํ ์์ ์ ์์ํ ๊ณํ์ด๋ฉฐ ํ์ฌ๊น์ง ์ต๊ณ ์ ์ํํธ์จ์ด๋ก ๋ง๋ค๊ณ ์ ํฉ๋๋ค.
๊ทธ๋ฌ๋ ๊ทธ๋ ๊ฒ ํ๋ ค๋ฉด ๊ทํ์ ํผ๋๋ฐฑ์ด ํ์ํฉ๋๋ค.
_SDK๋ฅผ ์ฌ์ฉํ ๋ ๊ฐ์ฅ ํฐ ๊ณ ์ถฉ์ ๋ฌด์์
๋๊น?_
_์ด๋ค ๊ธฐ๋ฅ์ด ๊ฐ์ฅ ๋ถ์กฑํฉ๋๊น?_
_๋ฌด์์ ๋ฐ๊พธ๊ณ ์ถ์ต๋๊น?_
์ฐ๋ฆฌ๋ ์ด๋ฏธ ์๋ ๋์ด๋ ๋ฌธ์ ์ค ์ผ๋ถ๋ฅผ ํด๊ฒฐํ ๊ณํ์ ๋๋ค.
์ฐ๋ฆฌ๊ฐ ๋น์ ์ ๋์ธ ์ ์๋๋ก ๋์์ฃผ๊ณ ๋น์ ์ ์๊ฐ์ ์๋ ค์ฃผ์ญ์์ค! ์ฐ๋ฆฌ๋ ๋ชจ๋ ์๊ฒฌ์ ๋ตํ ๊ฒ์ด๋ฏ๋ก ๋ชจ๋ ์๊ฒฌ์ด ์ค์ํฉ๋๋ค.
๊ฑด๋ฐฐ!
์นด๋ฐ
๊ฐ์ฅ ํฐ ๋ถ๋ง์ ํญ์ ๋ด ์ค๋ฅ ๋ก๊น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๊ฐ์ฅ ํฐ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋๋ผ๋ ๊ฒ์ ๋๋ค. ๋๋ ์ข ์ข ๋ ๋์ ํ์ด์ง ์๋ ์ ์๋ฅผ ์ป๊ธฐ ์ํด ์ฒซ ํ์ด์ง ๋ก๋ ํ 5-10์ด ํ์ Sentry๋ฅผ ์ง์ฐ ๋ก๋ํ๋ ๊ฒ์ ๊ณ ๋ คํ์ต๋๋ค. ๊ทธ๋์ ๋น์ ์ด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ฒ ๋์ด ๋งค์ฐ ๊ธฐ์ฉ๋๋ค โค๏ธ
์ ์๊ฒ drastically reduce overall bundle size
-goal ๋ ๊ฐ์ฅ ์ค์ํ ๊ฒ์
๋๋ค.
์๋ ,
์ ์ฒด ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ์ค์ ๋๋ค.
๋ณ๊ฒฝ ์ฌํญ์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ +1ํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ ์ด๊ฒ์ ์ถ๊ฐํ ๊ฒ์ด๋ค: ๋ด ์น ์ฑ ์์ Sentry ์ด๊ธฐํ๋ 30ms(๋น ๋ฅธ ์ปดํจํฐ์์)๊ฐ ์์๋๋๋ฐ, ์ด๋ ์ง๋จ ๋ก๊ฑฐ์ ๋๋ฌด ๋ง์ ์๊ฐ์ด๊ณ React Native ์ฑ์์๋ ๋ฒ๋ค๋ฌ(๋ฉํธ๋ก) ๋๋ฌธ์ ํจ์ฌ ๋ ๋์ฉ๋๋ค. ํธ๋ฆฌ ์์ดํน์ ํ ์ ์๊ธฐ ๋๋ฌธ์ Sentry๋ ์์ฒญ๋ _78๊ฐ์ ํ์ผ_์ ๊ฐ์ ธ์ค๊ณ ์์ ์๊ฐ์ ์๋นํ ๊ธฐ์ฌ๋ฅผ ํฉ๋๋ค(๋ช %).
์๋ ํ์ธ์, React Native์ ์ผ๋ถ ๋ฐ์ดํฐ:
์ด๊ฒ์ iPhone X์์ ํ๋กํ์ผ๋ง๋ฉ๋๋ค. Sentry๋ ์์ ์ ๋ฌด๋ ค 54ms๊ฐ ์์๋ฉ๋๋ค. ~40์ ๋๋์ ํ์ผ์ ๊ฐ์ ธ์ค๊ณ ~15๋ JS ์ฝ๋๋ฅผ ์ด๊ธฐํํฉ๋๋ค. _native_ ์ธก์ ์ด๊ธฐํํ๊ธฐ ์ํด ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ๋ ~30ms๋ฅผ ์ถ๊ฐํ๊ณ Sentry์ JS(๋ง์ ๋ถ๋ถ์ด ์์)๋ฅผ ๋ ์ฑ/ํ์ฑํ ๋ ์ค๋ช ๋์ง ์๋ ์๊ฐ์ด ์์ต๋๋ค. 5-15ms๊ฐ ์์ฌ๋์ง๋ง ์ ํํ๊ฒ ์ธก์ ํ์ง๋ ์์์ต๋๋ค. ์ด - 90-100ms - ๋ด ์ฑ์ ์คํํ๋ ์ด ์๊ฐ์ 15%์ ๋๋ค!
์ข์ ์ง๋ฌธ์ ๋๋ค! ์ฌ์ฉ์๋ฅผ console.log์ ๋ ธ์ถํ๊ณ ์ถ์ง ์์ง๋ง ์ด๋ ๊ฒฝ๋ก๋ก ์บก์ฒ๋๊ธฐ๋ฅผ ์ํ๋ ํ๋ก๋์ ์ฑ์ ๋ํ ๋ณด๋ค ์ ์ฐํ ๋ก๊น ์ต์ (๋๋ ๋ฌธ์ํ ๋ฐฉ๋ฒ)์ ๋ณด๊ณ ์ถ์ต๋๋ค. ์ด๊ฒ์ https://github.com/getsentry/sentry/issues/12618 ๋ฐ https://github.com/getsentry/sentry-javascript/issues/1883 ๊ณผ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์
Sentry ์ด๋ ๊ฒฝ๋ก๋ debug ๋๋ loglevel ๊ณผ ๊ฐ์ ๋ก๊น ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํตํฉ๋ ์ ์์ต๋๋ค. ์ด๊ฒ์ ํ๋ก๋์ ์ฑ์ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก์ฒ๋ผ ๋ณด์ด๋ฉฐ ์ด๋ฏธ ์ผ๋ถ DIY ์ ๊ทผ ๋ฐฉ์์์ ์ง์๋์ง๋ง ํ์ฌ ๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๊ฒ์ด ๊ฐ๋ฅํ์ง ํ์คํ์ง ์์ต๋๋ค. (๋๋ ๊ทธ๊ฒ์ด ์๊ณ ์ด๋ป๊ฒ ๋ ๋์น ๊ฒฝ์ฐ ํ์ ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.) ๊ฐ์ฌ ํด์!
์๋ ํ์ธ์, SDK ์ด๊ธฐํ์ ๋ํ ๊ถ์ฅ ์ฌํญ์ด ์์ต๋๋ค.
์ต์ ์ผ๋ก Sentry.init๋ฅผ ํธ์ถํ๋ ๋์ SDK๋ DSN ID ๋ฐ ๊ธฐํ ์ต์ ์ ๊ฐ์ ธ์ค๊ธฐ ์ํด ๋ช ๋ช ๋ ์ ์ญ ๋ณ์์ ๊ฐ์ SentryOptions๋ฅผ ์๋์ผ๋ก ํ์ธํ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ํ์ํ ๋ JS ํ์ผ์ ๋์ ์ผ๋ก ๋ก๋ํ๊ณ ์์ผ๋ฉฐ ํฌ๋ก์ค ๋๋ฉ์ธ ์์ฒญ ๋๋ ๋คํธ์ํน ๋ฌธ์ ์์ ๋ฒ๋ค js์ ๋ก๋ ์ด๋ฒคํธ๋ฅผ ์ถ์ ํ๊ธฐ ์ด๋ ต์ต๋๋ค. ์ด ๋ณ์๋ฅผ ์๋์ผ๋ก ํ์ธํ๋ฉด ์ด์ ๋์์ด ๋๋ฉฐ init ํจ์๋ฅผ ๋ ์ ์ ์ผ๋ก ํธ์ถํ ํ์๊ฐ ์์ต๋๋ค.
_SDK๊ฐ event_ ํ์๋ฅผ ๋ณด๋ด์ง ๋ชปํ์ต๋๋ค.
capureEvent
์ด ์์ฒญ์ ๋ณด๋ด์ง ๋ชปํ๋ค๋ ์ผ์ข
์ ํ์๋ฅผ ํ๊ณ ์ถ์ต๋๋ค. ๊ทธ๋์ ํ์ ๋๊ธฐํ๊ณ ๋์ค์ ๋ค์ ์๋ํ ์ ์์ต๋๋ค.
์ด๊ฒ์ ์คํ๋ผ์ธ ์ฐ์ ์ฑ(ํ๋ก๊ทธ๋ ์๋ธ ์น ์ฑ)์ ์ ๋ง ์ ์ฉํฉ๋๋ค.
๋ธ๋ผ์ฐ์ ๊ฐ ์จ๋ผ์ธ ์ํ์ ์์ง๋ง ๋น์ ์์ ์ธ ์ฐ๊ฒฐ/์๊ฐ ์ด๊ณผ๋ก ์ธํด ๋คํธ์ํฌ ์์ฒญ์ด ์คํจํ๋ ์ํฉ์ด ์์ต๋๋ค(์: ๋คํธ์ํฌ ๋ฒ์๊ฐ ์ด์ ํ ํธ๋กํ ์ง์ญ ์ด๋).
์คํ๋ผ์ธ ํตํฉ์ด ์์ง๋ง ํด๋น ์ฌ๋ก๋ฅผ ๋ค๋ฃจ๊ธฐ์ ์ถฉ๋ถํ์ง ์์ ์จ๋ผ์ธ ๋ฐ ์คํ๋ผ์ธ ์ด๋ฒคํธ ์ ์์กดํฉ๋๋ค.
๋คํธ์ํฌ ์ค๋ฅ๋ ์ด๋ฌํ ์ํฉ์ ๊ณ ๋ คํ์ง ์๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด Sentry์ ์ํด ๊ธฐ๋ก๋์ง ์๊ณ ๊ณต๋ฐฑ์ผ๋ก ์ฌ๋ผ์ง๋ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๋ ์์ธ์ด ๋ ์ ์์ต๋๋ค.
PWA์ธ ํ๋ก์ ํธ๊ฐ ์๊ณ ์ฑ์ด ์คํ๋ผ์ธ์ผ ๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฉฐ ์ผํธ๋ฆฌ ์์ง ๋๋ฉ์ธ์ ๋ฑ๋ก๋์ง ์์๊ธฐ ๋๋ฌธ์ ์๋น์ค ์์ปค์์ ๋ฐฑ๊ทธ๋ผ์ด๋ ๋๊ธฐํ๋ฅผ ์ํํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
@edelvalle
์ด๊ฒ์ Workbox์์ ๊ฐ๋ฅํด์ผ ํ๊ณ Background Sync ํ๋ฌ๊ทธ์ธ ~์ด์ง๋ง ์์ง ํ
์คํธํ์ง ์์์ต๋๋ค~
์ ์๋ํ๋ ๊ฒ ๊ฐ๊ณ ์ด๋ฒคํธ ๋ ์ง๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์์ ์ ๊ธฐ์ค์ผ๋ก ํฉ๋๋ค.
// service-worker.js
import { registerRoute } from 'workbox-routing'
import { NetworkOnly } from 'workbox-strategies'
import { BackgroundSyncPlugin } from 'workbox-background-sync'
registerRoute(
new RegExp('^https://[^\\.]+\\.ingest\\.sentry\\.io/api/.*$'),
new NetworkOnly({
plugins: [
new BackgroundSyncPlugin('project-name/sentry-event-queue', {
maxRetentionTime: 7 * 24 * 60, // 7 days
})
],
}),
'POST'
)
์๋
ํ์ธ์, drastically reduce overall bundle size
) ๋ณด๊ณ ์ถ์ดํ๋ ๊ณํ์
๋๋ค. ์ฐ๋ฆฌ๋ gatsby+preact ํ๋ก์ ํธ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ sentry๋ ์ฐ๋ฆฌ์ ์ฃผ์ ๋ฒ๋ค ํฌ๊ธฐ(95kb ์ค 27kb)์ ~28%๋ฅผ ์ฐจ์งํฉ๋๋ค. ํ์ด์ง๋น js ๋ฒ๋ค์ 90kb ๋ฏธ๋ง์ผ๋ก ๊ฐ์ ธ์ค๋ ค๊ณ ๋
ธ๋ ฅ ์ค์ด๋ฏ๋ก ์ฐ๊ฒฐ์ด ์ข์ง ์์ ์๊ณจ ์ง์ญ์์ ์ฑ์ด ๋ ์ ์ํ๋ ์ ์์ต๋๋ค. ํจ์ฌ ๋ ์์ ์ผํธ๋ฆฌ SDK ํฌ๊ธฐ๊ฐ ๋ง์ ๋์์ด ๋ ๊ฒ์
๋๋ค.
IE11 ์ง์๋ ์ค๋จํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? Microsoft๋ฅผ ๋น๋กฏํ ๋ง์ ๋๊ท๋ชจ ์ฌ์ดํธ์์ ์ฌํด ๋ง๊น์ง ์ด ๋ธ๋ผ์ฐ์ ์ ๋ํ ์ง์์ ์ข ๋ฃํฉ๋๋ค. ๋ฌผ๋ก ๋ฌธ์ ๋ ์ด๊ฒ์ด ์ค์ ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌ๊ธฐ์ ์ํฅ์ ๋ฏธ์น๋์ง ์ฌ๋ถ์ ๋๋ค.
@kamilogorek v6์ด ์ธ์
๋๋ ๋ํ @xr0master์ ๋์ํ๊ณ ์ ๋ฒ์ ์์ IE11์ ํฌํจํ์ฌ IE ์ง์์ด ์์ ํ ์ค๋จ๋์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
SDK๋ฅผ ์ฌ์ฉํ ๋ ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ ๋ฌด์์ ๋๊น?
// This is not nice, as it doesn't get auto-completion when importing
import * as Sentry from '@sentry/browser'
// This is better, but has given me problems on Sentry 5.x
import { captureException } from '@sentry/browser'
console.log
๋ instruments.js:1
์์ ๋น๋กฏ๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ฉฐ ์ด๋ ๋๋ฒ๊น
์ค์ ๋์์ด ๋์ง ์์ต๋๋ค. console.trace
๋ ๋๋ฌด ๋ง๊ธฐ ๋๋ฌธ์ ํ์ฌ ๋ก๊น
์ค์ธ ํญ๋ชฉ์ ๋ํ ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ํด console.log
์ ์๋์ผ๋ก ์ด๋ ๊ฒฝ๋ก๋ฅผ ์์ฑํ๊ฒ ๋ฉ๋๋ค.์ด๋ค ๊ธฐ๋ฅ์ด ๊ฐ์ฅ ๋ถ์กฑํฉ๋๊น?
๊ฑด๊ฐ ์ง์ .
AsyncLocalStorage๋ฅผ ์ง์ํ๋ ๋ ธ๋ ๋ฒ์ ์์ ์ฌ์ฉํ ๊ณํ์ด ์์ต๋๊น?
๊ทธ๋์ ์ฐ๋ฆฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ์
๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ๊ฒ ์ธ์๋ ํฐ ๋ณํ ์์ด ์ค๋ 6.0.0
๋ฐฐ์กํ์ต๋๋ค. cc @OmgImAlexis
์ด ๋ฌธ์ ์ ์ ๋ชฉ์ v7๋ก ๋ณ๊ฒฝํ์ฌ ์ด๋ฅผ ๋ ์ ๋ฐ์ํด์ผ ํฉ๋๋ค.
Sentry.init
์ ๋ณ๋๋ก ํ๋ ์์ํฌ ํตํฉ์ ๋
ธ์ถํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๊ฒ์ Vue๊ฐ ๋๋ฆฌ๊ฒ ๋ก๋๋๋ #3232๋ฅผ ์ฒ๋ฆฌํ๋ฏ๋ก ์ผํธ๋ฆฌ ์ด๊ธฐํ ์๊ฐ์ ์กด์ฌํ๋ค๊ณ ๋ณด์ฅ๋์ง ์์ต๋๋ค. Vue ๋ก๋ ์๊ฐ์ ํธ์ถํ ์ ์๋ Sentry.configureVue(Vue)
์ ๊ฐ์ ๊ฒ์
๋๋ค.
์์ฒด ๋ผ์ฐํฐ ๋ฐ ๋ณด๋ค ๊ตฌ์ฒด์ ์ธ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ฐ ํธ์ถ๋ก ๋์ผํ ๋ฌธ์ ๋ด์์ ๋ณด์กฐ ๋ฐ์ ์ฑ ๋ก๋ ๋ฐ ์ธ๋ก๋๋ฅผ ์ง์ํ๋ ๋ฐ์ ๋ผ์ฐํฐ ํตํฉ
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ ์๊ฒ
drastically reduce overall bundle size
-goal ๋ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋๋ค.