프레임워크와 라이브러리의 차이는 무엇입니까?
글쓴이: kesyut / 작성시간: 화, 2011/07/05 - 1:44오전
안녕하세요. 컴퓨터공학과 학생입니다.
뜬금없지만 갑자기 프레임워크와 라이브러리의 차이가 무엇인지 궁금해서
검색을 해보았는데 내공부족으로 인하여 명확한 답을 얻을 수 없었습니다.
제가 이해하는 바를 말씀드리면 라이브러리는 재사용 관점에서 짜여져 있는
독립적인 컴포넌트라고 알고있고 프레임워크는 라이브러리를 클래싱 또는 패키징을 하여
사용의 관점에서는 개발의 생산성을 돕고 또한 그 플랫폼에서 추구하는 방향으로 응용될 수
있도록 하는 이점(?)이 있다고 알고 있습니다.
그런데 찾아보다보니 제어의 역전의 개념이 중요한 차이라고들 말합니다.
라이브러리는 어플리케이션에 의해 불려지고 프레임워크는 프레임워크가 동작하다가
어플리케이션을 호출한다라고 덧붙여 설명하고 있습니다.
저는 지금까지 라이브러리건 프레임워크건 정적인 컴포넌트로
애플리케이션에 의해 불려지는 놈들이라고 받아들였기때문에 이 말을 이해할 수 없었습니다.
고수님들의 설명을 듣고 싶습니다. 감사합니다.
Forums:
프레임워크 라이브러리 때문에 헷갈리나보네요. 간단히
프레임워크 라이브러리 때문에 헷갈리나보네요.
간단히 말해서, 내가 부르면 라이브러리고, 내가 불려가면 프레임워크입니다.
라이브러리 형태로 제공되는 프레임워크는 내가 처음에는 부르지만, 결국에는 프레임워크 틀안에서만 작업해야 합니다.
------------------------------
How many legs does a dog have?
답글 감사합니다. 그런데 제가 이해가 가지 않는
답글 감사합니다.
그런데 제가 이해가 가지 않는 부분은 프레임워크라는 놈도 어쨋든 라이브러리 상위단에서
라이브러리를 이용하여 좀 더 응용단에 가깝게 구성된 클래스라던지 함수들의 집합일텐데
그렇다면 이 놈도 라이브러리와 마찬가지로 그 모듈이 호출되는 형태로 밖엔 그림이 그려지질 않습니다.
내가 불려간다는 말이 내부적으로 어떻게 동작된다는 말인지를 모르겠습니다.
좀 더 자세한 설명 부탁드립니다. 감사합니다.
끼어들어 죄송합니다, 저도 배울 겸 정리할 겸 해서
끼어들어 죄송합니다, 저도 배울 겸 정리할 겸 해서 ^^;
semmal님의 부른다, 불려간다는 얘기는...
예를 들어서 성적 처리하는 프로그램을 만든다고 할 때,
뭐 이렇게 되어 있겠죠.
여기서, 내가 전체 코드를 작성하는데, "정렬한다()"를 이미 다른 사람이 아주 훌륭하게 구현해놓은 게 있다(퀵소트처럼)면 가져와서 쓰겠죠. 이게 라이브러리.
반대로, 이미 저 전체흐름 코드는 범용적으로 쓸 수 있도록 잘 만들어져 제공되는 게 있고, 다만 저걸 가져와서 쓰는 사람이 "점수를 입력받는다()" 부분을 OMR카드를 쓸지 키보드로 받을지 음성으로 받을지 적절하게 구현해서 끼워넣게 한다면, 자기가 짠 코드가 저 전체 프로그램 수행 중에 호출이 되는 거죠. 이게 프레임워크
...뭐 이런 말씀인 것 같습니다. (아니면 낭패인데 ^^;)
좋은 하루 되세요!
제 블로그에 스크랩 하겠습니다.
좋은답변 감사합니다. 많이 배웠습니다.
추상계층이 헷갈리는 거네요.일단 모든 소스코드든
추상계층이 헷갈리는 거네요.
일단 모든 소스코드든 라이브러리든 메모리에 들어가는 정보는, 컴파일러나 인터프리터에게는 호출가능한 모듈일 뿐입니다.
이런 물리적인 계층을 보지말고, 그 위의 논리적인 계층을 봐야합니다.
라이브러리는 톱, 망치, 삽같은 연장입니다.
사람이 들고 썰고, 바꿔들고 내려치고, 다시 바꿔들고 땅을 파는 겁니다.
프레임워크는 차, 비행기, 배같은 탈것입니다.
사람이 타서 엔진 켜고, 기어 넣고, 핸들 돌리고, 운전하거나, 조종하거나 해야합니다.
도구를 쓸 때, 급하면 썰어야 할 곳에 망치를 쳐도 됩니다. 땅 파야할 때 톱으로 땅을 긁어내도 됩니다.
사람은 도구를 선택하는 입장이기 때문에, 어떤 도구를 사용하든 원하는 것을 만들어낼 수 만 있으면 됩니다.
반면에, 탈것은 정해진 곳으로만 다녀야 합니다. 차를 타고 하늘을 날거나, 배를 타고 땅으로 갈 수는 없습니다.
하지만, 그 목적에 맞게 만들어져 있기 때문에, 톱이나 망치를 들고 먼저 탈것을 만들어야할 필요가 없습니다.
그저 정해진 규칙에 맞춰서 엔진, 기어, 핸들만 잘 돌리면 됩니다.
라이브러리와는 달리 프레임워크는 이미 프로그래밍할 규칙이 정해져 있습니다.
예를 들어, 설정파일로 사용되는 XML에 어떤 태그를 써야하며, 어떤 함수를 추가적으로 작성해야하고,
소스 파일을 어느 위치에 넣어야하며, DB와 연동하기 위해 무엇을 써넣어야 하는지 정해져 있습니다.
보통 이런 대부분의 작업은 프레임워크가 하고자 하는 일에 비하면 아주 작은 일이며, 사람은 극히 일부분만 조정함으로써 목적을 달성할 수 있습니다.
만약 프레임워크가 담당하는 부분이 내가 하고자 하는 목적과 다를 경우에는 어떻게 할까요?
그럼 그냥 프레임워크를 잘못쓴겁니다.
더 목적에 가까운 프레임워크를 찾아보면 대부분 있을겁니다.
없거나 구하기 힘들다면, 비슷한 프레임워크를 라이브러리 단계에서 변경해서 다른 프레임워크로 만들면 됩니다.
차를 튜닝한다음, 차를 다시 운전하면 된다는 말이지요.
혹시 프레임워크 없이 그냥 라이브러리로만 만들면 안될까요?
안될 이유가 어딨겠습니까?
그냥 다 다시 만들 능력과 시간과 여유만 있다면 그렇게 해도 되지요.
스스로 만든 프레임워크는 버그도 스스로 잡아야하지만, 남들이 만들어놓은 프레임워크는 쓰는 사람이 많은 만큼 그만큼 수정이나 업데이트도 빠릅니다.
기능이 마음에 안드는 부분이 있다면, 프레임워크를 고치면 됩니다. 처음부터 다 만드는 것보다는 싸게 먹히지요.
내일 당장 지방에서 서울로 출근해야하는데, 혼자서 차를 만들어서 타고 가야한다는 생각을 해보세요.
------------------------------
How many legs does a dog have?
감사합니다 너무나..
너무나도 자세하고 친절한 설명입니다.
충분히 이해가 되네요...
잘 읽었습니다^^
좋은 정보 감사합니다^^
잘읽었습니다!
상세해서 이해가 잘 되었어요 감사합니다
우와. 정말 깔끔하게 글을 쓰시네요. 놀랐습니다. 잘
우와. 정말 깔끔하게 글을 쓰시네요. 놀랐습니다. 잘 배워가요.
저는 이렇게 생각했습니다.
감사합니다.
잘 읽고 갑니다.
qsort는 라이브러리인가요 프레임워크인가요?
qsort는 라이브러리인가요 프레임워크인가요? ^^
단어적 의미로만 따진다면 - 라이브러리: 각종
단어적 의미로만 따진다면
- 라이브러리: 각종 연장/기능을 담은 집합 - 예를 들어 2D그래픽 라이브러리에서 원/타원/선/다각형... 등등의 여러 기능
- 프레임워크: 이런 연장들의 사용방식/API/규칙 세트/절차 명세 - 예를 들자면 2D그래픽을 호출하는 방식(API)
라이브러리는 그 기능에 중점을 둔다고 한다면 프레임워크는 그것들이 어떻게 호출되는지에 대한 명세에 더 중점을 두었다고 보시면 됩니다.
각 기능별 명세가 간단하다면 보통 그냥 라이브러리라고 불리고, 그 기능보다 명세가 더 중요하다고 하면 프레임워크로 볼 수 있죠.
라이브러리는 조금 저차원이라면 프레임워크는 고차원인 경우가 많아서
라이브러리에서 일일히 초기화 해주어야 하던 것이 프레임워크에서는 알아서 자동으로 처리되는 것이 많습니다.
라이브러리는 같은 기능을 하는 라이브러리를 복수개로 동시에 쓸 수 있는 반면,
프레임워크는 보통 단 한가지의 프레임워크만 사용가능하고 여러개를 동시에 쓰기 어렵습니다.
일반적으로... 라이브러리 - 저자동고유연 / 프레임워크 : 고자동저유연
디자인 패턴 관련 책을 읽어 보셨는지
디자인 패턴 관련 책을 읽어 보셨는지 모르겠지만..
패턴을 이용해서 설명하면 프레임워크를 좀 이해하기 쉽게 설명할 수 있을것 같습니다.
템플릿 메소드 패턴이라고 하는 패턴이 있는데,
작은 프레임워크 패턴이라는 별명이 있을 정도로 목적과 동작이 유사합니다.
(실제로 객체 지향 언어에서 프레임워크의 구현은 템플릿 메소드 패턴으로 도배되어 있습니다. )
상위 클래스에서 추상 메소드를 정의하고, 추상 메소드들을 활용해서 로직을 구현해 놓고,
상속 받은 하위 클래스에서 추상 메소드를 구현하게끔 되어 있습니다.
여기서 상위 클래스를 프레임워크라고 보시고,
하위 클래스에서 추상 메소드를 구현하는 작업이 프레임워크를 이용해서 어플리케이션을 작성하는 일로 보시면 됩니다.
따라서 프레임워크를 이용해 어플리케이션을 작성하는건
사실은 이미 프레임워크에서 어플리케이션이 일부 구현이 빠져 있는 채로 존재하는 것에
그 빠진 부분을 채워넣는 직업이라고 보시면 됩니다.
프레임워크는 만들고자 하는게 이미 대부분 다 만들어져
프레임워크는
만들고자 하는게 이미 대부분 다 만들어져 있어서
여백으로 되어 있는 특정(핵심)부분만 채우면 만들고자 하는게 완성되는 거고..
라이브로리는
뭘 만들면서 필요한데로 가져다 쓰는거
정도로 생각하면 될듯
-_-
처음에는 생각하지 못했던 객체지향의 장점이
경험을 통해 패턴을 만들어 내고..
이런 패턴들이 모여 프레임워크가 되고..
============================================================
선한 인간이냐 악한 인간이냐는 그사람의 의지에 달렸다. -에픽테토스-
의지 노력 기다림은 성공의 주춧돌이다. -파스퇴르-
============================================================
그렇다면 객체지향언어가 아닌 언어들로 구성된
그렇다면 객체지향언어가 아닌 언어들로 구성된 프레임워크는 존재하지 않는건가요?
-_-
일부를 설명한거겠네요..
하지만 객체지향 언어가 아니면
처음 질문한 분처럼 프레임워크나 라이브러리의 경계가
모호해질수 있습니다.
최대한 빨리 개발하면서 누구나가 읽기쉽고 유지보수 가능한 소스(가장 중요)를 만들어
내는게 프레임워크의 목표라고 생각합니다.
============================================================
선한 인간이냐 악한 인간이냐는 그사람의 의지에 달렸다. -에픽테토스-
의지 노력 기다림은 성공의 주춧돌이다. -파스퇴르-
============================================================
프레임워크 이름만 거창했지.. 실제론 어느 정도
프레임워크 이름만 거창했지..
실제론 어느 정도 완성된 것에 빈 부분을 채워 넣는다지만.. 그 채워 넣어야 할것이.. 아예 없는것보다 채워 넣어야 할 곳이 더 많고
더 귀찮으며 카피복사가 어려우며(오류발생등) 잘 짜여진 하나의 틀?에 의한 거저먹기 코딩도 어렵다.
즉, 비슷한 류의 함수나 어떤 구현을 만들려 하지만 동일한 작업을 반복 노가다 해야 할 경우가 태반이며
이미 구현된 것에 빈 곳을 채워 넣는다지만 실제론 라이브러리 사용해서 모두 구현하는 거나 코딩량상 차이도 없고 오히려 더욱 귀찮음만 존재하며
또한 툴에 의한 자동생성코드 또한 어차피 카피복사로 해결될 문제를 자동이라 우긴다.
프레임워크가 롤플레잉 게임이라고 할때 라이브러리는
프레임워크가 롤플레잉 게임이라고 할때
라이브러리는 아이템이라고 할 수 있지 않을까요.
위대한 한글
추가적으로 말씀드리자면, 자신이 있는 분야와 관련된
추가적으로 말씀드리자면, 자신이 있는 분야와 관련된 프레임워크 몇 개정도는 알고있는 것이 좋습니다.
제대로 써보지는 않더라도, 무엇이 있고, 어떻게 동작하고, 어떤 식으로 프로그래밍 해야할지는 알고 있어야 한다고 봅니다.
위에서도 말했지만, 프레임워크는 탈 것과 같아서 미리 면허를 따놓지 않으면 운전하기 힘듭니다.
버스도 없고 택시도 없는 상황에서, 차를 만들 능력도 안된다면, 차를 랜트해서 가는게 가장 좋겠지요.
프레임워크가 쓸모 없다고 하는 사람이 있어서 하는 말입니다.
저는 자동차도 프레임워크도 둘 다 싫어하는데 쓸모 없다고 생각하지는 않거든요.
------------------------------
How many legs does a dog have?
그럼 프레임워크를 쓰게되면 응용단에서 라이브러리를
그럼 프레임워크를 쓰게되면 응용단에서 라이브러리를 직접 접근할 수 없게 되는건가요?
자동차 구조에 대해서 잘 안다면 직접 나사풀고 열어서
자동차 구조에 대해서 잘 안다면 직접 나사풀고 열어서 고치면 됩니다.
자동차 만든 사람이 블랙박스로 꽁꽁 숨겨놓지 않았다면 말이죠.
------------------------------
How many legs does a dog have?
괄호 안의 말을 더하면 차이가 더 잘 보일듯
괄호 안의 말을 더하면 차이가 더 잘 보일듯 합니다.
- (Application) Framework = half done application
- (Component) Library = collection of related features
너무 심각하게? 생각하지 말기 바랍니다.
너무 심각하게? 생각하지 말기 바랍니다.
framework도 넓게 보면 library나 크게 다를 바가 없습니다. 궃이 library와 머가 다르냐? 라고 일일히 따지기 어렵습니다. 특별히 "어떤 특징을 만족해야 framework다"라고 하기도 힘듭니다. 모든 사람이 공감하는 "Framework란 ...이다"란 정의도 존재하지 않습니다. 좀 극단적으로, 자신이 만든 component에 "library"란 단어를 붙이면 library이고, "framework"란 단어를 붙이면 framework이겠죠.
대부분 web application framework나 GUI application framework을 예로 드는 경향이 크긴 하지만, 여러 라이브러리의 집합을 framework라고 부르는 경우도 있고, 한 라이브러리가 (방대할 경우) framework이라고 부르는 경우도 있습니다.
일례로 yacc나 bison를 보면, tool이라고 부르는 사람도 있고, 언어라고 부르는 사람도 있고, library라고 부르는 사람도 있고, framework라고 부르는 사람도 있습니다.
그리고, 줄여서 단순히 "framework"라고 하지 말고, 자세히 쓰기 바랍니다. "web application framework"을 단순히 "framework"라고 얘기하면, Web 쪽이 아닌 개발자가 보면 "응? 무슨말이야?"이란 반응이 나오기 쉽습니다. 마찬가지로 "Win32 API"를 단순히 "API"라고만 부르는 경우에도 비슷합니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
좋은 내용들 잘보고 갑니다
이 한페이지에 달린 댓글을 다 읽어보는 거로도 많이 배우네요.
좋은 내용들 잘 읽었습니다. 감사합니다. ^ ^
언젠가 교수님에게 물어본 질문인데
정확하게 기억이 안나지만
대충
개체의 생애를 제어 받는다면 라이브러리
개체의 생애를 스스로 제어 한다면 프레임워크
라고 했던 기억이 납니다
현시점에서는 마케팅 용어로 볼 수도 있습니다.
실제 내용상 차이가 있다기 보다 개발사/개발자가 임의로 붙이는 경우가 많습니다.
프레임웍에 조금더 포장이 잘되어 있다는 뉘앙스가 있긴 하지만 실제 제품들을 보면 꼭 그런건 아니고요.
코드를 실행시키는 틀 자체를 프레임웍이라고 하는 경향도 있지만 이것도 제품명과 꼭 맞아떨어지는 것은 아닙니다.
* 포럼 주제와 무관한 신변잡기를 반복해서 올리지 맙시다.
* 질문 게시판 만이라도 익명 글쓰기를 막아야 한다고 생각합니다.
프레임워크는 틀, 골격을 의미합니다. 따라서
프레임워크는 틀, 골격을 의미합니다. 따라서 라이브러리를 포함할 수 있는 개념입니다.
프레임워크 라이브러리 차이는 토비의 스프링에 잘
프레임워크 라이브러리 차이는 토비의 스프링에 잘 설명되어 있습니다.
제어의 역전 개념이 적용되면 프레임워크입니다.
라이브러리는 API에 맞게 그저 호출받고 반환만 해줄뿐 프로그램의 전체 흐름을 주도하지는 않습니다.
호출 API가 동일하다면 다른걸로 쉽게 바꿔버릴수 있고요
프레임워크는 자기가 모든 제어권한을 다 잡고 주도하고, 개발자가 만드는 코드가 프레임워크에 의해 호출 당하는 식으로 돌아갑니다.
이때문에 프레임워크는 한번 결정되면 거의 못바꿉니다.
같은 방식으로 동작하는 다른 프레임워크라면 교체 가능하겠지만, 똑같은 프레임워크를 복제해서 만드는것은 한번할것을 두번하게 되는거라 특허나 라이센스 문제 피할려고 하는거 아닌이상은 할 이유 없습니다.
Written By the Black Knight of Destruction
android에서 예를 들면..
부끄럽지만,, 2011년 질문에 답을 해봅니다
android java app의 경우, 아래처럼 호출이 됩니다
java app --> android framework --> linux kernel
kernel 입장에서 보면 java app , android framework 모두 linux application 입니다
linux application은 library를 정적,동적으로 가져다가 사용할 수 있구요
각각은 일반적인 android 구조에서 아래 경로에 저장되어 있습니다
app : /system/app/ , /system/bin/
lib : /system/lib/
제 의견으로 linux 입장에서
framework이란 일반적인 영어단어이고 어떤 계층을 의미한다고 보긴 어렵습니다
(실제로 kernel 내부 기능들에도 framework이라는 명칭을 사용하기 때문에)
다만, 최초에 android를 구현하면서 GUI를 통해 우리 눈에 보이는 것은 app,
눈에 안 보이면서 app들을 도와주는 것들을 android framework이라는 이름으로 명명했다고 생각합니다
오늘도 조금 더 배우는 하루
오래전 질문이지만 재미있네요.
프레임워크나 라이브러리나 차이가 없다...? 이건 좀 많이 틀린 답변같습니다.
질문자님께서 쓰신 본문이나 답글 중에 '제어의 역전(Inversion Of Control)'이라는 개념을 언급하고 있는데요...
저는 여기에 한표를 강력하게 던지고 싶네요.
그리고 질문자님 본문에 명확한 답이 있습니다. 라이브러리는 '재사용' 관점에서 API를 패키징한 것이고,
프레임워크는 'IoC' 관점에서 어플리케이션을 구동하는, 말그대로 '틀' 이라는 설명이 정확할 것 같네요.
라이브러리나 프레임워크 둘 다 그 자체만으로는 실행되는 어플리케이션이 아닌것은 동일하지만,
부르냐, 불러지냐의 차이가 아주 명확하기 때문에 아주아주 다른 개념이라고 생각합니다.
예컨데, 가장 많이 쓰이는 자바 프레임워크인 스프링에서는 개발자가 빈을 관리하는 코드를 작성하지 않습니다.
그저 빈 자체를 정의하고, xml이든 어노테이션이든 추가적인 설정을 통해서 빈을 '등록' 할 뿐이죠.
등록된 해당 빈의 life cycle은 스프링 '컨테이너'가 알아서 관리 해줍니다. 이게 바로 제어의 역전인 것이고,
이러한 철학을 따르는 것이 프레임워크라고 볼 수 있겠습니다.
같은 맥락에서, 톰캣과 같은 WAS도 일종의 프레임워크라고 생각이 되네요. (지극히 개인적인 생각)
웹 요청을 처리하는 스레드의 생성, 소멸, 그리고 관리 등등을 WAS가 알아서 해주고, 개발자는 그저
해당 스레드가 '부르는' 비즈니스 로직을 담은 인터페이스(HttpServlet 같은..?) 를 구현하면 그만이니까요.
제일 머리에 잘 들어오는 답변 같습니다
라이브러리는 '재사용' 관점에서 API를 패키징한것이고
프레임워크는 'IoC' 관점에서 어플리케이션을 구동하는 말그대로 틀이라는 설명
감사합니다 출처 남기고 기록해두겠습니다!
좋은 정보 댓글 너무 감사합니다.
비전공자로 열심히 개발공부중인데 라이브러리와 프레임워크차이를 알게 되었습니다.
참고로 정부에서 만든 프레임워크도 있는데요..
전자정부 표준프레임워크( http://www.egovframe.go.kr/ ) 이고 공공 사업에서 사용되는 것 같습니다.
전자정부 표준라이브러리라고 하지 않는데, 위에 고수분들이 말씀하신 그 프레임워크 범주에 속할까요?
-----------------------
IT가(정보기술이) 과학 및 일상생활과 더욱 밀접해지기를 기대합니다.
가장 간단한 구분은
클래스나 함수 집합은 라이브러라라 부르고
옵저버,엔티티 ,mvc 등
각종 패턴 먹여서 호출에 규칙이 존재하는 것이면
보통 프레임워크라 부르던거같음 호달달
매일 1천억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키지않는. 야근 하는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 안받습니다.
댓글 달기