2025년 6월 19일 작성

Framework - IoC를 적용한 일관된 개발 환경

framework는 software 개발 시 공통으로 사용되는 기능들을 미리 구현해 놓은 기반 구조로, 개발자가 특정 규칙과 pattern을 따라 code를 작성하도록 합니다.

Framework

  • framework는 software 개발 시 공통으로 사용되는 기능들을 미리 구현해 놓은 기반 구조입니다.
  • framework는 개발자가 특정 규칙과 패턴을 따라 code를 작성하도록 하여, 일관성 있고 효율적인 개발을 가능하게 합니다.
  • library와 달리 framework는 제어의 역전(Inversion of Control, IoC) 원칙을 통해 개발자의 code를 제어합니다.

Framework의 핵심 특징

  • framework는 application의 전체적인 구조와 흐름을 미리 정의해 놓습니다.
  • 개발자는 framework가 제공하는 template과 규칙에 따라 code를 작성합니다.
  • framework는 재사용 가능한 component들을 제공하여 개발 시간을 단축시킵니다.
  • 일관된 code 구조를 강제하여 team 개발 시 code의 가독성과 유지 보수성을 향상시킵니다.

Framework의 동작 방식

  • framework는 미리 정의된 workflow를 가지고 있으며, 개발자의 code는 이 workflow 내에서 실행됩니다.
  • 개발자는 framework가 callback으로 호출할 method나 function을 구현합니다.
  • framework가 언제, 어떻게 개발자의 code를 실행할지 결정합니다.
  • 이러한 방식을 통해 framework는 application의 생명 주기 전체를 관리합니다.

Framework 사용의 장점

  • 개발 속도 향상을 통해 반복적인 작업을 줄일 수 있습니다.
  • 표준화된 구조로 인해 code의 일관성이 보장됩니다.
  • 검증된 pattern을 사용하여 안정성이 높습니다.
  • community 지원과 풍부한 documentation을 통해 학습 cost를 줄일 수 있습니다.

Framework 사용의 단점

  • framework의 학습 cost가 높을 수 있습니다.
  • framework에 종속성이 생겨 migration이 어려울 수 있습니다.
  • 유연성 제한으로 인해 특수한 요구 사항 구현이 어려울 수 있습니다.
  • framework의 성능 overhead가 발생할 수 있습니다.

Framework와 Library의 차이점

  • framework와 library의 가장 큰 차이점은 제어권의 위치입니다.
  • framework는 제어의 역전(IoC)을 통해 개발자의 code를 제어하지만, library는 개발자가 직접 호출하여 사용합니다.
  • 이러한 차이로 인해 framework와 library는 서로 다른 방식으로 사용됩니다.
구분 Framework Library
제어권 framework가 개발자 code 호출 개발자가 library function 호출
사용 방식 framework 규칙에 따라 code 작성 필요할 때 function 호출
구조 전체 application 구조 제공 특정 기능만 제공
자유도 제한적, framework 규칙 준수 필요 높음, 자유로운 사용 가능
학습 cost 높음, framework 전체 이해 필요 낮음, 필요한 부분만 학습
  • React framework : component lifecycle을 React가 관리하며, 개발자는 render method를 구현합니다.
    • React가 언제 render할지 결정하고, 개발자의 render method를 호출합니다.
    • 개발자는 React의 규칙과 pattern을 따라 component를 작성해야 합니다.
  • jQuery library : 개발자가 필요할 때 jQuery function을 직접 호출합니다.
    • $('#button').click()과 같이 개발자가 원하는 시점에 function을 사용합니다.
    • jQuery는 단순히 utility function만 제공하며, application 구조는 관여하지 않습니다.

제어의 역전(Inversion of Control, IoC)

  • 전통적인 programming에서는 개발자가 작성한 code가 library의 function을 호출합니다.
  • IoC pattern에서는 framework가 개발자의 code를 호출하여 제어권이 역전됩니다.
  • framework는 언제 무엇을 호출할지 결정하고, 개발자는 호출될 code를 제공합니다.
  • 이를 통해 framework는 application의 전체적인 흐름을 통제할 수 있습니다.

의존성 주입(Dependency Injection, DI)

  • 의존성 주입은 IoC를 구현하는 대표적인 방법 중 하나입니다.
  • framework가 필요한 객체나 의존성을 개발자의 code에 주입해 줍니다.
  • 개발자는 의존성을 직접 생성하지 않고 framework로부터 받아서 사용합니다.
  • 이를 통해 loose coupling을 달성하고 code의 test 가능성을 높입니다.

Framework와 Library 선택 기준

  • project 규모가 크고 표준화된 구조가 필요하다면 framework를 선택합니다.
  • 개발 속도일관성이 중요하다면 framework가 적합합니다.
  • 유연성자유도가 중요하다면 library를 선택합니다.
  • 특정 기능만 필요하고 가벼운 solution을 원한다면 library가 적합합니다.

주요 Framework 종류

  • 다양한 분야에서 사용되는 framework들이 존재하며, 각각 고유한 특징과 목적을 가지고 있습니다.
  • framework는 개발 영역에 따라 web framework, mobile framework, backend framework 등으로 분류됩니다.

Web Framework

  • React : component 기반 UI library이지만 ecosystem 전체를 고려하면 framework 역할을 합니다.
  • Angular : Google에서 개발한 full-featured web framework로 TypeScript 기반입니다.
  • Vue.js : 점진적 도입이 가능한 유연한 web framework입니다.
  • Svelte : compile time에 최적화되는 modern web framework입니다.

Backend Framework

  • Spring : Java 기반의 enterprise급 backend framework입니다.
  • Django : Python 기반의 full-stack web framework로 rapid development를 지원합니다.
  • Express.js : Node.js 기반의 minimalist web framework입니다.
  • Ruby on Rails : Ruby 기반의 convention over configuration을 추구하는 framework입니다.

Mobile Framework

  • React Native : JavaScript로 native mobile app을 개발할 수 있는 framework입니다.
  • Flutter : Google에서 개발한 cross-platform mobile framework로 Dart 언어를 사용합니다.
  • Xamarin : Microsoft의 C# 기반 cross-platform mobile framework입니다.

Reference


목차