Sentry-javascript: κΈ°λ³Έ API 캑처* λ©”μ„œλ“œμ—μ„œ 약속 λ°˜ν™˜

에 λ§Œλ“  2019λ…„ 05μ›” 03일  Β·  16μ½”λ©˜νŠΈ  Β·  좜처: getsentry/sentry-javascript

이것은 Sentry에 μ˜ˆμ™Έλ₯Ό λ³΄κ³ ν•˜λŠ” 것이 보μž₯λ©λ‹ˆκΉŒ?

try {
  // code
} catch (e) {
  const eventId = Sentry.captureException(e);
  console.log('sentry event', eventId);
  process.exit(1);
}

이벀트 IDκ°€ 둜컬둜 μƒμ„±λ˜λŠ”μ§€ μ›κ²©μœΌλ‘œ μƒμ„±λ˜λŠ”μ§€ λ¬Έμ„œκ°€ λͺ…ν™•ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ°°μˆ˜κ°€ μ „ν˜€ 관련이 μžˆμŠ΅λ‹ˆκΉŒ? https://docs.sentry.io/error-reporting/configuration/draining/?platform=node

Breaking Documentation Improvement

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

@sentry/node μ—…κ·Έλ ˆμ΄λ“œν•œ 이후 Sentry에 μƒλ‹Ήν•œ λ¬Έμ œκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 더 λ‚˜μ€ μ†”λ£¨μ…˜μ΄ λ‚˜μ˜¬ λ•ŒκΉŒμ§€ raven-node 둜 λŒμ•„κ°ˆ κ²ƒμž…λ‹ˆλ‹€.

λͺ¨λ“  μ„œλ²„λ¦¬μŠ€ 싀행이 끝날 λ•Œ μž„μ˜μ˜ μ‹œκ°„ 초과둜 λŒ€κΈ°μ—΄μ„ λΉ„μ›Œμ•Ό ν•˜λŠ” 것은 ν™•μ‹€νžˆ μ†”λ£¨μ…˜μ΄ μ•„λ‹ˆλΌ ν•΄ν‚Ήμ²˜λŸΌ λŠκ»΄μ§‘λ‹ˆλ‹€. πŸ€”

λͺ¨λ“  16 λŒ“κΈ€

이것을 κ°•μ‘°ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. μ™„μ „νžˆ λ™κΈ°ν™”λ˜μ§€ μ•Šμ•˜μŒμ„ λͺ…ν™•νžˆ ν•˜κΈ° μœ„ν•΄ "전솑"이 λ°±κ·ΈλΌμš΄λ“œμ—μ„œ μ‹€ν–‰ μ€‘μž…λ‹ˆλ‹€. λ”°λΌμ„œ μ—„λ°€νžˆ λ§ν•΄μ„œ μ΄λ²€νŠΈκ°€ Sentry에 λ„λ‹¬ν•œλ‹€λŠ” 보μž₯은 μ—†μŠ΅λ‹ˆλ‹€.

eventId λŠ” SDKμ—μ„œ 둜컬둜 μƒμ„±λ˜λ©° μ„œλ²„μ—μ„œ 이벀트λ₯Ό μˆ˜μ§‘ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

이λ₯Ό λͺ…ν™•νžˆ ν•˜κΈ° μœ„ν•΄ λ¬Έμ„œλ₯Ό μ—…λ°μ΄νŠΈν•  κ²ƒμž…λ‹ˆλ‹€.

자, λͺ…ν™•ν•˜κ²Œ ν•˜κΈ° μœ„ν•΄ 여기에 μ„€λͺ…λœ λ‚΄μš©μ„ μ‹€μ œλ‘œ κ΅¬ν˜„ν•΄μ•Ό ν•©λ‹ˆλ‹€. https://docs.sentry.io/error-reporting/configuration/draining/?platform=node

λ§žμŠ΅λ‹ˆκΉŒ, @HazAT?

@rhyek Corrent , λͺ¨λ“  것이 μ „μ†‘λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜λ €λ©΄ λͺ¨λ“  것이 μ „μ†‘λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ ν”ŒλŸ¬μ‹œλ₯Ό 기닀릴 수 μžˆμŠ΅λ‹ˆλ‹€.

capture* λ©”μ†Œλ“œμ—μ„œ promiseλ₯Ό λ…ΈμΆœν•˜λŠ” 것이 더 쒋지 μ•Šμ„κΉŒμš”? APIλŠ” 약속을 λ°˜ν™˜ν•˜λ©΄ μ‚¬μš©μžμ—κ²Œ μ΄λ²€νŠΈκ°€ μ „μ†‘λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ await ν•΄μ•Ό 함을 μ•Œλ¦¬κ±°λ‚˜ μ „μ†‘λ˜κΈ°λ₯Ό λ°”λΌλŠ” 것을 μžŠμ–΄λ²„λ¦¬κΈ° λ•Œλ¬Έμ— 더 λͺ…ν™•ν•©λ‹ˆλ‹€. close 와 flush λŠ” λͺ¨λ‘ λΉ„λ™κΈ°μ‹μœΌλ‘œ μƒκ°λ˜μ—ˆλ˜ 것을 λ™κΈ°μ‹μœΌλ‘œ λ§Œλ“€λ €λŠ” λͺ¨ν˜Έν•œ μœ ν‹Έλ¦¬ν‹°μ˜ λ©”μ„œλ“œμž…λ‹ˆλ‹€. κ²Œλ‹€κ°€, 이 두 가지 방법 λͺ¨λ‘ μ™„μ „νžˆ λ§κ°€μ‘ŒμŠ΅λ‹ˆλ‹€. 사싀, κ½€ λ§Žμ€ 단점이 μžˆμŠ΅λ‹ˆλ‹€. (λ‚˜λŠ” 그것이 버그라고 λ§ν•˜κ³  μ‹Άμ§€λ§Œ μ•„λ§ˆλ„ 이것은 그것을 λ³΄λŠ” μ‚¬λžŒμ˜ POV에 달렀 μžˆμŠ΅λ‹ˆλ‹€):

  • 의 λͺ©μ  timeout 에 전달 flush 그것이 μš”μ²­μ˜ 전솑을 λ°©ν•΄ν•˜μ—¬ ꡐ톡 μ‘΄μ€‘ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— nullμž…λ‹ˆλ‹€. 타이머가 만료되면 λ°˜ν™˜λœ 약속을 false 둜 ν•΄κ²°ν•©λ‹ˆλ‹€. λ‚˜λŠ” μ—¬μ „νžˆ λ‚˜ μžμ‹ μ—κ²Œ κ·ΈλŸ¬ν•œ μ½”λ“œμ™€ ν–‰λ™μ˜ μœ μš©μ„±μ„ 묻고 μžˆμŠ΅λ‹ˆλ‹€.
  • flush λ©”μ„œλ“œλŠ” 호좜될 λ•Œλ§ˆλ‹€ timeout 에 λ„λ‹¬ν•˜λŠ” μ¦‰μ‹œ ν•΄κ²°λ˜λŠ” μƒˆ 약속을 λ°˜ν™˜ν•©λ‹ˆλ‹€. 두 가지 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. setInterval μ˜ν•΄ μ‹€ν–‰λœ 전체 μ½”λ“œλŠ” μ΅œμ†Œν•œ λΈŒλΌμš°μ € μ½˜μ†”μ˜ ν…ŒμŠ€νŠΈμ—μ„œ 맀우 느리고 μ œν•œ μ‹œκ°„μ΄ 만료된 ν›„ 약속이 λ§Žμ€ μ‹œκ°„ λ™μ•ˆ ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 두 번째이자 더 μ€‘μš”ν•œ λ¬Έμ œλŠ” _isClientProcessing ν•¨μˆ˜μ˜ μ½”λ“œκ°€ 호좜될 λ•Œλ§ˆλ‹€ μ‹œκ°„ 초과λ₯Ό μ§€μš°λ―€λ‘œ λˆ„κ΅°κ°€κ°€ Promise.all([fush(), flush()]) 와 같은 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 경우(μ™œ κ·Έκ°€ ν•΄μ•Ό ν•˜λŠ”μ§€ λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ APIλŠ” κ·Έκ°€ ν•˜κ³  싢을 λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ 약속을 λ°˜ν™˜ν•˜κΈ° λ•Œλ¬Έμ— 그런 약속은 μ ˆλŒ€ ν•΄κ²°λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

Corrent, λͺ¨λ“  것이 μ „μ†‘λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜λ €λ©΄ λͺ¨λ“  것이 μ „μ†‘λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ ν”ŒλŸ¬μ‹œλ₯Ό 기닀릴 수 μžˆμŠ΅λ‹ˆλ‹€.

μ˜³μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν”ŒλŸ¬μ‹œλ₯Ό κΈ°λ‹€λ¦¬λŠ” λ™μ•ˆμ—λ„ λͺ¨λ“  것이 μ „μ†‘λ˜μ—ˆλŠ”μ§€ ν™•μ‹ ν•  수 μ—†λŠ” 이유λ₯Ό μ΄ν•΄ν•˜λ €λ©΄ μœ„μ˜ 제 μš”μ μ„ μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€. λ‚˜λŠ” κ·ΈλŸ¬ν•œ API λ””μžμΈμ΄ μ™„μ „νžˆ λ§κ°€μ‘Œλ‹€κ³  λ§ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. 그리고 λͺ¨λ‘μ—κ²Œ μž‘λ™ν•  수 μ—†λŠ” μ’…λ£Œ APIλ₯Ό κ΅¬μΆ•ν•˜λ €κ³  μ‹œλ„ν•˜λŠ” λŒ€μ‹ μ— 이벀트 전솑을 λ‚˜νƒ€λ‚΄λŠ” 약속을 κΈ°λ‹€λ¦¬λŠ” 선택을 μ‚¬μš©μžμ—κ²Œ 맑기지 μ•ŠλŠ” 이유λ₯Ό μ •λ§λ‘œ 이해할 수 μ—†μŠ΅λ‹ˆλ‹€. 톡합 APIκ°€ μž‘λ™ν•΄μ•Ό ν•˜λŠ” μ–Έμ–΄

μ΄λ²€νŠΈκ°€ λ§ˆμ§€λ§‰μœΌλ‘œ μ’…λ£Œλ  λ•Œ ν•΄κ²°λ˜λŠ” 약속에 μ•‘μ„ΈμŠ€ν•  수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.
이 μŠ€λ ˆλ“œμ— μ„€λͺ…λœ λ‹€λ₯Έ 방법과 ν•¨κ»˜ 보낸
λ§Žμ€ 의미.

2019λ…„ 5μ›” 11일 ν† μš”μΌ μ˜€ν›„ 12:29 Stefano Arlandini [email protected]
썼닀:

캑처*μ—μ„œ 약속을 κ³΅κ°œν•˜λŠ” 것이 쒋지 μ•Šμ„κΉŒμš”?
행동 양식? APIλŠ” 약속을 λ°˜ν™˜ν•˜λ©΄ μ‚¬μš©μžμ—κ²Œ
μ΄λ²€νŠΈκ°€ μ „μ†‘λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜λ €λ©΄ κΈ°λ‹€λ €μ•Ό ν•©λ‹ˆλ‹€.
μ „μ†‘λ˜κΈ°λ₯Ό λ°”λΌλ©΄μ„œ λΆˆμ„ 뢙이고 μžŠμ–΄λ²„λ¦¬μ‹­μ‹œμ˜€. 닫기와 ν”ŒλŸ¬μ‹œ λͺ¨λ‘
λ™κΈ°ν™”λœ 무언가λ₯Ό λ§Œλ“€λ €κ³  ν•˜λŠ” λͺ¨ν˜Έν•œ μœ ν‹Έλ¦¬ν‹°
비동기식이라고 μƒκ°ν•˜μ‹­μ‹œμ˜€. λ˜ν•œ 이 두 가지 방법 λͺ¨λ‘ μ™„μ „νžˆ κΉ¨μ‘ŒμŠ΅λ‹ˆλ‹€.
사싀, λͺ‡ 가지 단점이 μžˆμŠ΅λ‹ˆλ‹€(버그라고 λ§ν•˜κ³  μ‹Άμ§€λ§Œ
μ•„λ§ˆλ„ 이것은 κ·Έλ“€μ„λ³΄κ³ μžˆλŠ” μ‚¬λžŒμ˜ POV에 달렀 μžˆμŠ΅λ‹ˆλ‹€) :

  • ν”ŒλŸ¬μ‹œλ‘œ μ „λ‹¬λœ νƒ€μž„μ•„μ›ƒμ˜ λͺ©μ μ€ null이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— nullμž…λ‹ˆλ‹€.
    μš”μ²­ 전솑을 μ€‘λ‹¨ν•˜μ—¬ 전솑에 μ˜ν•΄ μ‘΄μ€‘λ©λ‹ˆλ‹€. 그것
    타이머가 만료되면 λ°˜ν™˜λœ 약속을 false둜 ν•΄κ²°ν•©λ‹ˆλ‹€.
    λ‚˜λŠ” μ—¬μ „νžˆ λ‚˜ μžμ‹ μ—κ²Œ κ·ΈλŸ¬ν•œ μ½”λ“œμ™€ ν–‰λ™μ˜ μœ μš©μ„±μ„ 묻고 μžˆμŠ΅λ‹ˆλ‹€.
  • flush λ©”μ†Œλ“œλŠ” 호좜될 λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ promiseλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
    μ‹œκ°„ μ΄ˆκ³Όμ— λ„λ‹¬ν•˜λŠ” μ¦‰μ‹œ ν•΄κ²°λ©λ‹ˆλ‹€. 두 가지 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.
    setInterval에 μ˜ν•΄ μ‹€ν–‰λ˜λŠ” 전체 μ½”λ“œλŠ” μ΅œμ†Œν•œ λ‹€μŒμ—μ„œ 맀우 λŠλ¦½λ‹ˆλ‹€.
    λΈŒλΌμš°μ € μ½˜μ†”μ—μ„œ λ‚΄ ν…ŒμŠ€νŠΈμ™€ 약속은 λ§Žμ€ 것을 ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.
    μ œν•œ μ‹œκ°„μ΄ 만료된 ν›„ 초. 두 번째이자 더 μ€‘μš”ν•œ λ¬Έμ œλŠ”
    _isClientProcessing ν•¨μˆ˜μ˜ μ½”λ“œκ°€ μ‹œκ°„ 초과λ₯Ό μ§€μš°λŠ” 것
    호좜될 λ•Œλ§ˆλ‹€ λˆ„κ΅°κ°€κ°€ Promise.all([fush(),
    flush()]) (μ™œ κ·Έκ°€ κ·Έλ ‡κ²Œ ν•΄μ•Ό ν•˜λŠ”μ§€ λͺ¨λ₯΄κ² μ§€λ§Œ APIκ°€ λ°˜ν™˜ν•˜κΈ° λ•Œλ¬Έμ—
    κ·Έκ°€ 그것을 ν•˜λ €λŠ” μœ ν˜Ήμ„ 받을 λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ 약속) 그러면 κ·ΈλŸ¬ν•œ 약속은
    μ ˆλŒ€ ν•΄κ²°λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

Corrent, λͺ¨λ“  것이 μ „μ†‘λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜λ €λ©΄ ν”ŒλŸ¬μ‹œλ₯Ό 기닀릴 수 μžˆμŠ΅λ‹ˆλ‹€.
λͺ¨λ“  것이 μ „μ†‘λ˜μ—ˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

μ˜³μ§€ μ•ŠμŒ, μ™œ 당신을 ν”ŒλŸ¬μ‹œν•˜λŠ” 것을 기닀리고 μžˆλŠ”μ§€ μ΄ν•΄ν•˜λ €λ©΄ μœ„μ˜ λ‚΄ μš”μ μ„ μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.
λͺ¨λ“  것이 μ „μ†‘λ˜μ—ˆλŠ”μ§€ 확인할 수 μ—†μŠ΅λ‹ˆλ‹€. 그런 API λ””μžμΈμ€
μ™„μ „νžˆ κ³ μž₯ 났고 μ™œ μ‚¬μš©μžμ—κ²Œ 맑기지 μ•ŠλŠ”μ§€ 이해할 수 μ—†μŠ΅λ‹ˆλ‹€.
이벀트 전솑을 λ‚˜νƒ€λ‚΄λŠ” 약속을 κΈ°λ‹€λ¦¬λŠ” 선택
λͺ¨λ‘μ—κ²Œ μž‘λ™ν•˜μ§€ μ•ŠλŠ” μ’…λ£Œ APIλ₯Ό κ΅¬μΆ•ν•˜λŠ” λŒ€μ‹ 
톡합 APIκ°€ μž‘λ™ν•΄μ•Ό ν•˜λŠ” μ–Έμ–΄

β€”
당신이 μ–ΈκΈ‰λ˜μ—ˆκΈ° λ•Œλ¬Έμ— 이것을 λ°›λŠ” κ²ƒμž…λ‹ˆλ‹€.
이 이메일에 직접 λ‹΅μž₯ν•˜κ³  GitHubμ—μ„œ ν™•μΈν•˜μ„Έμš”.
https://github.com/getsentry/sentry-javascript/issues/2049#issuecomment-491533914 ,
λ˜λŠ” μŠ€λ ˆλ“œ μŒμ†Œκ±°
https://github.com/notifications/unsubscribe-auth/AAFLTSVSICZ7Y26UHCSMKWLPU4GATANCNFSM4HKUJ5ZQ
.

λ˜ν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œκ°€ λ°±κ·ΈλΌμš΄λ“œμ—μ„œ 싀행될 κ²ƒμœΌλ‘œ κΈ°λŒ€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이것이 μ‚¬μš©μžμ—κ²Œ ν˜Όλž€μ˜ 원인이 되기 λ•Œλ¬Έμž…λ‹ˆλ‹€(λ¬Όλ‘  이 문제의 μ£Όμš” 질문). λŒ€μ‹ , 약속이 λ°˜ν™˜λ˜λ©΄ λ―Έλž˜μ— 올 것이고 아직 μ€€λΉ„λ˜μ§€ μ•Šμ€ 것에 λŒ€ν•œ 자리 ν‘œμ‹œμžμΌ λΏμ΄λΌλŠ” 것이 λΆ„λͺ…ν•©λ‹ˆλ‹€. 그것을 기닀릴 것인지 μ•„λ‹ˆλ©΄ κ·Έλƒ₯ λΆˆμ„ 뢙이고 μžŠμ–΄λ²„λ¦΄ 것인지 선택은 λΆ„λͺ…νžˆ μ‚¬μš©μžμ—κ²Œ 달렀 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ 이벀트 IDκ°€ λ‘œμ»¬μ—μ„œ μƒμ„±λ˜κΈ° λ•Œλ¬Έμ—(btwλ₯Ό μˆ˜ν–‰ν•  μ΄μœ κ°€ μ—†μŒ) μ–΄λ–€ 이유둜 전솑이 이벀트λ₯Ό 보내지 λͺ»ν–ˆκ³  μ‚¬μš©μžκ°€ μˆ˜ν–‰ν•˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— μœ νš¨ν•˜μ§€ μ•Šμ€(μ¦‰μ‹œ λ°˜ν™˜λ˜κΈ° λ•Œλ¬Έμ—) 무언가λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 그것에 λŒ€ν•΄ μ•Œμ§€λ„ λͺ»ν•œλ‹€.

@sentry/node μ—…κ·Έλ ˆμ΄λ“œν•œ 이후 Sentry에 μƒλ‹Ήν•œ λ¬Έμ œκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 더 λ‚˜μ€ μ†”λ£¨μ…˜μ΄ λ‚˜μ˜¬ λ•ŒκΉŒμ§€ raven-node 둜 λŒμ•„κ°ˆ κ²ƒμž…λ‹ˆλ‹€.

λͺ¨λ“  μ„œλ²„λ¦¬μŠ€ 싀행이 끝날 λ•Œ μž„μ˜μ˜ μ‹œκ°„ 초과둜 λŒ€κΈ°μ—΄μ„ λΉ„μ›Œμ•Ό ν•˜λŠ” 것은 ν™•μ‹€νžˆ μ†”λ£¨μ…˜μ΄ μ•„λ‹ˆλΌ ν•΄ν‚Ήμ²˜λŸΌ λŠκ»΄μ§‘λ‹ˆλ‹€. πŸ€”

μž‘λ™ν•  수 μžˆλŠ” 더 λ§Žμ€ 예λ₯Ό μ°ΎλŠ” μ‚¬λžŒλ“€μ„ μœ„ν•΄ β€” #1449 λ‚΄μ˜ μ†”λ£¨μ…˜ 쀑 일뢀가 ν”ŒλŸ¬μ‹± 등에 도움이 λœλ‹€λŠ” 것을 λ°œκ²¬ν–ˆμœΌλ©° 이 λ¬Έμ œμ— λŒ€ν•΄μ„œλ„ λ§Žμ€ λ…Όμ˜λ₯Ό ν–ˆμŠ΅λ‹ˆλ‹€.

(λžŒλ‹€ 및 μ„œλ²„λ¦¬μŠ€μ— 쀑점을 두고 μžˆμ§€λ§Œ ν”ŒλŸ¬μ‹± λ°©μ‹μ΄λ―€λ‘œ λ™μΌν•œ κ°œλ…μ΄ λ‹€λ₯Έ ν™˜κ²½μ—μ„œλ„ μž‘λ™ν•  κ°€λŠ₯성이 λ†’μŠ΅λ‹ˆλ‹€).

맀번 ν”ŒλŸ¬μ‹±μ„ ν¬ν•¨ν•˜μ§€ μ•ŠλŠ” 더 λ‚˜μ€ 방법이 있기λ₯Ό ν™•μ‹€νžˆ μ—΄λ§ν•©λ‹ˆλ‹€.

이 μŠ€λ ˆλ“œμ—μ„œ λ§ν•œ λ‚΄μš©μ— μ™„μ „νžˆ λ™μ˜ν•©λ‹ˆλ‹€. IMO λ°±κ·ΈλΌμš΄λ“œμ—μ„œ 비동기λ₯Ό μˆ¨κΈ°λŠ” 동기 λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 것은 정말 ν˜Όλž€μŠ€λŸ½μŠ΅λ‹ˆλ‹€.
보초 νŒ€μ΄ 이런 μ‹μœΌλ‘œ ν•˜λŠ” λ°λŠ” μ•„μ£Ό 쒋은 μ΄μœ κ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. μ–΄μ¨Œλ“  λ¬Έμ„œμ— λŒ€ν•œ μ—…λ°μ΄νŠΈλŠ” 정말 감사할 κ²ƒμž…λ‹ˆλ‹€.

@cibergarri λ‚˜λŠ” κ·Έ μ΄μœ κ°€ sentry apis에 λŒ€ν•œ 잠재적으둜 느린 λ„€νŠΈμ›Œν¬ ν˜ΈμΆœμ—μ„œ userland μ½”λ“œλ₯Ό μ°¨λ‹¨ν•˜μ§€ μ•Šκ³  eventIdκ°€ μ¦‰μ‹œ λ°˜ν™˜λ  수 있기 λ•Œλ¬Έμ΄λΌκ³  μƒκ°ν•©λ‹ˆλ‹€. 비동기 APIμ—μ„œ 값을 λ°˜ν™˜ν•˜λŠ” 것이 ν˜Όλž€μŠ€λŸ½κ³  비동기 전솑 계측 ν˜ΈμΆœμ— λŒ€ν•΄ μΆ©λΆ„νžˆ 였래 머물지 μ•ŠλŠ” μ„œλ²„λ¦¬μŠ€ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ—μ„œ 였λ₯˜κ°€ μžλ™μœΌλ‘œ 손싀될 수 μžˆλ‹€λŠ” 점에 λ™μ˜ν•©λ‹ˆλ‹€. ν•œ 가지 해결책은 ν•¨μˆ˜λ₯Ό 두 개둜 λΆ„ν• ν•˜μ—¬ μ‚¬μš©μžκ°€ 비동기 λ™μž‘μ„ 선택해야 ν•˜λ„λ‘ ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 예:

Sentry.captureException() // -> returns eventId after successful submission to sentry
Sentry.captureExceptionAsync() // -> returns promise

λ˜λŠ” λ§€κ°œλ³€μˆ˜λ‘œ, 예λ₯Ό λ“€μ–΄

Sentry.captureException(ex, {async: false}) // ->  default, returns eventId after successful submission to sentry
Sentry.captureException(ex, {async: true}) // -> returns promise

이벀트 IDλŠ” 항상 ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μƒμ„±λ˜λ―€λ‘œ 비동기 λ˜λŠ” 동기화 APIλŠ” μ€‘μš”ν•˜μ§€ μ•ŠμœΌλ©° 결과적으둜 μ΄λ²€νŠΈκ°€ μ‹€μ œλ‘œ μ „μ†‘λ˜μ—ˆλŠ”μ§€ μ—¬λΆ€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 쒋은 μ§€ν‘œκ°€ μ•„λ‹™λ‹ˆλ‹€(또 λ‹€λ₯Έ 문제 imo). λ˜ν•œ 였래 전에 각 capture* λ©”μ„œλ“œμ— λŒ€ν•΄ 동기 및 비동기 λ©”μ„œλ“œλ₯Ό λͺ¨λ‘ ν¬ν•¨ν•˜λŠ” μœ μ‚¬ν•œ μ†”λ£¨μ…˜μ„ PHP SDK에 μ œμ•ˆν–ˆμ§€λ§Œ κ±°λΆ€λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 톡합 APIκ°€ 비동기성을 숨기고 μ‹Άμ–΄ν•˜κ³  κ°œλ°œμžλ“€μ΄ 약속을 λ“œλŸ¬λ‚΄κ³  μ‹Άμ–΄ν•˜μ§€ μ•ŠλŠ” μ§„μ§œ 이유λ₯Ό μ™„μ „νžˆ μ΄ν•΄ν•˜μ§€ λͺ»ν–ˆμ§€λ§Œ, 그듀이 이것을 λ³€κ²½ν•˜λŠ” 데 그닀지 κ°œλ°©μ μ΄μ§€ μ•Šμ€ 것 κ°™μ•˜μŠ΅λ‹ˆλ‹€.

μŠ¬ν”„κ²Œλ„ 이 문제둜 인해 μ„œλ²„λ¦¬μŠ€ ν™˜κ²½μ˜ 좔적 였λ₯˜κ°€ λ„ˆλ¬΄ 였λ₯˜κ°€ λ°œμƒν•˜κΈ° 쉽기 λ•Œλ¬Έμ— Sentryμ—μ„œ μ „ν™˜ν–ˆμŠ΅λ‹ˆλ‹€. (μ•„, μ•„μ΄λŸ¬λ‹ˆ.)

capture*Async 방법은 맀우 μœ μš©ν–ˆμ„ κ²ƒμž…λ‹ˆλ‹€ πŸ‘

이에 λŒ€ν•œ μ—…λ°μ΄νŠΈλ₯Ό 받을 수 μžˆμŠ΅λ‹ˆκΉŒ?

@marcospgp μ •ν™•νžˆ 무엇을 μ•Œκ³  μ‹ΆμŠ΅λ‹ˆκΉŒ? λ‹€λ‹ˆμ—˜μ΄ κΈ°λ‘ν•œ λͺ¨λ“  것은 μ˜€λŠ˜λ‚ μ—λ„ μ—¬μ „νžˆ μœ νš¨ν•©λ‹ˆλ‹€.

λ‚˜λŠ” λ¬Έμ„œμ™€λŠ” λ³„λ„λ‘œ μ‚¬μš©μžκ°€ 약속에 μ•‘μ„ΈμŠ€ν•˜κΈ°λ₯Ό μ›ν•˜λŠ” 주석 및 주석 μžμ²΄μ— λŒ€ν•œ λ°˜μ‘μ—μ„œ 맀우 λΆ„λͺ…ν•˜λ©° 이 imhoλ₯Ό ν—ˆμš©ν•˜μ§€ μ•Šμ„ μ •λ‹Ήν•œ μ΄μœ κ°€ μ—†λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

λΆˆν–‰νžˆλ„ v6 릴리슀 μ΄μ „μ—λŠ” λ°œμƒν•˜μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€. μ£Όμš” API에 λŒ€ν•œ λ³€κ²½ 사항이 있고 λ§Žμ€ λ³€κ²½ 사항이 ν•„μš”ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. 이것을 κΈ°λ‘ν•˜κΈ° μœ„ν•΄ λ‘œλ“œλ§΅μ— μΆ”κ°€ν•˜κ² μŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰