이 글은 2023년 6월 19일 처음으로 리액트를 접하며 적어놨던 글이다.
개발을 하다보면 Framework, Library 단어를 수도 없이 많이 보게 된다. 정말 매일같이 마주치게 되는 단어인데, 이 두 가지의 차이점이 무엇인지 제대로 알고 쓰고 있을까?
리액트 학습 중, 리액트는 JS기반의 라이브러리라는 것을 알게되었는데, 그렇다면 JS기반 프레임워크인(Angular, Vue)와 라이브러리(React)의 차이가 무엇일까, 문득 고민하게 되었다.
라이브러리, 프레임워크는 둘다, 다른 누군가가 쓴 코드이며, 우리의 개발환경을 윤택하게 하기 위하여 우리 프로젝트에 가져다 사용하는 것이다.
라이브러리와 프레임워크를 가르는 차이점은 아주 심플한 컨셉이다.
⇒ 누가 누구를 컨트롤 하는가? ( 제어 권한 )
즉, 내가 코드를 컨트롤 하느냐 VS 누군가의 규칙을 따라 코딩하느냐가 결국 핵심 차이점이라고 볼 수 있다.
아래 예시를 통해 살펴보면 더욱 이해가 쉽다.
개발자가 웹사이트를 코딩하고 있는데, 개발자가 필요할때 리액트를 부를 수 있다. 즉 내가 필요할 때 호출하고 필요 없으면 사용하지않는다. 따라서 프로젝트가 망가지지 않고, 다른 라이브러리로 쉽게 대체할 수 있다.
이에 반해, 프레임워크는 내가 호출하는 것이 아니라 쉽게 생각해서 프레임워크가 날 호출하는 것이다. 따라서 프레임워크가 정해놓은 룰(규칙과 문서)안에서 따라가야한다. 일례로 django에서 url를 변경하고 싶다면 urls.py안에서 수정해야하는것을 볼 수 있다.
요약하면, 프레임워크는 개발자에게 구체적인 규칙과 구조를 제공하면서 주도권을 가지고 있는 반면, 라이브러리는 필요한 부분에서 개발자가 호출하여 사용하며 주도권은 개발자에게 있는 것이다.
사실 위 핵심만 봐도 무관할 것 같지만 그래도 추가적으로 생산성과 유연성 측면을 살펴보았다.
또한 아래 정리된 표를 통해서도 쉽게 알 수 있다.
출처: https://www.miraeweb.com/single-post/프레임워크와-라이브러리는-어떻게-다른가
원래는 프레임워크와 라이브러리의 차이에 대해서만 알아보려다 리액트가 프레임워크인지 라이브러리인지 꽤나 많은 논쟁이 있었다는 것을 보았다. 근데 여기서 내 호기심이 커진 이유는 아래 사진과 같이 이미 리액트 공식 사이트에서 첫 화면에 떡하니 “The library for web and native user interfaces”라는 문구가 있었기 때문이다.
공식 사이트에서 볼 수 있듯이 난 리액트를 처음 접할때부터 이미 JS ‘라이브러리’라고 접했기에 이게 왜 논란이 되었을까 더욱 궁금했고, 그 이유에 대해서는 위에서 살펴 보았던 제어 흐름의 주도성 내용을 토대로 말해보고자 한다.
리액트는 개발자가 호출하는 것이며, 규칙..폴더구조..컴포넌트명..이런것이 존재하지 않는다. 따라서 라이브러리라고 볼 수 있다. 하지만 리액트는 컴포넌트 기반 아키텍처를 사용하며, 컴포넌트 기반으로 UI를 구성함으로써 애플리케이션을 더 쉽게 유지보수하고 확장할 수 있기 때문에 프레임워크적 특성도 가지고 있다. 바로 이 부분에서 아마 논쟁의 여지가 발생한 것 같다.
쉽게 말하자면 개발자가 컴포넌트를 만든다 ⇒ 리액트가 그걸 불러와서 스크린에 보여준다. 이 때문에 리액트가 프레임워크냐 라이브러리냐 많이 의견이 나뉘는것 같다는 것이다.(리액트가 states,props 같은 것을 컴포넌트에 주기 때문에)
우선 본래 궁금했던 프레임워크, 라이브러리의 핵심적인 차이는 제어 흐름의 주도성을 통해 결정된다는 것을 알 수 있었다. 또한 리액트 자체가 초기에는 경량한 라이브러리로 시작되었지만, 풍부한 기능과 함께 프론트엔드 생태계가 발전하면서 프레임 워크적인 특성도 가지게 됨으로써 리액트에 대한 분류가 다양하게 나타날 수 있다는 것도 흥미로웠다.
그러나 논쟁을 보며 아직 내가 잘몰라서 그런 것일 수도 있지만 리액트가 프레임워크인지 라이브러리인지를 규정하는 것이 중요한가 싶었다. 특히 빠르게 변화하는 프론트엔드 개발 생태계를 고려했을 때 프레임워크와 라이브러리의 각각의 개념과 역할에 대해서 이해하고 그 차이점을 이해하는 것이 중요하며, 각각 기술스택에 대한 특징을 고려하여 프로젝트에 가장 적합한 도구를 선택하는 것이 본질이 아닐까 싶다.