Context in golang

Context

golang์„ ์จ๋ดค์œผ๋ฉด ๋‹ค๋“ค ํ•œ ๋ฒˆ์ฏค ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š”๊ฒƒ์ด ๋ฐ”๋กœ context.Context ์ด๋‹ค.

go์—์„œ๋Š” context๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ–ˆ์„์ง€ ์‚ดํŽด๋ณด์ž.

๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฝ์œผ๋ฉด์„œ ์ดํ•ด๋„๋ฅผ ๋†’์—ฌ๋ณด์ž.

Package context defines the Context type, which carries deadlines, cancellation signals, and other request-scoped values across API boundaries and between processes.

context ํŒจํ‚ค์ง€๋Š” API ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด ํ”„๋กœ์„ธ์Šค ๊ฐ„์— deadline, ์ทจ์†Œ signal ๋ฐ ๊ธฐํƒ€ ์š”์ฒญ ๋ฒ”์œ„ ๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š” ์ปจํ…์ŠคํŠธ ์œ ํ˜•์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์ปจํ…์ŠคํŠธ๋Š” ์šฐ๋ฆฌ ๋ง๋กœ ๋ฌธ๋งฅ, ๋งฅ๋ฝ์„ ๋œปํ•œ๋‹ค. REST ์š”์ฒญ์ด๊ฑด, ์†Œ์ผ“ ์š”์ฒญ์„ํ•˜๊ฑด, ์š”์ฒญ-์‘๋‹ต์˜ ํ๋ฆ„ ์•ˆ์—์„œ ์œ ์ง€ํ•ด์•ผ ํ•  ์ƒํƒœ๋ฅผ context๋ฅผ ํ†ตํ•ด ๊ณต์œ ํ•œ๋‹ค.

Incoming requests to a server should create a Context, and outgoing calls to servers should accept a Context. 

์„œ๋ฒ„๋กœ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์€ ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์„œ๋ฒ„๋กœ ๋‚˜๊ฐ€๋Š” ํ˜ธ์ถœ์€ ์ปจํ…์ŠคํŠธ๋ฅผ ์ˆ˜๋ฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

The chain of function calls between them must propagate the Context, optionally replacing it with a derived Context created using WithCancel, WithDeadline, WithTimeout, or WithValue. 

์ด๋“ค ์‚ฌ์ด์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ฒด์ธ์€ ์ปจํ…์ŠคํŠธ๋ฅผ ์ „ํŒŒํ•ด์•ผ ํ•˜๋ฉฐ ์„ ํƒ์ ์œผ๋กœ WithCancel, WithDadline, WithTimeout ๋˜๋Š” WithValue๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“  ํŒŒ์ƒ ์ปจํ…์ŠคํŠธ๋กœ ๋Œ€์ฒดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

When a Context is canceled, all Contexts derived from it are also canceled.

์ปจํ…์ŠคํŠธ๊ฐ€ ์ทจ์†Œ๋˜๋ฉด ์ปจํ…์ŠคํŠธ์—์„œ ํŒŒ์ƒ๋œ ๋ชจ๋“  ์ปจํ…์ŠคํŠธ๋„ ์ทจ์†Œ๋ฉ๋‹ˆ๋‹ค.

์ฆ‰, ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์š”์ฒญ์ด ๋๋‚˜๋ฉด ์ปจํ…์ŠคํŠธ๋ฅผ ์ข…๋ฃŒ์‹œํ‚ค๊ฒ ๋‹ค๋Š” ๋œป์ด๋‹ค.

์œ„์—์„œ ์–˜๊ธฐํ–ˆ๋˜ ์š”์ฒญ-์‘๋‹ต์˜ ํ๋ฆ„์„ ์ค‘์ ์œผ๋กœ ๋ณด์ž. ๋ชจ๋“  API๋Š” ์š”์ฒญ๊ณผ ์‘๋‹ต์ด ์žˆ๋‹ค. ํ•˜๋‚˜์˜ ์š”์ฒญ ์•ˆ์—์„œ๋„ ๋ถ„๊ธฐํ•ด์„œ ๋งŽ์€ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ๋˜๋ฉด ํ•˜๋‚˜์˜ ์š”์ฒญ-์‘๋‹ต ์‚ฌ์ด์—๋„ ์ˆ˜๋งŽ์€ ์š”์ฒญ2-์‘๋‹ต2, ์š”์ฒญ3-์‘๋‹ต3โ€ฆ ์ด ์ƒ๊ธฐ๊ฒŒ ๋œ๋‹ค.

ํ•˜๋‚˜์˜ ์š”์ฒญ-์‘๋‹ต์ด ํ•˜๋‚˜์˜ lifecycle์„ ๊ฐ€์ง„๋‹ค๊ณ  ํ–ˆ์„๋•Œ root๋กœ ๋ถ€ํ„ฐ context๋ฅผ ํŒŒ์ƒ์‹œ์ผœ๊ฐ€๋ฉด ๋งŽ์€ API์˜ lifecycle์„ ๊ด€๋ฆฌํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค. WithCancel, WithDeadline, WithTimeout, WithValue๋ฅผ ์ด์šฉํ•ด์„œ ํŒŒ์ƒ์‹œํ‚ค๊ณ , ๊ด€๋ฆฌํ•˜๋ฉด ๋  ๊ฒƒ์ด๋‹ค.

cancel() ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ž์‹๋“ค์ด ์ „๋ถ€ ์ทจ์†Œ๋ ๊นŒ?

์‹ค์ œ๋กœ ๋™์ž‘ ์ž์ฒด๋ฅผ ๋ฉˆ์ถ”๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ณ , context๊ฐ€ ์ทจ์†Œ๋œ๋‹ค. ์ž์‹ ํ•จ์ˆ˜๊ฐ€ ๋ฐ”๋กœ ์ข…๋ฃŒ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.

์ปจํ…์ŠคํŠธ ์ž์ฒด๋ฅผ ์ทจ์†Œ ์ฒ˜๋ฆฌํ•˜๊ณ  ์—๋Ÿฌ๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.

์ปจํ…์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์ œ์— ๋Œ€ํ•œ ๊ฒƒ์ด๋‹ค. context.Context ์ž์ฒด๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค๋‹ค. ๋”ฐ๋ผ์„œ ๋ณธ์ธ์ด ๊ตฌํ˜„ํ•œ ์ž์ฒด Context๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์ด๋Ÿฌํ•œ ์‚ฌํ•ญ์— ๋Œ€ํ•ด์„œ ์ง€ํ‚ค๋ฉฐ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ์ด๋‹ค.

go ์–ธ์–ด์˜ ์ฒ ํ•™์ค‘์— ์ด๋Ÿฐ ๋ง์ด ์žˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ๊ณต์œ ๋ฅผ ํ†ตํ•ด ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ํ•˜์ง€ ๋ง๊ณ , ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๋ผ.

์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค, API, ํ•จ์ˆ˜ ๋“ฑ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ปจํ…์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ํ˜•์„ฑํ•˜๋ฉด ์ด๋Ÿฌํ•œ ์ฒ ํ•™์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์„๊ฒƒ์ด๋‹ค.

Last updated