-
프레임워크(Framework)와 라이브러리(Library) :: 부제.리엑트는 무엇인가Study/React 2020. 7. 7. 16:03
프레임워크(Framework)란
프레임워크는 Frame + work 두 단어가 합쳐진 단어이다.
Frame '틀' + work '일하다' = " 틀, 뼈대를 가지고 일한다.
즉, 뼈대나 기반구조를 뜻한다.
장난감 키트를 가지고 예를 들어보자.
아래는 장난감 키트에서 제공하는 부품들이다.
위의 키트를 가지고 우리는 다양한 형태의 장난감을 만들 수 있다.
장난감 키트가 제공해주는 일정한 부품들과 틀을 가지고 다양한 형태의 장난감을 만들 수 있다.
그러나 동시에 우리는 이 장난감을 만들기 위해서 메뉴얼에 포함된 규악을 지키면서 만들어야 할 것이다.
즉, 프레임워크는 '제공받은 일정한 요소와 틀, 규약을 가지고 무언가를 만드는 일'이라고 정의할 수 있다.
그렇다면 이 개념을 프로그래밍, 소프트웨어에서는 어떻게 대입할 수 있을까?
위 장난감 키트를 예로 들었을 때, 일정한 부품, 틀인 키트를 제공해주는 것은 '장난감 제조사'이다.
고로 저 장난감을 만들기 위한 요소들을 제공해주는 누군가가 있어야 한다.
IT에서는 저 요소들을 제공해주는 프로그램이 바로 '프레임워크'이다.
흔히 아는 프레임워크로는 'Spring', 'Django', 'Ruby on Rails'등이 있다.
이 프레임워크는 어떤 프로그램을 쉽게 만들기 위한 요소와 룰을 제공해 줌으로써 소프트웨어의 생산성과 품질을 높이는 역할을 하는 것이다.
결론적으로 소프트웨어에서의 프레임워크는
' 특정 프로그램을 개발하기 위한 여러 요소들과 메뉴얼인 룰을 제공하는 프로그램' 이다.
프레임워크는 프로그래밍을 진행할 때 필수적인 코드, 알고리즘 등과 같이 어느 정도의 구조를 제공해주기 때문에 프레임워크를 사용하는 프로그래머는 이 프레임워크의 뼈대 위에서 코드를 작성하여 프로그램을 개발하면 된다.
프레임워크는 그 자체가 '완성된 제품'이 아니며, 완성된 제품을 만들기 위해서 개발자를 도와주는 기반이 되는 역할을 한다.
이를 소프트웨어적으로 다시 정의하면 소프트웨어의 특정 문제를 해결하기 위해 상호 협력하는 클래스와 인터페이스의 집합이다.
라이브러리(Library) 란
앞서 이야기 했던 장난감들을 만들 때, 우리는 꼭 사용해야하는 요소와 메뉴얼에서 이야기하는 규약들을 지켜야 할 것이다.
이 요소들과 지켜야 하는 규약이 소프트웨어로 가져왔을 때, '프레임워크'의 역할이었다.
반면에 라이브러리란 무엇일까?
장난감 요소와 규약들을 가지고 우리는 장난감을 만들 때,
자기 손으로 만들던지 부모님께 도움을 요청해서 만들던지 망치로 만들던지 상관이 없다.
자기가 편한대로 알맞은 도구를 사용해서 만들면 된다.
이 '편한대로 알맞게 사용하는 도구'가 바로 라이브러리이다.
프레임워크를 가지고 프로그램을 프레임워크에서 제공하는 요소와 그것을 사용하기 위한 규약을 지키면,
그 밖에 나머지는 어떤 라이브러리나 패키지를 가져다 써도 상관이 없는 것이다.
이 라이브러리는 정말 어마어마하게 종류가 많다.
Python에서 Datetime, Pandas, Beautifulsoup ...
Java에서는 Guava, Apache common library ...요약하자면 라이브러리는
소프트웨어를 개발하기 쉽게 어떤 기능을 제공하는 도구들 이다.
라이브러리는 특정 기능에 대한 도구 또는 함수들의 집합이다.
프로그래머가 어떠한 기능을 수행하기 위해서 도움을 주는 또는 필요한 것을 제공해주는 역할을 하는 것이다.
프레임워크와 라이브러리의 차이와 공통점
둘의 결정적인 차이는 바로 '자유도'이다.
즉, '누가 누구를 컨트롤 하는가'
내가 모든 결정을다 내리며 코드를 컨트롤 하는가?
아니면 누군가 정해준 규칙을 따라하고 있는가?
라이브러리의 가장 좋은 예시는 JQuery이다.
제이쿼리는 웹사이트에 인터랙티브한 요소를 넣을 수 있다.
내가 웹사이트를 구현하는 중, 필요한 요소가 있을 때 '내'가 제이쿼리를 소환한다.
코딩을 하다가 필요할 때 제이쿼리를 부르는 것이다.
하지만 프레임워크는 다르다.
왜냐하면 '내가' 프레임워크를 부르는게 아니기 때문이다.
'프레임워크'가 '나'를 부른다.
그래서 프레임워크로 일할 때에는 프레임워크의 규칙을 따라야 한다.
내가 규칙을 정하는 입장이 아니고, 프레임워크가 나에게 어디에 코드를 넣어야 하는지.. 등등을 알려주는 것이다.
내가 컨트롤 하지 않고 그저 규칙을 따라갈 뿐이다.
프레임워크의 좋은 예시는 Django 웹 프레임워크이다.
장고는 규칙이 정말 많다.
예를 들어 장고에서 어드민 패널을 만들고 싶다면,
무조건 코드를 admin.py에 써야한다.
또한 만약 url을 바꾸고 싶다면 반드시 파일명 url.py를 가야한다.
이것이 우리가 바꿀 수 없는 규칙들이다.
내가 장고를 부르고 그러지 않고 장고 문서를 보면서 장고 규칙에 따라 코드들을 잘 넣어두면 장고가 그걸 실행시키는 것이다.
- 프레임워크를 가지고 프로그램을 만들기 시작하면 어떤 '규약'을 꼭 지키면서 만들어야 한다.
- 프레임워크는 규칙과 문서가 따라오는 것이며 내가 이를 적극 수용해야한다.
- 라이브러리는 내가 필요할 때마다 부를 수 있는 것이다.
- 라이브러리는 '도구'이기에 활용을 하지만 내가 결정을 내리며 코드를 컨트롤 할 수 있다.
반면, 둘 다 프로그램을 쉽게 만들기 위해서 다른 누군가가 쓴 코드라는 점이 공통적이다.
그렇다면, 리엑트는 무엇인가?
리엑트 웹사이트게 가면 리엑트는 '라이브러리'라고 말한다.
즉, 나의 애플리케이션 ui를 빌드할 때,
필요에 따라 '내'가 리엑트를 부르는 것이다.
그리고 리엑트는 폴더 구조나, 컴포넌트 명과 같은 규칙이 없다.
하.지.만.
'리엑트가' 우리의 컴포넌트를 부르기는 한다.
그래서 이 경우엔 리엑트를 프레임워크로 부를 수 있는 것이다.
리엑트가 컴포넌트를 부르니까 규칙 또한 알려준다.
우리가 컴포넌트를 사용하면, 리엑트가 그걸 불러와서 스크린에 보여준다.
리엑트가 라이브러리인가, 프레임워크인가 하는 문제는 매우 gray area 이다.
"리엑트는 내가 필요할 때 부르기 때문에 라이브러리이다."
"아니다, 리엑트는 컴포넌트를 불러오기 때문에 프레임워크로 불릴 수 있다. 리엑트가 우리의 컴포넌트를 인터랙티브하게 만들어주니까!"
논란이 된다.
과연 리엑트가 라이브러리인지, 프레임워크인지 이것이 정말 중요한가?
그렇지 않다. 하지만, 적어도 우리는 '프레임워크와 라이브러리의 차이점이 무엇인지'를 이해는 해야 한다.
참조:
'Study > React' 카테고리의 다른 글
fetch 함수와 활용예제. (0) 2020.07.14 Ajax (axios와 fetch 비교) (5) 2020.07.14 react의 bind는 무엇일까? (부제. 이벤트 처리하기) (0) 2020.07.05 리엑트란 무엇이며 왜 사용하는가? (0) 2020.07.04 react component lifecycle (0) 2020.06.04