본문 바로가기
개발

프레임워크(Framework)와 라이브러리(Library) 차이 (비전공자 용)

by 1223v 2022. 3. 25.

우선 프레임워크와 라이브러리의 차이점을 알기 위해선 이것들이 뭔지부터 알아야할 것 같다.

프레임워크란?

더보기

소프트웨어 프레임워크는 뼈대나 기반구조를 뜻한다. 프로그래밍 개발을 하는데 필수적인 코드, 알고리즘 등과 같이 어느정도의 구조를 제공해주기 때문에 개발자들은 이 프레임워크 환경 위에서 코드를 작성해서 프로그램을 개발한다.

즉, 응용프로그램이나 소프트웨어의 솔루션 개발을 수월하게 하기위해 제공된 소프트웨어 환경.

 

종류.

Spring Framework, Junit, Ruby on Rails

 

특징.

상호협력하는 클래스와 인터페이스의 집합이다.

응용 프로그램이 수동적으로 프레임워크에 의해 사용된다.

개발할 수 있는 범위가 정해져있다.

이런식으로 설명이 나와있는데, 비전공자나 모르는 사람이 보면 "??????????"  갈고리만 찍힐거다.... 

 

간단하게 예를 들어 설명하겠다.

우리가 화장실 2개, 에어컨, 인터넷선이 뚫린 방 3개, 방은 5개인 집을 만든다고 가정해보죠.

물론 이렇게 처음부터 벽돌을 쌓아 올려 만드는 방식도 있습니다. 하지만, 처음부터 벽을 쌓고, 전선을 넣고, 방을 나누는 방식으로 집을 만든다면 시간도 굉장히 오래 걸릴뿐더러 수많은 조건들을 맞추기위해 만들다보면, 여러 변수들이 작용해서 개집이 만들어질 수도 있죠.... 

그러니 우리는 능률을 높이고, 시간 효율을 높이면서 변수는 최대한 줄이는 방식으로 이미 만들어진 뼈대에서 작업을 한다면, 위 조건(화장실 2개, 에어컨, 인터넷선이 뚫린 방 3개, 방은 5개인 집)에 집중할 수 있게 되겠죠. 그렇다면, 최대한 적은 변수로 빠르게 집을 만들어 낼 수 있다는 겁니다. 이렇게 만들어진 뼈대가 바로 프레임워크인 것이죠. 그리고 이렇게 만들어진 뼈대에서 작업하는 것이 프레임워크에서 작업하는 것이랍니다.

 

그러면 특징에 대해 설명하겠다. 

-"상호협력하는 클래스와 인터페이스의 집합이다."

이는 위에서 설명했으므로 크게 설명은 하지 않겠다. 방이 나누어진 것과 화장실이 2개, 인터넷 선이 뚫릴 방을 만들기 위해 영역을 지정해준 이런 역할을 해준 것이 모이고 모인 것을 "상호협력하는 클래스와 인터페이스의 집합이다."와 같이 표현한 것이다.

 

-"응용 프로그램이 수동적으로 프레임워크에 의해 사용된다."

이는 위 그림처럼 뼈대가 갖추어진 상태에서 전선은 어디로 깔지, 수도는 어디로 연결할지 이미 정해져있다. 왜냐하면 이미 뼈대가 맞춰졌고, 그 위에 다가 작업하는 것이기 때문이다. 그래서 이러한 위치를 커스텀으로 자유롭게 넣는다면, 이집은 제대로 기능들이 작동하지 않을 것이다.

그래서 전선 코드(서버)나, 수도(작성한 로직), 인터넷 선(사용자 인터페이스)은 정해진 위치에 넣어줘야 한다. 그래서 "응용 프로그램이 수동적으로 프레임워크에 의해 사용된다." 같이 표현한 것이다. 프레임워크에 맞게 코드를 넣어주지 않으면 작동되지 않는다는 것이다. 서버를 입력하는 칸에 서버를 입력하고, 로직이 적혀야하는 곳에 꼭 로직을 넣어줘야한다.

 

-개발할 수 있는 범위가 정해져있다.

이는 동일한 맥락이다. 2번째 특징과 같이 이미 만들어진 뼈대에 집을 지었기 때문에 내가 만약 skt에서 kt인터넷선으로 다시 깔고 싶다고 한다면, 집의 바닥을 뜯어내야하는 대작업을 해야한다. 또한 내가 방을 한개 더 만들고 싶다하면, 뼈대를 다시 설치해야한다. 그래서 이러한 대작업이 펼쳐지기에 조건대로 만드는게 서비스를 빠르게 찍어낼 수 있다는 장점이 있지만, 반대로 여러 커스텀에 제약이 있다는 것을 의미하기도 한다.

 

그래서, 배달의 민족이 level2단계에서는 스프링 프레임워크로 웹 어플리케이션을 만들었지만, level3에 들어서 여러 커스텀 페이지를 소비자들에게 제공하고자 java를 이용해 웹서버, 여러 프레임워크를 이용해 개발을 진행하고 있다고 한다.

 

라이브러리란?

더보기

응용 프로그램 개발을 위해 필요한 기능(함수)을 모아 놓은 소프트웨어. 

소프트웨어를 개발할때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임이며 문서, 적성된 코드 등을 포함하고 이를 가져와서 쓰는 형태를 일컫는다.

 

종류

Apache Commons, Guava, Lombok, jQuery

 

특징.

독립성을 가진다.

응용 프로그램이 능동적으로 라이브러리를 사용한다.

? 뭔소리지? 처음 듣는 사람으로서는 응용프로그램 개발이 뭔지, 비휘발성 자원이 뭔지 이해하기 어렵다.

 

간단히 예를 들어 설명하자면,

우리가 도자기에 그림을 그려 넣을때, 물론 하나하나 다 그려서 디자인 할수도 있지만, 스티커로 꽃모양 스티커나 풀모양 스티커 등 여러 스티커를 만들어 놓고, 그것을 붙혀가며 디자인할 수 도 있다. 이때 만들어진 꽃모양 스티커를 가져와 쓰는 일련의 과정 라이브러리를 사용하는 예라고 부를 수 있다.

(이 부분은 api와 라이브러리와 동일한 개념으로 작용할 수 있기에 라이브러리와 api의 차이는 추후에 다루도록 하겠다.)

 

그러면 특징에 대해 설명하겠다. 우선 독립성.

위에서 말했듯이 꽃모양 스티커는 독자적인 역할이다. 꽃모양 스티커는 오로지 꽃모양 스티커로서만 작용한다는 것이다. 기능 자체가 다른 곳에 의존하여 작용하지 않는다는 것이다.

 

2번째인 "응용 프로그램이 능동적으로 라이브러리를 사용한다." 

이것은 도자기에 그림을 그려넣을때로 다시 가정하겠다. 우리는 도자기를 꾸밀때, 그림을 그려도 되고, 그 동시에 만들어진 스티커를 사용해도된다고 했다. 이렇게 도자기(우리가 작성한 프로그램)에 중점으로 맞춰지면서 스티커를 능동적으로 사용하고 싶을때 사용되는 것이 라이브러리의 특징이다.

즉, 도자기라는 것 자체에 주도권이 있으며, 능동적으로 스티커나 사진을 가져와서 사용되는 것이 라이브러리의 큰 특징이다.

 

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

 

이글을 쭉 읽어 본다면, 바로 차이가 눈에 띄게 보일 것이다.

 

바로 주도권이다.

 

앞서 설명한 프레임워크는 수동적, 라이브러리는 능동적이라는 말도 사용자 입장에서의 기준이다.

더보기

- 라이브러리는 사용자가 가져오고 싶을 때 바로바로 사용할 수 있게 사용자의 자유도가 있다

더보기

- 반면, 프레임워크는 이미 뼈대를 밟고 서있는 입장이기에 이 뼈대의 조건에 맞춰 개발해야한다는 것이다. (살짝 프레임워크는 "로마에 오면 로마 법에 따르라"라는 맥락과 비슷?) 

댓글