@sentry/browser
@sentry/node
raven-js
raven-node
_(๋
ธ๋์ฉ ๋ ์ด๋ธ)_4.0.2
@sentry/browser์ ํฌ๊ธฐ๋ raven-js ํฌ๊ธฐ์ ๋ ๋ฐฐ ์ด์์ ๋๋ค(86kB ๋ 39kB(์ถ์)). ์ ์๊ฐ์๋ ์ด๊ฒ์ ํ์คํ ํด๋ณด์ด๋ฉฐ ์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ์ง ์๋ ์ฌ๊ฐํ ์ด์ ์ ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ์ ๊ธฐํด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.
๋ฒ๋ค ํฌ๊ธฐ์ ๋ํ ๊ทํ์ ์ฐ๋ ค๋ฅผ ์ดํดํ๊ณ ์ผ๋ฐ์ ์ผ๋ก ๋์ํ์ง๋ง ์์ถ๋์ง ์์ ์ถ์ ํ์ผ ํฌ๊ธฐ ๋์ gzip ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ๋จผ์ ๋น๊ตํ๋ ๊ฒ์ด ๊ณต์ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
@sentry/browser
๋ 21.3799KB์
๋๋ค.
raven-js
13.44KB
๋ํ ์ด๊ฒ์ด ๋ชจ๋ ์ฌ๋์๊ฒ ์ ์ฉ๋๋ ๊ฒ์ ์๋์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ์น์ฌ์ดํธ์์ SDK๋ฅผ ์ค์ ํ CDN ๋ก๋๋ฅผ ์ฌ์ฉํ๋๋ก ์ฌ๋๋ค์ ์ ๊ณตํ๊ณ ์๋ดํฉ๋๋ค.
์ฐธ์กฐ: https://docs.sentry.io/quickstart/?platform=browser
๋์ผํ ๊ธฐ๋ฅ์ ์ ์งํ๋ฉด์ <1KB gzip์ผ๋ก ์์ถ๋ ์ด ์คํฌ๋ฆฝํธ์ ํ์ด์ง ๋ก๋ ์๊ฐ๊ณผ ๊ณต๊ฐ์ ๋ฏธ์น๋ ์ํฅ.
๊ทธ๋์ tl; dr:
์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์๊ณ ์์ผ๋ฉฐ ๊ฐ์ ์ ์ฌ์ง๊ฐ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ์ง๊ธ ๋น์ฅ์ ์ต์ฐ์ ์์๊ฐ ์๋๋๋ค.
์์ถ๋์ง ์์ ์ถ์ ํ์ผ ํฌ๊ธฐ ๋์ gzip ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ๋จผ์ ๋น๊ตํ๋ ๊ฒ์ด ๊ณต์ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฑ๋ฅ ๋ฌธ์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ค์ด๋ก๋๋ฟ๋ง ์๋๋ผ ๊ตฌ๋ฌธ ๋ถ์ ๋ฐ ์คํ์์๋ ๋ฐ์ํ๋ฏ๋ก ์ถ์๋ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ๋ ๊ฒ๋ ๊ณต์ ํ๋ค๊ณ ์ฃผ์ฅํฉ๋๋ค. ~92kb๋ ์๋นํ ๋ฌด๊ฒ๊ณ ์ ์ฌ์ ์ฅ์น์์ ์ต๋ 1์ด์ ๊ตฌ๋ฌธ ๋ถ์ ์๊ฐ์ ์ถ๊ฐํ ์ ์์ต๋๋ค(์ด ํ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ง ํด๋น).
CDN๋ ์คํฌ๋ฆฝํธ์ < 1KB
๋ฒํธ๋ฅผ ์ด๋์ ๊ฐ์ ธ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์์ธํ ์ค๋ช
ํด ์ฃผ์๊ฒ ์ต๋๊น? https://browser.sentry-cdn.com/4.0.4/bundle.min.js
๋ฅผ ์ด๋ฉด 22KB์ gzip ํฌ๊ธฐ๊ฐ ํ์๋ฉ๋๋ค.
Sentry์ SDK๋ ๊ฐ๋ฐ์๊ฐ ํฌํจํ๋ ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋์ผ ๋ฟ์ ๋๋ค.
์ถ์ : ์ ๋ ์ผํธ๋ฆฌ๋ฅผ ์ฌ๋ํฉ๋๋ค. ์ ํฌ์๊ฒ ํฐ ๋์์ด ๋์์ต๋๋ค. ์น ์ฑ๋ฅ์ ๋ด๊ฐ ์ด์ ์ ๊ฐ๊ณ ์๋ ๊ฒ์ ๋๋ค. ;)
@klaemo
ํคํค ๊ฑฑ์ ๋ง์ธ์ ๐
๋ด๊ฐ ๋งํ๋ฏ์ด, ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์๊ณ ์๊ณ ๊ทธ๊ฒ์ด ๋ ์์์ง๋ ๊ฒ์ ์ํ์ง ์๋ ๊ฒ์ด ์๋๋๋ค.
์ฐ๋ฆฌ์๊ฒ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์๋ก์ด SDK๋ฅผ ์ถ์ํ๋ ๊ฒ์ด์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ๋
ธ๋ ฅํ ๊ฒ์
๋๋ค.
๋ ๋ง์ ๋จ๊ณ๋ฅผ ์ํํ ์ ์์ต๋๋ค. ์: tslib
์ฌ์ฉ , ๋ฌธ์์ด ๊ฒฐํฉ ...
๋ฐ๋ผ์ ๊ฐ์ ํ ์ฌ์ง๊ฐ ๋ง์ต๋๋ค.
์ฃ์กํฉ๋๋ค. ์ ์ ๊ฒ์ ํ ๋งํฌ๋ ์ด๋ฏธ ๊ตฌ์์
๋๋ค ๐
๋๋ _Loader_๋ฅผ ์ฐธ์กฐํ๊ณ ์์์ต๋๋ค: https://docs.sentry.io/platforms/javascript/loader/
_Loader_๋ ๋น๋๊ธฐ ํน์ฑ์ผ๋ก ์ธํด ํ๊ณ๊ฐ ์๊ณ ๊ฒฐ๊ตญ์๋ ์ฌ์ ํ SDK๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ฃผ์
ํฉ๋๋ค(๋น๋๊ธฐ์ผ์ง๋ผ๋). ์ฌ๋๋ค์ด ์์ฒญํ๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๊ฐ ์ ๊ณตํ๋ ๋์์
๋๋ค.
@HazAT ์ฃ์กํ์ง๋ง ๋ค์ ๋ฒ์ ์ถ์์ผ์ ์๋ ค์ฃผ์ค ์ ์๋์?
๋ด ๋ง์, #master ๋ธ๋์น์ ์ด๋ฏธ ๋ช ๊ฐ์ง ๋ณ๊ฒฝ ์ฌํญ์ด ์์ง๋ง ์์ง ๋ฆด๋ฆฌ์ค๋์ง ์์์ต๋๋ค. ํ์ง๋ง Angular5+ ํ๋ก์ ํธ์๋ 4x ๋ฒ์ ์ ์ฌ์ฉํ ์ ์๋ค๊ณ ๊ฒฐ์ ํ์ต๋๋ค.
@rayzru ๋ฐฉ๊ธ 4.0.5
๋ฅผ ์ถ์ํ์ง๋ง ํด๋น ์ฃผ์ ์ ๊ด๋ จ๋ ๊ฒ์๋ฌผ์ ๊ณ์ ๋จ๊ฒจ์ฃผ์ธ์.
์ ์๊ฐ์๋ ์ด๊ฒ์ ํ์คํ ํด๋ณด์ด๋ฉฐ ์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ์ง ์๋ ์ฌ๊ฐํ ์ด์ ์ ๋๋ค.
๐ฏ ๋๋ ๋ค์๊ณผ ๊ฐ์ ์ฌ์ค์ ์์์ฐจ๋ฆด ๋๊น์ง ์ ๊ทธ๋ ์ด๋ํ๋ ค๋ ์ฐธ์ด์์ต๋๋ค.
์ ์ด๋ ํจํค์ง ํฌ๊ธฐ๋ ๋ ์์ง๋ง ๋ฒ๋ค์ โ ๏ธ +10KB ์ gzipped JavaScript๊ฐ ์ค์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ธฐ๋ค๋ฆด ๊ฒ์ ๋๋ค, ์ข์ ์ผ์ ๊ณ์ํ์ญ์์ค :)
@HazAT esm ํ์ผ์ ์์ฑํ ์ ์์ต๋๊น? ์นํฉ์ด ์ฐ๊ฒฐ ๋ฐ ํธ๋ฆฌ ํ๋ค๋ฆผ์ผ๋ก ๋ ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
๊ฐ ๋ณํฉ ์์ฒญ์ ๋ํ ํจํค์ง์ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ถ์ ํ๊ธฐ ์ํด ์ผ๋ถ CI ๋๊ตฌ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์ด ๋ฌธ์ ์ดํ ์ค์ ๋ก 100kB๋ก ์ฆ๊ฐํ์ต๋๋ค. https://bundlephobia.com/result?p=@sentry/browser @4.3.0์ ์ฐธ์กฐํ์ธ์.
์๋ฅผ ๋ค์ด https://github.com/siddharthkp/bundlesize ์๋
Webpack์ ์ง์ ์ ์ ๋ํ ๊ธฐ๋ณธ ์ฑ๋ฅ ์์ฐ์ ๋ชจ๋ ์ฅ์น์ ๋คํธ์ํฌ์์ ์ ์ ํ ์ฑ๋ฅ์ ์ป์ ์ ์๋๋ก 250kb์ ๋๋ค. 100kb์ Sentry๋ ์๋นํ ์์ฐ์ ์ฐจ์งํฉ๋๋ค.
์ด ํ๊ท๋ฅผ ์์ ํ๋ ๊ฒ์ด ๋ก๋๋งต์ ์ ํ ํฌํจ๋์ด ์์ง ์๊ฑฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๊ท๋ชจ ์์ฐ ์์ด ๊ณ์ ์ฑ์ฅํ ๊ฒฝ์ฐ ๊ณ์ ์ ๋ฐ์ดํธํด ์ฃผ์ญ์์ค.
์ฐ๋ฆฌ๋ ๊ณ ๊ฐ์๊ฒ ๋น์ฉ์ ์ง๋ถํ๊ณ ๋ฐฑ์๋, ๋ค์ดํฐ๋ธ ๋ฐ ์น ๋ชจ๋์์ Sentry์ ๋ง๋ํ ํฌ์๋ฅผ ํ๊ณ ์์ง๋ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌ๊ธฐ์ 3๋ฐฐ ์ด์([email protected]์ 31kB)์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๋ ๊ฒ์ ์ ๋นํํ ์ ์๋ ๊ฒ์ด ์๋๋๋ค.
@jacobrask ์ด์ ๋ฒ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. https://www.onepixel.com/ ์์ ํ๋ ๋๋ก ์ ์๋ํฉ๋๋ค. ๐.
@jacobrask ๊ทธ๊ฒ์ ํ์คํ ์ฐ๋ฆฌ ๋ชฉ๋ก์ ์๊ณ ์ฐ๋ฆฌ๋ ๋ํ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ฝ๊ฒ ์ค์ผ ์ ์๋ ๋ฎ์ ๋งค๋ฌ๋ฆฐ ๊ณผ์ผ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ ์ ๋ ๋ง์ ์ฌ๋๋ค์ด ์ด๊ฒ์ ์๊ตฌํ๋ฏ๋ก ์์๋ณด๋ค ๋นจ๋ฆฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฒ์
๋๋ค.
@HAZAT
Sentry ๋ธ๋ผ์ฐ์ SDK ๋กค์
๋ฒ๋ค์ ์ต์ ํํ ์ ์์ต๋๋ค. ๋ฒ๋ค min js ํ์ผ์๋ ๋ฐ๋ณต๋๋ tslib ์ฝ๋๊ฐ ๋ง์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด __generator, __assign. ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์๋ ํ๋์ ์ฝ๋๋ฅผ ๊ณต์ ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ธ๋ผ์ฐ์ ํ๋ก์ ํธ๋ ๋ค๋ฅธ ํจํค์ง dist ํ์ผ์ ์ฌ์ฉํฉ๋๋ค. gzip ํฌ๊ธฐ๋ฅผ 23K์์ 16K๋ก ์ค์ผ ์ ์์ต๋๋ค.
๋ฒ๋ค ํฌ๊ธฐ๋ 4.3.2์์ ๋์ผํฉ๋๋ค.
https://bundlephobia.com/result?p=@sentry/browser @4.3.2 ๋ณ๊ฒฝ ์ฌํญ์ ๊ด๊ณ์์ด
https://github.com/getsentry/sentry-javascript/pull/1738 :(
@vkrol ์ ์ด๋ npm ํจํค์ง์ ๋ํด @gaterking ์ด ๋ง๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋๋๋ ค์ผ ํ์ต๋๋ค.
๋ฐ๋ฉด CDN์ ๋ฒ๋ค์ ๋ ์์์ผ ํฉ๋๋ค.
๋ณ๊ฒฝ ์ฌํญ์ ๋ค์ ์ถ๊ฐํ ๊ฒ์ด์ง๋ง ์๋ฅผ ๋ค์ด tslib
์ ๋ํ ๋ด๋น์๊ฐ ํ์ํ๋ฏ๋ก ์ด์ ๋ํด ์ด์ผ๊ธฐํด์ผ ํฉ๋๋ค.
๋ํ ํ์ดํ์ด ์์ฑ๋๋ ๋ฐฉ์์ด ๊นจ์ก์ต๋๋ค.
@HazAT ๋ค , ๊ฐ์ฌํฉ๋๋ค.
@vkrol ์ ์ด๋ npm ํจํค์ง์ ๋ํด @gaterking ์ด ๋ง๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋๋๋ ค์ผ ํ์ต๋๋ค.
๋ฐ๋ฉด CDN์ ๋ฒ๋ค์ ๋ ์์์ผ ํฉ๋๋ค.๋ณ๊ฒฝ ์ฌํญ์ ๋ค์ ์ถ๊ฐํ ๊ฒ์ด์ง๋ง ์๋ฅผ ๋ค์ด
tslib
์ ๋ํ ๋ด๋น์๊ฐ ํ์ํ๋ฏ๋ก ์ด์ ๋ํด ์ด์ผ๊ธฐํด์ผ ํฉ๋๋ค.
๋ํ ํ์ดํ์ด ์์ฑ๋๋ ๋ฐฉ์์ด ๊นจ์ก์ต๋๋ค.
๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ๋ฐ๋๋๋ค.
@gaterking @kamilogorek ์ด๋ฏธ ์์ ํ์ต๋๋ค https://github.com/getsentry/sentry-javascript/pull/1751
"๊ธด๊ธ" ๋ฆด๋ฆฌ์ค๋ฅผ ์ํํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋๋ฆฐ ๊ฒ์
๋๋ค.
ํด๋ผ์ด์ธํธ ์ธก์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๊ฒ์ด ์ค๋ฅ๋ฅผ ์บก์ฒํ๊ณ API์ ์ ์ถํ๊ธฐ๋ฅผ ์ํฉ๋๋ค.
์ด๋ ๊ฒ ๋ณต์กํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ ๋ฌด์์ ํ๊ณ ์์ต๋๊น?
๋จ์ํ ์ค๋ฅ ๋ณด๊ณ ์๊ฐ ์ ๊ทธ๋ ๊ฒ ์๋นํ ๊ณต๊ฐ์ ์ฐจ์งํด์ผ ํ๋์ง ์ดํดํ๊ธฐ๊ฐ ์ ๋ง ์ด๋ ต์ต๋๋ค ๐
@mindplay-dk ๋๋ถ๋ถ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ง์ด๋ผ์ ^^
๊นจ์ง/์๋ชป๋ ์คํ ์ถ์ ์ ์์ ํ๋ ๋ฐ ๋ง์ ์์
์ด ํ์ํฉ๋๋ค.
"์ค๋ฅ ์ก๊ธฐ"๋ผ๋ ๊ฐ๋จํ ์์
๋ ๋ณด์ด๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ๋ณต์กํฉ๋๋ค.
๋จ์ํ ์ค๋ฅ ๋ณด๊ณ ์๊ฐ ์ ๊ทธ๋ ๊ฒ ์๋นํ ๊ณต๊ฐ์ ์ฐจ์งํด์ผ ํ๋์ง ์ดํดํ๊ธฐ๊ฐ ์ ๋ง ์ด๋ ต์ต๋๋ค ๐
@mindplay-dk ๊ฐ๋จํ์ง ์๊ธฐ ๋๋ฌธ์.
๋ค์์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์ค๋ฅ๋ฅผ ์บก์ฒํ๊ณ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ํตํฉํ๋ ์ฝ๋์ ๋๋ค. https://github.com/getsentry/sentry-javascript/blob/master/packages/browser/src/tracekit.ts
์ต๊ทผ ์ฌ์ด์ฆ ์ถ์ ์ ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๐
๋งํฌ๋ ํ์ผ์ ํ ๋์ ๋ณด๋ฉด Opera 10์ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ ์ฝ๋๊ฐ ํ์๋ฉ๋๋ค. ์ ๋ง ์ฌ์ ํ ํ์ํ๊ฐ์? TraceKit์ ๋ํ ์ด๋ฏธ ํฐ Raven์์ (ํ์ฌ) 2๋ฐฐ ํฌ๊ธฐ ์ฆ๊ฐ๋ฅผ ์ค๋ช ํ์ง ์์ต๋๋ค.
๋ช ๊ฐ์ง ์ ์:
package/core์ ๊ฐ์ ๋ค๋ฅธ ํจํค์ง์ ์ผ๋ถ ๊ณต์ ์ฝ๋(rewriteframes.ts์ app:///${base}
)๊ฐ ์์ต๋๊น? ํด๋ผ์ด์ธํธ์์๋ ์ฌ์ฉํ์ง ์๊ณ ๋
ธ๋์์๋ ์ฌ์ฉํฉ๋๋ค.
๊ฐ๋จํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
@kamilogorek yikes, ๋น์ ์ด ๋ถ๋ช ํ ์ณ์์ต๋๋ค ... JavaScript๊ฐ ์๋ง์ด๋ผ๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ์ ์์ด ๋ถ์ผ๋ฅผ ํ๊ณ ๋ค์ด ๋ณธ ์ ์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๊ฒ์ด ์ผ๋ง๋ ๋์์ง ๋ชฐ๋์ต๋๋ค. JS์์ ์คํ ์ถ์ ์ ์ฒ๋ฆฌํ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋จ์ง. ๊ทธ๋ ๊ตฐ์. ๐
๋์ฐ๋ฏธ๋ฅผ ์ต์ํํ๋ ค๊ณ ํ๋ ๋์ ์ด๋ฏธ ์ธ๊ธํ esm ํ์ผ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ด๋ ์ค๋๋ ์๋ ์ฝ๊ณ ๋ชจ๋ฒ ์ฌ๋ก์ ๋๋ค.
async/await ์ฌ์ฉ์ ์ค์ด๋ฉด ES5๋ก ์ ๋๋ก ์ปดํ์ผ๋์ง ์์ต๋๋ค. https://github.com/getsentry/sentry-javascript/blob/master/packages/core/src/baseclient.ts#L307 -L378์ ์ถ๋ ฅ ์ฝ๋์ ๋น๊ตํ์ญ์์ค(ํ๋ก๋์ ๋ฒ๋ค์์ "processEvent" ๊ฒ์). ์ ์ฒด ํ์ผ์ ํ๋ก๋์ ๋ฒ๋ค์์ ๊ฑฐ๋ํด์ง๋๋ค.
๊ทธ๊ฒ์ ์๋ชป๋ ๋ฐฉ๋ฒ์
๋๋ค. ES5์ ๋ํด ์ถ๊ฐ๋ก ์ต์ ํํ๋ ๋์ ์ต์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํ๋ 80.07%
์ ๋ง๊ฒ ์ต์ ํํ๋ ๊ฒ์ด ๋ ์ค์ํฉ๋๋ค.
์ด์ ๋ธ๋ผ์ฐ์ ์ง์์ด ํ์ํ ๋ชจ๋ ์ฌ๋์ ์ํด:
๋น๋๊ธฐ ๊ธฐ๋ฅ์ <script type="module">
(caniuse: esm , async )๋ฅผ ์ง์ํ๋ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์ง์๋๋ฏ๋ก ์ด์ ๋ธ๋ผ์ฐ์ ์ ์ฌ์ฉ์๋ง ๋ ์ค๋ ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค(์ด์จ๋ ๋ ์ค๋ ๊ฑธ๋ฆฝ๋๋ค).
์ฆ๊ฑฐ:
160KB(es5, ๋ฒ๋ค) > 119KB(esm, ์ผ๋ฐ ํ์ผ)
๋ฐ๋ผ์ esm ํ์ผ๋ ๋ฒ๋ค๋ก ๋ฌถ์ผ์ญ์์ค module
๋ฐ target
in /tsconfig.esm.json
( tsconfig.build.json
ํ์ฅ)๋ฅผ esnext
๋ก ๋ณ๊ฒฝํ๋ ๊ฒ๋งํผ ์ฝ์ต๋๋ค. tsconfig.esm.json
tsconfig.build.json
ํ์ผ์ ํจํค์ง์ ์ถ๊ฐํ๊ณ ๋น๋ ๋ฐ ํจํค์ง์ ์ถ๊ฐ ํ๊ณ package.json
์ ๋ชจ๋ ํญ๋ชฉ์ ์ง์ ํฉ๋๋ค.
์ํ์ ๋ค๋ฉด PR์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์ํ์ ๋ค๋ฉด PR์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
@cromefire ๋ฅผ ์ํฉ๋๋ค :)
vue cli์ ๊ฐ์ด ํด๋์ ๋ชจ๋์ ๋ชจ๋ ๋ชจ๋ ์ค์์ ์ ํํ ์ ์๋ ์ต์ ์ด ์๋ค๋ฉด ๊ต์ฅํ ๊ฒ์ ๋๋ค. ์ต์ ๋ฒ์ ์ ๋๋ถ๋ถ์ ์ต์ ๋ธ๋ผ์ฐ์ ๋ง ์ง์ํ๋ฏ๋ก ๋ ๋ถํ๋ ค์ง ์ ์์ต๋๋ค.
๋๋ webpack env์ฒ๋ผ ์๋ํ์ฌ ์ฌ์ฉ์๊ฐ ํ์ํ ๋ธ๋ผ์ฐ์ ์ง์์ ์ง์ ํ ์ ์๋ค๋ฉด ๋ ์ข์ต๋๋ค. Ofc, ์ด๊ฒ์ ์ฌ์ด ์ฌ์ด ๊ธฐ๋ฅ์ด ์๋์ง๋ง ๊ทธ๋ฅ ๋ฒ๋ฆฌ๊ณ ์ถ์์ต๋๋ค. :)
๋ฉ์ง ์ ํ!
์๋ก์ด PR์ ์ฌ์ฉํ์ฌ babel์ ๊ตฌ์ฑํ ์ ์์ง๋ง ํ์ํ ๋ธ๋ผ์ฐ์ ๋ง ์ง์ํ๊ณ ์ถ์ต๋๋ค.
@sentry/browser์ ํฌ๊ธฐ๋ raven-js ํฌ๊ธฐ์ ๋ ๋ฐฐ ์ด์์ ๋๋ค( 86kB ๋ 39kB(์ถ์)).
์ฐธ๊ณ : ์ต์ ๋ฒ์ ์ @sentry/browser
ํฌ๊ธฐ๊ฐ 91.8kB ๋ก ์ฆ๊ฐํ์ต๋๋ค. ์ถ์ฒ: https://bundlephobia.com/result?p=@sentry/browser @4.5.0.
@cromefire ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌ๊ธฐ ์ต์ ํ ์์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
๋ฐฉ๊ธ v4.5.0 ์์ ์ esm ๋น๋๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ์๋ํ์ง๋ง ๋ง์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. @sentry/utils/esm
์ ๋ชจ๋์ ํ์ธํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค.
์ฌ์ค ๋๋ ์๋ก์ด yarn install
์ดํ node_modules ์์ ํด๋๋ฅผ ์ฐพ์ง ๋ชปํ์ต๋๋ค. (์คํฌ๋ฆฐ์ท ์ฐธ์กฐ)
์์ ํ ์ค๋ฅ ๋ชฉ๋ก
./node_modules/@sentry/core/esm/baseclient.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/core/esm'์์ '@sentry/utils/esm/async'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/backend.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm'์์ '@sentry/utils/esm/is'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/tracekit.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm'์์ '@sentry/utils/esm/is'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/integrations/breadcrumbs.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm/integrations'์์ '@sentry/utils/esm/is'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/integrations/helpers.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm/integrations'์์ '@sentry/utils/esm/is'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/integrations/pluggable/vue.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm/integrations/pluggable'์์ '@sentry/utils/esm/is'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/core/esm/baseclient.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/core/esm'์์ '@sentry/utils/esm/is'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/core/esm/dsn.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/core/esm'์์ '@sentry/utils/esm/is'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/core/esm/integrations/inboundfilters.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/core/esm/integrations'์์ '@sentry/utils/esm/is'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/core/esm/integrations/extraerrordata.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/core/esm/integrations'์์ '@sentry/utils/esm/is'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/integrations/globalhandlers.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm/integrations'์ '@sentry/utils/esm/logger'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/integrations/breadcrumbs.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm/integrations'์ '@sentry/utils/esm/logger'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/core/esm/baseclient.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/core/esm'์์ '@sentry/utils/esm/logger'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/core/esm/basebackend.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/core/esm'์์ '@sentry/utils/esm/logger'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/core/esm/sdk.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/core/esm'์์ '@sentry/utils/esm/logger'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/core/esm/integration.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/core/esm'์์ '@sentry/utils/esm/logger'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/core/esm/integrations/dedupe.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/core/esm/integrations'์ '@sentry/utils/esm/logger'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/core/esm/integrations/sdkinformation.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/core/esm/integrations'์ '@sentry/utils/esm/logger'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/core/esm/integrations/inboundfilters.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/core/esm/integrations'์ '@sentry/utils/esm/logger'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/hub/esm/hub.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/hub/esm'์ '@sentry/utils/esm/logger'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/client.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm'์์ '@sentry/utils/esm/misc'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/tracekit.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm'์์ '@sentry/utils/esm/misc'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/integrations/useragent.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm/integrations'์ '@sentry/utils/esm/misc'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/integrations/breadcrumbs.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm/integrations'์ '@sentry/utils/esm/misc'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/integrations/trycatch.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm/integrations'์ '@sentry/utils/esm/misc'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/integrations/helpers.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm/integrations'์ '@sentry/utils/esm/misc'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/integrations/pluggable/reportingobserver.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm/integrations/pluggable'์์ '@sentry/utils/esm/misc'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/integrations/pluggable/vue.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm/integrations/pluggable'์์ '@sentry/utils/esm/misc'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/integrations/pluggable/ember.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm/integrations/pluggable'์์ '@sentry/utils/esm/misc'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/transports/beacon.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm/transports'์ '@sentry/utils/esm/misc'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/transports/fetch.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm/transports'์ '@sentry/utils/esm/misc'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/core/esm/baseclient.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/core/esm'์์ '@sentry/utils/esm/misc'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/core/esm/integrations/dedupe.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/core/esm/integrations'์ '@sentry/utils/esm/misc'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/core/esm/integrations/inboundfilters.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/core/esm/integrations'์ '@sentry/utils/esm/misc'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/hub/esm/scope.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/hub/esm'์ '@sentry/utils/esm/misc'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/hub/esm/hub.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/hub/esm'์ '@sentry/utils/esm/misc'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/parsers.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm'์์ '@sentry/utils/esm/object'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/integrations/breadcrumbs.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm/integrations'์ '@sentry/utils/esm/object'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/integrations/trycatch.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm/integrations'์ '@sentry/utils/esm/object'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/integrations/helpers.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm/integrations'์ '@sentry/utils/esm/object'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/core/esm/api.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/core/esm'์์ '@sentry/utils/esm/object'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/core/esm/basebackend.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/core/esm'์์ '@sentry/utils/esm/object'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/core/esm/dsn.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/core/esm'์์ '@sentry/utils/esm/object'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/hub/esm/scope.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/hub/esm'์์ '@sentry/utils/esm/object'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/core/esm/integrations/pluggable/rewriteframes.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/core/esm/integrations/pluggable'์์ '@sentry/utils/esm/path'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/parsers.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm'์์ '@sentry/utils/esm/string'์ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/integrations/breadcrumbs.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm/integrations'์ '@sentry/utils/esm/string'์ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/core/esm/baseclient.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/core/esm'์ '@sentry/utils/esm/string'์ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/core/esm/integrations/inboundfilters.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/core/esm/integrations'์ '@sentry/utils/esm/string'์ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/backend.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm'์์ '@sentry/utils/esm/supports'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/integrations/breadcrumbs.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm/integrations'์์ '@sentry/utils/esm/supports'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/integrations/pluggable/reportingobserver.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm/integrations/pluggable'์์ '@sentry/utils/esm/supports'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
./node_modules/@sentry/browser/esm/transports/fetch.js์ ์ค๋ฅ
๋ชจ๋์ ์ฐพ์ ์ ์์: ์ค๋ฅ: './node_modules/@sentry/browser/esm/transports'์์ '@sentry/utils/esm/supports'๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
@pascaliske esm
๋น๋๋ ์์ง ์คํ ๋จ๊ณ์ ์์ผ๋ฉฐ ์์ง ๊ณต๊ฐ์ ์ผ๋ก ๋ฌธ์ํํ์ง ์์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ชจ๋ ๊ฒ์ด ํ
์คํธ๋๋ฉด ๊ทธ๊ฒ์ ํ ๊ฒ์ด๊ณ ์ฐ๋ฆฌ์ ๋ฐ๊ฒฌ์ ์ฌ๊ธฐ์ ๊ฒ์ํ ๊ฒ์
๋๋ค.
@kamilogorek ๋ค, ์๊ฒ ์ต๋๋ค. ์ด๋ฌํ ์ค๋ฅ๋ฅผ ์๋ ค๋๋ฆฌ๊ณ ์ ํฉ๋๋ค. ๐
๊ฐ์ฌํฉ๋๋ค, ๊ฐ์ฌํฉ๋๋ค @pascaliske! ๋น ๋ฅธ ์์ผ ๋ด์ ESM ์ง์์ ์ ๊ณตํ๋๋ก ๋ ธ๋ ฅํ๊ฒ ์ต๋๋ค. :)
@pascaliske yarn build
๋จผ์ ์๋
@cromefire ์๋์, ์ ์๊ฐ์๋ ๋์์ด ๋์ง ์์ ๊ฒ์ ๋๋ค. ๋ฐฉ๊ธ npm์์ ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ ๋น๋ ํ๊ฒฝ์ด ์์ต๋๋ค. ๐
์์ค ์ฝ๋๋ฅผ ์กฐ๊ธ ๊ฒ์ํ์ฌ @sentry/browser
์ @sentry/utils
๋ฅผ ๋น๊ตํ์ต๋๋ค. ๋๋ ์ด๊ฒ์ด ๋ฌธ์ ๋ผ๊ณ ์๊ฐํฉ๋๋ค: packages/utils/tsconfig.build.json#L5 vs. packages/browser/tsconfig.build.json#L5 . ์ผ๋ฐ ๋น๋ ์ถ๋ ฅ์ด esm ๋น๋ ์ถ๋ ฅ์ ๋ฎ์ด์ธ ์ ์์ต๋๊น? ๐ค
๋ด node_modules ํด๋ ์์ browser
ํจํค์ง์๋ normal ๋ฐ esm์ ๋น๋ ์ถ๋ ฅ์ด ํฌํจ๋์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ utils
ํจํค์ง๋ ๋ฃจํธ ํด๋์ ์ผ๋ฐ ๋น๋ ์ถ๋ ฅ๋ง ํฌํจํฉ๋๋ค.
์ด๋ฏธ ์ถ์๋์๋์?
์์ค ์ฝ๋๋ฅผ ์กฐ๊ธ ๊ฒ์ํ๊ณ @sentry/browser ์ @sentry/utils ๋ฅผ ๋น๊ตํ์ต๋๋ค. ๋๋ ์ด๊ฒ์ด ๋ฌธ์ ๋ผ๊ณ ์๊ฐํฉ๋๋ค: packages/utils/tsconfig.build.json#L5 vs. packages/browser/tsconfig.build.json#L5 . ์ผ๋ฐ ๋น๋ ์ถ๋ ฅ์ด esm ๋น๋ ์ถ๋ ฅ์ ๋ฎ์ด์ธ ์ ์์ต๋๊น? ๐ค
์๋์, esm tsconfig๋ฅผ ๋ด์ผ ํฉ๋๋ค.
๋ด์ผ ๋ด์ผ๊ฒ ๋ค
๋ชจ๋ ์๋ ! ๋ํ Sentry์ ๋ฒ๋ค ํฌ๊ธฐ ์ค ์ผ๋ถ๋ฅผ ์ดํด๋ณด๊ณ ๋ค์์ ๋ฐ๊ฒฌํ์ต๋๋ค. https://github.com/getsentry/sentry-javascript/blob/master/packages/minimal/package.json#L20
๋งค์ฐ ์์์ ๊ธฐ๋ฅ(ํ์ฐ ๋ฐ ํ ๋น)์ ๋ํด ํฌ๊ธฐ ๋ฉ์ด๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ Typescript์ ์ต์ํ์ง ์์ง๋ง ๋ฐํ์์ ์ด๊ฒ์ด ํ์ํฉ๋๊น?
@sentry/types
๊ฐ devDependencies
์ ์์นํ์ง ์๊ณ _runtime_ ์ข
์์ฑ์ด์ด์ผ ํ๋ ์ด์ ๋ ๋ถ๋ถ๋ช
ํฉ๋๋ค.
typescript์ ๋ชจ๋ ์ฌ์ฉ์๋ฅผ ์ํ @evocateur ์ด๊ฒ์ด ํ์ํฉ๋๋ค. Typescript๋ ๋ชจ๋ ๊ฒ์ ์ต์ ํํฉ๋๋ค.
(๊ทธ๋ฌ๋ .d.ts
ํ์ผ์ ํ์ํ ์ ์์)
@IanMitchell esm ๋น๋์๋ ์ฌ์ฉ๋์ง ์์ง๋ง ์ผ๋ฐ ๋น๋์๋ ์ฌ์ฉ๋ฉ๋๋ค.
4.5.0์ bundle.js์๋ Severity, htmlElementAsString, htmlElementAsString, uuid4, parseUrl ๋ฑ๊ณผ ๊ฐ์ ์ค๋ณต ์ฝ๋๊ฐ ๋ง์ด ํฌํจ๋์ด ์์ต๋๋ค. ์ด๊ฒ์ ์๋ํ ์ ์์ต๋๋ค!
WebPack + Babel 7์ ์ฌ์ฉํ์ฌ import * as Sentry from '@sentry/browser';
(ํ์ผ์ ์ ์ผํ ์ค)์ ํตํด ๋ฒ๋ค์ ์ํํ ๋๋ ๋์ผํ ์ผ์ด ๋ฐ์ํ๋ฉฐ ๋ฒ๋ค ํฌ๊ธฐ๋ 326kb์
๋๋ค. ์ฐธ์กฐ: sentry.bundle.js.txt
์ฐ๋ฆฌ๋ ๋ค๋ฅธ ๋ฒ๋ค์๋ ๋์ผํ ๊ตฌ์ฑ์ ์ฌ์ฉํ์ง๋ง sentry๋ ํด๋น ๋ฌธ์ ๊ฐ ์๋ ์ ์ผํ ๋ฒ๋ค์
๋๋ค.
bundle.min.js ์๋ ๋ด๋ถ์ ์ค๋ณต ์ฝ๋๊ฐ ์์ต๋๋ค . ์ด๋ ๋กค์ ์ผ๋ก ์ธํ ํธ๋ฆฌ ํ๋ค๋ฆผ์ ๊ฒฐ๊ณผ์ผ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์์ ํด๊ฒฐ์ฑ
์ import '@sentry/browser/build/bundle.min.js';
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
4.5.0์ bundle.js์๋ Severity, htmlElementAsString, htmlElementAsString, uuid4, parseUrl ๋ฑ๊ณผ ๊ฐ์ ์ค๋ณต ์ฝ๋๊ฐ ๋ง์ด ํฌํจ๋์ด ์์ต๋๋ค. ์ด๊ฒ์ ์๋ํ ์ ์์ต๋๋ค!
์ด๊ฒ์ด esm
๋น๋๊ฐ ์๋ ์ด์ (๋๋ ์ ์ด๋ ํ๋์ ์ด์ )์
๋๋ค. ์ด์จ๋ ๋ฒ๋ค๋ฌ๊ฐ ์๋ค๋ฉด ์ฌ์ ๋น๋ ๋ฒ๋ค์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ๋ ํจ์จ์ ์
๋๋ค. (๋ฒ ํ์ผ ๋ฟ์ด๊ณ ์ง๊ธ์ ์ฌ์ ํ โโ๊นจ์ก์ต๋๋ค)
์ด๊ฒ์ ๋ค์ ๋ณด๋ฉด, ์ด๊ฒ์ด ์ด๋ณด๋ค ์์ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ ์์.
์์ค ๋งต์ ์ง์ํ๋ ์คํ ์ถ์ ์ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋จ์ฐ์ฝ ๊ฐ์ฅ ๋ณต์กํ ๊ฒ์ด์ด์ผ ํฉ๋๋ค. ๋๋ถ๋ถ์ ๋ฐ์๊ตญ์ node.js ํด๋ผ์ด์ธํธ์ ๊ณต์ ํ๋ ํต์ฌ ํ๋ ์์ํฌ์์ ์จ ๊ฒ ๊ฐ์ต๋๋ค. ์ฌ๊ธฐ์ ๋ฐ์๊ตญ์ ์ค์ ๋ก ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค๊ณ ํ์ ํฉ๋๋ค.
์คํดํ์ง ๋ง์ธ์. ์ด๊ฒ์ ์ํคํ ์ฒ์ ์๋ฆ๋ค์ด ๋ถ๋ถ์ ๋๋ค. ์์ฃผ ๋ฉ์ง TypeScript ์์ ์ ๋๋ค.
๊ทธ๋ฌ๋ ํด๋ผ์ด์ธํธ ์ธก์์๋ ํฐ ์๋ฏธ๊ฐ ์์ต๋๋ค. ์๊ณ ๋น ๋ฅด๊ฒ ๋ก๋๋์ด์ผ ํฉ๋๋ค. ํนํ ์ด์ ๊ฐ์ ์ ์์ค์ ๊ฒฝ์ฐ ์์ค ์ฝ๋๊ฐ ์๋ฆ๋ค์ด์ง ์๋์ง๋ ๊ทธ๋ค์ง ์ค์ํ์ง ์์ต๋๋ค. ๋ด๊ฐ ๋งํ ์ ์๋ ํ ์ธ์์ ์ธ ๊ฒ์ ์ํคํ ์ฒ๊ฐ ๋ง์ ๋ฐ์ดํธ๋ฅผ ํ์๋ก ํ๋ค๋ ๊ฒ์ ๋๋ค.
๋น๊ตํ๋ ค๊ณ :
~10KB ํจํค์ง์ ์ ์ฌํ ๊ธฐ๋ฅ(์์ค ๋งต์ด ์๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์คํ ์ถ์ )์ด ์๋ TrackJS ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
์๋ TraceKit ์ ~3KB min+gz์ ๋๋ค.
x-browser ํด๋ฆฌํ์ ์ฌ์ฉํ์ฌ ~8KB min+gz ๋๋ ~10KB์์ ์์ค ๋งต ๋นํธ(ํด๋ผ์ด์ธํธ ์ธก)๋ฅผ ์ํํ ์ ์๋ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฅผ ์ฐพ์์ต๋๋ค.
๊ทธ ์ธ์๋ ๋ช ๋นํธ์ ๋ธ๋ผ์ฐ์ ์ ๋ณด๋ฅผ ์์งํ๊ณ ์์ JSON ํ์์ผ๋ก ๋ํํ๊ณ ๊ฒ์ํ๋ ๋ฌธ์ ์ ๋๋ค. ์ด ์์ ์ ๋ช KB min+gz๋ฅผ ๋์ง ์์์ผ ํฉ๋๋ค. ๊ทธ๋์ผ ํ ๊น์?
๋๋ ์ด๊ฒ์ด ๋๋ถ๋ถ์ ์ฌ๋๋ค์๊ฒ ํ์ํ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ๋ง์ ์ํคํ ์ฒ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํ๋ฌ๊ทธ์ธ ์ง์์ด ํ์ํ ๊ฒฝ์ฐ JSON ๊ฒ์๋ฌผ์ ์ ๋ณด๋ฅผ ์ฐ๊ฒฐํ ์ ์๋ ๊ฐ๋จํ ํํฌ๊ฐ ํ์ํ ์ ์์ง๋ง ๊ทธ๊ฒ ์ ๋ถ์ ๋๋ค.
์์ฆ์๋ ๋ฉ๊ฐ๋ฐ์ดํธ์ JS๋ฅผ ๋ฐฐํฌํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ผ๋ ๊ฒ์ ์๊ณ ์์ง๋ง ๋ชจ๋ฐ์ผ์์ ๋น ๋ฅด๊ฒ ๋ก๋๋๋ ํ๋ก์ ํธ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์๊ฒฉํ ์ฝํ ์ธ ์ ์ฑ ์ด ์๋ํ๊ณ ์์ผ๋ฉฐ ์ค๋ฅ์ JS ์์ฐ์ ์ ๋ฐ ์ด์์ ์ง์ถํ๋ ๊ฒ์ ์ ๋นํํ ์ ์์ต๋๋ค. ๋ก๊น - ์๋ง๋ 10%๊ฐ ์ต๊ณ ์ด๋ฏ๋ก ~15-20KB์ ๊ฐ์ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ๋ก ๋ณด์ ๋๋ค.
๋๋ ๋น์ ์ ์ ํ์ ์ฌ๋ํ์ง๋ง ์ด ํด๋ผ์ด์ธํธ๋ฅผ ๋ฐฐํฌํ ์ ์์ต๋๋ค ๐
์ด์ ๊ฐ์ ๊ฒฝ์ฐ ์คํ ์ถ์ ๋ฐ ์์ค ๋งต ๊ตฌ๋ฌธ ๋ถ์์ ์๋ฒ์ ์์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ฌ๊ธฐ์ ํฌ๊ธฐ๋ ๊ด๋ จ์ด ์์ต๋๋ค.
์ด์ ๊ฐ์ ๊ฒฝ์ฐ ์คํ ์ถ์ ๋ฐ ์์ค ๋งต ๊ตฌ๋ฌธ ๋ถ์์ ์๋ฒ์ ์์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ฌ๊ธฐ์ ํฌ๊ธฐ๋ ๊ด๋ จ์ด ์์ต๋๋ค.
@cromefire ํฅ๋ฏธ๋ก์ด ์์ด๋์ด์ ๋๋ค. ๊ทธ๊ฒ์ด TrackJS๊ฐ ํฌ๊ธฐ๋ฅผ ์๊ฒ ์ ์งํ๊ธฐ ์ํด ํ๋ ์ผ์ธ์ง ๊ถ๊ธํฉ๋๋ค. (๊ทธ๋ค์ ํด๋ผ์ด์ธํธ๋ ๋ ์ ์ ์ ๋๋ค - ์ถ์๋ ์์ค๋ง ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ๊ทธ๋ค์ด ๋ฌด์์ ํ๋์ง ๋งํ๊ธฐ ์ด๋ ต์ต๋๋ค. ๋ด๊ฐ ๊ทธ๊ฒ์ ์ค์นํ๊ณ ์ ์ ์ ํตํด ์ด๋ํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค...)
๋ค์์ ๋ธ๋ผ์ฐ์ ์์ ์์ค ๋งต์ ํด๊ฒฐํ๋ ๋ ๊ฐ๋จํ ํจํค์ง์ ๋๋ค. source-map-resolve at ~2KB min+gz ... ํด๋ฆฌํ์ด ์์ง๋ง (์ด๊ฒ์ด ์๋ํ๋ ๊ฒฝ์ฐ) ~10KB์ ๋๋ฌํ ์ ์์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ํด๋ฆฌํ์ด ํ์ํ์ง ์์ ์ต์ ๋ธ๋ผ์ฐ์ .
๊ทธ๊ฑด ํด๋ฆฌํ ์์ด
Polyfills๋ esm
๋น๋์ ์์ด์ผ ํ๋ฏ๋ก ์๋ํ ์๋ ์์ง๋ง bachend์์๋ ํจ์ฌ ์ ์ต๋๋ค.
@cromefire ESM ๋น๋๋ ์ง๊ธ 4.5.1
์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ ํฌ ํ
์คํธ๋ฅผ ๊ฑฐ์ณค๋์ง ํ์ธํ๊ธฐ ์ํด ์์ง ๋ฌธ์ํ๋์ง ์์์ง๋ง ์ง๊ธ๊น์ง๋ ๋งค์ฐ ์ข์ต๋๋ค. ๋๋ babel loader๋ก ์ผ๋ฐ webpack ๋น๋๋ฅผ ํ์ธํ๊ณ ๊ทธ๊ฒ์ ๋งค๋ ฅ์ฒ๋ผ ์๋ํฉ๋๋ค.
๊ทธ ์ธ์๋ ๋ช ๋นํธ์ ๋ธ๋ผ์ฐ์ ์ ๋ณด๋ฅผ ์์งํ๊ณ ์์ JSON ํ์์ผ๋ก ๋ํํ๊ณ ๊ฒ์ํ๋ ๋ฌธ์ ์ ๋๋ค. ์ด ์์ ์ ๋ช KB min+gz๋ฅผ ๋์ง ์์์ผ ํฉ๋๋ค. ๊ทธ๋์ผ ํ ๊น์?
@mindplay-dk ์ฐ๋ฆฌ๋ ํด๋ผ์ด์ธํธ ์ธก์์ ์คํ ์ถ์ ๋ถ์์ ์ํํ์ง ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ด ์๋ฒ์์ ์ด๋ฃจ์ด์ง๋ฏ๋ก ์ง์์ ๋ฐ์ผ๋ ค๋ฉด ๋จผ์ ์์ค ๋งต์ ์ ๋ก๋ํด์ผ ํฉ๋๋ค.
ํ์ง๋ง ์ฐ๋ฆฌ๊ฐ ํ๋ ์ผ์:
๋ช๊ฐ์ง ๋งํ์๋ฉด. "์ค๋ฅ ํฌ์ฐฉ, ๋ฐ์ดํฐ ์ถ๊ฐ ๋ฐ ์ ์ก"๋งํผ ์ฌ์ ์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค.
ํ์ง๋ง ์ค์ ์ธ๊ณ์๋ ์์ญ ๊ฐ์ ์
๋ ฅ, ์์ญ ๊ฐ์ ์์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฉฐ(๋ชจ๋ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํจ) ๋์์ด ๋ค์ํ ์์ญ ๊ฐ์ ํ๊ฒฝ์ด ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ด๊ฒ์ ~10-15kB๋ก ๋ฎ์ถ๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ณ์ ๋
ธ๋ ฅํ ๊ฒ์ด์ง๋ง ์๊ฐ์ด ์ข ๊ฑธ๋ฆด ๊ฒ์
๋๋ค. ์ฐ๋ฆฌ๋ ์ง๊ธ ์ธ ์ ์๋ ๋ฆฌ์์ค(์ฌ๋/์๊ฐ ์ฝ๊ธฐ)๊ฐ ๋๋ฌด ๋ง์ต๋๋ค.
์์ฆ์๋ ๋ฉ๊ฐ๋ฐ์ดํธ์ JS๋ฅผ ๋ฐฐํฌํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ผ๋ ๊ฒ์ ์๊ณ ์์ง๋ง ๋ชจ๋ฐ์ผ์์ ๋น ๋ฅด๊ฒ ๋ก๋๋๋ ํ๋ก์ ํธ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์๊ฒฉํ ์ฝํ ์ธ ์ ์ฑ ์ด ์๋ํ๊ณ ์์ผ๋ฉฐ ์ค๋ฅ์ JS ์์ฐ์ ์ ๋ฐ ์ด์์ ์ง์ถํ๋ ๊ฒ์ ์ ๋นํํ ์ ์์ต๋๋ค. ๋ก๊น - ์๋ง๋ 10%๊ฐ ์ต๊ณ ์ด๋ฏ๋ก ~15-20KB์ ๊ฐ์ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ๋ก ๋ณด์ ๋๋ค.
๊ทธ๋ฐ ๋ค์ ๋ก๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค โ https://docs.sentry.io/platforms/javascript/loader/ :)
๊ทธ๋ฐ ๋ค์ ๋ก๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค โ https://docs.sentry.io/platforms/javascript/loader/ :)
๊ทธ๋ฌ๋ ์ฌํ๊ฒ๋ webpack์ ๋ํ ์๋ฃจ์ ์ ์์ต๋๋ค
๋ช๊ฐ์ง ๋งํ์๋ฉด. "์ค๋ฅ ํฌ์ฐฉ, ๋ฐ์ดํฐ ์ถ๊ฐ ๋ฐ ์ ์ก"๋งํผ ์ฌ์ ์ผ๋ฉด ํฉ๋๋ค.
๋๊ตฐ๊ฐ tc39 ์์ ๋ฌด์ธ๊ฐ๋ฅผ ์ ์ํด์ผ ํ ์๋ ์์ต๋๋ค. ํ๋ก์ธ์ค๊ฐ ์ด๋ค์ง ์ดํด๋ด์ผ ํ๊ฒ ์ง๋ง ๋๊ตฐ๊ฐ๊ฐ ์คํ ์ถ์ ์ฝ๊ธฐ์ ๊ฐ์ ํ์คํ๋ API๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ฌํ๊ฒ๋ webpack์ ๋ํ ์๋ฃจ์ ์ ์์ต๋๋ค
์ ํํ๊ฒ ๋ฌด์จ ๋ป์ ๋๊น? ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ๋ฒ๋ค๋ก ์ฌ์ฉํ ์ ์๋ ๋ก๋์ ๊ณต์กดํ ์ ์์ง๋ง ์ค๋ฅ ๋๋ captureException ํธ์ถ์ด ๋ฐ์ํ๋ฉด ๋น๋๊ธฐ์ ์ผ๋ก ๋ก๋๋ SDK์ ํต์ ํ ์ ์๋ ํจํค์ง๊ฐ ์์ต๋๊น?
์ ํํ๊ฒ ๋ฌด์จ ๋ป์ ๋๊น? ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ๋ฒ๋ค๋ก ์ฌ์ฉํ ์ ์๋ ๋ก๋์ ๊ณต์กดํ ์ ์์ง๋ง ์ค๋ฅ ๋๋ captureException ํธ์ถ์ด ๋ฐ์ํ๋ฉด ๋น๋๊ธฐ์ ์ผ๋ก ๋ก๋๋ SDK์ ํต์ ํ ์ ์๋ ํจํค์ง๊ฐ ์์ต๋๊น?
์, ์ฌ๋ฐ๋ฅด๊ฒ ์์ฝํ๋ฉด ๋ก๋๋ cdn์ ํตํด์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
@cromefire ์, "์ค๋ํซ"์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฌ๋ https://github.com/getsentry/sentry-javascript/blob/master/packages/browser/src/loader.js ์์ ์ฝ๋๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
esm
๋ฅผ ์ฌ์ฉํ๋ฉด ์์ ์ ์ฝ๋์์๋ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ์ PR์ ์ด์ด์ผ ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
minimal
loader
๋ฅผ ์ฌ์ฉํ ์ ์๊ณ ์ต์ข
๋ฒ๋ค์ ๋ช kB๋ง ํจ๊ณผ์ ์ผ๋ก ์ถ๊ฐํ ์ ์๋ ์๋ฃจ์
์ด ์ ๊ณต๋ฉ๋๋ค.
1kb ๋ฏธ๋ง์ผ๋ก ๋ก๋ํ๋ ๋ก๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ด๋ ต์ง ์์ ๊ฒ์ด๋ฏ๋ก ๋น ๋ฅธ ๊ฒ์ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
์ฌ๊ธฐ์ ๋ง์ ๋์์ด ๋ ์ ์๋ ํ ๊ฐ์ง๋ ๊ธฐ๋ฅ ์ค ์ผ๋ถ๊ฐ ์ ํ ์ฌํญ์ธ ๊ฒฝ์ฐ์ ๋๋ค.
์๋ฅผ ๋ค์ด ์ ๋ง ์ข์ ์ต์ํ์ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ถ๊ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐ ๊ธฐ๋ฅ์ผ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ต์ ๋ธ๋ผ์ฐ์ ๋ง ์ง์ํ๋ฏ๋ก ์ด์ ๋ธ๋ผ์ฐ์ ์ ๋ชจ๋ ๊ธฐ๋ฐํ ๋์์ ํด๊ฒฐํ ํ์๊ฐ ์์ต๋๋ค.
webpack ์ฝ๋ ๋ถํ ์ ์ฌ์ฉํ๊ณ ์ค๋ฅ ๋ฐ์ ์์๋ง ์ผํธ๋ฆฌ ํด๋ผ์ด์ธํธ๋ฅผ ๋ก๋ํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
sentry.js
import * as Sentry from '@sentry/browser';
Sentry.init({
...
integrations: integrations => {
return integrations.filter(integration => integration.name !== 'GlobalHandlers');
},
});
export const logError = error => Sentry.captureException(error);
errors.js
const captureError = async error => {
const { logError } await import(/* webpackChunkName: "sentry" */ './sentry');
logError(error);
}
window.onerror = (message, url, line, column, error) => captureError(error);
window.onunhandledrejection = event => captureError(event.reason);
๋นต ๋ถ์ค๋ฌ๊ธฐ ์ฑ์ฐ๊ธฐ, ์ถ๊ฐ ์ถ๊ฐ, ํ๊ทธ ์ถ๊ฐ ๋ฑ๊ณผ ๊ฐ์ ์์ ์ ๋ ์ํํ์ง๋ง ์ผํธ๋ฆฌ ํด๋ผ์ด์ธํธ๋ฅผ ์ฌ์ฉํ๊ณ ๋ฒ๋ค์ ๋ ํฌ๊ฒ ๋ง๋ค์ง ์์ ์ ์์ต๋๋ค.
์ด๊ฒ์ ๋ด๊ฐ #1846์์ ๊ตฌํํ ๊ฒ์ ๋๋ค.
๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ๋์์ด ๋ ์ ์์ต๋๋ค:
๋ค์๊ณผ ๊ฐ์ด webpack( 4.29.5
)๊ณผ ํจ๊ป ESM ๋น๋๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
package.json
module
์ ์ธ์ด ์๊ธฐ ๋๋ฌธ์ ํ์ค ๋น๋ ๋์ ESM ๋น๋๋ฅผ ์ฌ์ฉํ๋๋ก ์นํฉ ๋ณ์นญ ์ถ๊ฐresolve: {
alias: {
// use sentry ESM build which is not declared in the @sentry/browser package.json
'@sentry/browser': path.resolve(
__dirname,
'node_modules/@sentry/browser/esm',
),
}
babel-loader
๊ตฌ์ฑ์ sentry/.+/esm
์ ๋ํ ์ ์ธ๋ฅผ ์ถ๊ฐํฉ๋๋ค.{
test: /\.m?jsx?$/,
loader: 'babel-loader',
// compile sentry as the ESM build is new and ships modern features which break our supported browsers
exclude: /(node_modules\/(?!(@sentry\/[^/]+\/esm))|bower_components)\//,
}
๋ ธํธ:
lodash-es
์ ๋ํด ์ ์ฌํ ์์
์ ์ํํจ)@๋ผ์์ค
@sentry/browser/esm
๋ก ๋ฆฌ๋๋ ์
ํ ์ ์์ต๋๋ค.
resolve: {
alias: {
// use sentry ESM build which is not declared in the @sentry/browser package.json
'@sentry/browser': '@sentry/browser/esm'
}
ํ์ง๋ง ๋ณ์นญ์ ์ถ๊ฐํ ํ์๋ ์์ต๋๋ค @sentry/browser/esm
๊ฐ์ ธ์ค๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
๋ก๋์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ ๊ฒ์ด ๋ ์ฝ์ต๋๋ค.
{
test: /other_things/,
include: [/@sentry\/.+\/esm/],
exclude: /node_modules/,
// config
}
{
test: /@sentry\/.+\/esm/,
exclude: /node_modules/,
// config
}
๋ํ ํ์์ ๋ฐ๋ผ babel ๊ตฌ์ฑ์ ์ฌ์ฉ์ ์ง์ ํ๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค: babel docs , ๊ทธ๋ ์ง ์์ผ๋ฉด esm ๋ฒ์ ์ ์ฌ์ฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
์ ๋ฐ์ดํธ: ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ์ค์ด๋ ์๋ก์ด ์ฃผ์ SDK ๋ฒ์ ์ ๊ณง ์ถ์ํ ์์ ์ ๋๋ค.
26.1 kB
- https://bundlephobia.com/result?p=@sentry/browser @4.6.4
๋
17.2 kB
- https://bundlephobia.com/result?p=@sentry/browser @5.0.0-rc.1
์ฌ์ ๊ตฌ์ถ๋ CDN ๋ฒ์ ์ ๋ ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค๋๋ค(๋ฒ๋ค ๊ณตํฌ์ฆ์ด ์ด๋ป๊ฒ ๋ฌผ๊ฑด์ ์ธก์ ํ๋์ง ํ์คํ์ง ์์)
ES6: 14.3535 kB
ES5: 15.6846 kB
์ด์จ๋ , ๋๋ ๊ทธ๊ฒ์ด ์ฌ์ ํ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ๋ ์ค์ด๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์์ ์๋ฆฌ๊ณ ์ถ์์ง๋ง ์ด๊ฒ์ ์ด๋ฏธ ์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ์ผ๋ก์ ํฐ ์ง์ ์ผ ๊ฒ์ ๋๋ค.
์ ๊ทธ๋ ์ด๋์ ๋ํ ์ฐธ๊ณ ์ฌํญ: SDK์ ๋ง์ ๋ด๋ถ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ผ๋ฏ๋ก ํฐ ๋ฌธ์ ์ ๋๋ค. ์ฌ์ฉ์ ์ธก์์ ํ์ํ ์ฝ๋ ๋ณ๊ฒฝ์ด ์์ด์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ํ์ฌ sentry.io์์ ์ ๋ฒ์ ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ง์ ํ ์คํธํ๊ณ ์์ต๋๋ค. ์ฐธ์กฐ: https://github.com/getsentry/sentry/pull/12492
๋ฉด์ฑ
์กฐํญ: ์์ง ํ๋ก๋์
์์ 5.0.0-rc.x
๋ฅผ ์ฌ์ฉํ์ง ๋ง์ญ์์ค. ๐
@HazAT ์ง์งํ๊ฒ ๋ฐ์์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ์ด๊ฒ์ ํฐ ์ง์ ์ ๋๋ค - ์ ๋ ์ด๋ฏธ ์ด๊ฒ์ ์ง๊ธ ๋ฐฐํฌํ๋ ๊ฒ์ ๋ํด ํจ์ฌ ๋ ๊ฑฑ์ ํ๊ณ ์์ต๋๋ค :-)
@kamilogorek ๊ทธ๋ฅ ๊ถ๊ธํด์ ๋น๊ต์ 3.x
๋ถ๊ธฐ์ ๋ง์ง๋ง ๋ฒ์ ์ ์ถ๊ฐํ ์ ์์ต๋๊น?
์ ๋ ์ด ๋ฌธ์ ๋ฅผ ๋ซ๊ณ ์์ต๋๋ค. ํ์ฌ๋ก์๋ v4์์ v5๋ก ์ด๋ํ๋ ์ถ์๊ฐ ์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ์ผ๋ก ๊ฐ๋ ์ถ์ธ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ฌ์ ํ ๊ทธ๊ฒ์ ๋ ์ค์ด๊ธฐ ์ํด ๋ ธ๋ ฅํ ๊ฒ์ด๋ฉฐ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋ค์ ์ฆ๊ฐ์ํค๋ ๊ฒ์ ๋ํด ๋งค์ฐ ์์ํ ๊ฒ์ ๋๋ค.
๊ฐ๋จํ ๋งํด์ "๋ฒ๋ค" ํฌ๊ธฐ๋ง ๋น๊ตํ๋ ๊ฒ์ ์ข์ํฉ๋๋ค. ์ฌ์ฉ ์ค์ธ ๋ฒ๋ค๋ฌ์ ๋ฐ๋ผ ๋ง์ผ๋ฆฌ์ง๊ฐ ๋ค๋ฅผ ์ ์์ผ๋ฏ๋ก ๋ค์์ ๋ฐฐ์กํ๋ CDN ๋ฒ๋ค ๋ฒํธ์ ๋๋ค.
| ํจํค์ง | ๋ฒ์ | ํฌ๊ธฐ(๋ฐ์ดํธ) | ํฌ๊ธฐ(KB) | ๋งํฌ |
|-----|---------|---------------|----- -------|------------------------------------------ ----------|
| ๊น๋ง๊ท-js | 3.27.0 | 13741๋ฐ์ดํธ | ~13.4kb | https://cdn.ravenjs.com/3.27.0/raven.min.js |
| @sentry/๋ธ๋ผ์ฐ์ | 4.6.6 | 22607๋ฐ์ดํธ | ~22.1kb | https://browser.sentry-cdn.com/4.6.6/bundle.min.js |
| @sentry/๋ธ๋ผ์ฐ์ | 5.0.3 | 16059๋ฐ์ดํธ | ~15.7kb | https://browser.sentry-cdn.com/5.0.3/bundle.min.js |
v5์์๋ esm
๋น๋๋ ์ ๊ณตํฉ๋๋ค. ์ฆ, ๋ฒ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ฌ์ฉํ์ง ์๋ ์ฝ๋ ๊ฒฝ๋ก๋ฅผ ํธ๋ฆฌ์
ฐ์ดํฌํ ์ ์์ด์ผ ํฉ๋๋ค.
๊ธฐ๋ค๋ ค์ฃผ์ ๋ชจ๋ ๋ถ๋ค๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค ๐
@HazAT @kamilogorek ๊ต์ฅํฉ๋๋ค!
@Limess @sentry/browser
@sentry/browser/esm
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค๋๋ ์๋ ์ฌ์ ํ ๊ด๋ จ์ด ์์ต๋๊น?
import * as Sentry from "@sentry/browser/esm";
์ ๊ฐ์ด ๊ฐ์ ธ์ค๊ณ webpack -p
$์ ํจ๊ป ๋ฒ๋ค๋ก ์ ๊ณต๋์ง๋ง ๋ฒ๋ค ํฌ๊ธฐ์๋ ์ฐจ์ด๊ฐ ์์ต๋๋ค. ํ๋ฌ๊ทธ์ธ์ด๋ ๋ก๋๊ฐ ์๋ webpack.config.js
๋ ์์ต๋๋ค.
@0xbkt ์ ์ด๋ ์ง๊ธ์ ๋กค์ ์ ์ฌ์ฉํ์ฌ ์ฑ์ ๋ฌถ์ ๋ ๋ฒ๋ค ํฌ๊ธฐ์ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ฑ๋ฅ ๋ฌธ์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ค์ด๋ก๋๋ฟ๋ง ์๋๋ผ ๊ตฌ๋ฌธ ๋ถ์ ๋ฐ ์คํ์์๋ ๋ฐ์ํ๋ฏ๋ก ์ถ์๋ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ๋ ๊ฒ๋ ๊ณต์ ํ๋ค๊ณ ์ฃผ์ฅํฉ๋๋ค. ~92kb๋ ์๋นํ ๋ฌด๊ฒ๊ณ ์ ์ฌ์ ์ฅ์น์์ ์ต๋ 1์ด์ ๊ตฌ๋ฌธ ๋ถ์ ์๊ฐ์ ์ถ๊ฐํ ์ ์์ต๋๋ค(์ด ํ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ง ํด๋น).
CDN๋ ์คํฌ๋ฆฝํธ์
< 1KB
๋ฒํธ๋ฅผ ์ด๋์ ๊ฐ์ ธ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์์ธํ ์ค๋ช ํด ์ฃผ์๊ฒ ์ต๋๊น?https://browser.sentry-cdn.com/4.0.4/bundle.min.js
๋ฅผ ์ด๋ฉด 22KB์ gzip ํฌ๊ธฐ๊ฐ ํ์๋ฉ๋๋ค.Sentry์ SDK๋ ๊ฐ๋ฐ์๊ฐ ํฌํจํ๋ ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋์ผ ๋ฟ์ ๋๋ค.
์ถ์ : ์ ๋ ์ผํธ๋ฆฌ๋ฅผ ์ฌ๋ํฉ๋๋ค. ์ ํฌ์๊ฒ ํฐ ๋์์ด ๋์์ต๋๋ค. ์น ์ฑ๋ฅ์ ๋ด๊ฐ ์ด์ ์ ๊ฐ๊ณ ์๋ ๊ฒ์ ๋๋ค. ;)