Notice
Recent Posts
Recent Comments
Link
관리 메뉴

DreamFactory7

라이브러리, 프레임워크, API, 엔진 정의 본문

생각/개념

라이브러리, 프레임워크, API, 엔진 정의

우루사1호 2013. 1. 18. 11:36

< 내용이 너무 심란하여 수정중이다.>

아래의 내용은 사람에따라 다를수있다.

그냥 내가 잡은 개념이다.

전문가가 봤을땐 말도안되는 소리일수있겠지만 그러나 말도안되는건 그들의 철벽같은 엘리트의식이 밑바닥에 깔려있기때문이다.

나는 전문가와 초보자의 개념연결이 필요하다고 생각한다.

아래내용이 전문가입장에서 틀리거나 방향을 잘못잡고있다고 말할수있겠지만 그건 전문가입장인것이고 초보자들에게는 이렇게라도 개념을 잡아야한다.

예를들자면 자동차의 정의를 공학도에게 설명하자면 기관, 현가장치, 제동장치등이 합쳐진 조작가능한 기계이다 라고 정의할수있겠지만 (물론 나는 관련 공학도가아니니 모르는건 당연하다.)

초보자에게 설명하자면 그냥 교통수단중 하나이다 라고 말할수있다.

아이들에게 설명하자면 네모에 동그란 바퀴가 넷달려있고 사람이 그안에 탈수있는 장치다 라고 말할수있다.

즉, 대상에따라 설명이 달라지겠지만 그냥 보편적으로 꼭 틀린말은 아니다 싶을정도의 설명을 아래에 적어놨다.


1. 프레임워크 (Framework)
개발하는 사용자(개발자)가 프로그래밍할 수 있도록 만든 프로그래밍으로 이뤄진 틀

프로그래밍(코딩)으로 기본틀을 만들어놓고 누구든 쓰게 공개해두면

누구든 그것을 받아서 내가 원하는 부분을 채워넣어 완성시켜가는 프로그래밍 방식이다.

그리고 실행시키는 부분은 항상 기본틀쪽에 있다.

때로는 프레임워크가 라이브러리를 포함하는경우도있다.


비유1:

자동차 차체(틀)를 사다가 엔진은 차체에 맞는 크기의 엔진을 사다끼우고 바퀴도 사다끼우고 미션도 갔다 끼워서 차를 만드는 형태임.

그리고 실행시키는 부분은 항상 동일하게 운전석쪽에 키꽃는 부분이 있으므로 거기서 시동을 걸게하는것이다.

이렇게하면 이틀로 만들어진 차는 거의 비슷한 형태를 이룰수밖에 없다.

또한 시동을 걸려면 항상 운전석에서 걸어야한다.


비유2:

레고에서 바퀴달린 블럭과 같다고 볼수있다. (이걸 옥스퍼드 블럭이라고 하던가? 레고보다 큰블럭인데..)

이것은 기본적으로 이 블럭은 이동을 목적으로 하는 블럭이다.


비유 3:

레고블럭중에 사람블럭은 일반적으로 집짓는 기둥이나 이런목적으로는 쓰지않는다.

그러나 쓸수도있겠지만..

용도가 특정해진 그런 레고 블럭들처럼 프레임워크도 용도가 특정해진 코드 덩어리다.


비유 4:

어떤골격에 살을 붙여서 모양을 만드는 찰흙놀이에서 골격은 프레임워크를 의미하고 살붙임들은 그것에 맞는 프로그래밍들이다


# 예
MFC, SPRING, ibatiS 등
MFC가 프로그램전체를 짜는게아니라. 기본적인게 다되어있고
필요한부분만 구현하는구동되는방식임.

#관계
- 사용자는 틀을 완성시킴
- 사용자는 모듈단위의 프로그램을 만들어야함.
- 실행은 자신이 만든 프로그램모듈을 실행할수없고 틀자체를 실행해야함.
- SPRING등은 API로 구현된 사용자 프로그래밍부분을 틀에 끼워맞춰 엔진이 틀을 실행하여 구동함.
- 프레임워크=틀+라이브러리

----------------------------------------------------------------------
2. API (Application Programming Interface)
라이브러리의 겉부분이라고 할 수 있다.

사용자가 직접 가져다 쓸수있는 형태로 이루어져 있다.

즉, 사용자가 직접 코딩하는부분은 모두 API라고 볼수있음


비유1:
사장과 직원의 관계에서 사장의 입장으로 볼수있다.
사장은 직원들을 잘 이용해 이윤을 내면된다.


비유2:
군에서 전략과 같다.
전략을 짜면 전술은 그에맞게 짜여진다.

비유3:
대통령과 각부처 장관들의 관계로 볼수있다.
대통령이 큰계획을 짜면 장관들이 그것에 맞춰 일을 하는것이다.
그러나 장관들이 직접일을 하는게 아니라 해당 공약에 맞는 부분을 가져와서 목표만잡지 실무는 장관의 하위 공무원들이 한다.
이때 대통령은 해당 부서의 일을 하거나 깊게 관여하지 않는다.


# 관계 :
- API는 엔진과 매칭(매핑)될수있지만 독립해서 쓸수있음.
- API는 해당 프로젝트에서 사용하기위해 사용자가 직접 제작할수있음(method)
- API의 실체는 객체지향에서는 class단위를 의미하고
비객체지향에서는 함수단위를 의미함.
- c언어의 printf는 api임

# 범위
- 사용자는 API로 메인을 제작할수있다.
- 사용자는 API로 모듈을 제작할수있음.
- 사용자는 API로 엔진을 제작할수있다.
- 사용자는 API로 프레임워크에서 내용을 완성시킬수있다.
- 사용자는 API를 통해서 엔진을 제어하거나 자원을 활용할수있음.( ex: dbms를 콘솔로 접근하는경우)
물론 printf자체가 스스로 자신이 할수있는 기능을 다한다면 api와 엔진을 포함하는 라이브러리라고 볼수있겠지만.
만약 printf가 다른 자원에 의존을 하여 수행한다면 엔진이라고 볼수는 없음.

----------------------------------------------------------------------

3. 라이브러리(Library)

api가 겉에 붙는 딱지나 껍데기, 바지사장같은 것이라면 이것은 그안에있는 내용물이다.

실질적으로 어떤기능을 하는 실무자들인것이다.

프로그래밍에서 어떤기능을 전담하는 묶음의 형태로 내가 원하는 프로그래밍을 만들려면 대게는 이 라이브러리가 포함되어있어야한다.

안들어있는곳에서는 만든 프로그램을 작동시킬 수 없다.


비유1:

어떤 인형들을 보면 팔모양 손모양을 바꿔 끼우는것들이있다.

이것은 해당인형을 만드는데 필요한것들이다.


비유2:

자동차에서 바퀴같은 존재인데...

취향에따라 또는 지형, 기후에따라 광폭타이어 스노우타이어, 레인타이어 등을 쓸수있다.


비유3:

음악 라이브러리는 음악을 재생하는데 필요한 기능들을 가지고있다.

켜는기능, 끄는기능, 일시정지기능 등등

나는 이것을 이용해 음악이 나오는 게임을 만들 수 있다.


비유4:

직장(프로그램)에서 사장(프로그래머)이 원하는 형태로 직원 한명 한명이 모여 이윤을 달성하는 일을 한다.

일반적인 직장은 영업, 구매, 총무등으로 구성한다. (각부서는 라이브러리라고 볼수있다.)

이것들을 필요에따라 영업만 하는 사람들10명에 총무업무2명으로 회사를 구성할 수 있다.

대기업은 이런 부서가 더 세분화되어있다.


4. 엔진

사용자가 직접 가져다 쓸수없는 자원
api를 통해서만 쓸수있음
사용자프로그램부분을 실행시켜주는 역할을 함.
어떤환경을 제공함.
엔진은 주로 혼자서 쓰이지않고 사용자가 제어할수있도록 API나 명령어를 제공함.

#관계
- API들이 모여져서 구성되어있다.
- API들은 엔진에 속한다.

#예
ex) 3d엔진 : 3d로 보여질수있도록 환경을 제공하고 사용자가 환경에서 프로그래밍할수있도록 aPI를 제공함.
ex) jre : 자바환경에서 실행해주도록 환경을 제공(가비지컬렉터나, 바이너리엔진)하고
사용자가 환경에서 프로그래밍 할수있도록 API를 제공함.
ex) DBMS : DB엔진을 통해 DB를 제어하고 DBMS를 통해서 사용자의 명령을 받음.

'생각 > 개념' 카테고리의 다른 글

모듈의 공통화  (0) 2020.02.07
쉘(shell) 종류  (0) 2018.04.27
옛날생각..  (0) 2009.03.12
프리 디자인 : 이념  (0) 2009.02.20
통신방식  (0) 2009.02.04