카테고리 없음

라이브러리 & API & 프레임워크 & 플랫폼 & 엔진에 대해

SciomageLAB 2024. 9. 18. 08:24
반응형

라이브러리

코드 작성 시 자주 쓰이는 코드들을 묶어놓은 것으로 이름과 같이 도서관의 역할이다.

필요할 때마다 필요한 책을 참고하는...

라이브러리에서 로딩 시점에 따라 종류가 나눠진다.

정적 라이브러리

정적 라이브러리를 포함 후 빌드 시, 완성된 바이너리에는 코드에는 라이브러리 코드가 포함되서 만들어진다. 만일 이 라이브러리가 아주 자주 쓰이는 Math.h 같은 라이브러리라면 같은 라이브러리를 쓴 두 응용프로그램의 경우 같은 코드에 대하여 두 배의 용량을 차지한다고 할 수 있겠다. 물론 용량을 먹는 다는 것은 단점이겠으나 구동 환경에 종속되지 않고 쓸 수 있다는 장점이 있다.

동적 라이브러리(공유 라이브러리)

위의 정적 라이브러리가 같은 코드임에도 중복 사용된다면, 공유 라이브러리는 프로그램 실행 시 해당 코드가 필요할 때 동적으로 호출하여 여러 프로그램이 해당 라이브러리를 공유할 수 있도록 한다. 동적으로 로딩하므로 경로설정이나 설치를 해줘야 하는 부분이 생긴다.


API

함수이긴 함수인데 내부 구현을 몰라도 코드 레벨에서 특정 기능을 수행하는 인터페이스이다. 전자레인지는 전자파가 음식을 데우는 원리를 알 필요 없이 조리라고 쓰여진 버튼을 누르면 음식을 데울 수 있다. 이때 사용자는 조리라고 쓰여진 버튼의 모양과 문자를 보고 이것이 데우는 기능임을 알 수 있다.

소프트웨어에서는 특정 프로토콜이나 양식에 따라 서브루틴을 실행할 수 있도록 정의 해놓은 것을 API라고 할 수 있다.

API는 규약이고 라이브러리는 구현체에 해당된다.

예를 들어 malloc 함수 같이 메모리를 할당받는 함수는 프로그래머가 직접 메모리 하드웨어에 복잡한 어세스 없이 메모리를 받아와준다. 이는 커널이 제공하는 메모리 할당 API 덕분이다. 다른 예로는 자바에서 소켓 통신의 경우 필요한 포트번호만 주면 해당 포트를 바인딩하고 연결하는 connect, bind 함수가 주어지는데 이런 것들이 API라고 할 수 있겠다. 혹은 응용프로그램끼리 통신 할 때에도, 예를 들어 유니티와 기타 응용프로그램(립모션 런타임이나 안드로이드 런타임)이 통신 할 때에도 유니티 내부 구조를 자세히 몰라도 우리는 API를 씀으로써 간단하게 접근이 가능하다.

malloc의 함수 원형 모양만 맞주면 내부는 아키텍처 별로 구현하기 나름이기 때문에 API는 내부 구현이 되어 있지 않아도 된다. Arm64, x86이냐에 따라 다르게 구현하지만 사용자 입장에서는 malloc이라는 같은 코드베이스를 사용할 수 있다는 장점이 있다.

SDK(Software Development Kit)

개발자가 응용프로그램을 만들 수 있도록 하는 도구 집합이다. 안드로이드 SDK처럼 라이브러리, 빌드 도구, 의존성 도구, pre-built 패키지 등 개발자가 응용 프로그램 개발을 위해 필요로 하는 모든 것들을 모아 놓은 키트를 의미한다.

프레임워크

MFC, WPF, QT, 장고, 플라스크, Spring이 대표적인 프레임워크다. Frame은 틀, Work는 일로 틀이 잡힌 일이라는 뜻이다. 즉 기본적인 뼈대를 제공하여 개발자가 필요한 부분만 구현할 수 있도록 편의성을 제공하는 것을 의미한다.

건축물로 비유하면 토대와 건물 뼈대를 만들어 놓은 것이다. 내부를 주방으로 기능하도록 할 것인지 호텔 로비로 기능하도록 할 것인지는 개발자가 구현하기 나름이지만 건물 뼈대 바깥을 넘어서 지을 수는 없다.

이를 위해 수 많은 라이브러리와 구현 패턴을 제공하여 재사용성, 모듈성을 극대화 해준다.


아키텍처

아키텍쳐는 프레임워크를 포함하는 전체 프로그램의 구조이다.

예를 들어 데이터베이스에서 정보를 받아와 정보를 처리하는 두 컴포넌트로 이루어진 프로그램의 경우 DBmanager라는 컴포넌트와 DataProcessing이라는 두 컴포넌트간의 상호관계를 그리면 프로그램의 아키텍쳐가 된다. 논리적 구조적 상호관계를 의미한다.

엔진

자동차 엔진은 시동을 걸 수 있고 엔진을 중지 시킬 수 있으며 공회전도 시킬 수 있다. 소프트웨어에서도 데이터베이스, 머신러닝 추론 엔진(텐서플로우), 검색 엔진, 게임 엔진 같은 것들이 있다. UI는 없지만 프로그램의 아주 핵심 기능을 담당하고 구동 가능한 핵심 코드 또는 컴포넌트를 의미한다.

런타임 환경 / 런타임 시스템

프로세스나 프로그램을 위한 프로그램으로 JVM, 파이썬 인터프리터 등이 해당된다.

시스템

시스템이란 엔진이 하나의 목적을 달성하기 위한 소프트웨어였다면 시스템은 그러한 목적을 이루기 위한 컴포넌트를 간의 결합이라고 볼 수 있다.

예를 몸의 항상성 유지 시스템의 경우 항상성을 유지하기 위해 길항 작용하는 호르몬들과 그 호르몬을 만드는 기관으로 이루어져 있고 기업 시스템의 경우 영리를 추구하기 위해 하위 제품 생산 부서부터 마케팅 부서까지 컴포턴트들로 구성되어 있다고 볼 수 있다. 컴퓨터 시스템이라 하면 계산을 하기 위해 필요한 전자 전기적 장치와 계산을 위한 프로세스 과정이 담긴 (혹은 그 자체인) 소프트웨어로 이루어져 있다고 볼 수 있다.

운영체제가 시스템의 대표적인 예이다. 하드웨어 자원을 관리하고 다른 응용 소프트웨어들이 잘 동작할 수 있도록 해준다.

플랫폼

plat (평평하다) + form(형태)로 풀이를 해보면 평평한 땅이다. 기차 승강장(플랫폼)은 기차를 이용하기 위한 유저들과 기차가 만나는 곳이다. IT에서 플랫폼이라 하면 컴포넌트들을 평평한 땅 위에서 쌓아서 프로그램 또는 유저가 이용할 수 있도록 하는 장을 의미한다.

Arm64, x86 등 소프트웨어를 이용하게 해주는 하드웨어가 플랫폼이 될 수도 있고, 응용 소프트웨어를 실행시켜주는 우분투, 윈도우 같은 OS도 플랫폼이 된다. 뿐만 아니라 에뮬레이터, 가상머신도 플랫폼이라 말할 수 있다.

비즈니스 관점으로 확장시키면 배달의 민족이나 우버 같이 이용자와 제공자를 위한 장을 만드는 서비스도 플랫폼이라 말할 수 있다.


참고문헌

http://jechue.tistory.com/11

http://brothernsister.tistory.com/5

http://soul0.tistory.com/159

플랫폼이란 – IT의 중심에서 (wordpress.com)

반응형