Skip to content

Latest commit

Β 

History

History
102 lines (91 loc) Β· 5.06 KB

File metadata and controls

102 lines (91 loc) Β· 5.06 KB

Context

μ»¨ν…μŠ€νŠΈ | δΈŠδΈ‹ζ–‡ | γ‚³γƒ³γƒ†γ‚­γ‚Ήγƒˆ |

Table of Contents

About

Go μ„œλ²„μ—μ„œ 각 μš”μ²­μ€ goroutine 을 톡해 λ³‘λ ¬μ μœΌλ‘œ μ²˜λ¦¬λœλ‹€. 고루틴은 λ™μ‹œμ— μ‹€ν–‰λ˜λ©° μ„œλ‘œ κ°„μ„­ν•˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€. Context λŠ” μ΄λŸ¬ν•œ κ³ λ£¨ν‹΄κ°„μ˜ μ•ˆμ „ν•œ 데이터 및 정보 곡유λ₯Ό μ§€μ›ν•œλ‹€.

  • λͺ©μ : Google 은 Context Package λ₯Ό νŠΉμ •ν•œ λͺ©μ μ„ κ°€μ§€κ³  κ°œλ°œν•˜μ˜€λŠ”λ°, μ΄λŠ” λ³΅μž‘ν•œ μ„œλ²„ ν™˜κ²½μ—μ„œ μ•ˆμ „ν•˜κ³  효율적인 λ™μ‹œμ„± 처리λ₯Ό μ§€μ›ν•˜κΈ° μœ„ν•΄μ„œμ˜€λ‹€.

  • λͺ…μΉ­: Context λΌλŠ” λͺ…칭은 ν•΄λ‹Ή νŒ¨ν‚€μ§€κ°€ 주둜 μš”μ²­κ³Ό μž‘μ—…μ˜ λ¬Έλ§₯(context)을 κ΄€λ¦¬ν•˜κ³  μ „λ‹¬ν•˜κΈ° μœ„ν•΄ λͺ…λͺ…λœ κ²ƒμœΌλ‘œ, μ•ˆμ „ν•˜κ³  효율적인 λ™μ‹œμ„± 처리λ₯Ό μœ„ν•œ 핡심 ꡬ성 μš”μ†Œμž„μ„ λͺ…ν™•ν•˜κ²Œ λ‚˜νƒ€λ‚΄κ³  μžˆλ‹€.

Key Roles

ContextλŠ” μš”μ²­μ„ μ²˜λ¦¬μ‹œ λ³΄μ•ˆ 자격 증λͺ…, 좔적 정보, λ°λ“œλΌμΈ, μ·¨μ†Œ μ‹ ν˜Έμ™€ 같은 정보λ₯Ό ν•¨κ»˜ μ „λ‹¬ν•œλ‹€. 이λ₯Ό 톡해 Go μ„œλ²„λŠ” μ—¬λŸ¬ μš”μ²­μ„ λ™μ‹œμ— μ²˜λ¦¬ν•˜λ©΄μ„œλ„ μ•ˆμ „ν•˜κ²Œ μš”μ²­ λ²”μœ„μ˜ 정보λ₯Ό κ³΅μœ ν•˜κ³ , 각 고루틴이 μž‘μ—…μ„ μ€‘μ§€ν•˜κ±°λ‚˜ μ‹œκ°„ 초과 λ“±μ˜ 쑰건을 감지할 수 μžˆλ‹€.

  • λ³΄μ•ˆ 자격 증λͺ…, 좔적 정보, λ°λ“œλΌμΈ 및 μ·¨μ†Œ μ‹ ν˜Έλ₯Ό API 및 ν”„λ‘œμ„ΈμŠ€ 경계λ₯Ό νš‘λ‹¨ν•˜μ—¬ 전달.
    • λ³΄μ•ˆ 자격 증λͺ…(security credentials):
      • λ³΄μ•ˆκ³Ό κ΄€λ ¨λœ 정보 (e.g., 인증 토큰 etc)
    • 좔적 정보(tracing information):
      • μ‹œμŠ€ν…œμ—μ„œ μš”μ²­μ΄ μ–΄λ–»κ²Œ μ²˜λ¦¬λ˜λŠ”κ°€μ— λŒ€ν•œ 정보 (e.g., 좔적 ID, λ‘œκΉ… 정보 etc)
    • λ°λ“œλΌμΈ(deadline):
      • νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ”λ° ν—ˆμš©λœ μ‹œκ°„.
    • μ·¨μ†Œ μ‹ ν˜Έ(cancellation signals):
      • μš”μ²­μ΄ μ·¨μ†Œλ˜μ—ˆμŒμ„ λ‚˜νƒ€λ‚΄λŠ” μ‹ ν˜Έ (e.g., μ‚¬μš©μž μš”μ²­ μ·¨μ†Œ, μ‹œκ°„ 초과 etc)
        • μ‚¬μš©μž μš”μ²­ μ·¨μ†Œ: μš”μ²­ν•œ νŽ˜μ΄μ§€μ˜ λ‘œλ”©μ‹œκ°„μ΄ κΈΈμ–΄ μš”μ²­μ„ μ·¨μ†Œν•œ 경우
        • μ‹œκ°„ 초과: νŠΉμ • μž‘μ—…μ΄ μ§€μ •λœ μ‹œκ°„ 내에 μ™„λ£Œλ˜μ§€ λͺ»ν–‡μ„ 경우
        • μ—λŸ¬: μ˜ˆμƒμΉ˜ λͺ»ν•œ μ—λŸ¬κ°€ λ°œμƒν•œ 경우
      • Context κ°€ μ·¨μ†Œλ  경우 νŒŒμƒλœ context 듀도 ν•¨κ»˜ μ·¨μ†Œλœλ‹€.
        • 즉, μ—°κ²°λ˜μ–΄μžˆλŠ” μƒμœ„ μž‘μ—…μ΄ μ·¨μ†Œλ˜λ©΄ ν•˜μœ„ μž‘μ—…λ„ μ•ˆμ „ν•˜κ²Œ μ’…λ£Œλ˜μ–΄ λ¦¬μ†ŒμŠ€κ°€ νšŒμˆ˜λ˜λ„λ‘ ν•œλ‹€.
  • Go ν”„λ‘œκ·Έλž¨μ—μ„œ λ“€μ–΄μ˜€λŠ” RPC 및 HTTP μš”μ²­λΆ€ν„° λ‚˜κ°€λŠ” μš”μ²­κΉŒμ§€ ν•¨μˆ˜ 호좜 체인을 톡해 Contextλ₯Ό 전달.
    • ν•¨μˆ˜ 호좜 체인(function call chain): μš”μ²­μ΄ μ²˜λ¦¬λ˜λŠ” κ³Όμ •
    • μš”μ²­μ— κ΄€λ ¨λœ 정보 및 섀정을 Contextλ₯Ό 톡해 μ „λ‹¬ν•˜κ³  곡유: ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„λ‘œ μš”μ²­ β†’ μ„œλ²„μ—μ„œ λ‹€μ–‘ν•œ 쀑간 단계 및 μ„œλΉ„μŠ€λ₯Ό κ±°μΉ¨
  • λ™μΌν•œ Contextλ₯Ό μ—¬λŸ¬ ν•¨μˆ˜ 호좜 μ‚¬μ΄μ—μ„œ μ•ˆμ „ν•˜κ²Œ κ³΅μœ ν•  수 μžˆλ‹€.
    • ContextλŠ” ν•œ 번 μƒμ„±λ˜λ©΄ λ‚΄λΆ€μ˜ 정보가 λ³€κ²½λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έ.

DO

  • ν•¨μˆ˜μ˜ 첫 번째 λ§€κ°œλ³€μˆ˜λ‘œ Contextλ₯Ό μ‚¬μš© ν•  것.
  • Request와 관련이 μ—†μ–΄ 보이더라도 Contextλ₯Ό μ‚¬μš© ν•  것.

DONT

  • ꡬ쑰체에 Context 멀버 μΆ”κ°€ν•˜κΈ°.
    • λŒ€μ•ˆ: λ©”μ„œλ“œμ— λ§€κ°œλ³€μˆ˜λ‘œ λ„˜κΈ°κΈ°.
    • μ˜ˆμ™Έ: ν‘œμ€€ λΌμ΄λΈŒλŸ¬λ¦¬λ‚˜ μ„œλ“œνŒŒν‹° 라이브러리의 μΈν„°νŽ˜μ΄μŠ€μ™€ μΌμΉ˜ν•΄μ•Ό ν•˜λŠ” λ©”μ„œλ“œμΈ 경우.
  • μ‚¬μš©μž μ •μ˜ Context μœ ν˜• λ§Œλ“€κΈ°.

Key Methods

  • Deadline
    Deadline() (deadline time.Time, ok bool)
    • μž‘μ—…μ„ μ‹œμž‘ν•΄μ•Ό ν•˜λŠ” μ‹œκ°„ (λ°λ“œλΌμΈ) 및 λ°λ“œλΌμΈμ΄ μ„€μ •λ˜μ—ˆλŠ”μ§€ μ—¬λΆ€λ₯Ό λ°˜ν™˜.
    • μž‘μ—…μ΄ μ‹œμž‘ν•΄μ•Ό ν•˜λŠ”μ§€ μ—¬λΆ€λ₯Ό κ²°μ •.
    • μž‘μ—…μ— μ‹œκ°„ μ œν•œμ„ λΆ€μ—¬.
  • Done
    Done() <-chan struct{}
    • μž‘μ—…μ— λŒ€ν•œ μ·¨μ†Œ μ‹ ν˜Έ 역할을 ν•˜λŠ” 채널을 λ°˜ν™˜.
      • 채널이 λ‹«νžˆλ©΄ ν•΄λ‹Ή ν•¨μˆ˜λŠ” μž‘μ—…μ„ μ€‘λ‹¨ν•˜κ³  λ°˜ν™˜.
  • Err
    Err() error
    • Contextκ°€ μ·¨μ†Œλœ 이유λ₯Ό λ‚˜νƒ€λƒ„.
    • nil:
      • Done 채널이 아직 λ‹«νžˆμ§€ μ•Šμ€ 경우.
  • Value
    Value(key any) any
    • Context와 κ΄€λ ¨λœ 값을 κ°€μ Έμ˜¬ λ•Œ μ‚¬μš©. 주둜 μ‚¬μš©μž μ§€μ • 데이터λ₯Ό Context에 μ €μž₯ν•˜κ³  μΆ”μΆœν•˜λŠ”λ° μ‚¬μš©.
    • nil:
      • νŠΉμ • 킀에 λŒ€ν•œ 값이 μ—†λŠ” 경우
  • WithValue
    • Context에 κ΄€λ ¨λœ 값을 μΆ”κ°€ν•  λ•Œ μ‚¬μš©.
  • WithTimeout
    • ν•΄λ‹Ή Context 에 μ‹œκ°„ μ œν•œμ„ μ„€μ •ν•˜κ³ μž ν•  λ•Œ μ‚¬μš©.
  • Background
    Background() Context
    • λͺ¨λ“  Context 트리의 루트.
      • λ‹€λ₯Έ λͺ¨λ“  context λŠ” 이λ₯Ό 기반으둜 νŒŒμƒλœλ‹€.
    • μ·¨μ†Œλ˜μ§€ μ•ŠμŒ.
    • κΈ°ν•œ 및 값이 μ—†μŒ.
      • λ¬΄ν•œ κΈ°ν•œμ„ μ§€λ‹ˆκ³  있음.
    • μ „μ—­μ μœΌλ‘œ μ‚¬μš©.
      • 주둜 main ν•¨μˆ˜λ‚˜ μ΄ˆκΈ°ν™” μž‘μ—…μ— μ‚¬μš©.
      • μ•±μ˜ μ΅œμƒμœ„ λ ˆλ²¨μ—μ„œ μ‹œμž‘ν•  λ•Œ 주둜 ν™œμš©λ¨.

Cited Information: