프레임워크 라이브러리 차이 - peuleim-wokeu laibeuleoli chai

라이브러리와 프레임워크의 차이점

라이브러리와 프레임워크의 중요한 차이점은 내가 작성한 코드에 대한 제어 권한이 어느 쪽이 있는지이다. 

라이브러리가 복잡해지면 프레임워크가 된다는 말이 있다. 이것은 사실이지만, 사실이 아니기도 하다. 우리는 흔히 재사용 가능한 코드를 라이브러리로 만든다. 한 번 작성된 라이브러리는 재사용이 가능해서 코드의 중복 작성을 줄여준다. 대표적인 라이브러리로는 대부분의 언어에 있는 Math 라이브러리가 있다. Math 라이브러리를 이용하면 반올림, 내림, 올림 등 다양한 연산을 손쉽게 할 수 있도록 만들어준다.

코드에 대한 제어 권한이 없는 라이브러리

Math 라이브러리에서는 우리는 우리가 원하는대로 올림, 내림, 반올림 등을 할 수 있다. 라이브러리의 내부 규약에 의해 코드를 작성하는 것을 제한 받는 일이 없다. 즉, 코드에 대한 제어 권한이 나에게 있다. 그렇다면 프레임워크는 어떨까?

코드에 대한 제어 권한을 갖는 프레임워크

스프링 프레임웍에서는 스프링 프레임 웍에서 정한 대로 객체들의 라이프 사이클이 정해진다. 우리는 해당 뼈대(Framework)를 사용해서 우리의 비즈니스 로직을 넣을 뿐이다. 안드로이드에서 또한 마찬가지이다. Activity, Fragment등의 Lifecycle이 정해져 있고, 우리는 해당 Lifecycle에 맞춰 코드를 짜야한다.

우리가 코드를 만들 때 스프링 프레임웍이나 안드로이드 프레임웍에서 따른 제한에 맞추어 코드를 짜야되는 것이다. 즉, 프레임워크(Framework)에서는 코드에 대한 제어 권한이 프레임워크에 있다. 

정리

요약하면 프레임워크와 라이브러리의 큰 차이점은 다음과 같다.

라이브러리 : 내가 작성한 코드에 대한 제어 권한이 내가 작성한 코드에 있음(직접 제어)
프레임워크 : 내가 작성한 코드에 대한 제어 권한이 프레임워크에 있음

# 라이브러리(Library)란?

현실세계에서의 라이브러리(도서관)란 필요할 때마다 꺼내볼 수 있는 책(지식)들이 모여있는 곳이다.

프로그래밍에서의 라이브러리란 필요한 기능들이 모여있는 코드의 묶음이라고 생각할 수 있다.

자주 사용되는 기능들을 라이브러리(객체나 함수등의 형태)로 만들어두면, 필요할 때마다 직접 호출하여 사용할 수 있다.

물론 남들이 만들어둔 외부 라이브러리도 가져다 사용할 수 있다.

1) Browser환경에서 script src 로 불러들이는 js파일(JQuery 등)

2) node.js 환경에서 npm으로 설치한 모듈

3) Python 환경에서 pip로 설치한 패키지/모듈

4) Java 환경에서 설치한 jar


# 프레임워크(Framework)란?

프레임워크는 작업(work)의 구조(frame)가 정해져 있는 라이브러리라고 볼 수 있다.

단, '프레임워크가 원하는 방식'대로 다양한 기능을 제공한다.

앱/서버 등의 구동, 메모리 관리, 이벤트 루프 등의 공통된 부분은 프레임워크가 알아서 관리하며,

개발자는 서비스별로 다른 부분만 "프레임워크가 정해준 방식대로" 클래스, 메서드 등에 구현해두면 된다.

(자세한 내용은 아래의 라이브러리 vs.프레임워크 항목을 보면 알 수 있다.)

유명한 프레임워크로는 아래와 같은 것들이 있다.

1) Java 서버 개발에 사용되는 Spring

2) Python 서버 개발에 사용되는 Django, Flask

3) 안드로이드 앱 개발에 사용되는 Android

4) 아이폰 앱 개발에 사용되는 Cocoa Touch

5) 웹 개발에 사용되는 React, Angular, Vue.js 등


# 라이브러리 vs. 프레임워크

가장 큰 차이점은 "코드 흐름의 제어권"이 누구에게 있느냐이다.

1. 라이브러리

: 라이브러리의 객체나 함수를 개발자가 직접 호출하여 사용한다.

2. 프레임워크

: 개발자가 구현한 메서드가 프레임워크에 의해 호출된다.

: 이를 제어의 역전(IoC: Inversion of Control)이라고 한다.

예를 들어 모바일 앱 개발 시, 

버튼이 눌렸을 때 수행하고 싶은 작업이 있다면, 아래의 코드처럼 콜백함수만 정의해서 넣어주면 된다.

button.setOnClickListener( 콜백함수(){ ... 작업 내용 ... } );

개발자는 버튼이 눌렸을 때 수행할 작업만 콜백함수로 넣어주면 되며,

버튼이 클릭되는걸 감지하는 등의 복잡한 작업과 콜백함수의 호출은 프레임워크가 수행한다.

또한 안드로이드 앱은 아래 메서드를 정의하는 것으로 개발이 시작된다.

@Override
protected void onCreate(Bundle savedInstanceStore){
	// ... 코드 ...
}

개발자는 프레임워크가 정해준대로 onCreate라는 이름의 메서드에 필요한 내용을 구현하면 되며,

실제 실행주기에 따라 onCreate메서드를 호출하는건 안드로이드 프레임워크가 알아서 해준다.

(onCreate메서드 자체도 프레임워크가 미리 정해둔 메서드를 오버라이딩하는 개념이다)

즉, 프레임워크는 라이브러리처럼 다양한 기능을 제공하지만,

개발자가 직접 필요한 기능을 가져다가 호출하는 방식이 아니라 "프레임워크의 구조에 맞추어" 객체나 함수를 구현해두면

프레임워크에 의해 적절한 시점/상황에 자동으로 호출되고 실행되는 구조라고 볼 수 있다.


본 내용은 정확한 정의(Definition)이라기 보단,

개발을 하면서 느끼는 라이브러리와 프레임워크의 개념과 차이를 나름대로 정리한 것이다.

프레임워크는 "프레임워크가 요구하는 방식"을 처음에 학습하는데 시간이 소요되지만,

일단 익숙해지면 개발 시간을 획기적으로 단축해주고, 상대적으로 안전한 구조의 개발을 할 수 있는 장점이 있다.

하지만 내부적으로 돌아가는 원리에 대해 파악하지 못하고 시키는대로만 개발하게 된다는 단점(?)도 있을듯 하다.

그래도 수많은 다양한 기능을 쉽고 빠르고 안전하게 사용하면서 로직에만 집중할 수 있는 점은 큰 장점이라고 생각된다.

프레임워크 라이브러리 차이 - peuleim-wokeu laibeuleoli chai
프레임워크 라이브러리 차이 - peuleim-wokeu laibeuleoli chai

Framework(프레임워크)

프레임워크는 뼈대나 기반구조를 뜻합니다.

프로그래밍을 진행할 때 필수적인 코드, 알고리즘 등과 같이 어느 정도의 구조를 제공해주기 때문에 프레임워크를 사용하는 프로그래머는 이 프레임워크의 뼈대 위에서 코드를 작성하여 프로그램을 개발하면됩니다.

즉 간단하게 프레임워크는 완성된 제품이 아닌 완성된 제품을 만들기 위해서 개발자를 도와주는 또는 기반이 되는 역할을 합니다. 이를 소프트웨어적으로 다시 정의하면 소프트웨어의 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합입니다.

프레임워크 예시)

- Java 개발자라면 Spring

- Python 개발자라면 Django

- JavaScript 개발자라면 Node.js

- PHP 개발자라면 Laravel

프레임워크 라이브러리 차이 - peuleim-wokeu laibeuleoli chai

프레임워크의 특징

▰ 특정 개념들의 추상화를 제공하는 여러 클래스나 컴포넌트로 구성되어 있습니다.

▰ 추상적인 개념들이 문제를 해결하기 위해 같이 작업하는 방법을 정의합니다.

▰ 컴포넌트들은 재사용이 가능합니다.

▰ 높은 수준에서 패턴들을 조작화 할 수 있습니다.


프레임워크 라이브러리 차이 - peuleim-wokeu laibeuleoli chai

라이브러리(Library)

라이브러리는 단순 활용가능한 도구들의 집합

프로그래머가 어떠한 기능을 수행하기 위해서 도움을 주는 또는 필요한 것을 제공해주는 역할

즉, 개발자가 만든 클래스에서 호출하여 사용, 클래스들의 나열로 필요한 클래스를 불러서 사용하는 방식을 말합니다

라이브러리 예시

- 가장 유명한 자바스크립트 라이브러리는 jQuery입니다. (간혹 프레임워크라고 소개되는 곳이 있는데 공식 사이트에서도 라이브러리로 명시되어 있습니다.)

- 그래픽 사용자 인터페이스(Graphical user interface , GUI)에서 재사용하기 쉽게 버튼, 테이블 같은 구성 요소를 호출해서 쓸수 있도록 분리해두었다면 라이브러리입니다.

- Windows에서 간혹 보았을 dll 확장자는 동적 링크 라이브러리(dynamic-link library, DLL)의 약자로 라이브러리라고 할수 있습니다.

- 객체지향 프로그래밍(object-oriented programming, OOP)은 기본적으로 각 기능마다 함수화하는 것으로 클래스 라이브러리라고 할수도 있습니다.


Framework Vs Library

프레임워크 라이브러리 차이 - peuleim-wokeu laibeuleoli chai

​프레임워크와 라이브러리의 차이점은 흐름을 누가 지니고 있냐의 차이입니다.

프레임워크는 전체적인 흐름을 자체적으로 가지고 있어 프로그래머는 그 안에서 필요한 코드를 작성합니다.

반면에 라이브러리는 프로그래머가 전체적인 흐름을 가지고 있어 라이브러리를 자신이 원하는 기능을 구현하고 싶을 때 가져다 사용할 수 있다는 것이죠.

흐름에 대해서 잘 이해하시는 것이 가장 중요합니다.

프레임워크 라이브러리 차이 - peuleim-wokeu laibeuleoli chai

프레임워크를 집이라는 건물에 비유하였으며 라이브러리는 집 안에 포함되는 가구에 비유를하였습니다.

간단히 프레임워크는 가져다가 사용한다는 것보다는 프레임워크라는 특정 공간에 들어가서 사용한다는 느낌이 더 강하다고 말할 수 있으며,

라이브러리는 라이브러리 자체를 가져가 사용하고 호출하는 용도로 사용된다고 생각하시면 쉽게 이해하실 수 있을 것입니다.

💡 아직까지 개념이 모호하다면 ▼

라이브러리는 톱, 망치, 삽같은 연장입니다.

사람이 들고 썰고, 바꿔들고 내려치고, 다시 바꿔들고 땅을 파는 겁니다.

프레임워크는 차, 비행기, 배같은 탈 것입니다.

사람이 타서 엔진 켜고, 기어 넣고, 핸들 돌리고, 운전하거나, 조종하거나 해야합니다.

도구를 쓸 때, 급하면 썰어야 할 곳에 망치를 쳐도 됩니다. 땅 파야할 때 톱으로 땅을 긁어내도 됩니다.

사람은 도구를 선택하는 입장이기 때문에, 어떤 도구를 사용하든 원하는 것을 만들어낼 수 만 있으면 됩니다.

반면에, 탈것은 정해진 곳으로만 다녀야 합니다.

차를 타고 하늘을 날거나, 배를 타고 땅으로 갈 수는 없습니다.

그 목적에 맞게 만들어져 있기 때문에 그저 정해진 규칙에 맞춰서 엔진, 기어, 핸들만 잘 돌리면 되는 것입니다.

라이브러리와는 달리 프레임워크는 이미 프로그래밍할 규칙이 정해져 있습니다.

예를 들어, 설정파일로 사용되는 XML에 어떤 태그를 써야하며, 어떤 함수를 추가적으로 작성해야하고, 소스 파일을 어느 위치에 넣어야하며, DB와 연동하기 위해 무엇을 써넣어야 하는지 정해져 있습니다.

보통 이런 대부분의 작업은 프레임워크가 하고자 하는 일에 비하면 아주 작은 일이며, 사람은 극히 일부분만 조정함으로써 목적을 달성할 수 있습니다.

만약 프레임워크가 담당하는 부분이 내가 하고자 하는 목적과 다를 경우에는 어떻게 해야 할까요?

그렇다면 단순히 프레임워크를 잘못 가져다 쓴 것입니다.

더 목적에 가까운 프레임워크를 찾아보면 대부분 있을 것이고 없거나 찾기 힘들다면 비슷한 프레임워크를 라이브러리 단계에서 변경해서 다른 프레임워크로 만들면 될 것입니다.

차를 튜닝한 다음에, 차를 다시 운전하면 된다는 것이라고 할 수 있습니다.

혹시 프레임워크 없이 그냥 라이브러리로만 만들면 안될까요?
안될 이유가 어딨겠습니까?!

그냥 다 다시 만들 능력과 시간과 여유만 있다면 그렇게 해도 됩니다.

스스로 만든 프레임워크는 버그도 스스로 잡아야하지만, 남들이 만들어놓은 프레임워크는 쓰는 사람이 많은 만큼 그만큼 수정이나 업데이트도 빠릅니다.

기능이 마음에 안드는 부분이 있다면, 프레임워크를 고쳐서 사용할 수 있습니다.

처음부터 모든 것을 만드는 것보다는 훨씬 비용이 적게 들 것입니다.

내일 당장 지방에서 서울로 출근해야하는데, 혼자서 차를 만들어서 타고 가야한다는 생각을 해보세요.


| 요약

◤ 프레임워크 : 특정 프로그램을 개발하기 위한 여러 요소들과 메뉴얼인 룰을 제공하는 프로그램

◤ 라이브러리 : 프로그램을 개발하기 위해 쓰는 공구와 같은 도구들

❖ 공통점 : 프로그램을 쉽게 만들 수 있게 하는 공통된 목적이 있음

❖ 차이점 : 자유도, 프레임워크는 꼭 써야되는 것과 지켜야되는 룰이 있다. 라이브러리는 쓰든 안 쓰든 자기 마음이다.


Reference

https://webclub.tistory.com/458?category=546348

https://engkimbs.tistory.com/673 

https://juyeop.tistory.com/23 

이 글이 좋으셨다면 구독 & 좋아요

여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.

프레임워크 라이브러리 차이 - peuleim-wokeu laibeuleoli chai