[Go] Error trace ์ถ”์ ํ•˜๊ธฐ

Go๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋‚˜๋“œ์™€ ๋น„์Šทํ•œ ํ˜•ํƒœ์˜ ์˜ค๋ฅ˜์ฒ˜๋ฆฌ๊ธฐ๋ฒ•์„ ์„ ํ˜ธํ•œ๋‹ค.
๊ทธ๋ƒฅ ์˜ค๋ฅ˜๋ฅผ ๊ฐ’์œผ๋กœ ๋ฆฌํ„ดํ•˜๊ณ , ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜๋Š” ํ˜•ํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋‹ค๋งŒ ์ด๋Ÿฐ ๋ฐฉ์‹ ์ž์ฒด์—๋Š” ํŽธ์˜์„ฑ ์ˆ˜์ค€์˜ ํ•œ๊ณ„๊ฐ€ ์ข€ ์žˆ๋Š”๋ฐ

์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ์ง€์ ์˜ ํ˜ธ์ถœ ์Šคํƒ์ด ๊นŠ์„ ๋•Œ๋Š” ์–ด๋””์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฑด์ง€ ์•Œ๊ณ ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ทธ๋Ÿฐ ๋ถ€๋ถ„์—์„œ์˜ ์ธ์‚ฌ์ดํŠธ๋ฅผ ์ œ๊ณตํ•ด์ฃผ์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์‚ฌ์‹ค ์ด๊ฑด ๋ชจ๋‚˜๋“œ ๊ธฐ๋ฐ˜์˜ ์˜ค๋ฅ˜์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€์ง€๋Š” ๊ทผ๋ณธ์ ์ธ ํ•œ๊ณ„์ด๊ธด ํ•˜๋‹ค.
์›๋ž˜ ๊ทธ๋Ÿฐ๊ฑด try-catch ๊ธฐ๋ฐ˜์˜ ๊ธฐ๋ฒ•์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.




pkg/errors๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ (deprecated)

์„œ๋“œํŒŒํ‹ฐ error ๋ชจ๋“ˆ์ธ pkg/errors๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ŠคํƒํŠธ๋ ˆ์ด์Šค๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์Œ“์„ ์ˆ˜ ์žˆ๋‹ค.

์กฐ๊ธˆ ์ฃผ์˜ํ•ด์•ผํ•  ์ ์€, ๋ ˆ๊ฑฐ์‹œ๋กœ ์ทจ๊ธ‰๋˜๊ณ  ์žˆ๊ณ , ๊ฐœ๋ฐœ์ด ์ค‘๋‹จ๋œ ์ƒํƒœ๋ผ๋Š” ๊ฒƒ์ด๋‹ค. ํ˜„์žฌ๋Š” ํ‘œ์ค€ errors๋กœ ์™„์ „ํžˆ ๋Œ€์ฒดํ–ˆ๊ณ , ํ‘œ์ค€์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉํ–ฅ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋งค๋ฒˆ ์ง€๋‚˜์˜จ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ธฐ์–ตํ•  ๊ฒƒ์ด๋‹ˆ, ์•„๋งˆ ์„ฑ๋Šฅ์˜ ์ฐจ์ด๋„ ์ข€ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

์‚ฌ์šฉ๋ฒ• ์ž์ฒด๋Š” ํ‘œ์ค€ errors์™€ ๊ฑฐ์˜ ๋™์ผํ•˜๋‹ค.

๊ทธ๋Œ€์‹  error ๊ฐ์ฒด๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด

์ŠคํƒํŠธ๋ ˆ์ด์Šค๋ฅผ ์ฐ์–ด์ค€๋‹ค๋Š”๊ฒŒ ๋‹ค๋ฅด๋‹ค.

์™ธ๋ถ€ ์˜ค๋ฅ˜ ๊ฐ์ฒด์ธ ๊ฒฝ์šฐ์—๋Š” errors.Wrap์œผ๋กœ ๊ฐ์‹ธ์„œ ์žฌ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋œ๋‹ค.




๊ธฐํƒ€ ์„œ๋“œํŒŒํ‹ฐ๋กœ ์˜ค๋ฅ˜ ๋ž˜ํ•‘ํ•˜๊ธฐ

(erris, go-errors/errors, palantir/stacktrace, ...)

๋˜๋‹ค๋ฅธ ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ทธ๋ƒฅ ๋ณ„๋„ ์„œ๋“œํŒŒํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ error ๊ฐ์ฒด๋ฅผ ๋ž˜ํ•‘ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์‚ฌ์šฉ๋ฒ•์€ ๋ญ ๋‹ค ๋น„์Šท๋น„์Šทํ•˜๋‹ค.
eris์˜ ๊ฒฝ์šฐ์—๋Š” ์ด๋ ‡๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

์ ์ ˆํžˆ ๊ธฐ์กด ์˜ค๋ฅ˜๋ฅผ ๋ž˜ํ•‘ํ•ด์ฃผ๊ณ 

๋˜‘๊ฐ™์ด %+v ํฌ๋งท์œผ๋กœ ์ถœ๋ ฅ์„ ๋ฝ‘์œผ๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ํŠธ๋ ˆ์ด์Šค๋ฅผ ๊ทธ๋Œ€๋กœ ์ฐ์–ด์ค„ ๊ฒƒ์ด๋‹ค.



์ฐธ์กฐ
https://go.googlesource.com/proposal/+/master/design/go2draft-error-values-overview.md
https://stackoverflow.com/questions/33034241/how-to-get-the-stack-trace-pointing-to-actual-error-reason