티스토리 뷰
프로젝트를 진행하다보면 프레임워크와 라이브러리라는 고마운 친구들이 도와주곤 한다.
내가 구현하고자 하는 기능을 순식간에 뚝딱 만들 수 있게 해주고, 심지어 뛰어난 프로그래머들이 모여서 만들어낸 것이기 때문에(오픈소스의 경우) 에러나 버그 걱정도 크게 없고, 해당 기능에 들였어야할 노력과 시간을 아껴 다른 파트에 투자할 수 있도록 해줘 프로젝트 자체의 질을 높여주기도 하기 때문이다.
그런데 여기서 프레임워크와 라이브러리의 차이는 무엇일까? 고마운 친구들인 것은 분명하지만 정체도 제대로 모르는 친구들에게 계속 도움을 받는 것도 실례인 듯 하니 한 번 알아보도록 하자.
내가 알고 있던 프레임워크와 라이브러리의 개념에 처음 혼동을 준 범인은 React JS다.
사실 React JS의 공식 홈페이지에서 라이브러리라고 명기를 해놓았으니 논할 필요가 있나 싶기도 하지만, 구글링을 해보면 React JS를 어디서는 프레임워크라고하고, 어디서는 라이브러리라고 한다. 프론트엔드의 자바스크립트 프레임워크로 유명한 Angular나 Vue가 프레임워크라 같이 언급될때 그냥 뭉뚱그려서 얘기를 해서 그런건지 아니면 그 특성때문에 프레임워크와 개념이 헷갈려서 그런건지 보통 Java의 Spring, Node.js의 Express, Python의 Django 등 프레임워크라고 확실히 언급되는 친구들에 비해 React JS는 그 호칭이 모호한 경우가 다소 있었다.
먼저 보편적인 프레임워크와 라이브러리의 개념에 대해서 짚고 가보자.
프레임워크는 틀이다. 사전적 의미만 따져도 직관적으로 알 수 있다. 분명한 사용 목적이 있고, 그 목적을 달성하기 위해 프레임워크의 규칙에 따라야 한다. 이 규칙이라는 어휘 사용에서 틀의 개념을 엿볼 수 있다.
라이브러리는 도구다. 도서관에서 내가 원하는 책을 빼서 사용하듯 원하는 기능을 구현하는데에 잠깐 사용하는 느낌이다.
그래서 보통 이 둘의 비유적 예시로 프레임워크는 자동차, 배와 같은 탈 것, 라이브러리는 망치, 삽과 같은 연장으로 비교를 하곤 한다. 자동차는 무척이나 편리하지만 반드시 땅 위에서 타야한다는 규칙이 있다 배처럼 물 위에서는 탈 수 없다. 즉, 규칙(사용 방법)을 따라야 한다. 망치, 삽은 못을 박고, 땅을 파는데 각각 특화되어 있지만 망치로도 땅은 팔 수 있고 삽으로도 못은 박을 수 있다.
이런 관점에서 보자면 React JS는 내 생각에 프레임워크와 라이브러리의 사이 그 어딘가에 있는 것이 아닌가 싶다.
그리고 직접 React JS를 사용해보면서 그렇다는 생각이 더 강하게 들었다.
React JS가 만들어진 목적은 SPA를 효율적이고 편리하게 제작할 수 있도록 하는 것이다.
그 목적을 위해 JSX와 state라는 새로운 자바스크립트 문법을 활용하고 있으며 이를 활용하기 위해선 규칙에 따라야 한다. (state 변경 시 setState를 사용해야 한다거나..) 안 지켜도 사용할 수는 있지만 안 지키면 그거 지키는게 신상에 이로울거라는 협박 메세지가 콘솔에 뜬다.
그래서 보편적으로 프로그래머들이 생각하고 있는 프레임워크의 개념에 좀 더 가깝지 않나 하는 생각이 든다.
지인들에게도 물어보니 지인 A는 "뚜렷한 목적이 있으며", "그걸 위한 정형화된 규칙이 있는가"를 프레임워크의 조건으로 생각하고 있으며, 유용한 기능들을 많이 제공해주지만 강제되는 규칙이 없는 JQuery와는 달리 리액트는 강제는 아니지만 아무도 깨지 않는 규칙이 있으므로 프레임워크로 봐도 아무 문제 없다는 답변을 해주었다.
지인 B는 단순 React JS만으로는 구현하기 힘든 것들이 있고(라우팅 기능 등), 그걸 위해선 꼭 라이브러리를 또 가져다 써야하기 때문에 마치 무옵션 깡통 자동차와 같은 느낌이고, 프레임워크라면 그 기술 자체로 웬만한 어플리케이션은 구현이 되어야한다고 생각하기 때문에 React JS는 라이브러리라고 얘길해주었다.
나는 지인 B의 시점에서 본다고 쳐도 React JS는 그자체로 어플리케이션을 만들어낼 수 있기 때문에 프레임워크라고 보는게 맞지 않나 하고 생각이 들었다. 게다가 그래봐야 SPA밖에 못 만들지 않냐는 주장도 애초에 SPA를 목적으로 만들어진 것이기 때문에 따지는 의미가 없다고 본다. Java Spring보고 웹서버밖에 못 만드는거 아니냐는 이야기와 다를게 없지 않은가?
그러면 어째서 React JS 공식 홈페이지에는 라이브러리라고 표기해 둔 것일까? 정말로 표면적인 강제성이 없기 때문인 걸까?
'Programming Language > JavaScript' 카테고리의 다른 글
null 과 undefined의 차이 (0) | 2020.04.30 |
---|---|
AJAX란? (0) | 2020.04.12 |
30 JavaScript Day 6 - ajax-type-ahead (0) | 2020.04.05 |
30 JavaScript Day 5 - Flex Panels Image Gallery (0) | 2020.03.26 |
30 JavaScript Day 4 - Array Cardio (0) | 2020.03.23 |