[Go] Context
context๋ ๊ณ ๋ฃจํด ๊ธฐ๋ฐ์ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ณด์กฐ์ ์ธ ์์คํ ์ด๋ผ๊ณ ํ ์ ์๋ค.
์๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค๋ผ๋ฆฌ ์ํธ์์ฉ์ ํด์ผํ ๋ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
ํต์ฌ ๊ตฌ์ฑ์์๋ค์ ๊ธฐ๋ณธ ํจํค์ง์ธ "context"์ ๋ค์ด์๋ค.

๊ทธ๋ฆฌ๊ณ ์ปจํ
์คํธ์ ์์ฑ์ ์ด๋ฐ์์ผ๋ก ํ ์ ์๋ค.
๋ค์ ์ฝ๋์ WithCancel์ "์ทจ์" ๋ช
๋ น์ ์ ๋ฌํ ์ ์๋ context๋ฅผ ์์ฑํด์ฃผ๋ ํจ์๋ค.
์ด์ธ์๋ ๊ฐ์ ์ ๋ฌํ ์ ์๋ WithValeu, ํ์์์ ๊ธฐ๋ฐ์ WithTimeout ๋ฑ์ด ์๋๋ฐ, ๋ณธ ํฌ์คํธ์์๋ Cancel๋ง์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ต์ ์ธ ๊ตฌ์กฐ๋ง ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ๋ค.
์ผ๋จ ๊ณ ๋ฃจํด์ผ๋ก ํธ์ถํ ํจ์๋ฅผ ๋จผ์ ๊ตฌํํด๋ณด๊ฒ ๋ค.
context๋ฅผ ํตํ ์ ์ด๊ฐ ํ์ํ ํจ์๋ผ๋ฉด, ๋งค๊ฐ๋ณ์๋ก ๊ทธ context ์ ์ด ๊ฐ์ฒด๋ฅผ ์ ๋ฌ๋ฐ๋๊ฒ ๊ธฐ๋ณธ์ด๋ค.
๊ทธ๋ฆฌ๊ณ context๋ฅผ ํตํด์ ๊ฐ์ ์ ๋ฌ๋ฐ์ผ๋ฉด ๊ทธ์ ๋ฐ๋ฅธ ์ก์
์ ์ทจํ๋ฉด ๋๋ ๊ฒ์ด๋ค.
Cancel Context์ ๊ฒฝ์ฐ์๋ cancel ์ด๋ฒคํธ๊ฐ ์ ์ก๋์์ ๊ฒฝ์ฐ Err๊ฐ ๋ฐ์ํ๋ค.
์ด๋ฅผ ํตํด์ ๊ณ ๋ฃจํด์ ์ค๋จ์ ๊ตฌํํ ์๋ ์๊ณ

ํน์ Done ํจ์์ ์ฑ๋์ ํตํด์ ์ทจ์ ์ ํธ ์ ๋ฌ ์ฌ๋ถ์ ๋์ํ ์ ์๋ค.
์๋ ์ฝ๋๋ ์ฑ๋๊ณผ switch๋ฅผ ์์ฉํด์ ์ด๋ฒคํธ ์์ ์ ์ฒ๋ฆฌํ๋ค.

๊ทธ๋ฌ๋ฉด ์ทจ์๋ฅผ ๋ณด๋ผ ์ฃผ์ฒด๊ฐ ๋๋ ๋ฉ์ธ ๊ณ ๋ฃจํด์ ๋ค์๊ณผ ๊ฐ์ด ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค.

๊ทธ๋ ๊ฒ ํด์ ๋๋ฆฌ๋ฉด

์ ๋น ์๊ฐ ๋๋ค๊ฐ ์ฃฝ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ค๋ฅธ context ํ์ ๋ค๋ ์ฌ์ฉํํ๋ ์๋น์ทํ๋ค.
์ฐธ์กฐ
https://pkg.go.dev/context