Framework와 Library

Updated:

Framework

Frame + Work라는 두 단어의 합쳐진 개념으로 ‘틀, 뼈대를 가지고 일하다’라는 의미이다.

프로그래밍을 진행할 때 필수적인 코드, 알고리즘 등과 같이 개발자가 필요한 구조를 제공해주기 때문에 프레임워크를 사용하는 프로그래머는 이 프레임워크의 뼈대 위에서 코드를 작성하여 프로그램을 개발하면된다.

  • 프로그램의 골격이 되는 기본 코드

  • 소프트웨어 개발을 간소화하기 위해 개발됨
  • 개발자는 프레임워크를 기반으로 소스코드를 작성하여 소프트웨어를 완성시키면 된다.

프레임워크 종류

1. 스트럿츠 프레임워크 (STRUTS Framework)

자바기반의 JSP만을 위한 프레임워크로, 다양한 운영체제에서 활용할 수 있으며, 오픈소스이기 때문에 개발에 필요한 부분을 수정하여 사용할 수 있다.

웹 개발은 보통 프론트엔드 영역과 백엔드 영역으로 나뉘는데, 이를 디자이너의 프론트엔드 영역과 개발자의 백엔드 영역으로 분리해서 개발을 하자는 목적으로 만들어진 기술이 MVC model2이다. (Model, View, Controller)

이러한 MVC기반으로 나온 프레임워크가 스트럿츠 프레임워크이며 이렇듯 MVC 모델을 이용한 웹 애플리케이션 구축을 매우 용이하기 때문에 초기에 스트럿츠 프레임워크 기반의 개발이 많이 이루어졌다.

2. 스프링 프레임워크 (Spring Framework)

스프링프레임워크란 엔터프라이즈급 애플리케이션 개발에 필요로하는 경량형 프레임워크이다. 프로젝트의 규모가 커질수록 스트럿츠 보다는 스프링 프로젝트가 많이 활용이 되고 있는 추세다. 

J2EE에서 제공하는 대부분의 기능을 지원하기 때문에 JAVA개발에 있어서 대표적인 프레임워크로 자리잡고 있으며 JDBC를 비롯하여 iBatis, 하이버네이트, JPA등 DB처리를 위해 널리 사용되는 라이브러리와 연동을 지원하고 있다. 또한 전자정부 표준프레임워크의 기반이 되는 기술이기 때문에 스프링 프레임워크의 활용도는 더욱 높아지고 있다.

스프링 프레임워크의 특징

  • 경량컨테이너로 라이프사이클을 관리하고 필요한 객체를 스프링으로부터 받아온다.

  • DI지원하여 객체간의 의존관계 설정이 가능하다.

  • AOP지원한다.

  • POJO방식으로 자바객체는 특정한 인터페이스를 구현하고 클라스 상속이 필요치 않다.

  • 트랜젝션 처리를 위한 일관된 방법을 제공한다.

  • 영속성 관련 다양한 API를 지원한다.

  • API연동을 지원한다.

3. 앵귤러 JS( AngularJS)

자바스크립트 기반의 프레임워크이다. 앵귤러 JS는 2012년에 출시 되었으며, 기본적으로 MVC (Model-View-Controller) 모델 지원과 같은 다른 웹 어플리케이션 프레임워크에서도 지원하는 기능을 제공한다. 자바스크립트 또는 제이쿼리로 만든 코드의 길이를 더욱 단순화 할 수 있으며, 직관적으로 소스를 이해할 수 있게 된다. 

점점 복잡해지고 대형화 되고있는 (클라이언트 사이드 스크립트)를 (MVC 패턴)으로 규격화 함으로 해서 (프로젝트 유지보수) 비용을 최소화 할 수있기 때문에 앵귤러 JS역시 개발자 분들에게 없어서는 안 될 프레임워크인 듯 하다.

앵귤러 JS 특징

  • 작성해야 하는 자바스크립트의 코드량을 줄여준다.

  • 앵귤러 JS의 데이터 모델은 단순 자바스크립트 객체이다.

  • 재사용이 쉬운 정적인 UI컴포넌트를 만들 수 있다.

  • HTML, CSS개발자와 자바스크립트 개발자를 명확하게 분리해 준다.

4. 장고 프레임워크 (Django Framework)

장고프레임워크란 파이썬으로 작성된 오픈 소스 웹 애플리케이션 프레임워크로 쉽고 빠르게 웹사이트를 개발할 수 있도록 돕는 구성요소로 이루어져 있다. 파이썬 프로그래밍 자체가 다른 프로그래밍에 비해 배우기 쉽고 쓰기 편하게 되어 있기 때문에 개발기간을 상당히 단축시킬 수 있다. 장고프레임워크는 그에 수반되는 강력한 라이브러리들을 그대로 사용할 수 있다는 점이 가장 큰 장점이라고 볼 수 있다.

장고프레임워크 특징

  • MVC 패턴 기반 MTV (기본적으로 Model-View-Controller 를 기반으로 한 프레임워크)

  • ORM(Object-relational mapping) 기능 지원

  • 쉬운 DB관리를 위해 프로젝트를 생성하면서 관리자기능을 제공

  • 쉬운 URL 파싱 기능 지원

  • 동일한 소스코드에서 다른 나라에서 용이하도록 번역, 날짜/시간/숫자 등의 포맷 타임존 지정 등의 기능을 제공

Library

라이브러리는 특정 기능에 대한 도구 또는 함수들의 모음이다. 프로그래머가 어떠한 기능을 수행하기 위해서 필요한 것을 제공해주는 역할을 한다. 즉, 소프트웨어를 개발하기 쉽게 어떤 기능을 제공하는 도구들의 집합이다.

Framework와 Library의 차이점

프레임워크와 라이브러리의 차이점은 흐름을 누가 지니고 있냐의 차이다. 프레임워크는 전체적인 흐름을 자체적으로 가지고 있어 프로그래머는 그 안에서 필요한 코드를 작성한다. 즉, 프레임워크는 가져다가 사용한다기보다는 거기에 들어가서 사용한다는 느낌/관점으로 접근할 수 있다. 반면에 라이브러리는 프로그래머가 전체적인 흐름을 가지고 있어 라이브러리를 자신이 원하는 기능을 구현하고 싶을 때 가져다 사용할 수 있는 것이다.

framework와 library

또한, 라이브러리와는 달리 프레임워크는 이미 프로그래밍할 규칙이 정해져 있다. 예를 들어, 설정파일로 사용되는 XML에 어떤 태크를 써야하며 어떤 함수를 추가적으로 작성해야하며 소스파일 위치를 어느 위치에 넣어야 하고, DB와 연동하기 위해서 무엇을 써야하는 지 정해져 있다.

INFO

라이브러리를 사용하는 코드는 흐름을 직접 제어한다. 코드가 동작하는 중에 필요한 기능이 있으면 능동적으로 라이브러리를 사용하는 것이다. 반면에 프레임워크는 거꾸로 코드가 프레임워크에 의해 사용되는 것이다.

보통 프레임워크 위에 개발한 클래스를 등록해두고, 프레임워크가 흐름을 주도하는 중에 개발자가 만든 코드를 사용하도록 만드는 방식이다. 그렇기 때문에 프레임워크에선 분명한 제어의 역전 개념이 있어야 한다. 코드는 프레임 워크가 짜놓은 틀에서 수동적으로 동작한다.

제어의 역전이란 어떠한 일을 하도록 만들어진 프레임워크에 제어의 권한을 넘김으로써 코드가 신경써야 할 것을 줄이는 전략이다.

일반적으로 라이브러리는 프로그래머가 작성하는 코드가 라이브러리의 메소드를 호출해서 사용한다. 그와 반대로, 프레임워크를 규정하는 특성은 프레임워크의 메소드가 개발자의 코드를 호출한다는 데에 있다.

여기까지 이해는 가지만, 한 가지 의문이 생긴다.

‘대체 어떻게 프레임워크가 개발자의 메소드를 호출하는 것일까? 프레임워크는 작성된 코드를 모를텐데!’

제어를 역전시키는(프레임워크가 코드를 호출 할 수 있게 하는) 가장 쉬운 접근방식은 프레임워크의 event, delegate에 나의 메소드를 등록시키는 것이다. 전달되는 인자와 반환 형식만 일치한다면 프레임워크 코드는 내가 작성한 객체와 타입을 고려하지 않는다. 즉, 등록된 메소드만 감지하여 실행 invoke하는 것이다.

다른 방법으로는 프레임워크에 정의되어 있는 인터페이스 interface, 추상타입 abstract을 개발자 코드에서 구현, 상속 한 후 프레임워크에 넘겨주는 것이다.

이는 객체를 프레임워크에 주입하는 것이고 이를 의존성 주입 dependency injection한다고 한다.

Leave a comment