프레임워크 vs 라이브러리

김장호·2024년 2월 16일
0

CS

목록 보기
1/2
post-thumbnail

이 글은 2023년 6월 19일 처음으로 리액트를 접하며 적어놨던 글이다.

개요

개발을 하다보면 Framework, Library 단어를 수도 없이 많이 보게 된다. 정말 매일같이 마주치게 되는 단어인데, 이 두 가지의 차이점이 무엇인지 제대로 알고 쓰고 있을까?

0. 찾아보게 된 계기

리액트 학습 중, 리액트는 JS기반의 라이브러리라는 것을 알게되었는데, 그렇다면 JS기반 프레임워크인(Angular, Vue)와 라이브러리(React)의 차이가 무엇일까, 문득 고민하게 되었다.

1. 핵심은 제어 흐름의 주도성

라이브러리, 프레임워크는 둘다, 다른 누군가가 쓴 코드이며, 우리의 개발환경을 윤택하게 하기 위하여 우리 프로젝트에 가져다 사용하는 것이다.

라이브러리와 프레임워크를 가르는 차이점은 아주 심플한 컨셉이다.

⇒ 누가 누구를 컨트롤 하는가? ( 제어 권한 )

즉, 내가 코드를 컨트롤 하느냐 VS 누군가의 규칙을 따라 코딩하느냐가 결국 핵심 차이점이라고 볼 수 있다.

아래 예시를 통해 살펴보면 더욱 이해가 쉽다.

개발자가 웹사이트를 코딩하고 있는데, 개발자가 필요할때 리액트를 부를 수 있다. 즉 내가 필요할 때 호출하고 필요 없으면 사용하지않는다. 따라서 프로젝트가 망가지지 않고, 다른 라이브러리로 쉽게 대체할 수 있다.

이에 반해, 프레임워크는 내가 호출하는 것이 아니라 쉽게 생각해서 프레임워크가 날 호출하는 것이다. 따라서 프레임워크가 정해놓은 룰(규칙과 문서)안에서 따라가야한다. 일례로 django에서 url를 변경하고 싶다면 urls.py안에서 수정해야하는것을 볼 수 있다.

요약하면, 프레임워크는 개발자에게 구체적인 규칙과 구조를 제공하면서 주도권을 가지고 있는 반면, 라이브러리는 필요한 부분에서 개발자가 호출하여 사용하며 주도권은 개발자에게 있는 것이다.

2. 차이점 더 살펴보기

사실 위 핵심만 봐도 무관할 것 같지만 그래도 추가적으로 생산성과 유연성 측면을 살펴보았다.

  • 프레임워크: 일반적으로 프레임워크는 구조, 자동화된 기능 등을 제공하기 때문에 개발 속도를 높일 수 있다. 그러나 특정 규칙을 따르기 때문에 유연성이 일부 제한될 수 있다.
  • 라이브러리: 라이브러리는 필요한 기능을 선택적으로 사용할 수 있어 유연성이 높다. 그러나 개발자가 직접 제어해야 하는 부분이 많기 때문에 생산성은 상대적으로 낮을 수 있다.

또한 아래 정리된 표를 통해서도 쉽게 알 수 있다.


출처: https://www.miraeweb.com/single-post/프레임워크와-라이브러리는-어떻게-다른가

3. 리액트 논쟁?

원래는 프레임워크와 라이브러리의 차이에 대해서만 알아보려다 리액트가 프레임워크인지 라이브러리인지 꽤나 많은 논쟁이 있었다는 것을 보았다. 근데 여기서 내 호기심이 커진 이유는 아래 사진과 같이 이미 리액트 공식 사이트에서 첫 화면에 떡하니 “The library for web and native user interfaces라는 문구가 있었기 때문이다.

공식 사이트에서 볼 수 있듯이 난 리액트를 처음 접할때부터 이미 JS ‘라이브러리’라고 접했기에 이게 왜 논란이 되었을까 더욱 궁금했고, 그 이유에 대해서는 위에서 살펴 보았던 제어 흐름의 주도성 내용을 토대로 말해보고자 한다.

리액트는 개발자가 호출하는 것이며, 규칙..폴더구조..컴포넌트명..이런것이 존재하지 않는다. 따라서 라이브러리라고 볼 수 있다. 하지만 리액트는 컴포넌트 기반 아키텍처를 사용하며, 컴포넌트 기반으로 UI를 구성함으로써 애플리케이션을 더 쉽게 유지보수하고 확장할 수 있기 때문에 프레임워크적 특성도 가지고 있다. 바로 이 부분에서 아마 논쟁의 여지가 발생한 것 같다.

쉽게 말하자면 개발자가 컴포넌트를 만든다 ⇒ 리액트가 그걸 불러와서 스크린에 보여준다. 이 때문에 리액트가 프레임워크냐 라이브러리냐 많이 의견이 나뉘는것 같다는 것이다.(리액트가 states,props 같은 것을 컴포넌트에 주기 때문에)

4. 개인적인 생각

우선 본래 궁금했던 프레임워크, 라이브러리의 핵심적인 차이는 제어 흐름의 주도성을 통해 결정된다는 것을 알 수 있었다. 또한 리액트 자체가 초기에는 경량한 라이브러리로 시작되었지만, 풍부한 기능과 함께 프론트엔드 생태계가 발전하면서 프레임 워크적인 특성도 가지게 됨으로써 리액트에 대한 분류가 다양하게 나타날 수 있다는 것도 흥미로웠다.

그러나 논쟁을 보며 아직 내가 잘몰라서 그런 것일 수도 있지만 리액트가 프레임워크인지 라이브러리인지를 규정하는 것이 중요한가 싶었다. 특히 빠르게 변화하는 프론트엔드 개발 생태계를 고려했을 때 프레임워크와 라이브러리의 각각의 개념과 역할에 대해서 이해하고 그 차이점을 이해하는 것이 중요하며, 각각 기술스택에 대한 특징을 고려하여 프로젝트에 가장 적합한 도구를 선택하는 것이 본질이 아닐까 싶다.

profile
하루하루 작은 한 걸음으로 꾸준히 나아가고자 합니다 :)

0개의 댓글