Platform과 Framework에 대하여...

2008. 6. 27. 15:33Software Engineering

 최근에 Mobile Platform 및 각종 기술 동향을 알아보던 중 무심코 사용하던 용어에 대한 정의가
궁금해졌다. .NET Framework, Java Platform, Mobile Platform, Win32 Platform, UI Framework
Framework
Platform이라는 용어가 자주 등장하는데 구체적으로 어떤 의미를 담고 있는지
한 번 알아보도록 하자.

1. (Computing) Platform

우선 Platform이라는 용어를 인터넷 백과사전인 Wikipedia에서 알아보았다.

 

In computing, a platform describes some sort of hardware architecture or

software framework (including application frameworks), that allows software to run.
            

Typical platforms include a computer's architecture, operating system,

programming languages and related runtime libraries or graphical user interface.

간단하게 말하자면 소프트웨어를 실행하게 해주는 환경(소프트웨어 또는 하드웨어 일부)이라고 볼 수 있다. Runtime 라이브러리, GUI, 프로그래밍 언어, OS, 컴퓨터 아키텍쳐를 포함하므로 우리가 사용하는 윈도우나 Linux와 같은 OS Platform으로 정의할 수 있다. Hardware Platform에 대해서는 Wikipedia에서 언급이 되지만 Framework와는 비교하기 힘드니 여기서는 넘어가기로 하자.(Hardware Framework는 들어 본 적이 없다.)

 

 Java Runtime 환경과 .NET Runtime 환경도 Java 또는 .NET App를 실행하므로 Platform으로 정의할 수 있다. 그럼 왜 .NET .NET Framework이라는 이름을 붙였을까? 그건 조금 의문이다. .NET Framework는 요 밑에 Framework의 용어를 알아보면서 정리하도록 하자. 인터넷 환경의 웹 서비스 및 웹 컨텐츠를 실행하도록 하는 브라우저 및 웹 서버 등도 일종의 Platform으로 정의 할 수 있겠다. Mobile Platform Wikipedia에서 Mobile OS로 정의되어 있다.


2. Framework

알아보고자 하는 Framework는 일반적인 골격 또는 뼈대를 이야기하지만 여기서 알아볼 것은 Software Framework으로 Wikipedia에도 Computing 환경에서의 Framework Software Framework로 정의하고 있다.

FrameworkWikipedia에서 무엇으로 정의하는지 알아보자.

 

A software framework is "the skeleton of an application that can be customized by an application developer". Like software libraries, it aids the software developer by containing source code that solves problems for a given domain and provides a simple API. However, while a code library acts like a servant to other programs, software frameworks reverse the master-servant relationship. This reversal, called inversion of control, is the essence of software frameworks.

 

직역을 하자면 Software Framework란 소프트웨어 라이브러리와 같이 어플리케이션 개발자에 의해 커스터마이징 할 수 있는 어플리케이션의 골격이다. 무슨 말이냐? 조금 더 직역을 해보자.

간단한 API를 제공하고 주어진 도메인에서의 문제를 해결하는 코드를 포함함으로써 개발자를 도와준다. 그러나 Code Library는 다른 프로그램의 하인으로 동작하는 반면에 Software Framework는 주인-하인 관계보다는 그 반대이다. 이러한 제어의 반전이 Software Framework의 핵심이다.

 무언가 이래서 영어는 어렵다. 일종의 Control Flow의 역 관계로 생각하기로 하자. Code Library Application에서 API를 호출하지만, 그에 비해 Software Framework API도 제공하지만 Application도 실행할 수 있는 관계로 생각 할 수 있다.

 

 Wikipedia의 정의만을 갖고는 Software Framework를 잘 이해 할 수가 없다. 삼성경제 연구소에서 답변한 프레임워크에 대한 정의를 보면 다른 소프트웨어 프로젝트가 개발 될 수 있는 뼈대 구조로 지원 프로그램, 라이브러리, 언어, 다른 소프트웨어의 구성요소를 엮어주는 소프트웨어를 포함한다고 한다.

 따라서 Platform도 일종의 Framework라고 할 수 있으며, .NET Platform .NET Framework라 부르는 것도 틀린 것이 아니라고 한다. UI 프로그램 개발을 위한 부분은 Framework라고 할 수 있다. UI 프로그램 개발 부분은 완전한 소프트웨어 실행 환경이 되지 않으므로 Platform은 아니지만 Framework로 볼 수 있다. (UI Framework)

 

 

사용자 삽입 이미지

그림 1 .NET Framework in context

           

 Platform Framework의 정의에 대하여 알아보았는데 그 기준이 칼로 자르듯 확실하지는 않은 것 같다. 아무튼 Framework는 소프트웨어의 뼈대 및 구조를 지칭하며 Platform은 소프트웨어 실행 환경으로 정리할 수 있겠다. 또한 Framework Platform을 포함하는 상위 개념으로 이해 할 수 있겠다. [그림 1] .NET Framework를 보더라도 Framework 내에 OS Runtime 환경이 포함되어 있다.