라이브러리와 프레임워크의 차이는 뭘까?
뭔가 느낌으로는 알겠는데, 막상 설명을 하라고 하면 정확하게 잘 못하겠다.
그 말은 즉, 내 머릿속에 아직 명확하게 정리가 되어있지 않다는 뜻이겠지..!
이 참에 제대로 공부해보자!
- 라이브러리란?
- 자주 쓰는 코드를 함수로 가공해서 정리해 놓은 것을 재사용할 수 있도록 해놓은 일종의 코드 모음집.
이미 다른 개발자들이 잘 짜놓은 코드를 공유받아 쓸 수 있는 도서관(library) 같은 역할을 한다.
- 자주 쓰는 코드를 함수로 가공해서 정리해 놓은 것을 재사용할 수 있도록 해놓은 일종의 코드 모음집.
- 프레임워크란?
- 페이지 설계의 토대가 되는 부분을 기술해 놓은 기반 코드(클래스) 및 라이브러리를 제공해 주는 구조.
# 공통점
- 둘다 다른 사람이 만들어둔 코드. 우리의 프로젝트를 위해서 이 코드를 가져다가 쓴다.
- pre-packaged 3rd party code used to help solve specific problems.
# 차이점
프레임워크와 라이브러리를 나누는 기준 : 누가 누구를 컨트롤 하는지? (Who is controlling?)
흔히 많이 쓰는 말 중 하나가, "Your code calls the library, but a framework calls your code."
즉, 너의 코드가 라이브러리를 부른다. 반면 프레임워크는 너의 코드를 부른다.
- You can utilize unlimited libraries from within an application, but you would only use one framework at a time.
너는 앱에 라이브러리들을 무제한으로 활용할 수 있다. 하지만 프레임워크는 한번에 하나만 사용할 수 있다.
# 라이브러리
- You can utilize a library from within your codebase to help solve specific problems.
문제를 해결하기위해 너의 코드 '안에서' 라이브러리를 활용할 수 있다. 즉, '내'가 control을 하는 것. 제어흐름이 사용자에게 있다.
- 필요시, 내 작업에 다른 사람들이 만들어둔 코드를 가져와서 사용하는 것
- 참고가 용이하다. 라이브러리의 일부분만 가져와서 사용하는게 편리.
- 쉽게 대체될 수 있다.
ex1) moment.js, day.js (일자/시간 라이브러리)
회사 프로젝트에서는 종종 moment.js 라이브러리를 사용하였다.
체크인 시간/날짜를 구현하는 부분이 있었는데 그 부분에서 '내가' 이 moment.js 라이브러리가 '필요'할 것 같아 이 프로젝트 내에서 moment.js 라이브러리를 가져와서 사용하였다. (물론, 프로젝트 내에서 moment.js뿐만 아니라 많은 라이브러리를 활용하고 있었다.)
그러다 moment.js 라이브러리가 더이상의 업데이트가 없다고 하여, 유사한 day.js라는 라이브러리로 대체하였다.
이렇게 라이브러리는 한 application에서 많이 사용할 수 있고, '내가 필요할 때' 가져올 수 있으며, 다른 라이브러리로 쉽게 대체할 수 있으며 대체한다고 그 프로젝트가 망가지지 않는다.
ex2) JQuery
JQuery는 웹사이트에 interactive한 요소를 넣을 수 있다. 그래서 웹사이트를 코딩하고 있는데 '내가 필요할때', '내가' JQuery를 소환한다. 이렇게 코딩을 하다가 '필요할 때' JQuery를 부른다.
내가 원하면 JQuery를 다른 걸로 대체해도 된다.
# 프레임워크
- Framework is the foundation of your codebase. The framework exists first and you build from within it.
프레임워크는 너의 코드의 뼈대, 토대이다. 프레임워크가 먼저 존재하고, 너는 그 프레임워크 안에서 (코드를) 짓는다/쌓는다/작성한다.
- 내가 프레임워크를 부르는 것이 아닌, 프레임워크가 나 또는 내 코드를 부른다. 즉, '프레임워크'가 나를 control한다. 제어 흐름이 프레임워크에 있다.
- 다른 사람들이 만들어둔 틀 속으로 내가 들어가는 것. 틀 안에서 개발자가 작성한 코드가 수동적으로 동작.
- 프레임워크는 반드시 따라야하는 규칙이 있다. 따라서, 프레임워크로 일을 할 때는 프레임워크의 규칙을 따라야 한다. 내가 코드의 규칙을 결정하는 입장이 아니다. 프레임워크가 어떻게 하라고 알려준다. 프레임워크가 어디에 코드를 넣어야하는지 등을 알려준다. 프레임워크가 나에게 규칙을 알려준다. 어디에 템플릿을 넣고, 컨트롤러를 넣고, 뷰를 넣고...규칙에 따라서 하면 모든건 정상작동한다. 내가 컨트롤하는건 없다. 그냥 규칙을 따라갈 뿐.
ex1) Vue, Angular
회사에서 프레임워크를 Vue를 사용하였다.
물론 Vue, React, Angular 등 그건 우리가 결정할 수 있지만, Vue라는 프레임워크로 결정한 이상, 이 프레임워크의 규칙대로 내 코드를 작성해야한다.
Vue documentation을 따라 여러 규칙에 맞춰 코드들을 작성하였다. data옵션, methods 옵션을 사용하려면 이렇게 작성해야하고 폴더 구조도 정해져있으며, Vue 인스턴스를 DOM에 mount하려면 이 규칙에 맞춰 작성하고 등등. 나의 코드 베이스들이 이 규칙에 따라야 한다.
ex2) 장고(django)
규칙이 정말 많다. 잘 작동하길 바란다면 모든 규칙을 잘 준수해야한다.
장고에서 admin 패널을 만들고싶다면 무조건 코드를 admin.py에 써야한다.
만약 URL을 바꾸고싶다면 반드시 파일면 url.py를 가야한다. 왜냐하면 장고가 시작할때 url.py, admin.py를 읽는다. 내가 이걸 바꿀 수 없다. 이건 장고가 가지고 있는 규칙이다. 이걸 잘 준수해야 admin 패널, url이 잘 작동하는걸 볼 수 있다. 여기서는 내가 장고를 부르고 그러지 않는다. 장고 문서를 보면서 장고 규칙에 따라 코드들을 잘 넣어두면 장고가 그걸 실행시킨다.
'Computer Science' 카테고리의 다른 글
컴파일러 vs 인터프리터 (0) | 2023.11.24 |
---|---|
객체지향 프로그래밍에 대해서 (0) | 2023.11.18 |
웹 서버 (0) | 2023.08.16 |
운영체제 개요 및 응용프로그램 (0) | 2022.03.05 |
문자열 세트(또는 문자셋) 및 유니코드 & 인코딩, UTF-8란? (0) | 2021.10.31 |