API, Library, 그리고 Framework
개발 공부를 하면서 많이 접하는 API, Library그리고 Framework. 공부를 하면서 활용하다보면 개념이 애매모호 할 때가 많은 것 같아 정리 해 두려고 한다.
⚠ 다만, 해당 정보는 블로그와 위키백과를 토대로 작성한 개인의 생각을 정리한 내용으로 광범위한 프로그래밍 개념을 명확하게 진술해주는 내용은 아님을 밝힙니다.
참고는 위키백과와 정리가 잘되어 있는 블로그를 참고했다.
Libarary
소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임이다. 비휘발성 자원이란 전원이 차단되어도 데이터를 유지하는 컴퓨터 메모리를 말한다. 라이브러리에는 미리 작성된 코드, 서브루틴(함수) 크래스, 값, 자료형 등을 포함한다.
라이브러리 (컴퓨팅) - 위키백과, 우리 모두의 백과사전
Ogg Vorbis 파일을 재생하기 위해 libvorbisfile을 사용하는 응용 프로그램의 개요도. 라이브러리(영어: library)는 주로 소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임이다.
ko.wikipedia.org
누군가 잘 만들어 버그가 없고 활용도가 높은 함수들이 정의된 클래스를 생성했다고 가정하였을 때, 남들이 사용할 수 있도록 하되, 소스코드는 공개하고 싶지 않다면, 해당 클래스와 관련된 변수와 함수들을 선언한 헤더파일과, 함수 정의부분을 컴파일한 목적파일을 만들고 사용방법, 동작원리 등의 설명이 들어간 문서를 공유하면 된다.
즉, 작성된 헤더파일, 목적파일과 사용방법 등이 명시된 문서가 라이브러리가 되며, 특정 클래스의 인자, 리턴 값 등 클래스 사용을 위한 프로토타입 메소드가 해당 라이브러리의 API가 된다.
헤더파일 : 라이브러리 안에 제공하고자 하는 코드가 존재하고 헤더 파일에는 형시 선언되어 있다. 즉 사용하는 예시가 적혀있다라고 생각하면 편하다.
목적파일 : 소스코드(프로그래밍 언어)를 컴파일(컴퓨터가 이해할 수 있는 언어로 변환)하여 생성하는 파일이다.
API (Application Programming Interface)
응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.
API - 위키백과, 우리 모두의 백과사전
API(Application Programming Interface 애플리케이션 프로그래밍 인터페이스[*], 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는
ko.wikipedia.org
의미를 쉽게 파악하기에 개념이 다소 어렵다.
쉽게 설명하자면, 구글 지도를 프로젝트에서 활용하기 위해서는 구글 지도의 api가 필요하며, api 내에 우리가 찾고자 하는 위치의 위도 경도를 제공함으로써 위치에 대한 정보를 얻을 수 있다.
즉, 응용프로그램을 구현할 때 사용되는 매개체를 의미한다.
간단히 DOM API의 alert()
역시 경고창을 띄우는 기능 할 수 있도록 연결해주는 하나의 API이다.
alert()
가 없어 브라우저의 경고창을 띄우기 위한 코드를 항상 작성해야 한다면, 코드는 길어지고 가독성은 안좋아질 것이며, 비효율적일 것이다.
외부 컴포넌트는 라이브러리의 형태로 제공을 받는 경우가 많아 API와 혼동되는 경우가 많다. 라이브러리는 이런 컴포넌트 자체를 칭하고, API는 해당 컴포넌트를 활용하는 규약이다.
컴포넌트 : 독립적인 기능을 수행하는 모듈이면서 시스템 유지보수에 있어 교체 가능하며, 재사용이 가능한 모듈을 의미한다.
위의 Libraray에 대한 설명과 API를 보면 Library의 범위 안에 포함된다라고 볼 수 있지만 라이브러리가 아닌 API 또한 존재한다. 이는 외부 원격의 서버로 부터 서비스를 제공받는 경우이며 그 예로 구글 클라우드에서 제공하는 Speach API가 있다.
Framework
웹 프로그래밍을 공부하면서 React, Vue등의 프레임 워크를 많이 들었을 것이다.
위키 백과에서는 복잡한 문제를 해결하거나 서술하는 데 사용되는 기본 개념 구조이며, 틀이다.
소프트웨어 프레임워크 - 위키백과, 우리 모두의 백과사전
소프트웨어 프레임워크 - 위키백과, 우리 모두의 백과사전
컴퓨터 프로그래밍에서, 소프트웨어 프레임워크(software framework)는 복잡한 문제를 해결하거나 서술하는 데 사용되는 기본 개념 구조이다. 간단히 뼈대, 골조(骨組), 프레임워크(framework)라고도 한
ko.wikipedia.org
즉, 프로그래밍 언어를 특성이나 목적에 있어서 또는 어떠한 문제를 해결하기 위해서 사용하는 언어의 틀이다.
위키백과에서 React.js는 웹 프레임 워크이면서 자바스크립트의 라이브러리라고 나와있다. 리액트는 SPA(Single Page Application)이나 모바일 앱 개발에 사용되는 특성이 있다.
웹 프레임 워크 안에 다양한 코드조각들이 들어가 있을 것이며, 이러한 코드조각들이 바로 라이브러리라고 볼 수 있다.
즉, 라이브러리는 프로젝트 제작에 있어서 소규모의 필요한 목적(기능) 구현을 위해서 사용되며, 프레임워크는 제작의 목적(SPA제작, 어플리케이션 제작 등)의 구현을 위해 사용하는 틀의 차이가 있다.
프레임워크의 단점으로는 본래의 목적과 다른 프로그램을 만들 수 없다는 것인데, 예를 들어 React의 경우 라우팅, API통신 등의 기능이 기본 제공되지 않기 때문에 추가적인 라이브러리를 사용해야한다는 것이다.