프레임워크와 라이브러리
시작하기에 앞서 인터넷에서 검색한 프레임워크와 라이브러리는 각각 어떻게 표현되고 있는지 알아보겠습니다.
개요
프레임워크란 ?
컴퓨터 프로그래밍에서 소프트웨어 프래임워크는 복잡한 문제를 해결하거나 서술하는 데 사용되는 기본 개념 구조이다. 간단히 뼈대, 골조, 프레임워크라고도 한다.
라이브러리란 ?
주로 소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임이다. 여기에는 구성 데이터, 문서, 도움말 자료, 메시지 틀, 미리 작성된 코드, 함수, 클래스 값, 자료형 사양을 포함할 수 있다.
출처 위키백과
간단하게 얘기하자면
프레임워크는 말 그대로 frame(틀)과 work(일하다)가 합쳐진 단어로, 틀, 뼈대를 가지고 일하다. 즉, "제공받은 일정한 요소와 틀, 규약을 갖고 무언가를 만드는 일"이라고 생각하면 됩니다.
라이브러리는 "도구의 모음", 소프트웨어를 개발하기 쉽게 어떤 기능을 제공하는 도구들이라 할 수 있습니다.
이로써 이 둘의 차이점이 보이는데 프레임워크와 라이브러리의 차이점은 뭐가 있을까요??
프레임워크와 라이브러리의 차이점
1. 제어 흐름 :
- 프레임워크는 애플리케이션의 흐름을 제어합니다. 개발자는 프레임워크에 따라야 할 규칙 과 구조(틀) 를 따라가야 합니다. 프레임워크는 개발자에게 어떤 부분에서 어떤 코드를 작성해야 하는지 지시하면서 개발의 틀을 제공합니다.
- 라이브러리는 개발자가 필요할 때 호출 할 수 있는 도구의 모음 이지만, 개발자는 애플맄케이션의 제어 흐름을 직접 관리합니다. 라이브러리는 단순히 기능을 제공하고, 언제 호출할지는 개발자가 결정합니다.
2. 역할 :
- 프레임워크는 애플리케이션의 전체 구조를 정의하고 제공합니다. 주로 애플리케이션의 뼈대 를 형성하며, 이에 따라 개발자는 특정한 기능을 구현하게 됩니다.
- 라이브러리는 특정 기능이나 작업을 수행하기 위한 코드의 모음 입니다. 라이브러리를 사용하면 개발자는 필요한 부분만 가져다 사용할 수 있습니다.
3. 제어 권한 :
- 프레임워크는 정해진 규칙에 따라 작성해야 하므로 개발자의 일부 자유도가 제한될 수 있습니다.
- 라이브러리는 개발자가 언제든지 필요한 시점에 라이브러리를 호출하거나 무시할 수 있으므로 더 큰 자유도를 가집니다.
요약하자면
프레임워크는 애플리케이션의 전반적인 구조와 흐름을 제공하며 개발자는 그 안에서 필요한 부품을 채워넣는 반면, 라이브러리는 개발자가 필요한 부분을 직접 선택하여 사용할 수 있는 도구의 집합입니다. 즉, 프레임워크는 정해진 틀과 규칙에 맞게 프로그래밍을 해야하고, 라이브러리는 개발자가 프로그래밍을 하는데 필요한 자원을 제공해줍니다.
자주 사용되는 프레임워크, 라이브러리
프레임워크
1. 웹개발 :
- Django : Python 기반의 웹 애플리케이션 프레임워크로, 안정성과 생산성에 중점을 둡니다.
- Ruby on Rails : Ruby 언어를 기반으로 하는 웹 개발 프레임워크로, 개발의 간소화와 빠른 개발에 초점을 둡니다.
- Express.js : Node.js 기반의 웹 애플리케이션 프레임워크로, 경량이면서도 유연한 웹 애플리케이션을 개발할 수 있습니다.
2. 자바스크립트 프레임워크 :
- React : Facebook(현 Meta)에서 개발한 사용자 인터페이스를 구축하기 위한 자바스크립트 라이브러리로, 단일 페이지 애플리케이션을 만들 때 많이 사용됩니다.
- Angular : Google에서 개발한 프론트엔드 프레임워크로, 대규모 웹 애플리케이션을 구축하는 데 도움을 줍니다.
- Vue.js : 가볍고 유연한 자바스크립트 프론트엔드 프레임워크로, 간단한 프로젝트부터 복잡한 애플리케이션까지 다양하게 사용됩니다.
3. 모바일 앱 개발 :
- Flutter : Google에서 개발한 모바일 앱을 위한 UI 프레임워크로, Dart 언어를 사용합니다.
- React Native : React 기반의 모바일 앱 개발 프레임워크로, 자바스크립트와 React를 사용해 iOS 및 Android 앱을 개발할 수 있습니다.
라이브러리
1. 데이터 과학 및 머신러닝 :
- NumPy : 과학 및 수학 연산을 위한 Python 라이브러리로, 다차원 배열과 행렬을 다루는 데 특화되어 있습니다.
- TensorFlow,PyTorch : 딥러닝 및 머신러닝 모델을 구축하기 위한 강력한 라이브러리로, 각각 Google, Facebook(현 Meta)에서 개발되었습니다.
2. 웹 개발 :
- jQuery : 자바스크립트 라이브러리로, HTML 문서 조작과 이벤트 처리를 쉽게 처리할 수 있도록 도와줍니다.
- Bootstrap : 웹 디자인을 쉽게 구축하기 위한 HTML, CSS, JS 기반의 프론트엔드 프레임워크로, 반응형 웹 디자인을 지원합니다.
3. 일반적인 프로그래밍 및 유틸리티 :
- Requests : Python 에서 HTTP 요청을 간편하게 처리하는 라이브러리로, API 호출 등에 많이 사용됩니다.
- Lodash : 자바스크립트 유틸리티 라이브러리로, 배열 조각, 객체 조작, 함수형 프로그래밍과 같은 기능을 제공합니다.
위처럼 프레임워크와 라이브러리에는 다양한 종류가 있습니다. 개발자는 자신이 하고 있는 혹은 하고자 하는 프로젝트에 맞게끔 프레임워크와 라이브러리를 잘 고려하여 선택하면 됩니다.
여기서 질문
리액트는 프레임워크가 아닌 라이브러리가 맞는 거 아닌가요?
맞습니다. 리액트는 원래 Facebook 팀에서 UI를 구축하기 위한 라이브러리로 시작되었습니다.
그러나 리액트는 시간이 지남에 따라 기능이 확장되고, 커뮤니티의 지속적인 기여와 지원으로 더 많은 프레임워크적인 특징을 갖추게 되었는데, 이는 리액트가 단순한 뷰 레이어 라이브러리에서 더 복잡하고 강력한 프레임워크로 발전하게 된 이유 중 하나라고 볼 수 있습니다.
자세히 보기
리액트는 컴포넌트 기반의 아키텍처를 통해 재사용이 가능한 UI 조각을 만들고 관리하는데 초점을 맞추고 있으며, 상태 관리, 라우팅, 테스팅, 서버 사이드 렌더링 등 다양한 기능을 제공합니다. 이로 인해 리액트를 사용하는 개발자들 중에서는 리액트를 라이브러리가 아닌 프레임워크로 간주하는 사람들도 있습니다.
그러나 끝까지 이견이 있을 수 있는데, 어떤 사람들은 여전히 리액트를 라이브러리로 취급하며 이는 리액트가 다른 기능들을 직접적으로 제공하는 것이 아니라 컴포넌트 기반의 UI를 빌드하는 데 주로 중점을 둔다는 견해에서 비롯됩니다. 개발자들 간의 이러한 용어 사용의 차이는 어떤 면에서는 주관적이며 맥락에 따라 다를 수 있습니다.
이로써 프레임워크와 라이브러리에 대해 알아보았습니다. 감사합니다.