📌 공부를 하던 중에 프레임워크에 대한 질문을 받았는데 갑자기 대답이 턱.. 막혀서 한번 찾아보고 공부 내용을 정리해 봤습니다!
일반적으로 웹 개발을 하게되면
프론트에서 HTML, CSS, JavaScript를 사용
백에서 JavaScript, Java ... 등을 사용하게 됩니다. 여기 백엔드 부분에서 서버 개발을 보다 쉽게 하기 위한 목적으로 프레임워크를 사용합니다.(백엔드만 해당한다는 말이 아닙니다..!)
1. 프로그램 유지보수에 용이
(기본 틀이 있기 때문에 내가 작성한 코드를 또는 다른 사람이 작성한 코드를 봤을 때 한눈에 알아볼 수 있다.)
(체계적인 코드관리로 유지보수가 용이하다.)
2. 기본설계 및 기능 라이브러리를 제공하여 개발 생산성이 높다
3. 코드에 대한 재사용성이 높다
1. 학습난이도가 높다.
2. 기본 설계된 구조에 의해 자유로운 개발에 한계가 있다.
3. 제공되는 기능만큼 프로젝트의 용량이 증가한다.
4. 사용하지 않는 기능에 대한 라이브러리가 포함될 수 있다.
이렇게 프론트에서 HTML, CSS, JavaScript / 백엔드에서 프레임워크등을 사용해서 개발을 진행하면 정적인 웹사이트를 개발할 수 있습니다.
제가 설명하는 정적 웹사이트란 일반적으로 알고있는 정적 웹사이트와 조금 다른 개념으로 말을 하는 것입니다.
일반적으로 말하는 정적인 웹사이트는 HTML, CSS로만 구성되어 JavaScript로 구현된 기능이 없는 정말 움직이지 않는 정적인 웹사이트를 말하지만
제가 여기서 말하는 정적인 웹사이트는 ‘페이지를 로드할 때 HTML, CSS, JavaScript 파일을 모두 가져와서 클라이언트에게 보여주는 웹사이트’를 말하는 것입니다.
이런 정적인 웹사이트에 React, Vue, AngularJS와 같은 프론트엔드 프레임워크를 사용하여 SPA(Single Page Application)를 만들 수 있습니다.
(React는 라이브러리입니다!)
단일 페이지 응용 프로그램은 웹 브라우저가 전체 새 페이지를 로드하는 기본 방식 대신 웹 서버의 새 데이터로 현재 웹 페이지를 동적으로 다시 작성함으로써 사용자와 상호 작용하는 웹 응용 프로그램 또는 웹 사이트입니다.
HTML, CSS, JavaScript 파일 전체를 로드하는 기존 방식과 다르게 웹 어플리케이션에서 변경된 부분만 렌더링하는 어플리케이션을 말합니다.
여기까지 프레임워크를 사용하는 이유를 흐름에 맞게 설명드려봤습니다! 그리고 꼭 알아야 하는 프레임워크와 라이브러리의 차이에 대해 설명하겠습니다!!
프레임워크는 뼈대나🦴 기반구조를 뜻하고, 제어의 역전 개념이 적용된 대표적인 기술입니다.
소프트웨어에서의 프레임워크는 '소프트웨어의 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합' 이라 할 수 있으며, 완성된 어플리케이션이 아닌 프로그래머가 완성시키는 작업을 해야합니다.
객체 지향 개발을 하게 되면서 통합성, 일관성의 부족이 발생되는 문제를 해결할 방법중 하나라고 할 수 있습니다.
라이브러리는 단순 활용가능한 도구들의 집합을 말합니다.
즉, 개발자가 만든 클래스에서 호출하여 사용, 클래스들의 나열로 필요한 클래스를 불러서 사용하는 방식을 취하고 있습니다.
라이브러리와 프레임워크의 차이는 제어 흐름에 대한 주도성이 누구에게/어디에 있는가에 있습니다.
즉, 어플리케이션의 Flow(흐름)를 누가 쥐고 있느냐에 달려 있습니다.
프레임워크는 전체적인 흐름을 스스로가 쥐고 있으며 사용자는 그 안에서 필요한 코드를 짜 넣으며 반면에 라이브러리는 사용자가 전체적인 흐름을 만들며 라이브러리를 가져다 쓰는 것이라고 할 수 있습니다.
다시 말해, 라이브러리는 라이브러리를 가져다가 사용하고 호출하는 측에 전적으로 주도성이 있으며 프레임워크는 그 틀안에 이미 제어 흐름에 대한 주도성이 내재(내포)하고 있습니다.
프레임워크는 가져다가 사용한다기보다는 거기에 들어가서 사용한다는 느낌/관점으로 접근할 수 있습니다.
😁 프레임워크와 라이브러리를 비교하는 내용은 찾아보다가 가장 이해하기 쉽게 설명해 주신 블로그를 참고해서 작성하였습니다! [참고블로그]
이상으로 프레임워크, 라이브러리에 대한 설명을 마치겠습니다! 틀린 내용이나 수정할 부분이 있으면 댓글로 남겨주시면 감사하겠습니다.🙌