프레임워크라는 개념을 접하기 전에 '부트스트랩(Bootstrap)'이란 용어를 먼저 알게 되었습니다.
웹 프로젝트를 개발하기 위한 좋은 툴이라는 것을 듣게 되었죠.
그래서 부트스트랩이 무엇인지 자료 조사를 해본 결과, '프레임워크'의 종류 중 하나라는 것을 알게 되었습니다.
그렇다면 프레임워크란 무엇인가? Framework에 대한 개념을 먼저 잡아야겠다는 생각이 들었습니다.
프레임워크란?
Gof의 디자인 패턴으로 유명한 랄프 존슨(Ralph Johnson)은 "프레임워크란, 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것"이라고 정의하였습니다.
프레임워크란 용어를 아직 접하지 못하셨거나
저를 포함하여 접한 지 얼마 안 되신 분들은 아마 이해하기가 힘들 수 있습니다.
보통 Framework는 라이브러리라는 개념과 비교해서 많이 설명합니다.
프레임워크 vs 라이브러리
라이브러리란 자주 사용되는 로직을 재사용하기 편리하도록 잘 정리한 일련의 코드들의 집합을 의미합니다. (참고: 생활코딩)
생활코딩에서 정의한 라이브러리 내용은 어느 정도 이해가 가지만 저명한 전문가가 Framework를 정의한 것은 이해하기가 쉽지 않습니다. 또한 위의 정의만으로 두 개념 사이의 차이도 명확히 모르겠습니다.
저는 머릿속에 그림을 그려서 이해하는 것을 선호합니다. 예를 들어보겠습니다.
프레임워크는 자동차의 프레임, 즉 기본적으로 구성하고 있는 뼈대를 말합니다.
라이브러리는 자동차의 기능을 하는 부품을 의미합니다.
예를 들어, 자동차를 굴러갈 수 있게 하는 바퀴, 어두운 밤을 환하게 비출 수 있는 헤드라이트, 비 올 때 창문을 닦아주는 와이퍼 등이 라이브러리라고 할 수 있습니다.
한 번 정해진 자동차의 프레임은 바꾸질 못합니다.
소형차를 만들기 위해 뼈대를 사용하는데, 이 뼈대로 SUV를 만들 수는 없습니다.
그러나 바퀴나, 선루프, 헤드라이트 등은 비교적 다른 종류로 쉽게 바뀔 수 있겠죠.
사실 자동차를 만들기 위해서 자동차의 프레임과 부품들을 가져다 쓰지 않아도 됩니다.
프레임을 일일이 만들고, 부품을 일일이 만들어서 자동차를 만들어도 됩니다.
그러나 너무 많은 시간과 비용이 들지 않겠습니까?
그래서 프레임워크와 라이브러리가 존재하는 겁니다.
내가 정말로 원하는 기능을 구현하기 위해 기본적인 뼈대와 부품을 가져다 쓰겠다는 겁니다.
자동차에 하늘을 나는 기능을 온전히 구현하기 위해 자동차의 프레임과 부품을 아웃소싱 하겠다는 거죠.
Framework라는 개념은 대강 잡았으니 써봐야 되겠죠?
종류에는 무엇이 있는지 한번 살펴보겠습니다.
프레임워크 종류
구분 |
종류 |
자바 프레임워크 |
Struts, Spring, 전자정부 프레임워크 |
QRM 프레임워크 |
myBatis(iBatis), Hibernate |
자바스크립트 프레임워크 |
AngularJS, React, Polymer, Ember |
프론트엔드 프레임워크 |
Bootstrap, Foundation, MDL |
Framework라는 개념을 지금까지 들었을 때 좋아만 보입니다.
하지만 동전의 앞면이 있으면 뒷면이 있듯이 모든 것은 장, 단점이 존재합니다.
프레임워크의 장, 단점
장점
1) 효율적.
- 아무것도 그려지지 않은 제로에서 코드를 일일이 짜는 것보다 시간과 비용이 훨씬 절약되며 생산성이 좋아집니다.
2) Quality 향상.
- 버그 발생 가능성을 처리해줌으로써 개발자가 반복 작업에서 실수하기 쉬운 부분을 커버해줍니다. 다수의 개발자가 사용하며 수정하다 보니 이미 검증된 코드라고 볼 수 있습니다.
3) 유지 보수 Good!
- 프레임워크를 쓰지 않고 일일이 코드를 짜 놓은 경우, 회사 입장에서 개발 담당자가 바뀌어버리면 곤란해집니다. 그러나 Framework를 사용하면 코드가 보다 체계적이어서 담당자가 바뀌더라도 위험부담을 줄일 수 있으며 유지 보수에 안정적입니다.
단점
1) 학습시간이 길다.
- 코드를 본인이 짜 놓은 것이 아니기 때문에, 프레임워크에 있는 코드를 습득하고 이해하는 데 오랜 시간이 걸립니다.
2) 제작자의 의도된 제약 사항
- 제작자가 설계한 구조를 어느 정도 유지한 채 코드에 살을 붙여나가야 합니다. 따라서 개발자는 자유롭고 유연하게 개발하는 데 한계가 있습니다.
프레임워크는 단점이 존재하지만 단점을 커버할 수 있을 만한 좋은 장점이 있습니다. 개발의 상황과 목적에 맞는 프레임워크를 잘 파악하여 선택한다면 시간과 비용을 줄이는 것은 물론이고 코드의 품질이 훌륭한 개발을 할 수 있을겁니다.
참고:
생활코딩
http://tobetong.com/?p=6640