[개발] Framework, Library
프레임워크의 정의와 종류, 라이브러리의 개념에 대해서 소개하겠다.
이번 글도 역시 '비전공자를 위한 이해할 수 있는 IT 지식' 책을 참고하여 정리한다.
프레임워크란?
프레임워크는 어떠한 목적을 달성하기 위해 복잡하게 얽혀있는 문제를 해결하기 위한 구조며, 소프트웨어 개발에 있어 하나의 뼈대 역할을 한다. (출처: 위키백과)
흔한 정의이지만, 프레임워크를 정확히 이해할 수 있도록 예시를 들어 보겠다.
도넛 가게를 창업한다고 생각해보자.
먼저 도넛을 만들기 위해 우유와 밀가루를 구입해 도넛을 만든다. 브랜딩이 필요하므로 이름도 짓고.. 디자인도 해야 한다.
메뉴판, 가구, 포스 단말기, 재고 관리 등 해야 할 일이 많을 것이다.
하지만 이보다 더 빠르게 도넛 가게를 차릴 수 있는 방법은, 던킨도너츠의 프랜차이즈로 들어가는 것이다.
던킨도너츠에서 도넛은 물론 포스 단말기, 디자인, 브랜드, 가구 등을 모두 제공하기 때문이다. 미리 만들어져 있는 것이다.
여기서 프레임워크는 '던킨도너츠' 이다.
예를 들어, 개발자는 iOS 애플리케이션을 만들기 위해서, 애플이 만들어 놓은 프레임워크를 사용한다.
애플이 제공해주는 프레임워크인 코코아(UIkit, AppKit)를 사용하면 애플의 애플리케이션을 쉽고, 빠르게 만들 수 있다.
프레임워크의 종류
큰 IT회사들은 개발자들이 자사의 애플리케이션을 쉽고 빠르게 개발할 수 있도록 프레임워크를 만들어 제공한다. 그 종류들을 소개하도록 하겠다.
프로그래밍 언어 | 프레임워크, 라이브러리 | |
애플 | Objective-C, Swift | Cocoa (UIKit, AppKit..) |
구글 | Java, Kotlin | Android Framework |
웹 | JavaScript | React.js, Vue.js, Angular.js .......... etc |
모바일 프레임워크와 웹 프레임워크/라이브러리
웹은 특정 회사의 소유가 아니기 때문에, 다양한 사람들이 프레임워크를 만든다. 프레임워크의 종류는 정말 정말 많다.
그 중 삼대장이라고 불리는 것들이 위 표에 나온 React.js, Vue.js, Angular.js이다.
[참고] React.js는 페이스북에서, Angular.js는 구글에서, Vue.js는 Evan You 라는 사람이 개발하였다.
웹과 마찬가지로, 서버도 특정 회사의 소유가 아니기 때문에 다양한 프레임워크가 존재한다.
프로그래밍 언어 | 프레임워크/라이브러리 |
Ruby | RAILS |
Java | Spring |
JavaScript | Express |
Python | django |
....... | ..... |
서버 프레임워크/라이브러리
라이브러리란?
그렇다면 라이브러리와 프레임워크의 차이가 무엇일까? 라이브러리 또한 다른 사람들이 만들어 놓은 코드를 이용한다는 측면에서 프레임워크와 동일하다.
두 개념 중, 프레임워크가 더 큰 개념이다. 각종 라이브러리와 코드들이 모여 프레임워크를 이룬다.
한 프로젝트에서 하나의 프레임워크만이 사용될 수 있지만, 라이브러리는 여러 개가 사용될 수 있다.
프레임워크가 자동차, 비행기라면, 라이브러리는 망치와 가위와 같은 도구들이라고 이해하면 쉽다.
프레임워크는 그 안에 들어가서 사용하는 관점이라면, 라이브러리는 가져다가 사용한다고 생각하면 쉽다!
전체적 흐름의 관점에서
프레임워크를 사용한다면 프레임워크가 흐름을 쥐고 있으며, (제어의 역전!)
라이브러리는 호출자(개발자)가 흐름을 쥐고 그 도구들을 사용하고 호출하는 것이다.
-> 제어의 역전이란 어떠한 일을 하도록 만들어진 프레임워크에 제어의 권한을 넘김으로써 클라이언트 코드가 신경 써야 할 것을 줄이는 전략이다.
라이브러리를 통해 스스로 만든 프레임워크는 버그도 스스로 잡아야하지만,
남들이 만들어놓은 프레임워크는 쓰는 사람이 많은 만큼 그만큼 수정이나 업데이트도 빠르다.
정리
프레임워크는 라이브러리, 기능 등을 제공하는 프로그램의 '뼈대', 우리가 몸을 싣고 이동할 수 있는 운송수단과 같은 것이다.
라이브러리는 단순 활용 가능한 도구들이며, 개발자가 주체적으로 사용하고 호출하는 것이다.