본문 바로가기

기초 공부/상식

API vs Library vs Framework

728x90

최근에 python을 통해 db를 공부하는데 그 중 nosql 중 mongodb를 공부할 때 궁금한점이 생겼다.

 

pymongo.MongoClient()  

 

바로 이 함수이다. 

 

https://api.mongodb.com/python/current/api/pymongo/mongo_client.html

 

mongo_client – Tools for connecting to MongoDB — PyMongo 3.9.0 documentation

Parameters: host (optional): hostname or IP address or Unix domain socket path of a single mongod or mongos instance to connect to, or a mongodb URI, or a list of hostnames / mongodb URIs. If host is an IPv6 literal it must be enclosed in ‘[‘ and ‘]�

api.mongodb.com

pymongo에 대한 공식문서를 봤지만 함수안에 들어갈 수 있는 각 매개변수에 대한 설명 및 클라이언트 객체를 만들었을 때 사용할 수 있는 함수에 대한 설명이 있고 

 

구체적으로 db에 어떻게 연결을 하는지 나와있지가않다.

 

매개변수 없이 그냥 사용하면 로컬 백그라운드단에서 돌아가는 mongodb를 알아서 인식해서 연결해준다고 하는데 그 작동원리도 이해가지 않았고 클라이언트 객체를 만든다는 개념이 살짝 이해가 가지않았다.

 

그래서 이 pymongo의 내용을 볼 수 없을까?? 해서 찾아보려고하니 pymongo API 문서를 봤다. 

 

그러다보니 스스로에게 궁금한점이 생겼다. API가 뭐지?? 

 

우리는 일상생활에서 별 대수롭지않게 API라는 말을 잘 쓰곤한다. 카톡API, 구글맵API 등등 근데 이렇게 접근하다보니 요즘 한참 헷갈리던 라이브러리, 프레임워크, 플랫폼 등의 단어와 충돌이 일어났다. 

 

 

우선 API의 위키백과를 보면

API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영 체제 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다. 주로 파일 제어, 창 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공한다.

라고 되어있다. 

 

라이브러리는? 

라이브러리(영어: library)는 주로 소프트웨어를 개발할  컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임이다. 여기에는 구성 데이터, 문서, 도움말 자료, 메시지 틀, 미리 작성된 코드, 서브루틴(함수), 클래스, , 자료형 사양을 포함할 수 있다. OS/360 및 이후 세대에서는 파티션 데이터 세트로 부른다.

 

그럼 프레임워크는??

애플리케이션 프레임워크(Application Framework)[1]는 소프트웨어 개발자가 응용 소프트웨어의 표준 구조를 구현하기 위해 사용하는 소프트웨어 프레임워크로 구성된다.[2] 즉, 프로그래밍에서 특정 운영 체제를 위한 응용 프로그램 표준 구조를 구현하는 클래스와 라이브러리 모임이다. 간단하게 프레임워크라고도 부른다.

 

이 위키백과와 여러 구글링을 통해 얻게된 위의 개념들의 느낌은 이렇다.

 

프레임워크는 라이브러리 보다 큰 개념으로 자주쓰는 라이브러리나 클래스들을 모아서 하나의 패키지로 묶은 느낌이다. 라이브러리는 누군가가 특정 목적을 가지고 만든 클래스를 공유한 것을 말한다.

 

그래서 예를들어 자동차를 비유로 했을 때 자동차의 현재속도를 구하는 라이브러리, 자동차의 기름 값을 구하는 라이브러리 등등 의 라이브러리를 한 곳에 모아서 자동차 프레임워크를 만드는 느낌이다.

 

하지만 여전히 API는 잘 이해가 가지 않았다. 인터페이스라고 하니 느낌이 올거 같으면서도 오지 않는다. 그래서 유튜브에 검색을 해봤다.

 

https://www.youtube.com/watch?v=We8JKbNQeLo

 

10분짜리 짧막한영상인데 약간 도움이 되었다.

영상의 최종에는 결론적으로

 

1. 라이브러리와 API의 차이점은 구현 로직의 유무

2. 라이브러리와 프레임워크의 차이점은 응용프로그램(애플리케이션)의 흐름 주도권을 누가 가지고있냐

 

위에 자동차 비유에 설명해보면 자동차 현재속도를 구하는 라이브러리는 내가 자동차 현재속도를 구하고 싶을때 언제든지 매개변수 값을 넣어서 능동적으로 사용하지만

내가 자동차 프레임워크를 통해 특정 애플리케이션을 만들려고 할 때 프레임워크 양식에 맞게 작성한 내 코드가 프레임워크에 의해 수동적으로 쓰인다는 것이다. 

 

그리고 API에 대한 설명을 구글맵 API로 설명을 해주셨는데 이해가 쏙됐다.

프로그램끼리의 사이의 연결을 시켜주는 다리다 라고했다.

 

요청양식에 맞게 데이터를 보내면 데이터를 주겠다. 

예를들면 자동차 종류랑 몇키로 탔는지 url식으로 car/BMW&10000 이렇게 보내면 우리가 특정 사이트에 있는 저정도 스펙의 자동차 평균 값을 int형식으로 리턴해줄게 

이 때  car/BMW&10000 <<  요게 API랬다.

 

그럼 다시 처음으로 돌아가서 pymongo 라이브러리에서 mongo_client라는 함수는 연결하려는 데이터베이스의 url과 포트번호, 그리고 여러가지 매개변수를 양식(API)에 맞게 보내면 우리가 클라이언트 객체를 반환해줄게

 

mongoclient로 얻은 객체의 타입

<class 'pymongo.mongo_client.MongoClient'>

 

어느정도 이제 궁금증이 해결되었다. 

반응형