[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