[Golang] Dependency injection with Fx

[Golang] Dependency injection with Fx

소개 및 의존성 주입

섹션 개요: 이 섹션에서는 Uber의 FX 프레임워크를 사용한 의존성 주입에 대해 간단히 소개하고, 첫 번째 질문을 제기합니다.

Uber FX 프레임워크 소개

  • 일상적인 작업에서 어떤 종류의 의존성 프레임워크를 사용하는지 묻는 질문.
  • 프로젝트에서 서비스들이 인터페이스를 준수하며, 확장 가능하고 테스트하기 쉬운 구성 요소를 원하는 이유.
  • FX 프레임워크에 대한 간략한 소개와 Uber 웹사이트 및 GitHub 예제 소개.

FX 프레임워크 개요

섹션 개요: FX 프레임워크의 기본 사항과 예제 코드에 대해 설명하며, 향후 논의할 내용을 안내합니다.

FX Framework Presentation

  • HTTP 서버 예제를 통해 의존성 주입의 핵심 이해.
  • 코드 링크 제공 및 시청자 참여 유도.

Uber FX 프레임워크 상세 설명

섹션 개요: Uber가 만든 의존성 주입 프레임워크인 FX에 대한 자세한 설명과 장점을 다룸.

Uber FX Framework Details

  • Uber가 마이크로서비스 생성 시 의존성 주입을 위해 개발한 경량화된 FX.
  • 전역 변수 제거, 모듈 재사용, 테스트 용이성 등의 약속.
  • 설치 지침과 중요 기능에 대한 안내.

Effects Framework 문서 및 활용 방안

섹션 개요: Effects Framework 문서와 HTTP 예제에 대한 안내, 그리고 간단한 예제 실행 방법 소개.

Effects Framework Documentation and Usage

  • GitHub 시작 가이드와 HTTP 예제 살펴보기.
  • 생애주기, 어노테이션, 값 그룹 등 고급 기능 설명.

FX Framework 구현하기

섹션 개요: FX 프레임워크를 사용하여 간단한 예제 코드 실행 방법과 의존성 주입 구현 방법 안내.

Implementing the FX Framework

  • 폴더 생성 및 go 모듈 인스턴스화.
  • 라이브러리 설치 및 메인 애플리케이션 생성.

Constructor 및 Publisher 변경

이 섹션에서는 Constructor와 Publisher의 변경에 대해 설명합니다.

Constructor 및 ID Shortcut

  • Publisher를 크게 만들어 보기 쉽게 했다.
  • Pointer publisher로 sneaky change를 수행하여 변경함.

Title Type 선언

  • Title이라는 타입을 선언하고 alias로 사용한다.
  • Publisher가 title을 가지도록 함.

Compiler 오류 해결

  • Compiler 오류 발생, title을 pointer로 변환하여 해결.
  • Production system에서는 nil 처리 필요하지만, 간단한 예제에서는 잘 작동함.

의존성 주입과 FX Framework

이 부분에서는 의존성 주입과 FX Framework에 대해 다룹니다.

Main Service 및 Publisher 설정

  • Main service가 publisher와 title을 필요로 함.
  • FX framework으로 application 실행 및 설정하는 방법 소개.

Provider 및 Constructor 등록

  • Main service 실행 시 다른 구성 요소 필요.
  • Provider 등록 후 main service, publisher, title Constructor 설정.

Interface와 Implementation

Interface와 Implementation의 중요성에 대해 다룹니다.

Interface 활용

  • Interface를 활용하여 main service가 abstraction에 의존하도록 함.
  • Pointer 대신 interface 사용으로 코드 간결화.

Annotation 활용

  • FX framework의 annotation 기능 소개.

다양한 제목을 가진 발행자

섹션 개요: 이 섹션에서는 발행자가 하나의 제목이 아닌 여러 제목을 가지고 있는 경우에 대해 설명합니다.

다양한 제목 처리

  • 올바르게 작업하면 그렇게 되어야 합니다.
  • 가변 함수를 사용하여 여러 제목 슬라이스를 가져오는 예제 소개.
  • 프레임워크가 슬라이스 형태의 제목을 기대하지만 단일 제목을 주입할 때 발생하는 문제 설명.
  • FX 프레임워크의 매개 변수 태그 및 결과 태그 소개.
  • 발행자와 공급자 간의 매개 변수 및 결과 태그 교환 방식 설명.

복잡성 관리와 리팩터링

섹션 개요: 본 섹션에서는 복잡성 관리와 코드 리팩터링에 대해 논의합니다.

코드 리팩터링과 복잡성 관리

  • 코드 구조가 복잡해지면서 들여쓰기와 유지보수 어려움 언급.
  • 인젝션 작업 후, 리팩터링으로 코드 정리 및 효율적인 구조화 진행.
  • 일반적인 주석 공급자 생성 및 활용 방법 소개.
  • 주석 공급자를 활용하여 문자열 처리 및 컴포넌트 렌더링 예제 설명.
  • 간결하고 청소한 리팩터링으로 코드 구조 향상과 유지 보수 용이성 강조.

프레임워크 장단점 분석

섹션 개요: 이 섹션에서는 FX 프레임워크의 장단점을 살펴봅니다.

장단점 비교

  • FX 프레임워크의 쉬운 연결성과 기본 사례 처리 능력 강조.
  • 오류 신속한 파악과 안정성에 대한 긍정적 평가.

소프트웨어 엔지니어링 프레임워크의 복잡성

섹션 개요: 이 섹션에서는 의존성 주입 및 프레임워크 작동 방식을 이해해야만 사용자가 원하는 대로 작동하도록 만들 수 있으며, 그렇지 않으면 많은 오류가 발생하여 제대로 실행되지 않을 수 있음을 강조합니다.

소프트웨어 엔지니어링 프레임워크의 복잡성

  • 의존성 주입 및 프레임워크 작동 방식을 이해해야만 사용자가 원하는 대로 작동하도록 만들 수 있음.
  • 잘못된 구현 시 많은 오류 발생으로 실행이 어려울 수 있음.

응용프로그램 라이프사이클 관리와 의존성 주입 프레임워크

섹션 개요: FX는 애플리케이션을 실행하고 애플리케이션 라이프사이클 관리를 하는 것처럼 보여주며, 단순한 의존성 주입 프레임워크가 아님을 설명합니다.

응용프로그램 라이프사이클 관리와 복잡성

  • FX는 애플리케이션 실행 및 라이프사이클 관리를 함.
  • 초보자에게는 복잡할 수 있으며, 많은 내용을 이해하기 어려울 수 있음.

소프트웨어 엔지니어링에서의 단일 책임 원칙과 프레임워크 디자인

섹션 개요: 소프트웨어 엔지니어들은 하나의 일만 하는 것을 선호하지만, HTTP 서버 예시와 같은 다양한 기능을 가진 프레임워크는 초보자에게 친화적이지 않다고 지적합니다.

단일 책임 원칙과 프레임워크 디자인

  • 소프트웨어 엔지니어들은 하나의 일만 하는 것을 선호함.
  • HTTP 서버 예시와 같은 다양한 기능을 가진 프레임워크는 초보자에게 친화적이지 않음.

라이브러리와 애플리케이션 간 차별화된 접근

섹션 개요: 모든 소프트웨어가 실행 가능한 애플리케이션이 아닐 수 있으며, 문서 및 디자인 과정에 대한 이해를 통해 라이브러리 및 프레임워크를 구분할 필요가 있다고 언급합니다.

라이브러리와 애플리케이션 간 차별화된 접근

  • 모든 소프트웨어가 실행 가능한 애플리케션이 아닐 수 있음.
  • 문서 및 디자인 과정에 대한 이해를 통해 라이브러리 및 프레임웍르를 구분할 필요가 있음.

컴팩트하고 안정적인 코드 작성과 모듈화의 중요성

섹션 개요: 모듈화된 코드 작업과 컴팩트한 코드 작업 중 중요점으로 컴팩트하지 못한 코드는 에러 발생 가능성 증가로 인하여 안전하지 않다고 설명합니다.

컴팩트하고 안정적인 코드 작성과 모듈화의 중요성

  • 모듈화된 코드 작업과 컴팩트한 코드 작업 중 요점
Video description

In this video, we explore the FX framework from Uber, built using Golang, and how it can help you manage dependencies in your Golang projects. The FX framework provides a simple and flexible way to manage dependencies using dependency injection. We'll take a look at how the FX framework can help you manage dependencies in a web application and make your code more modular, easier to test, and more maintainable. Twitter: https://twitter.com/Panpit0 https://www.youtube.com/playlist?list=PLfyLecA5DLOcUXmgk3BLDgWQvBoHbea2m https://www.youtube.com/playlist?list=PLfyLecA5DLOc7UAQP4AgsRgkm9D7EBSNN https://www.youtube.com/playlist?list=PLfyLecA5DLOeY7AK4ZJf0ztk4RM-ObhSU https://www.youtube.com/playlist?list=PLfyLecA5DLOdh27bITpI89JZ0zvV3eEAy --- 00:00 introduction 03:20 uber github 06:34 setup 16:28 working with interfaces 19:20 multiple injections 25:30 pros and cons 32:45 conclusion --- Golang version: 1.19 IDE: Goland OS: Windows Accent: French #Uber #Golang #FXFramework #DependencyInjection #CodeModularity #Testability #Maintainability