Anything Is Possible

프레임워크와 라이브러리 차이점(Framework & Library)

취업준비/면접준비

오늘은 프레임워크라이브러리의 차이점에 대해 알아보자!

일단 프레임워크와 라이브러리는 둘다 다른 누군가가 쓴 코드인데, 우리의 프로젝트를 위해서 가져다가 쓰는거야!

즉, 우리의 코딩 삶을 윤택하게 하기 위해서 가져다가 쓰는 것들

라이브러리, 프레임워크를 가르는 차이점은 아주 간단한 컨셉이야!

Who is controlling ??? 누가 누구를 컨트롤 하는가! 이다.

너가 코드를 컨트롤하는건지 vs 누군가의 규칙을 따라 코딩하는건지

예를 들어, 라이브러리의 가장 좋은 예시는 JQuery 야! 제이쿼리는 웹사이트에 인터렉티브한 요소를 넣을 수 있는데 그래서 내가 웹사이트를 코딩을 하고 있는데 내가 필요할때, "내가" 제이쿼리를 소환을 해.

코딩을 하다가 필요할때 제이쿼릐를 부르는 거고, "내가"(나자신) 코딩을 해나가는 거지. 이게 라이브러리야! (우리가 필요할때 라이브러리를 쓰는거야. 그리고 라이브러리는 정말 쉽게 대체될 수 있어 = 내가 원하면 제이쿼리를 다른걸로 대체해도 돼! 그런다고 프로젝트가 망가지지도 않아, 왜냐면 시간절약하려고 소환하는 그런거니깐)

자. 하지만! 프레임워크는 달라! 왜냐 너가 프레임워크를 부르는 것이 아니거등! "프레임워크"가 너를 부르는 거지!

바로 이게 가장 명확한 라이브러리와 프레임워크의 차이점이야!

프레임워크로 일을 할때는 프레임워크의 규칙을 따라야해! 너가 코드의 규칙을 결정하는 입장이 아니거든! 

프레임워크가 어떻게 하라고 알려주는 거야! 프레임워크가 어디에 코드를 넣어야하는지 등등을 알려줘!

즉, 프레임워크가 너에게 규칙을 알려주는 거야! 어디에 템플릿을 넣고, 컨트롤러를 넣고, 뷰를 넣고..... 규칙에 따라서 하면 모든건 정상작동하겠지. 너가 컨트롤 하는건 없어. 그냥 규칙을 따라갈뿐.

프레임워크의 좋은 예시는 장고 웹 프레임워크임(django). 장고 웹 프레임워크는 규칙이  정말 많아. 잘 작동하기를 바란다면, 모든 규칙을 잘 준수해야하지.

예를 들어, 장고에서 어디민 패널을 만들고 싶다면, 무조건 코드를 admin.py에 써야해.

만약 URL을 바꾸고 싶다면? 반드시 파일명 url.py를 가야하듯이!

왜냐면 장고가 시작할때 url.py. admin.py를 읽거든.

너가 이걸 바꿀수는 없어. 이건 장고가 갖고있는 규칙이야. 이걸 잘 준수해야 어드민 패널, URL이 잘 작동하는걸 볼 수 있엉.

다시말해, 이 시나리오에서는 내가 장고를 부르고 그런거 없음. 장고 문서를 보면서 장고 규칙에 따라 코드들을 잘 넣어두면, 장고가 그걸 실행시키는 거니깐.

프레임워크라고 하는 것들은 반드시 따라야 하는 규칙이 있어.

라이브러리는 우리가 필요할때 부르는 것들인거고!

-> "내가" 라이브러리를 부르는 것이고 / "프레임워크"가 나를 부르는 거야!

그러니깐 "000을 빌드하기 위한 000 라이브러리"이면 너가 필요할때마다 부를 수 있는 것이라는 걸 알거야! (ex. A JavaScript library for builing user interfaces)

반대로 "000을 빌드하기 위한 프레임워크"이면 이건 규칙과 문서가 따라오는 것이며. 너가 적극 수용해야해. (ex. The Web framework for perferctionists with deadlines)

그런데 말이지! 리액트JS 웹사이트에 가면... "리액트는 라이브러리라고" 말을 해. 즉. 너의 어플리케이션의 UI를 빌드할때 리액트를 부르는거야. 이 경우 "너가" 리액트를 부르는 거지. 너가 부르는 것이니까. 리액트는 라이브러리가 되는 것이 맞지. 그리고 리액트는 그런 규칙,, 폴더 구조나 컴포넌트명이나, 그런게 없어. 하지만, "리액트가" 우리의 컴포넌트를 부르긴 하지. 그래서 이 경우엔 리액트를 프레임워크로 부를 수 있는 거야. 왜냐하면 리액트가 컴포넌트를 부르는거니깐. 규칙을 알려주고 말이지. 뭐가 틀리고, 뭐가 맞는지를 알려주거든. 너가 컴포넌트를 쓰면, 리액트가 그걸 불러와서 스크린에 보여줘! 그래서 꽤나 회색의 영역이고 관려하여 많은 구글 검색이 가능할거야!

어떤 사람들은 리액트는 라이브러리다. 너가 필요할때 부르니깐. 동시에 프레임워크로 불릴 수 있다. 컴포넌트를 불러오니깐~

리액트가 우리의 컴포넌트를 인터렉티브하게 만들어주니까! 리액트가 states. props 같은 걸 컴포넌트에게 주니까.

이건 Vue.js도 마찬가지야!

그런데 이게 라이브러리인지 프레임워크인지 규정하는게 중요한가?

나는 상관없다고 보는게. 프론트엔드에서 뭐든 다 이모양이거든(모르겠다.. 몰랐겠지.. 몰랐더라도... 몰랄겠구나... 모를수록... 몰랐으니)ㅋㅋㅋㅋㅋㅋ 하지만 적어도. 우리는 개념상으로는 이해하고 있어야 된다고 생각해! 이 둘의 차이가 무엇인지 말야.

즉. 둘의 경계가 항상 뚜렷하지는 않지만, 최소한의 프레임워크와 라이브러리의 개념 차이는 알고있자!

https://youtu.be/t9ccIykXTCM