Framework에 대한 정의를 내려 보려고 하니..참 막막하기는 하다...

Framework, Architecture 등 너무도 익숙하게 사용하는 용어라 정의하기가 더욱 어려운 것 같다.


google에서 Framework에 대한 정의를 찾아보면 20 여개 정도가 검색이 되는데 그중 아래의 정의가 일반적으로 우리가 생각하는 Framework이 아닐까 생각한다.


In software development, a Framework is a defined support structure in which another software project can be organized and developed. Typically, a framework may include support programs, code libraries and a scripting language amongst other software to help develop and glue together the different components of your project.


소프트웨어 프로젝트에서 활용할 수 있는 기반 구조로 일반적으로 지원 프로그램, 코드 라이브러리 등 프로젝트의 다양한 컴포넌트들을 개발하고 유기적으로 결합하기 위해 사용하는 소프트웨어를 말한다.

과거에 공통 코드라는 명칭으로 사용하던 것들을 좀더 구조화 시켜 Framework이라 부른다고 생각하면 될 것 같다.


이 Framework도 Component Framework, Application Framework, Web Framework 등 분류 기준에 따라 다양하게 분류가 된다.

여기서는 두가지로만 분류하겠다.

1. Component Framework (또는 Vendor Framework) : .NET Framework, J2EE Framework 과 같은 기능 중심의 Framework

2. Application Framework : Component Framework 기반으로 Application 내의 요소(Component)들간의 유기적인 연관 관계를 고려한 Framework (대표적인 것이 Apache Struts Framework, 다양한 SI회사에서 사용하는 Framework [필자의 회사에도 SummaFramework이라는 이름으로 가지고 있다] 등)


이러한 Framework을 활용하는 이유는 당연히 프로젝트의 생산성 향상 및 프로젝트의 표준화 지원을 통해 Quality 향상 등이 이유가 될 것이다. (사실 Framework이라는 표현을 쓰지 않을때에도 공통 코드 형태로 프로젝트 마다 사용해 왔던 것이다..)


이러한 Framework과 Architecture, Component, Library을 비교해 보면

Architecture는 시스템을 구성하고 있는 구성요소들 및 관계의 구조를 표현한 것으로 Framework 보다 좀더 추상적인 개념으로 보면 되겠다.

Component는 특정 기능을 수행하기 위해 잘 정의된 인터페이스를 통해 독립적으로 개발된 소프트웨어 단위로 Framework 기반에서 동작하는 모듈로 생각하면 되겠다.

Library는 재사용 가능한 함수와 루틴들을 모아 놓은 것으로 이러한 Library를 구조화 시켜 Framework을 만든다고 보면 되겠다.

재사용의 범위는 일반적으로

Library < Component < Framework < Architecture

라고 볼 수 있겠다.

+ Recent posts