Monday, July 4, 2016

Framework vs Library: 프레임워크와 라이브러리의 차이

많은 사람들이 프레임워크와 라이브러리의 차이를 단순히 사이즈의 차이 (프레임워크가 라이브러리에 비해 훨씬 크다 또는 여러 개의 라이브러리의 묶음이 프레임워크이다)라고 생각하는 경향이 있는데 이는 사실이 아닙니다. (물론 대부분의 경우 프레임워크가 라이브러리보다 사이즈가 더 크고 프레임워크가 여러 개의 라이브러리를 포함하고 있지만 그렇다고 라이브러리의 묶음이 프레임워크다라고 단순히 규정하기는 힘듭니다. 자세한 이유는 아래에 서술하였습니다.) 그 대신 기능적으로 무엇을 제공하는지와 사용할 때 어떤 방식으로 어떻게 사용할 지의 차이가 프레임워크와 라이브러리를 구별할 수 있는 더 중요한 요소가 아닐까 생각합니다.

우선 라이브러리는 보통 큰 개념으로 볼 때 하나의 기능을 제공하며 그 기능을 구현하기 위한 (또는 그 기능과 관련된) 부수적인 여러 개의 작은 기능들을 제공합니다. 예를 들어 GSON 라이브러리 (구글에서 제공하는 JSON 데이터 변환 라이브러리) 같은 경우에 큰 개념적으로 보면 JSON 형식의 데이터를 다른 형식으로 변환하는 기능을 제공하고 있으며 세부적인 기능들로는 JSON 형식의 데이터를 Java Object  형식으로 변환하는 기능을 제공하고 반대로 Java Object에 저장된 데이터를 JSON 형식의 데이터로 변환해주는 기능을 제공하고 있습니다.

반면에 프레임워크는 하나의 특정 기능을 제공하기 보다는 어플리케이션을 만드는데 있어서 뼈대가 될 수 있는 기능들을 제공하고 있습니다. 예를 들어 Spring Framework를 이용해서 MVC 모델의 웹어플리케이션을 만든다고 했을 때 스프링은 웹어플리케이션을 만들기 위한 기본적인 기능들만을 제공하며 (UI와 서버 쪽의 연동이나 데이터의 교환 또는 공유) 웹어플리케이션 구동을 위한 추가적인 기능들 (예를 들어 Front-end 쪽 디자인 관련 기능들이라던지 또는 서버의 효율성을 증진시킬 수 있는 기능들) 에 대한 지원을 기본적으로 하고 있지 않습니다.

위의 차이점 때문에 라이브러리와 프레임워크는 사용 방식 (또는 어플리케이션과의 연동방식)에서도 차이가 발생합니다. 우선 라이브러리는 보통 어플리케이션에 포함이 되어서 사용되고 있으며 개발자의 입장에서 봤을 때 라이브러리에서 제공하는 API 호출을 어플리케이션에서 어떻게 해서 사용할 지를 고민하게 됩니다. 그 반면에 프레임워크는 어플리케이션의 뼈대가 되기 때문에 어플리케이션의 메인 코드가 프레임워크의 여러 부분에 접합되어서 사용되어지며 (프레임워크가 사용자가 작성한 코드를 호출합니다.) 개발자의 입장에서 봤을 때 본인의 코드가 프레임워크와 얼마나 연동이 잘 되어서 사용되어지는 지 (또는 잘못 사용되어서 문제를 일으키지 않는지)를 고민하게 됩니다.

마지막으로 만약 로봇을 만든다고 가정을 했을 때 프레임워크를 사용하게 되면 로봇에 대한 기본적인 골격을 프레임워크가 제공하는 것이며 (아주 초보적인 걸음 정도를 할 수 있는) 개발자는 거기에 사람처럼 보일 수 있게 실리콘 피부를 입힌다거나 달리기를 잘 할 수 있는 로봇, 또는 시력과 청력이 아주 좋은 로봇을 만드는 일 (관련 기능들을 로봇에 추가해서)을 한다고 생각하시면 됩니다. 반면에 라이브러리를 사용해서 로봇을 만든다면 기본적인 골격은 직접 만들지만 특정 기능 (시력을 높이는 기능 또는 빨리 뛰게 할 수 있는 기능) 또는 특정 부위 (손, 발) 등은 라이브러리를 이용해서 구현한다고 생각하시면 됩니다.