Dev-Tino

Dev-Tino 5주차(3):: 프레임워크와 라이브러리

내가 아는 교수님께서는 소프트웨어의 개발을 늘 ‘집 짓기’에 비유하셨다. 땅을 단단하게 고른다(기반을 쌓는다.). 집을 짓는 데에 필요한 도구를 결정하고 재료를 준비한다. 기본적인 뼈대를 만들어 세우고(큰 틀 잡기) 외벽을 짓는다. 마지막으로 속을 채운 뒤 계속해서 유지 보수하면 완벽하다.

프레임워크와 라이브러리는 ‘집 짓기에 필요한 도구’이다. ‘일반적인 문제를 해결하는 데에 사용하는, 다른 사람이 작성한 코드’이다. 둘 모두 소프트웨어의 개발을 돕는 도구이나 기본적인 개념과 사용 방식에서 차이가 있다.

라이브러리

소프트웨어를 개발할 때 프로그램이 사용하는 비휘발성(*삭제되지 않는) 자원의 모임. 구성 데이터, 문서, 도움말 자료, 메세지 틀, 미리 작성된 코드, 서브 루틴, 값, 클래스 등이 포함된다.

Spring, Vue.JS, Django 등, 일반적으로 어떤 프로젝트에 사용하는 뼈대가 될 수 있는 코드의 집합. 책으로 비유할 수 있다. ‘특정 기능을 개발하기 위해 필요한, 미리 구현해둔 도구 혹은 함수들의 집합’. 누구든 만들 수 있으며, 특정 동작에 대한 로직을 구현해둔 것이기에 활용이 간단하다.

C++의 표준 템플릿 라이브러리, JQuery, React 등도 라이브러리이다.

프레임워크

원하는 기능 구현에 집중하여 개발할 수 있도록 일정한 형태와 기능을 갖추고 있는 골격, 뼈대.

애플리케이션 개발 시 필수적인 코드, 알고리즘, DB 연동과 같은 기능의 뼈대를 제공하면, 개발자는 그 구조 위로 개발을 하는 식이다. 이는 코드의 재사용성을 높이고 개발 속도를 높인다. 앱/서버의 구동, 메모리 관리, 이벤트 루프를 프레임워크가 관리한다면, 사용자(개발자)는 프레임워크가 정해준 방식대로 클래스와 메소드를 구현한다.

한마디로, 프레임 워크는 ‘특정 문제를 해결하기 위해 상호 협력하는 클래스와 인터페이스의 집합’이라고 볼 수 있다.

Sprign Framework(Java 서버 개발에 사용), Django, Flask(Python 서버 개발에 사용), Android(android 앱 개발에 사용), Angular, Vue.JS(웹 개발에 사용).

라이브러리와 프레임워크는 둘 모두 ‘다른 누군가가 쓴 코드’이며, 우리의 개발을 돕는 도구이나 라이브러리는 ‘우리가 코드를 컨트롤’ (우리가 규칙을 짜며, 코드를 작성하고 컨트롤한다‘)하는 데에 비해 프레임워크는 ’타인의 규칙에 우리가 따른다‘는 점이 다르다.

라이브러리는 ‘매우 쉽게 바꿀 수’ 있으나 프레임워크는 바꿀 수 없다. 라이브러리는 시간을 절약하기 위해 소환하는 코드이다. 그러나 프레임워크는 ‘남이 짜준 뼈대’이다. 우리가 라이브러리를 도구처럼 사용한다면, 프레임워크는 우리가 써야 할 ‘지침’이고 기준이다. (대체가 어려움.)

많은 글들은 프레임워크와 라이브러리의 차이점에 대해 다음과 같이 기술한다::

프레임워크와 라이브러리의 차이점

-제어와 역전

전체적인 흐름을 누가 쥐고 있느냐가 둘의 가장 큰 차이점이다. 라이브러리는 ‘사용자가 필요에 따라 라이브러리를 가져다 쓰는 것’이기에 전체적인 흐름에 크게 관여하지 않으나 프레임 워크는 전체적인 흐름을 프레임워크가 쥐고 있다. 소프트웨어의 규칙과 흐름을 ‘누가’ 다루느냐. 그 점에서 두 도구는 대비된다.

-구조 제공 유무

그러니 당연하게도, 프레임워크는 전체 어플리케이션의 구조를 정의하고 일정한 개발 패턴을 따르게 한다. 제어 흐름을 가지고 있다는 말과 비슷한 뜻이다. 그러나 라이브러리는 특정 기능만을 제공할 뿐 어플리케이션의 전체 구조에는 관여하지 않는다. 사용하는 개발자 스스로 원하는 방식으로 구조를 설계한다.

이와같이, 프레임워크와 라이브러리는 각각의 장단점이 있으므로 상황과 요구에 따라 선택하여 사용하는 것이 좋다.


요즘에는 JS에 대해 공부하고 있다. JS를 작업할 수 있도록 돕는 프레임워크와 JS에 대해 소개해볼 생각이다.

JS를 이용하는 대표적 라이브러리는 ‘리액트’(*UI 구축을 위한 자바스크립트 라이브러리, 가상 DOM을 이용하여 효율적으로 UI 업데이트함), ‘JQuery’(*HTML 문서를 조작하고 이벤트 핸들러를 추가하는 데에 사용하는 자바 스크립트 라이브러리)가 있다. 이들은 ‘내가 코드를 더 쉽고 빠르게 작동할 수 있’도록 돕는다. 이들은 코드의 규칙을 강제하지 않는다.

프레임워크에는 Angular(*구글에서 개발한 프레임워크, 컴포넌트 기반 아키텍처 구축, 유연하고 재사용 가능한 코드 작성 지원), Vue.JS(가벼운 자바스크립트 프론트엔드 프레임워크, React와 유사한 가상 DOM(Virtual DOM)을 이용하여 UI 업데이트를 최소화하였다.)가 있다.

프레임워크와 라이브러리가 언뜻 보기에는 비슷해보이지만, 실제로는 개념이 많이 다름을 신경써야 한다.

[참고 자료]

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

-https://webclub.tistory.com/458

-https://f-lab.kr/insight/frameworks-vs-libraries

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

-https://idkim97.github.io/2022-08-16-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC%20vs%20%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC/

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

카테고리
#기타

댓글 0



추천 포스트