라이브러리와 프레임워크 구분 모던 웹 JavaScript / 책
2017.05.06 12:17
라이브러리와 프레임워크 구분
모던 웹 JavaScript / 책
jQuery가 라이브러리인지 프레임워크인지 계속해서 질문이 와서 정리합니다.
정리부터 하면
일단 jQuery는 라이브러리
라이브러리와 프레임워크를 구분하는 기준은 제어 역전
제어 역전이란 메인 함수를 만드는 주체가 우리 팀이 아니고 그거인 것을 의미합니다.
# 자바스크립트 개발자들은 딱히 규칙 없이 부르는 느낌[뭐 요즘 다 그런 느낌]
일반적인 웹에서 사용하는 자바스크립트 코드를 라이브러리 또는 프레임워크로 구분하는 것은
"그거 개발한 사람 마음대로"라고 볼 수 있습니다.
사실 현대 들어서나 자바스크립트에서 모두가 인정할 만한 프레임워크가 나오는데
[사실 그래도 "그따위걸 프레임워크라고 부르냐 하면서" 막 싸움][뭘 기준으로 투닥하는지도 잘 모르겠어....]
예전부터 뭔가 자기가 만든걸 멋지게 포장(?)하고자
좀 크면 프레임워크라고 부르는 경향이 있다보니.... 기존 용어의 혼란이 생겨....
대충 좀 크다 = 프레임워크 / 좀 작다 = 라이브러리
라고 구분하더군요[그 구분이 애매해서 투닥투닥 싸우지요].
# 제어 역전
그럼 일반적인 프로그래밍 언어에서 라이브러리와 프레임워크를 구분하는 방법은 무엇일까요?
바로 제어 역전(Inverse of Control: IoC라고도 부릅니다 '-')입니다.
# 일반적인 제어 흐름 - main() 함수 부터
일반적으로
C/C++ 언어로 프로그램을 만드실 때
자바로 프로그램을 만드실 때
C#으로 프로그래밍을 만드실 때
모두 처음 공부할 때 main() 함수부터 시작한다고 배우셨을 것입니다.
[마찬가지로 파이썬 또는 루비 등등에서도 메인이 있지요.]
만약 이 main() 함수를 직접 만들고
기존에 있던 다른 파일의 함수를 가져와서 썼다면
이때 다른 파일 = 라이브러리 입니다.
jQuery를 사용하는 경우에도 메인이라 부를 수 있는 부분은 내가 만들고
다른 파일에서 함수를 가져와서 쓰지요. 따라서 라이브러리라고 부릅니다.
PS. 곧 제어 역전을 설명할텐데....
jQuery에서 $(document).ready() 같은 이벤트에 쓰니까 이 부분을 제어 역전이라고 볼 수 있는 것이 아니냐고 하는 분도 계신데요.
으음.... 사실 측면을 다르게 보면 그렇게 봐서 프레임워크라고 부를 수도 있기는 합니다[뭐 용어는 관점에 따라 다를 수 있으니].
[근데 사실 그냥 만든 사람 설명 따라주는게 좋음.... jQuery는 만든이들이 라이브러리라고 스스로 말하니 라이브러리]
# 제어 역전 - main() 함수는 대체 어디에
그런데 유명한 프레임워크를 보시면
(MFC, Windows Forms, WPF, XNA, Unity Framework, Unreal Framework, Rails, Django 등등)
메인 함수가 대체 어디에 있는지 찾기조차 힘듭니다.
그리고 찾아봤자 그 메인 함수를 건드리면 안됩니다.
프레임워크란 "내가 다른거 일단 다 만들어뒀으니까.... 넌 그거 구조 맞춰서 구현해"라고 하는 것입니다.
원래 제어라는 것은 개발자가 해야하는 것인데
"닥쳐 넌 파일 만들고 클래스와 함수만 만들어 그걸 제어하는건 나(프레임워크)다"하는 것이 제어 역전입니다.
따라서 개발자는 프레임워크가 정한 위치에
파일을 생성하고 클래스를 만들고 함수(또는 메서드)를
프레임워크가 제공해주는 편리한 기능들로 꾸며주면
[이때 이런 각각의 것은 라이브러리가 되겠지요 ㅇㅇ프레임워크의 ㅇㅇ관련 라이브러리]
프레임워크가 알아서 프로젝트 구조 조합해주고 뿅뿅 다 해줍니다.
개발자는 대체 그게 내부적으로 어떻게 호출되는지는 잘 몰라도됩니다.
이런게 프레임워크랍니다 '-'
간단한 구분 끝 '-'
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.

