본문 바로가기

Extra

API vs Library .. (API 와 Library에 대해)

728x90

원래는 안헷갈린다 생각했으나 생각할수록 헷갈리는 이 녀석들에 대해서 한번 생각해보려 합니다. 약간 정확하게 뭘 설명한다기 보단, 제 생각을 처음부터 끝까지 쭉 정리해 놓은 글입니다 .....

 

API  (Application Programming Interface) 라는 단어는 처음 보면 생각이 많아지는 단어입니다.

 

개발자들이 Application 을 Programming 할 때 사용할 수 있는 Interface 란 건지...
Programmed 된 App 을 사용하고 싶을 때 사용하는 Interface 란 건지 ...
.. 근데 Interface 라는건 구현체가 없다는 건지 ...

 

 

저는 무지성 개발을 많이 해본터라, 당장 물어본다면 API 는 두번째 생각이 맞는 것 같다는 생각이 강했습니다. 한 팀에서 Front 개발을 할 때도, 그 팀의 서버에 있는 정보를 요청하고 응답받아 사용하게 됩니다. 이 때 Server 에서 팀 내에 API 를 제공하여 팀 내의 Server App을 이용하려면 어떻게 해야 하는지에 대한 규약을 제공해줍니다. 

 

 

Open API 들도 똑같습니다. Google 의 지도를 사용하고자 한다면, 해당 API 를 사용하는 규약이 있습니다. 가령, /map/위도&경도의 path 를 가지고 요청을 하게 된다면, Google Host 에서는 이에 맞는 정보를 제공해줄 것입니다. 규약을 지켰기 때문에 그 서버에서 이해를 할 수 있는 것입니다. 

 

 

즉, API 란 결국 Application 들이 제공하는 서비스를 사용하고 싶을 때 필요한 Interface 의 집합이라고 생각했습니다. 이건 어떻게 보면 틀린 말은 아니지만, API 를 정확하게 이해하지 못한 말입니다. 

 

 

Java API 는 왜 API 라고 할까요? Java API 란 Java 클래스, 인터페이스, 메소드, 필드와 같은 모든 요소들을 제공합니다. 하지만 Java는 Application 이 아닙니다. Java 는 Application 을 만들거나 다른 SW 적인 처리를 하기 위해 사용되는 언어입니다. 따라서, 제가 생각한 "App 을 사용하려면 지켜야 하는 규약"은 뭔가 아닌 것 같다는 느낌이 들었습니다. 

 

 

API ? Library ?

 

 

이쯤되어서 API 와 Library 의 정확한 정의를 알고 더 생각해보겠습니다.

 

 

API 용어 자체적인 뜻은, "애플리케이션은 개발하는 사람들이 개발시 사용할 수 있는 규약"을 의미하며, 더 나아가 "SW간 상호작용을 위한 Interface" 를 뜻합니다. Google 지도 API 를 쓰든, Java 를 쓰든, 사내 API 쓰든 특정 목적을 달성하기 위해 제공측의 규약을 따라야 합니다.

 

 

SW 업계에서 Library 의 정의는 "애플리케이션 개발을 위해 필요한 기능, 자원의 모임"입니다. 뭔가 API랑 비슷해보이죠? 막상 개발 업무를 하면 Library 와 API 는 잘 구분해서 쓰는 것 같다가도, 직접적으로 둘의 차이를 설명할 수 있을까 생각해보았을 때 잘 안되는 이유입니다.  

 

 

API 와 Library 는 어떻게 다른걸까요? 둘의 차이는 흔히 다음과 같이 비교되곤 합니다. 

 

 

 

API 는 구현이 안되어 있는 것이고, Library 는 구현이 되어 있는 상태이다

 

 

 

맞는 말입니다. 하지만 이렇게 표현을 한다면, "어떤 것을 구현하는가?" 의 영역에서 잘못 생각할 수 있다고 생각합니다. 왜냐하면 API 든 Library 든 당연히 내 기능은 내가 구현해야하기 때문입니다. 그리고 API 와 Library 는 서로 아예 다르다기보단 연관된 흐름을 가지고 있다고 보는게 맞다고 생각합니다. 다음과 같이 둘을 구분하려 하는 예시를 살펴보겠습니다. 

 

 

맛집 정보 회사 A사에서 제공하는 SW 솔루션이 있다고 가정해보겠습니다. A사는 다음과 같은 SW 솔루션을 제공합니다. 

 

 

A사에서는 맛집의 이름을 통해 맛집의 모든 정보 (메뉴, 위치, 교통정보 등) 를 제공합니다.

 

 

그리고 철수와 영희는 각각 자신이 개발하는 소프트웨어에서 다음과 같은 기능을 구현하려 합니다.

 

 

철수 - 맛집의 이름을 통해 해당 맛집의 모든 정보 (메뉴, 위치, 교통정보 등) 를 반환한다. 
영희 - 맛집의 이름을 통해 해당 맛집의 위치를 반환한다. 

 

 

같은 솔루션이더라도, 철수와 영희에겐 각각 다르게 사용될 수 있습니다. 그럼 이제 위의 생각을 가지고, 둘을 단순하게 구분해보겠습니다. 철수는 A사에서 제공하는 솔루션을 그대로 가져다 사용하면 되기 때문에, 철수에게는 A사의 솔루션이 Library 일 것입니다. 영희는 A사에서 제공하는 솔루션을 사용하여, 위치만을 따로 뽑아 반환하는 구현을 추가적으로 해야 하므로, 영희에게는 A사의 솔루션이 API 일 것입니다. 이 결론을 토대로 다음과 같은 명제들을 세울 수 있습니다. 

 

 

1) 철수가 사용하는 것은 Library 이고, API 가 아니다. 
2) 영희가 사용하는 것은 API 이고, Library 가 아니다. 
3) 철수가 사용하는 것은 Library 이기 때문에 "이미 구현된 기능을 호출"하는 것이다. 
4) 영희가 사용하는 것은 API 이기 때문에, "영희가 직접 (부가적인) 구현을 해야" 한다. 

 

 

모든 명제가 맞는 말일까요? 한번 생각해보고 하기 답을 살펴보시기 바랍니다.

 

 

 

 

... 생각해보세요!

 

 

 

 

 

(1) X  - 철수가 사용하는 것 역시 API 입니다. 
(2) X  - 영희가 사용하는 것은 API 입니다. 하지만 Library 가 아니라고 할 수는 없습니다. 
(3) X  - 철수는 "이미 구현된 기능을 호출" 하는 것이 맞습니다. 하지만, 그것이 철수가 Library 를 사용해서가 아닙니다. 철수는 API 를 사용하고 있기 때문입니다. 
(4) O  - 영희는 API를 사용하고, "영희가 직접 (부가적인) 구현을 해야" 합니다.

 

 

API 와 Library 는 정확히 모아니면 도처럼 구분할 수 있는 관계는 아니라고 생각합니다. 제가 생각하는 API 와 Library 의 관계입니다. 어떻게 보면 굉장히 객체지향적인 해석일 수도 있을 것 같습니다. 

 

 

제공측의 Library 를 API 를 통해 호출한다

 

 

Client SW, API, Library 의 관계도

 

 

제가 어떤 외부적인 SW 솔루션을 이용하면, 어찌되었든 API 를 사용하는 것이며, 제공측의 Library 를 사용하는 것입니다. API 는 그래서 Interface 라는 역할을 하고 있는 것이며, 개발자들이 보기 쉽도록 API 를 정리해 놓은 것을 API 명세서라고 하는 것입니다.

 

 

위에서 헷갈리는 예시로 들었던 Java API 역시 같은 개념입니다. 우리는 Java SDK 를 사용하여 Java 프로그래밍을 합니다. Java SDK 에는 사용할 수 있는 Java Library 들이 많이 있고, 우리가 이를 통해서 Java 개발을 하고, 다른 말로 Java API 를 사용한다고 합니다. 예시를 들어보겠습니다. "System.out.println()" 함수는 Java 에서 표준출력을 지원하는 메소드입니다 

 

System.out.println() 자체 Java Library 
"System.out.println() 을 사용하면 표준출력을 한다"는 정보Java API

 

 

이제 다시한번 API 와 Library 의 정의를 생각해볼까요?

 

 

API : SW간 상호작용을 위한 Interface
Library : 외부에서 사용할 수 있는 구현된 코드들로, 구현된 기능, 자원의 집합

 

 

"제공측의 Library 를 API 를 통해 호출한다는 생각을 가지고 해당 정의들을 다시 한번 생각해보면, 훨씬 이해가 잘 되는 것 같습니다. 사실 "당연한거 아닌가?" 란 생각을 가지실 수도 있는데, 개인적으로 둘이 이런 관계가 된다는 사실을 인지하고 개발한 적이 없던 것 같습니다. 많은 API 를 사용하면서, API 가 정확히 무슨 의미인지 모르고 쓰면 안된다는 생각에, 정확한 의미에 대해서 생각해보았습니다. 혹시라도 저처럼 둘의 구분이 잘 안되시는 분들이 계셨다면, 이 포스트가 조금이라도 도움이 되었길 바라겠습니다. 

 

 

제 글은 SW 적인 용어로 비교하기보단, 말로 최대한 설명하듯이, 쉽게 풀어보려고 노력했습니다. 제 글을 토대로 하기 두번째 출처 글을 한번 읽어보신다면 더 확실하게 이해가 되실 것 같습니다 :]  읽어주셔서 감사합니다!

 

 

 

 

 

 

 

* 모든 출처

 

 

https://www.youtube.com/watch?v=We8JKbNQeLo&t=257s  (테코톡 주제와 발표는 정말 거를게 하나도 없습니다 ㅠㅠ)

 

 

 

https://velog.io/@tjdud0123/API-vs-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-vs-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC

 

API vs 라이브러리 vs 프레임워크

api, 라이브러리, 프레임워크의 차이점을 알아보자

velog.io

 

728x90