2014년 2월 16일 일요일

함수, 라이브러리, 엔진, 프레임워크 그리고 플랫폼

혹시나 소중한 자료가 없어질 것을 염려하여 다음과 같이 제 블로그에는 읽기 힘들도록 올립니다.원본 출처는 지워진 사항이라 2차 출처분의 링크만 올려 놓습니다.

http://adept.egloos.com/2329239



소프트웨어 개발자들 혹은 설계자들이 많이 사용하지만 정확한 의미에 대해서 잘 모르는 용어들에 대해서 제 경험과 학습의 과정 속에서 알게된 의미를 정리해 보았습니다. 일부는 또 위키피디아 같은 곳에서 정의한 뜻과 다를 수 있겠지만, 정확성 보다는 최대한 쉽게 이해할 수 있도록 설명하려고 애쓴 것이니 미숙한 표현에 대해서는 양해 바랍니다.

1. 함수 (function)

함수란 프로그램을 구성하는 가장 작은 단위의 부품이다. 한 줄 이상의 명령문을 포함하며, 입력 값과 출력 값이 존재할 수 있다. 개별 함수는 고유의 이름이 부여된다. 보통 하나의 함수는 하나의 기능을 제공한다. 예를 들어, 화면에 문자열을 출력하는 함수라던가, 텍스트 파일을 생성하는 식이다. 일반적으로 프로그램을 작성한다는 것은 여러 개의 함수를 작성하고, 함수들이 사전에 계획한 규칙에 따라 연속적으로 실행되도록 구성하는 작업니다.

2. 라이브러리 (library) 혹은 툴킷(tool kit)

함수들을 제작하다 보면 분명히 나중에 다시 써먹을 수 있는 것들이 나오게 된다. 이러한 함수들을 모아 두었다가, 유사한 프로그램을 제작할 때 사용할 수 있다면 생산성이 증가하게 된다. 이것은 컴퓨터를 조립할 때 미리 제작되어 있는 부품들을 모아서 빠르게 제작하는 것과 동일한 개념이다.

하나 이상의 함수를 모아둔 것을 라이브러리라고 하며 프로그램을 제작할 때마다 필요한 함수들을 꺼내 쓰게 되는 것이다. 라이브러리 라는 단어 대신 툴킷 혹은 API(Application Programming Interface)라는 용어가 사용되기도 한다.

라이브러리를 제작하는 주체는 첫번째, 프로그램 개발 언어와 컴파일러를 제작하는 업체들, 두번째 자신이 만들어둔 함수를 재사용하기를 원하는 개발자 스스로가 될 수 있다. 더불어, 컴파일러를 제작하지도 않고 직접 라이브러리를 사용하지도 않지만 개발자들에게 필요한 라이브러리를 제작해 공급하는 업체들이 있다. 이들을 일컬어 써드 파티(third party)라고 부른다.

3. 엔진(engine)

일반적으로 라이브러리라는 것은 단지 다양한 함수의 집합을 일컫는 것이다. 따라서, 그 안에 개발자가 필요한 모든 것들이 들어 있을 수도 있고 없을 수도 있다. 즉, 필요한 것들은 꺼내쓰고 없으면 직접 만들어 쓰게끔 되어 있으면 그것은 라이브러리다. 그런데 어떤 라이브러리들은 개발자가 필요로 하는 특정 분야의 기능을 거의 모두 다 제공하는 경우가 있다. 이런 것들을 소위 말해서 엔진이라고 부른다. 게임 그래픽 구현을 위한 엔진, 웹 서비스 개발을 위한 엔진 등 다양한 엔진들이 상품화 되어 팔리고 있다. 아무래도 완성도가 라이브러리보다 높다 보니 가격대가 상당히 높은 편이다. 유명한 게임 엔진들은 수억원에 달한다고 한다.

4. 프레임워크framework)

프레임워크에 대한 설명을 하기 위해 앞서 설명한 개념들을 다시 정리해 볼 필요가 있다. 우선 라이브러리나 엔진은 함수의 집합이지만, 각각의 부품들을 어떻게 조립해서 써야할지 구상하기 어렵다. 간단히 말해서 아무리 좋은 벽돌과 시멘트를 가지고 집을 지어도 얼기설기 쌓기만 해서는 멋진 집을 지을 수 없는 것이다. 따라서, 라이브러리나 엔진만 가지고 개발을 한다는 것은 어차피 개발자의 숙련도, 경험에 따라 최종 프로그램의 완성도가 결정된다는 치명적인 문제가 존재한다. 이럴 때 쓰는 속담이 있다. 돼지에게 진주 목걸이를 던지지 마라.
그렇다고 해서 모든 개발자가 최고의 설계 능력을 발휘할 수도 없다. 또한, 현장에서는 유능한 설계자의 경험을 어떻게든 활용하기를 바란다. 이런 딜레마를 해결하기 위해서 프레임워크가 나온 것이다. 프레임워크는 단지 함수의 집합이 아니다. 함수들이 서로 연결되어 있으며, 함수나 컴포넌트를 사용하는 규칙까지도 정해져 있다. 일종의 반제품인 것이다. 그 자체로서 실행가능한 프로그램은 아니지만, 아키텍트(설계가)의 노하우가 포함되어 있기 때문에 개발자들이 구현해야할 분량이 줄어들게 되면, 리스크를 감소 시킨다. 다만, 프레임워크를 익히고 활용하기 위해서는 라이브러리에 비해서 더 많은 시간과 노력을 필요로 한다.

5. 플랫폼(platform)

그 자체로서 완성된 시스템을 말한다. 운영체제를 떠올리면 된다. 운영체제 자체만 설치해도 일단 동작한다. 앞서 말한 것들은 실행되는 프로그램이 아니다. 하지만, 플랫폼은 그 자체로서 동작하는 데다가, 다양한 라이브러리나 엔진을 포함하고 있으며 개발자가 만든 어플리케이션을 탑재해서 실행할 수도 있다. 가장 개발자들에게 익숙한 플랫폼은 윈도, 리눅스 등의 운영체제 일 것 이다. 하지만 넓게 보면, 플래시, 웹 서버, 자바 가상 머신, 휴대폰 자체도 플랫폼이다. 무언가 어플리케이션을 탑재할 수 있는 것들을 플랫폼이라고 이해하면 될 것이다.




댓글 없음:

댓글 쓰기