Advanced dependency management in Go using Fx - Preslav Mihaylov

Advanced dependency management in Go using Fx - Preslav Mihaylov

μ†Œκ°œ 및 λ°œν‘œμž μ†Œκ°œ

μ„Ήμ…˜ κ°œμš”: 이 μ„Ήμ…˜μ—μ„œλŠ” λ°œν‘œμ˜ μ‹œμž‘κ³Ό λ°œν‘œμž Prezlav Mikhailov에 λŒ€ν•œ κ°„λ‹¨ν•œ μ†Œκ°œκ°€ μ§„ν–‰λ©λ‹ˆλ‹€.

λ°œν‘œ μ‹œμž‘ 및 μ†Œκ°œ

  • μ˜€λŠ˜μ€ Go μ–Έμ–΄λ₯Ό μ‚¬μš©ν•œ κ³ κΈ‰ μ˜μ‘΄μ„± 관리에 λŒ€ν•œ Prezlav Mikhailov의 λ°œν‘œλ₯Ό λ“£κ²Œ λ©λ‹ˆλ‹€.
  • Prezlav은 μš°λ²„μ—μ„œ Go와 Java둜 μž‘μ„±λœ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λ₯Ό λ‹€λ£¨λŠ” μ†Œν”„νŠΈμ›¨μ–΄ μ—”μ§€λ‹ˆμ–΄μž…λ‹ˆλ‹€.
  • κ·ΈλŠ” ν”„λ‘œκ·Έλž˜λ°μ„ κ°€λ₯΄μΉ˜λ©°, ν”„λ‘œκ·Έλž˜λ° κΈ°μ΄ˆλΆ€ν„° 데이터 ꡬ쑰, μ›Ή 개발, λΈ”λ‘μ²΄μΈκΉŒμ§€ λ‹€μ–‘ν•œ μ£Όμ œμ— λŒ€ν•΄ κ°•μ˜ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

λ°œν‘œ λ‚΄μš© 및 λͺ©μ 

μ„Ήμ…˜ κ°œμš”: 이 μ„Ήμ…˜μ—μ„œλŠ” λ°œν‘œ λ‚΄μš©κ³Ό λͺ©μ μ— λŒ€ν•΄ μ„€λͺ…λ˜λ©°, 청쀑듀이 κΈ°λŒ€ν•  수 μžˆλŠ” λ‚΄μš©μ„ μ•ˆλ‚΄ν•©λ‹ˆλ‹€.

λ°œν‘œ λ‚΄μš©

  • Prezlav은 Goλ₯Ό μ‚¬μš©ν•˜μ—¬ λ³΅μž‘ν•œ μ˜μ‘΄μ„± κ·Έλž˜ν”„λ₯Ό μ²˜λ¦¬ν•˜λŠ” 방법을 λ³΄μ—¬μ€λ‹ˆλ‹€.
  • λ³΅μž‘ν•œ μ½”λ“œλ² μ΄μŠ€μ™€ λ§Žμ€ μ˜μ‘΄μ„±μ΄ μžˆλŠ” ν™˜κ²½μ—μ„œ μΌν•˜λŠ” 경우 μœ μš©ν•˜λ©°, λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λ₯Ό μœ μ§€λ³΄μˆ˜ν•˜λŠ” ν™˜κ²½μ—μ„œλ„ 도움이 λ©λ‹ˆλ‹€.

Prezlav의 λ°°κ²½ 및 κ²½λ ₯

μ„Ήμ…˜ κ°œμš”: 이 μ„Ήμ…˜μ—μ„œλŠ” Prezlav의 κ²½λ ₯κ³Ό 기술 κ΅μœ‘μžλ‘œμ„œμ˜ 역할에 λŒ€ν•΄ μ‚΄νŽ΄λ΄…λ‹ˆλ‹€.

Prezlav의 κ²½λ ₯

  • Prezlav은 6λ…„κ°„ 기술 νŠΈλ ˆμ΄λ„ˆ 및 μ—°μ„€μžλ‘œ ν™œλ™ν•˜μ˜€μœΌλ©°, ν”„λ‘œκ·Έλž˜λ° κΈ°λ³Έ κ³Όμ •λΆ€ν„° κ³ κΈ‰ κ³Όμ •κΉŒμ§€ λ‹€μ–‘ν•œ κ΅μœ‘μ„ μ§„ν–‰ν•΄μ™”μŠ΅λ‹ˆλ‹€.

λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ ν™˜κ²½μ—μ„œ μ½”λ“œ ꡬ쑰화

μ„Ήμ…˜ κ°œμš”: 이 μ„Ήμ…˜μ—μ„œλŠ” μ½”λ“œλ₯Ό 합리적인 λͺ¨λ“ˆλ‘œ κ΅¬μ‘°ν™”ν•˜μ—¬ μ—¬λŸ¬ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” 방법에 λŒ€ν•΄ μ†Œκ°œν•©λ‹ˆλ‹€.

λ“±μž₯ 기술의 κ°€μž₯ 큰 νŠΉμ§•

  • λ™λ“±ν•œ κΈ°μˆ μ΄μ§€λ§Œ, 이 기술의 κ°€μž₯ 큰 νŠΉμ§• 쀑 ν•˜λ‚˜μΈ μ½”λ“œλ₯Ό 합리적인 λͺ¨λ“ˆλ‘œ κ΅¬μ‘°ν™”ν•˜λŠ” 방법을 보여쀄 κ²ƒμž…λ‹ˆλ‹€.
  • 이 ν”„λ ˆμž„μ›Œν¬κ°€ μ œκ³΅ν•˜λŠ” κ°€μž₯ 큰 ν˜œνƒμ€ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‰½κ²Œ κ³΅μœ ν•  수 μžˆλ‹€λŠ” μ μž…λ‹ˆλ‹€. μ—¬λŸ¬ μ„œλΉ„μŠ€ μ „μ²΄μ—μ„œ 일반적으둜 μ‚¬μš©λ˜λŠ” μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‰½κ²Œ κ³΅μœ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μˆ˜λ™ μ—°κ²° 및 μ˜μ‘΄μ„± 처리

  • μˆ˜λ™ 연결은 μ˜μ‘΄μ„±μ„ 직접 μ£Όμž…ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. μ™œ μ˜μ‘΄μ„±μ„ μ£Όμž…ν•˜κ³ , μ™œ 이λ₯Ό μˆ˜λ™μœΌλ‘œ ν•˜λŠ”μ§€ μ„€λͺ…ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
  • μ»΄ν¬λ„ŒνŠΈκ°€ λ‹€λ₯Έ μ»΄ν¬λ„ŒνŠΈμ— 쒅속될 λ•Œ λ°œμƒν•˜λŠ” λ¬Έμ œμ™€ μ˜μ‘΄μ„± μ£Όμž…μ˜ κ°œλ…μ— λŒ€ν•΄ μ„€λͺ…ν•©λ‹ˆλ‹€.

μ‹€μ œ ν”„λ‘œμ νŠΈ 데λͺ¨

  • μ‹€μ œ 데λͺ¨λ₯Ό 톡해 μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”μ§€ 보여쀄 μ˜ˆμ •μž…λ‹ˆλ‹€. κ°„λ‹¨ν•œ ν”„λ‘œμ νŠΈλ₯Ό λ§Œλ“€μ–΄ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ†Œκ°œν•©λ‹ˆλ‹€.
  • μ›Ή μ•± 및 ν•΄λ‹Ή ꡬ성 μš”μ†Œμ— λŒ€ν•œ κ°„λ‹¨ν•œ μ„€λͺ…κ³Ό 데λͺ¨ ν”„λ‘œμ νŠΈμ˜ ꡬ쑰에 λŒ€ν•΄ μ†Œκ°œν•©λ‹ˆλ‹€.

μ˜μ‘΄μ„± μ£Όμž…μ˜ μ˜ˆμ‹œ

μ„Ήμ…˜ κ°œμš”: HTTP ν•Έλ“€λŸ¬μ˜ μ˜μ‘΄μ„± μ£Όμž… μ˜ˆμ‹œμ™€ κ·Έ μ€‘μš”μ„±μ— λŒ€ν•΄ λ‹€λ£Έ.

HTTP ν•Έλ“€λŸ¬μ™€ μ˜μ‘΄μ„± 관리

  • HTTP ν•Έλ“€λŸ¬κ°€ μ„œλ³΄X와 λ‘œκ±°λΌλŠ” 두 κ°€μ§€ 쒅속성을 κ°–κ³  μžˆμŒμ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 이것은 μ˜μ‘΄μ„± μ£Όμž…μ˜ ν•œ μ˜ˆμ‹œμ΄λ©°, μ»΄ν¬λ„ŒνŠΈκ°€ ν•¨μˆ˜ λ‚΄μ—μ„œ 직접 μ΄ˆκΈ°ν™”λ˜λŠ” 것이 μ•„λ‹ˆλΌ ν•¨μˆ˜ λ§€κ°œλ³€μˆ˜λ‘œ μ œκ³΅λ©λ‹ˆλ‹€.

μž₯단점과 메인 ν•¨μˆ˜ 뢄석

μ„Ήμ…˜ κ°œμš”: μ˜μ‘΄μ„± μ£Όμž…μ˜ μž₯단점과 메인 ν•¨μˆ˜μ—μ„œ λ°œμƒν•˜λŠ” λ¬Έμ œμ— λŒ€ν•΄ 탐ꡬ함.

μž₯단점 및 메인 ν•¨μˆ˜ 뢄석

  • μ΄ˆκΈ°ν™”λœ 쒅속성을 직접 μ „λ‹¬ν•˜λŠ” λŒ€μ•ˆμœΌλ‘œ 쒅속성 μ£Όμž…μ„ μ‚¬μš©ν•¨μœΌλ‘œμ„œ μ»΄ν¬λ„ŒνŠΈ ν…ŒμŠ€νŠΈ μš©μ΄ν•¨.
  • 쒅속성 μ£Όμž…μ€ ν…ŒμŠ€νŠΈ μ‹œ λ°μ΄ν„°λ² μ΄μŠ€ 등을 λͺ¨λ°©(mocking)ν•˜κΈ° μš©μ΄ν•˜λ©°, μ‹€μ œ λ°μ΄ν„°λ² μ΄μŠ€μ™€ 달리 κ°€μ§œ(mock) λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ œκ³΅ν•  수 있음.

메인 ν•¨μˆ˜ 뢄석

μ΄ˆκΈ°ν™” ν•¨μˆ˜μ™€ μ˜μ‘΄μ„±

μ„Ήμ…˜ κ°œμš”: 이 μ„Ήμ…˜μ—μ„œλŠ” 클래슀λ₯Ό μ΄ˆκΈ°ν™”ν•˜κΈ° μœ„ν•΄ 50쀄 μ •λ„μ˜ ν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄μ•Ό ν–ˆλ˜ 상황을 닀루고 μžˆμŠ΅λ‹ˆλ‹€.

클래슀 μ΄ˆκΈ°ν™”μ˜ λ³΅μž‘μ„±

  • 클래슀 μ΄ˆκΈ°ν™”λ₯Ό μœ„ν•΄ κΈ΄ ν•¨μˆ˜κ°€ ν•„μš”ν–ˆλ˜ 이유
  • λ™λ£Œκ°€ μ˜μ‘΄μ„± μ£Όμž…μ„ μž¬μ‚¬μš©ν•˜λΌκ³  μ œμ•ˆν•œ κ²°κ³Ό, ν•¨μˆ˜κ°€ 단 2μ€„λ‘œ 쀄어든 사둀
  • μˆ˜λ™ μ—°κ²°μ˜ ν•œκ³„μ™€ μ˜μ‘΄μ„± μ£Όμž… ν”„λ ˆμž„μ›Œν¬μ˜ 강점

μˆ˜λ™ μ—°κ²° λŒ€μ•ˆκ³Ό ν”„λ ˆμž„μ›Œν¬ ν™œμš©

μ„Ήμ…˜ κ°œμš”: μˆ˜λ™ μ—°κ²°μ˜ ν•œκ³„μ™€ λŒ€μ•ˆμ— λŒ€ν•΄ λ…Όμ˜ν•©λ‹ˆλ‹€.

μˆ˜λ™ μ—°κ²° λŒ€μ•ˆ

  • μ˜μ‘΄μ„± μ£Όμž… λ―Έμ‚¬μš© μ‹œ λ°œμƒν•˜λŠ” 어렀움과 μ•„ν‚€ν…μ²˜μ μΈ 문제
  • ν”„λ ˆμž„μ›Œν¬ ν™œμš©μ„ ν†΅ν•œ 문제 ν•΄κ²° 방법 μ†Œκ°œ 및 FX ν”„λ ˆμž„μ›Œν¬ ν™œμš© 방법 μš”μ•½

μˆ˜λ™ λ°°μ„  vs. μ˜μ‘΄μ„± μ£Όμž… ν”„λ ˆμž„μ›Œν¬

μ„Ήμ…˜ κ°œμš”: μˆ˜λ™ λ°°μ„ κ³Ό μ˜μ‘΄μ„± μ£Όμž… ν”„λ ˆμž„μ›Œν¬μ˜ μž₯단점 λΉ„κ΅ν•©λ‹ˆλ‹€.

μ½”λ“œ μœ μ§€λ³΄μˆ˜μ™€ μƒˆλ‘œμš΄ μ„œλΉ„μŠ€ 생성 κ³Όμ •μ—μ„œ λ°œμƒν•˜λŠ” 어렀움

  • μ½”λ“œ 이해 μš©μ΄μ„±κ³Ό μœ μ§€λ³΄μˆ˜ 어렀움 사둀 μ†Œκ°œ
  • 마이크둜 μ„œλΉ„μŠ€ ν™˜κ²½μ—μ„œ 곡톡 ꡬ성 μš”μ†Œ μ„€μ • 어렀움 μ„€λͺ… 및 해결방법 μ œμ‹œ

μ˜μ‘΄μ„± μ£Όμž… ν”„λ ˆμž„μ›Œν¬ μ†Œκ°œ: FX Framework

μ„Ήμ…˜ κ°œμš”: FX Frameworkλ₯Ό ν†΅ν•œ μ˜μ‘΄μ„± 관리 방법 μ†Œκ°œν•©λ‹ˆλ‹€.

FX Framework κΈ°λ³Έ 원리 및 μž₯점

  • FX Framework μ†Œκ°œ 및 μ‚¬μš© λͺ©μ  μ„€λͺ…
  • Dependency Injection Framework와 Application Framework μ—­ν•  μ„€λͺ… 및 차이점 κ°•μ‘°

Dependency Injection Framework κΈ°λŠ₯ 뢄석

μ„Ήμ…˜ κ°œμš”: Dependency Injection Framework의 핡심 κΈ°λŠ₯에 λŒ€ν•΄ νƒκ΅¬ν•©λ‹ˆλ‹€.

Provider 및 Receiver 관리 κΈ°λŠ₯ μ„€λͺ…

  • Provider와 Receiver μ—­ν•  μ„€λͺ…

μ½”λ“œ λ¦¬νŒ©ν† λ§κ³Ό μ˜μ‘΄μ„± μ£Όμž… ν”„λ ˆμž„μ›Œν¬

μ„Ήμ…˜ κ°œμš”: 이 μ„Ήμ…˜μ—μ„œλŠ” μ½”λ“œ λ¦¬νŒ©ν† λ§ 및 μ˜μ‘΄μ„± μ£Όμž… ν”„λ ˆμž„μ›Œν¬μ— λŒ€ν•΄ μ„€λͺ…ν•©λ‹ˆλ‹€.

μ½”λ“œ λ¦¬νŒ©ν† λ§

  • provide ν•¨μˆ˜: provide config, provide logger, new servemux와 같은 제곡자 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ ꡬ쑰체의 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜κ³  μ „λ‹¬ν•©λ‹ˆλ‹€.
  • http handler.new ν•¨μˆ˜: μˆ˜μ‹ μžλ‘œ μž‘μš©ν•˜λ©°, μ„œλ²„ λͺ¨λ“œμ™€ λ‘œκ±°κ°€ ν•„μš”ν•¨μ„ μ„ μ–Έν•˜μ§€λ§Œ 직접 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” 뢀뢄이 μ—†μŒ.
  • μ˜μ‘΄μ„± 관리: ν”„λ ˆμž„μ›Œν¬κ°€ 제곡자λ₯Ό μ°Ύμ•„ ꡬ성 μš”μ†Œ λ²ˆλ“€λ‘œ λ¬Άμ–΄ ν•¨μˆ˜μ— μ „λ‹¬ν•˜μ—¬ μ˜μ‘΄μ„±μ„ μ²˜λ¦¬ν•¨.

μ˜μ‘΄μ„± μ£Όμž… ν”„λ ˆμž„μ›Œν¬

  • μž₯점: μ˜μ‘΄μ„±μ΄ μ •κ΅ν•˜κ²Œ κ΄€λ¦¬λ˜μ–΄ μž‘μ—…λŸ‰μ΄ 쀄어듦. μž‘μ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλŠ” κ³Όλ„ν•œ κΈ°λŠ₯일 수 μžˆμœΌλ‚˜ λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈμ—μ„œ μœ μš©ν•¨.
  • μ‚¬μš© 사둀: λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈ λ˜λŠ” λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ—μ„œ μ»΄ν¬λ„ŒνŠΈ 곡유 μ‹œ μœ μš©ν•¨.

Effects 및 λͺ¨λ“ˆν™”

μ„Ήμ…˜ κ°œμš”: Effects의 κΈ°λŠ₯κ³Ό λͺ¨λ“ˆν™”에 λŒ€ν•œ μ„€λͺ…μž…λ‹ˆλ‹€.

Effects ν™œμš©

  • ꡬ쑰체 μΈμŠ€ν„΄μŠ€ 제곡 및 전달: 제곡자 ν•¨μˆ˜κ°€ ꡬ쑰체의 μΈμŠ€ν„΄μŠ€λ₯Ό λ‹€λ₯Έ ν•¨μˆ˜μ— μ „λ‹¬ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ •μƒμ μœΌλ‘œ μž‘λ™ν•˜λ„λ‘ 함.
  • 비ꡐ: Java의 Juice ν”„λ ˆμž„μ›Œν¬μ™€ μœ μ‚¬ν•˜λ©°, Providers 및 Receivers κ°œλ…μ„ μ‚¬μš©ν•˜μ—¬ 효율적인 μ½”λ“œ 관리 κ°€λŠ₯.

μž₯단점

  • μž₯점: μ»΄ν¬λ„ŒνŠΈ 연결이 μžλ™μœΌλ‘œ μ²˜λ¦¬λ˜μ–΄ 개발 μ‹œκ°„ 단좕 및 μ€‘μš” 업무에 집쀑 κ°€λŠ₯.

λ ˆμ΄μ–΄ 및 FX λͺ¨λ“ˆ

μ„Ήμ…˜ κ°œμš”: 이 μ„Ήμ…˜μ—μ„œλŠ” FX λͺ¨λ“ˆμ΄ 무엇인지, 그리고 마이크둜 μ„œλΉ„μŠ€ ν™˜κ²½μ—μ„œμ˜ 이점에 λŒ€ν•΄ μ„€λͺ…ν•©λ‹ˆλ‹€.

FX λͺ¨λ“ˆμ˜ κ°œλ…

  • FX λͺ¨λ“ˆμ€ μ œκ³΅μžμ™€ μˆ˜μ‹ μžμ˜ λ²ˆλ“€λ‘œ κ΅¬μ„±λœ κ²ƒμœΌλ‘œ, λΌμ΄λΈŒλŸ¬λ¦¬μ— νŒ¨ν‚€μ§•ν•˜μ—¬ μž¬μ‚¬μš©ν•  수 μžˆλŠ” κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

마이크둜 μ„œλΉ„μŠ€ 인프라 문제

  • μ—¬λŸ¬ 마이크둜 μ„œλΉ„μŠ€λ₯Ό κ°€μ§€λ©΄ 인프라 μΈ‘λ©΄μ—μ„œ λ§Žμ€ μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•˜λ©°, μ½”λ“œλ² μ΄μŠ€ 일뢀λ₯Ό κ³΅μœ ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ½”λ“œλ² μ΄μŠ€ 관리 어렀움

  • μ—¬λŸ¬ 마이크둜 μ„œλΉ„μŠ€ 간에 μ½”λ“œλ² μ΄μŠ€λ₯Ό κ³΅μœ ν•΄μ•Ό ν•˜λ©°, 볡사 λΆ™μ—¬λ„£κΈ° 방식은 λΉ„νš¨μœ¨μ μž…λ‹ˆλ‹€.

FX λͺ¨λ“ˆ ꡬ쑰화

μ„Ήμ…˜ κ°œμš”: FX λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜μ—¬ 기반 인프라λ₯Ό 효율적으둜 λ‹€λ£¨λŠ” 방법을 μ†Œκ°œν•©λ‹ˆλ‹€.

기반 인프라 처리

  • FX λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜λ©΄ ν•„μš”ν•œ 인프라가 단일 λͺ¨λ“ˆμ— μΊ‘μŠν™”λ˜μ–΄ μ–΄λ–€ μ„œλΉ„μŠ€λ“  μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

FX λͺ¨λ“ˆμ˜ μž₯점

νšŒμ‚¬ 효과 λͺ¨λ“ˆ μ†Œκ°œ

μ„Ήμ…˜ κ°œμš”: 이 μ„Ήμ…˜μ—μ„œλŠ” νšŒμ‚¬ FXλ₯Ό μ‚¬μš©ν•˜μ—¬ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λ₯Ό λ§Œλ“€ λ•Œ μ œκ³΅λ˜λŠ” κΈ°λŠ₯에 λŒ€ν•΄ μ„€λͺ…ν•©λ‹ˆλ‹€.

νšŒμ‚¬ FX의 μž₯점

  • νšŒμ‚¬ FX νŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•˜λ©΄ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λ₯Ό 생성할 λ•Œ 도움 체크, 둜그인 톡합, λ©”νŠΈλ¦­ 톡합 등을 ν¬ν•¨ν•œ μ—¬λŸ¬ κΈ°λŠ₯을 μ‰½κ²Œ ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ„€μ • 파일과 같은 λ‹€μ–‘ν•œ κΈ°λŠ₯듀이 이미 μ œκ³΅λ˜λ―€λ‘œ 이λ₯Ό μ‚¬μš©ν•¨μœΌλ‘œμ¨ 개발 μ‹œκ°„μ„ μ ˆμ•½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ ν™•μž₯μ„± 관리

μ„Ήμ…˜ κ°œμš”: 이 μ„Ήμ…˜μ—μ„œλŠ” FX λͺ¨λ“ˆμ΄ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ˜ ν™•μž₯성을 μ–΄λ–»κ²Œ μ§€μ›ν•˜λŠ”μ§€μ— λŒ€ν•΄ λ…Όμ˜ν•©λ‹ˆλ‹€.

FX λͺ¨λ“ˆμ˜ μ—­ν• 

  • FX λͺ¨λ“ˆμ€ μ„œλΉ„μŠ€ μ†Œμœ μžκ°€ 라이브러리λ₯Ό μ—…λ°μ΄νŠΈν•˜κΈ°λ§Œ ν•˜λ©΄ λͺ¨λ“  μ„œλΉ„μŠ€κ°€ μ¦‰μ‹œ ν˜Έν™˜λ˜λ„λ‘ ν•˜λŠ” λ“± λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ˜ ν™•μž₯성을 μ§€μ›ν•©λ‹ˆλ‹€.
  • 단일 νŒ€μ΄ 인프라λ₯Ό κ΄€λ¦¬ν•˜κ³  각각의 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ νŒ€μ€ μžμ‹ λ“€μ˜ λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™μ— 집쀑할 수 μžˆλ„λ‘ ν•¨μœΌλ‘œμ¨ FXκ°€ μ˜μ‘΄μ„±μ„ μ‰½κ²Œ κ΄€λ¦¬ν•˜λŠ” 방법에 λŒ€ν•΄ μ„€λͺ…λ©λ‹ˆλ‹€.

FX와 라이브러리 κ°„ 차이점

μ„Ήμ…˜ κ°œμš”: 이 μ„Ήμ…˜μ—μ„œλŠ” FX와 일반 라이브러리 μ‚¬μ΄μ˜ 차이점과 κ·Έ μ€‘μš”μ„±μ— λŒ€ν•΄ λ‹€λ£Έλ‹ˆλ‹€.

라이브러리 vs. FX

  • 일반 λΌμ΄λΈŒλŸ¬λ¦¬μ™€ 달리, FXλŠ” μ‘μš© ν”„λ ˆμž„μ›Œν¬λ‘œ μž‘λ™ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ œμ–΄ 흐름을 보닀 μœ μ—°ν•˜κ²Œ μ²˜λ¦¬ν•¨μœΌλ‘œμ¨ μž¬μ‚¬μš© κ°€λŠ₯성을 κ·ΉλŒ€ν™”ν•©λ‹ˆλ‹€.
  • Effects λͺ¨λ“ˆμ€ μ„œλ²„ μ‹œμž‘κ³Ό 같은 μž‘μ—…λ“€μ„ λͺ…μ‹œμ μœΌλ‘œ ν˜ΈμΆœν•˜μ§€ μ•Šμ•„λ„ 되며, λ‚΄λΆ€μ μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ μ„œλ²„κ°€ μ‹œμž‘λ˜μ§€λ§Œ μ‚¬μš©μžλŠ” κ·Έ 과정을 λ³Ό ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

μˆ˜λ™ λ°°μ„  및 μ˜μ‘΄μ„± μ£Όμž… ν”„λ ˆμž„μ›Œν¬ 선택 κ°€μ΄λ“œ

μ„Ήμ…˜ κ°œμš”: 이 μ„Ήμ…˜μ—μ„œλŠ” μˆ˜λ™ λ°°μ„  및 μ˜μ‘΄μ„± μ£Όμž… ν”„λ ˆμž„μ›Œν¬ 선택 μ‹œ κ³ λ €ν•΄μ•Ό ν•  사항에 λŒ€ν•΄ μ„€λͺ…ν•©λ‹ˆλ‹€.

ν”„λ ˆμž„μ›Œν¬ 선택 κ°€μ΄λ“œ

  • μž‘μ€~μ€‘ν˜• μ•±μ—λŠ” μˆ˜λ™ λ°°μ„  방식 μΆ©λΆ„ν•˜μ§€λ§Œ, λ§Žμ€ λ§ˆγ‚€ν¬λ‘œμ„œλΉ„μŠ€λ₯Ό κ΄€λ¦¬ν•˜κ±°λ‚˜ 큰 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄λΌλ©΄ μ˜μ‘΄μ„± μ£Όμž… ν”„λ ˆμž„μ›Œν¬μΈ FXκ°€ μœ μš©ν•©λ‹ˆλ‹€.

λ°œν‘œ ν›„ μΆ”κ°€ 의견

μ„Ήμ…˜ κ°œμš”: λ°œν‘œμžκ°€ 강연에 λŒ€ν•œ κ°μ‚¬μ˜ ν‘œμ‹œλ₯Ό μ „ν•˜κ³ , μΆ”κ°€μ μœΌλ‘œ μ–ΈκΈ‰ν•˜κ³  싢은 λ‚΄μš©μ΄ μžˆλŠ”μ§€ λ¬Όμ–΄λ³΄λŠ” λΆ€λΆ„μž…λ‹ˆλ‹€.

μΆ”κ°€ 의견

  • "μ§€κΈˆκΉŒμ§€ κ°•μ—°ν•΄ μ£Όμ…”μ„œ 정말 κ°μ‚¬ν•©λ‹ˆλ‹€. μ–΄λ–€ μ§ˆλ¬Έλ“€μ΄ λ“€μ–΄μ˜€κΈ° 전에 μΆ”κ°€ν•˜κ³  싢은 λ‚΄μš©μ΄ μžˆμœΌμ‹ κ°€μš”?"
  • "강연을 즐겁게 보내셨기λ₯Ό 바라며, 지식은 ν™œμš©λ  λ•Œ μœ μš©ν•˜κ³  영ν–₯λ ₯을 ν–‰μ‚¬ν•œλ‹€κ³  λ―ΏμŠ΅λ‹ˆλ‹€. μ œκ°€ μ²˜μŒλΆ€ν„° λ§ν–ˆλ“―μ΄, 지식은 μ‹€μ œλ‘œ μ‚¬μš©λ˜κ±°λ‚˜ μ‹€μ²œλ  λ•Œ 영ν–₯λ ₯을 ν–‰μ‚¬ν•©λ‹ˆλ‹€."

질문 μ„Ήμ…˜ μ‹œμž‘ 및 첫 번째 질문

μ„Ήμ…˜ κ°œμš”: 질문 μ„Ήμ…˜μ˜ μ‹œμž‘κ³Ό 첫 번째 μ§ˆλ¬Έμ— λŒ€ν•œ λ‹΅λ³€μž…λ‹ˆλ‹€.

첫 번째 질문 - μ˜μ‘΄μ„± μ£Όμž… ν”„λ ˆμž„μ›Œν¬μ˜ μ˜€λ²„ν—€λ“œ 영ν–₯

  • "μ˜μ‘΄μ„± μ£Όμž… ν”„λ ˆμž„μ›Œν¬μ˜ 일반적인 μ„±λŠ₯에 λ―ΈμΉ˜λŠ” μ˜€λ²„ν—€λ“œ 영ν–₯은 λ¬΄μ—‡μΈκ°€μš”?"
  • "μ˜μ‘΄μ„± μ£Όμž… ν”„λ ˆμž„μ›Œν¬μ˜ ꡬ성 μš”μ†Œμ— λŒ€ν•œ 영ν–₯은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λΆ€νŒ… μ‹œκ°„μ„ μ•½κ°„ λŠ˜λ¦°λ‹€λŠ” μ μž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 제 κ²½ν—˜μƒ 그것은 μ‹€μ œλ‘œ μ„±λŠ₯에 큰 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€."

μ„œλΉ„μŠ€λ³„ 쒅속성 μΆ”κ°€ 방법

μ„Ήμ…˜ κ°œμš”: μ„œλΉ„μŠ€λ³„ 쒅속성을 κ³΅μœ ν•˜λŠ” 방법과 λͺ¨λ“ˆν™”λœ ꡬ쑰에 λŒ€ν•œ μ„€λͺ…μž…λ‹ˆλ‹€.

μ„œλΉ„μŠ€λ³„ 쒅속성 μΆ”κ°€ 방법

  • "νŠΉμ • μ„œλΉ„μŠ€λ³„ 쒅속성을 κ³΅μœ ν•˜λŠ” 방법이 μžˆλ‚˜μš”?"
  • "일반적인 μ‹œλ‚˜λ¦¬μ˜€μ—μ„œ μ—¬λŸ¬λΆ„μ˜ μ„œλΉ„μŠ€λ₯Ό 포함할 수 μžˆλ„λ‘ λ‹€λ₯Έ λͺ¨λ“  λͺ¨λ“ˆλ“€μ„ μ‰Όν‘œλ‘œ κ΅¬λΆ„ν•˜μ—¬ 포함할 수 μžˆμŠ΅λ‹ˆλ‹€."

디버깅 및 좔적 λ‚œμ΄λ„ 증가 κ΄€λ ¨ 질문

μ„Ήμ…˜ κ°œμš”: FX(FX Framework?)μ—μ„œ 디버깅 및 좔적 λ‚œμ΄λ„ 증가와 κ΄€λ ¨λœ 이둠적인 μ„€λͺ…κ³Ό ν•΄κ²° λ°©μ•ˆ μ†Œκ°œμž…λ‹ˆλ‹€.

디버깅 및 좔적 λ‚œμ΄λ„ 증가 κ΄€λ ¨ 질문

라이브러리 μ†Œμœ μžκ°€ 관리할 것이라고 κΈ°λŒ€ν•©λ‹ˆλ‹€

μ„Ήμ…˜ κ°œμš”: λ‚΄λΆ€ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ 있으면 라이브러리 μ†Œμœ μžκ°€ 그것을 관리할 κ²ƒμœΌλ‘œ μ˜ˆμƒλ©λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ œκ³΅μžμ™€ μˆ˜μ‹ μžλ₯Ό μ‚¬μš©ν•˜λ©΄ 앱을 μΆ”μ ν•˜κ³  λ””λ²„κΉ…ν•˜κΈ° μ–΄λ ΅κ²Œ λ§Œλ“ λ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€.

λ‚΄λΆ€ 라이브러리 및 μ•± μΆ”μ μ˜ 어렀움

  • μ œκ³΅μžμ™€ μˆ˜μ‹ μžλ₯Ό μ‚¬μš©ν•˜λ©΄ μƒˆλ‘œμš΄ ν•¨μˆ˜κ°€ 직접 ꡬ성 μš”μ†Œμ—μ„œ μ‚¬μš©λ˜λŠ” λŒ€μ‹  fx ν”„λ ˆμž„μ›Œν¬μ— μ œκ³΅λ©λ‹ˆλ‹€.
  • fxλŠ” 쒅속성 체인을 λ”°λΌκ°ˆ 수 없도둝 μˆ¨κΈ°λ―€λ‘œ μΆ”μ ν•˜κΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€.
  • μ½”λ“œ 생성과 reflection을 톡해 μž‘λ™ν•˜λŠ” f 및 μ˜μ‘΄μ„± μ£Όμž… ν”„λ ˆμž„μ›Œν¬μ™€ 같은 λŒ€μ•ˆλ“€μ΄ μžˆμŠ΅λ‹ˆλ‹€.

νŠΉμ • 쒅속성 μΆ”κ°€ 방법

μ„Ήμ…˜ κ°œμš”: 곡톡 ν•Έλ“€λŸ¬λ₯Ό λ§Œλ“€μ–΄ 각 ν•Έλ“€λŸ¬λ§ˆλ‹€ κ³ μœ ν•œ μš”μ†Œλ₯Ό μΆ”κ°€ν•˜λŠ” 방법에 λŒ€ν•œ μ§ˆλ¬Έμ— λŒ€ν•œ λ‹΅λ³€μž…λ‹ˆλ‹€.

λͺ¨λ“ˆ μž…λ ₯ λ³€κ²½ 및 둜거 μΈμŠ€ν„΄μŠ€ 생성

  • μ„œλΉ„μŠ€λ³„λ‘œ λͺ¨λ“ˆμ˜ μž…λ ₯을 λ³€κ²½ν•˜μ—¬ λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ μž‘λ™ν•˜λ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • λͺ¨λ“ˆμ— ν•„μš”ν•œ 쒅속성을 μ œκ³΅ν•˜μ§€ μ•ŠμœΌλ©΄ fxμ—μ„œ 였λ₯˜κ°€ λ°œμƒν•  수 있으며, 이 경우 μ„œλΉ„μŠ€μ—μ„œ 둜거 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ—¬ μ œκ³΅ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • 이 μ ‘κ·Ό 방식은 κ°€λŠ₯ν•˜μ§€λ§Œ μƒˆλ‘œμš΄ ν”„λ‘œμ νŠΈ λ©€λ²„λŠ” ν•΄λ‹Ή 둜거의 μ‚¬μš© μœ„μΉ˜λ₯Ό μ°ΎκΈ° μ–΄λ €μšΈ 수 μžˆμŠ΅λ‹ˆλ‹€.

질문 및 마무리

μ„Ήμ…˜ κ°œμš”: λ§ˆμ§€λ§‰ 질문과 행사 참여에 λŒ€ν•œ κ°μ‚¬μ˜ ν‘œν˜„μž…λ‹ˆλ‹€.

λ§ˆλ¬΄λ¦¬μ™€ 감사 인사

  • 행사 참여에 λŒ€ν•œ κ²½ν—˜κ³Ό λ‹€μŒ 번 참석을 κΈ°λŒ€ν•¨μ„ λ‚˜νƒ€λ‚΄λ©°, μ΄νƒˆλ¦¬μ•„ μŒμ‹μ„ ν•¨κ»˜ λ¨ΉκΈΈ λ°”λžλ‹ˆλ‹€.
  • λ‹€μŒ λ‚ μ˜ 일정과 go labμ—μ„œμ˜ ν™œλ™ μ•ˆλ‚΄λ₯Ό μ œκ³΅ν•˜λ©°, Q&A μ„Έμ…˜μ— μ°Έμ—¬ν•  것을 ꢌμž₯ν•©λ‹ˆλ‹€.
Video description

πŸ”” FOLLOW GOLAB CHANNEL πŸ”” In this talk, I will show you how to handle complex dependency graphs in Go using the Fx framework. It can make your life easier in many regards, but its greatest value is in the way it enables you to modularize & share your infrastructure code across multiple microservices. The talk focuses on introducing the concept of dependency injection & its implementation in Go using the [Fx framework](https://github.com/uber-go/fx). Apart from providing a dependency injection mechanism, this framework enables you to separate your application into distinct, independent modules, which can be shared across multiple codebases. This is especially valuable in a microservice environment, where every service has a lot of "boilerplate" infrastructure code which has to be present on any service regardless of its business logic. In a typical microservice architecture, every service needs some kind of a healthcheck, an ELK/monitoring client, tracing clients & various other integrations specific to your server environment. By extracting this common piece of software in a module, which can be "plugged in" and reused across services using Fx, one can greatly reduce development time & maintenance cost as you'd need to deal with "wiring infra" only once & reuse that across your codebase. This channel is dedicated to the videos of the GoLab conference. πŸ’› Follow us on TWITTER: https://twitter.com/golab_conf πŸ’œ Follow us on FACEBOOK: https://www.facebook.com/golabconf GoLab is the first Italian international conference on the Go programming language, organized by Develer. Develer is not just an Italian company projecting and releasing hardware and software solutions for the industrial environment, but is also an ensemble of people sharing their great passion for new technologies and how they can be applied to your everyday life. πŸ”Έ Follow DEVELER on INSTAGRAM: https://www.instagram.com/wearedeveler/ πŸ”Ή Follow DEVELER on FACEBOOK: https://www.facebook.com/we.are.develer/ πŸ”Έ Follow DEVELER on TWITTER: https://twitter.com/develer πŸ”Ή Follow DEVELER on LINKEDIN: https://www.linkedin.com/company/114426/ πŸ”Έ Follow DEVELER on TELEGRAM: https://t.me/wearedeveler πŸ”Ή Follow DEVELER on TIK TOK: https://www.tiktok.com/@wearedeveler