본 포스팅은 아키텍터 손영수 멘토님이 EVA Study에서 강의하신 내용의 정리입니다.

Framework란 무엇인가

Framework에 대한 정의를 간단히 생각해보면 Template이나 Boilerplate, Library와 같이 Function이나 Class를 끌어쓰는 Module로 생각할 수 있습니다. 그렇다면 Library와 Framework의 차이를 묻는다면 무엇이라고 대답할 것인가요?

먼저 Framework의 정의를 가장 명쾌하게 정의한 것은 Douglas Schmidt 박사의 정의로 볼 수 있습니다.
dyglas.jpg

Frameworks define “semi-complete” applications that embody domain- specific object structures and functionality.

여기서 가장 중요한 단어는 Semi-Complete로 보입니다. Library는 단순히 사용빈도가 높고 많이 호출 됫 것으로 예상되는 것들의 집합체이며 Library로 볼 수 있는 가장 큰 특징은 모든 호출 권한과 제어를 개발자가 100%를 가지고 있다입니다. 반면, Framework는 반쯤 완성된 어플리케이션이므로 내부적으로 자기 자신을 스스로 제어할 수 있는 Control-Flow를 가지고 있기에 개발자가 모든 것을 만들 필요가 없습니다.

Library는 단순히 사용 빈도가 높은 함수나 클래스를 끌어쓰는 역할을 담당하여 필요에 의해 Library를 사용하면 되는 반면 Framework는 어플리케이션이 어떻게 돌아가는지에 대한 Flow는 모두 Framework가 가지고 있으므로 우리는 이 흐름을 이해하고 이 흐름에 기능을 끼워 넣으면 되는 것이다라고 할 수 있습니다.
즉, Library와 Framework를 구분할 수 있는 가장 큰 차이점은 어플리케이션의 Control-Flow를 누가 가지고 있는지가 될 것입니다.

Framework의 필요 이유

소프트웨어 개발자인 우리는 Framework와는 필연적인 관계에 있습니다. 우리가 어떤 서비스를 만든다고 할 때 우리는 먼저 Programming Language를 선택합니다. 그리고 우리는 Framework를 선택하죠. 자바로 웹 서버를 개발한다고 할 때 우리는 Spring이라는 프레임워크를 선택하고, JavaScript로 프론트엔드를 개발한다고 한다면 React, Vue와 같은 것을 선택합니다. 그렇다면 왜 Framework가 필요하고 필연적으로 사용하게 되는 것 일까요?

Framework의 필요성은 크게 3가지가 있습니다.

  • Avoid Duplication
  • Productivity
  • De Facto War

첫번째는 소프트웨어 개발에서 복잡성을 낮추고 유지보수성을 높히는 가장 기본적인 방법인 Avoid Duplication, 즉, 중복 회피입니다. Framework도 Library와 같이 Don't Repeat Yourself를 하기 위해서 필요합니다.
두번째로는 Productivity입니다. 위에서 본 정의와 같이 Framework는 반쯤 완성된 어플리케이션이기 때문에 이미 만들어진 절반 위에서 나머지 절반을 끼워넣어 만들기만 하기 때문에 생산성이 높아질 수 밖에 없습니다. 현재 소프트웨어 개발에서 가장 중요하게 여기는 것중 하나인 Productivity를 높힐 수 있기 때문이죠.
마지막으로 생소한 단어인 De Facto War에서 승리하기 위합니다. 이는 쉽게 사실상 표준을 의미합니다. 실제로 특정 단체나 기관에서 표준으로 지정하지는 않았지만, 관련 분야 현업에서 가장 많이 사용되는 Framework를 사용함으로써 사실상 표준을 지키는 것입니다.