API, 라이브러리, 프레임워크에 대해 알아보자
면접에서 주로 물어보는 것중 하나가 API, 라이브러리, 프레임워크의 차이점에 대한 것입니다.
이론적인 부분이 부족한 사람이라면 이 셋의 차이점에 대해 잘 모르고 있는 경우가 많을것입니다.
01. API
API란 Application Programing Interface의 앞자를 딴 약자 입니다.
여기서 Application이란 응용 프로그램을 의미합니다. 그리고 Interface는 접속하다, 접속기 라는 의미를 가졌습니다.
위의 단어를 그대로 직역하면 응용 프로그램을 프로그래밍할때 사용되는 접속기 정도로 해석할 수 있겠습니다.
응용 프로그램이란?
프로그램은 응용 프로그램과 시스템 프로그램으로 나뉩니다. 시스템 프로그램은 OS프로그램을 뜻하고 이 외의 것들은 모두 응용 프로그램이라 할 수 있습니다. 우리가 손쉽게 접할 수 있는 응용 프로그램의 예시로는 웹 브라우저, ms오피스, 각종 게임 등 이 있습니다.
이제 여기서 API의 직역을 생각해보면 결국 API는 접속기의 역할을 한다는 것을 알 수 있습니다.
곧 API는 사용자가 어떠한 기능을 사용하기 위한 요청(접속) 방법을 의미한다고 할 수 있겠습니다.
API의 예시로는 카카오 로그인, 카카오맵, 구글메일 등이 있습니다.
02. 라이브러리
라이브러리의 사전적 의미는
'소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임이다. 여기에는 구성 데이터, 문서, 도움말 자료, 메시지 틀, 미리 작성된 코드, 서브루틴(함수), 클래스, 값, 자료형 사양을 포함할 수 있다. OS/360 및 이후 세대에서는 파티션 데이터 세트' 입니다.
사전적 의미는 사실 아무리 봐도 이해가 가질 않습니다. 그래서 좀더 쉽게 이해를 해보자면 '만들어 놓은 기능을 모아놓은 소프트웨어' 정도로 부를 수 있겠습니다. 소프트웨어라고 하면 또 이 부분이 했갈릴 수도 있으니 여기서 조금 더 쉽게 이해하자면 '어떠한 기능을 작동하도록 하는 함수들의 모음' 라고도 할 수 있겠습니다.
라이브러리의 예시로는 JQuerry, .util 패키지 등이 있습니다. String도 라이브러리의 하나이기도 합니다.
03. 프레임워크
프레임워크의 사전적 의미로는
'어떠한 목적을 달성하기 위해 복잡하게 얽혀있는 문제를 해결하기 위한 구조며, 소프트웨어 개발에 있어 하나의 뼈대 역할' 입니다. 하지만 이번에도 그렇듯 사전적인 내용으로는 그래서 이게 뭔가 싶습니다. 프레임워크는 이름 그대로 개발하는 '틀'의 역할을 해줍니다. 예시로 스프링은 웹 프레임워크로 웹 개발을 하기 위한 기본적인 틀이 마련되어 있음을 알 수 있습니다.
프레임워크의 대표적인 예시로는 spring ,django 등이 있습니다.
04. 각각의 차이점
- 01) API와 라이브러리의 차이점
API는 정해진 규약에 맞춰 정해진 요청을 하면 결과를 받을 수 있습니다.
라이브러리는 위에서 말씀 드렸듯 어떠한 기능을 작동하도록 하는 함수들을 모아둔 것이기 때문에, 이 함수들을 사용자의 입맛에 맞춰 사용할 수 있습니다.
- 라이브러리와 프레임워크의 차이점
이 사항에 대해 검색해보면 '제어 권한이 누구한테 있는가?'를 기준으로 설명을 해줍니다.
프레임워크는 제어 권한이 프레임워크에 있고,
라이브러리는 제어 권한이 사용자에게 있음으로 구분을 합니다.
좀더 쉬운 말로 풀이해서 써보자면,
사용자는 프레임워크의 틀안에서 코드를 작성하고, 본인의 입맛대로 라이브러리를 사용할 수 있습니다.
+ 보다 쉬운 이해를 위해 내가 비유를 통해 기억한 방법
저는 이 세가지를 공부하며 하나의 공방을 떠올리며 이해했습니다.
프레임워크는 공방.
라이브러리는 공구함.
API는 공구함을 달라고 요청하는 행위.
먼저 프레임워크를 공방에 비유함은 공방은 무언가를 만들기 위한 공간이며 이를 위해 미리 준비된 각종 공구와 안전장비들이 있음을 빗대어 이해했습니다.
그리고 라이브러리는 각종 기능(공구)를 모아놓은 하나의 모음(공구함)과 매치된다 생각되어 이렇게 이해했습니다.
마지막으로 API의 비유가 조금 난해하여 조금 어거지로 끼워맞췄습니다, API는 정해진 규약에 따라 요청을 하면 결과를 받을 수 있기 때문에 위처럼 비유하여 기억을 했습니다.
API를 비유하기가 난해하여 주먹구구식으로 기억했습니다....^^...