목차
개발자들은 최대한 적은 비용으로, 효율적인 개발을 하기 위해 프레임워크와 라이브러리를 사용하게 됩니다. 하지만 용어를 사용하면서도, 실제 해당 도구를 사용하면서도 차이가 무엇인지 명확하게 설명하기는 어렵기도 합니다. 막연하게 이해하고 있는 두 가지 개발 용어를 정리해 봅니다.
프레임워크(Framework)
프레임워크란 ‘frame’이라는 단어에서도 눈치챌 수 있듯이 원하는 기능을 구현하기 위해 가이드를 해주는 ‘뼈대’를 의미합니다. 예를 들어 웹 서버 개발을 위한 프레임워크의 경우 필수적으로 어드민 페이지, DB 연동, URL 정의 등의 기능들을 제공해야 할 것입니다. 프레임워크는 이러한 기능을 제공하는 기본적인 구조와 작성 규칙을 정해서 개발자에게 가이드로 제공하고, 개발자들은 이러한 뼈대 위에서 정해진 규칙을 따라 코드를 작성합니다. 그리고 이러한 규칙을 잘 따라서 작성을 하게 되면, 뒷단의 복잡한 부분까지 직접 코드를 구현할 필요 없이 훨씬 손쉽게 원하는 프로그램을 개발할 수 있게 되죠.
라이브러리(Library)
라이브러리란 유용하게 쓰일 수 있는 기능을 구현해놓은 코드, 함수들의 모음을 의미합니다. 원하는 정보를 얻기 위해 도서관에 가서 책을 빌리듯, 개발자들은 원하는 기능을 쉽게 구현하기 위해 전세계의 똑똑한 개발자들이 미리 구현해놓은 라이브러리를 설치해 쓸 수 있습니다. 파이썬으로 데이터 분석을 하기 위해서는 pandas라는 라이브러리를 많이 사용하는데, 이 라이브러리를 활용하면 코드 한 줄 만으로도 csv 파일을 읽어들이고 판다스 데이터프레임 객체로 만들어 데이터 분석을 위한 준비를 할 수 있습니다.
두 가지 도구의 공통점과 차이점
- 공통점: 개발 속도가 빨라지고, 더 쉬워진다.
두 가지 도구는 누군가 미리 작성해놓은 코드들입니다. 그리고 우리는 더 빨리 원하는 기능이나 소프트웨어를 구현하기 위해 이 도구들을 사용합니다.
- 차이점: 제어 흐름의 주체가 개발자인가, 도구인가?
개발자는 라이브러리를 사용할 때 내가 원하는 기능을 구현하기 위해 라이브러리의 함수를 이용합니다. 해당 함수가 필요한지 개발자가 능동적으로 판단하고, 활용하는 것입니다. 코드의 흐름을 제어하는 주체가 개발자인 셈이지요.
반면 프레임워크를 사용할 때 개발자가 짜는 코드는 프레임워크가 동작시키는 프로그램 위에서 수동적으로 동작합니다. 전반적인 프로그램 동작의 흐름은 프레임워크에 이미 구현이 되어있고, 개발자의 코드는 그 흐름에 이용되는 것입니다. 이러한 개념을 ‘제어의 역전'(Inversion of Control)이라고 표현하기도 합니다. 일반적인 경우라면 구현하는 주체가 흐름을 주체해야하지만, 프레임워크에는 애플리케이션이 사용자가 작성한 코드를 호출해서 직접 애플리케이션의 흐름을 제어하는 개념이 적용되어 있습니다.