본문 바로가기
개발언어/개발 전반

용어 정리 - Framework, Library, Module, Component, API

by 창용이랑 2020. 12. 3.
728x90

위 용어들은 개발을 할 때 자주 만난다.

개발했던 내용을 자세히 설명하려는데 정확히 어떤 용어를 써야 하지? 하는 생각이 들었다.

또 친한 친구와 React.js 에 대한 얘기를 하다가 우리는 그것이 Library 인지 Framwork 인지 헷갈렸다.

찾아본 글들에서도 Framework와 Library가 혼용되어서 쓰였다.

별 차이는 없겠지만, 그래도 찝찝해서 비슷하게 쓰이는 용어들을 한번에 정리해보기로 하였다! ㅎㅎ

(* 용어를 바라보는 시각, 혹은 환경, 프로그래밍 언어 따라서 용어의 쓰임이 달라질 수 있다는 점 참고 바랍니다!)

 

1. Library(라이브러리) 과 Framework(프레임 워크)

library와 framework 는 둘 다 누군가에 의해 쓰여진, 재사용 가능한 코드의 모임이다.

이것들의 목적은 사람들이 공통적으로 해결하고 싶어하는 어떤 문제를 푸는 방법을 제시하고,

사람들이 다시 코드를 쓰지 않고 그냥 library와 framework를 가져다 씀으로써 보다 효율적으로 그 문제를 해결하도록 한다.

<Library VS. Framework>

웹 애플리케이션을 만드는 것을 집 짓는 것으로 생각하고, Library 와 Framework를 비교해 보면

Library = 이케아

Framework = 모델 하우스 (가져다 쓸 수 있는)

라고 할 수 있다.

Library(이케아)

집을 집 답게 꾸밀 수 있는 가구, 전자 기기, 큰 부품 등이 있다.

이케아 에서는 사용자가 사고 싶은 물품만 사서, 나의 집을 만들면 된다.

하지만, 집은 사용자가 만들어야 하며 이케아는 집 자체를 제공하지는 않는다.

그래서 집을 사용자가 컨트롤 한다고 말할 수 있다.

Framework

(가져다 쓸 수있는 모델 하우스)

모델하우스는 이상적인 집의 틀을 제시한다. 건축과 설계에 대한 몇 가지 제한된 형태를 주고,

(예 - 화장실, 마루, 방1, 방2가 어디에 배치될 것인지, 코드 꽂는 곳이 어디 있어야 하는지)

이 모든 틀 안에서 사용자의 의견이 어디어디에서 반영될 수 있는지를 알려준다.

사용자가 집을 컨트롤 하는 것이 아니고, 시공자와 시공자의 설계가 집 전반을 컨트롤 한다.

이 예를 개발할 때로 옮겨 오면,

Library

- 개발자가 application을 만든다.

- 개발자가 library를 부를 곳을 정하고, 디테일을 library가 채운다.

→ 개발자가 application의 흐름을 제어한다.

Framework

- framework가 application을 만든다.

- framework가 틀을 만들어 놓고, 디테일한 부분의 설정은 개발자에게 맡긴다.

→ Framework가 application의 흐름을 제어한다. *Inversion of Control(제어의 역전)이 일어난다.

* IoC(Inversion of Control): 제어의 역전 - 개발자가 관리하고 통제해야 하는 객체들의 제어를 framework에 넘긴다.

<코드 비교 - jQuery(Library) VS.Vue.js(Framework)>

Library 인 jQuery와 Framework인 Vue.js가 있다.

오류가 발생했을 때, 메세지를 띄우는 코드이다.

- jQuery(Library)

: 개발자는 프로그램에게 라이브러리를 부르고 싶은 곳을 말한다. 마치 도서관(library)에서 원하는 책을 꺼내고, 그 책을 참고하는 것과 같다.

// index.html
<html>
   <head>
      <script src="https://code.jquery.com/jquery-3.3.1.min.js"
      </script>
      <script src="./app.js"></script>
   </head>
   <body>
      <div id="app">
         <button id="myButton">Submit</button>
       </div>
   </body>
</html>
// app.js
// 개발자가 쓴 코드
// jQuery library를 불러서 그 기능을 완성한다.
let error = false;
const errorMessage = 'An Error Occurred';
$('#myButton').on('click', () => {
  error = true; // 에러가 난 것처럼 error = true로 설정함.
  if (error) {
    $('#app')
       .append(`<p id="error">${errorMessage}</p>`);
  } else {
    $('#error').remove();
  }
});

- Vue.js

: 개발자는 vue.js 가 정해준 틀에 맞춰 빈칸을 채우는 형식으로 data는 무엇이며, error 메세지는 무엇인지 등등을 써준다.

 

//index.html
<html>
   <head>
      <script src="https://cdn.jsdelivr.net/npm/vue"></script>
      <script src="./app.js"></script>
   </head>
   <body>
      <div id="app"></div>
   </body>
</html>
 // vue.js 를 사용한 코드
const vm = new Vue({
  template: `<div id="vue-example">
               <button @click="checkForErrors">Submit</button>
               <p v-if="error">{{ errorMessage }}</p>
             </div>`,
  el: '#vue-example',
  data: {
    error: null,
    errorMessage: 'An Error Occurred',
  },
  methods: {
    checkForErrors()  {
      this.error = !this.error;
    },
  },
});

<그래서 React.js 는 library 일까? framework 일까?>

React.js = Library 이다.

이유는 Orelly (https://www.oreilly.com/library/view/what-react-is/9781491996744/ch01.html) 에 있는 것을 정리해 보았다.

1. 리액트는 UI 렌더링만을 지원한다. (그 이외에 것은 사용자가 만들어야 함.)

2. 리액트 애플리케이션을 만들기 위해서는 다른 tool(= stack)들이 필요하다.

(framework인 Ember.js 의 stack은 Ember.js 이다.)

- Application code: React, Redux, react-router

- Build tools: webpack, Uglify, npm/yarn, Babel, babel-preset-env

- Testing tools: ESLint, Enzyme, Mocha/Jest

리액트는 라이브러리의 특성을 가지고, 사용자가 점차적으로 필요한 부분에 적용할 수 있도록 한다.

또 함께 사용하는 다른 툴들을 이용해서 리액트를 더 잘 활용할 수 있도록 한다.

하지만 많이들 웹 프레임워크로 알고있고,

위키만 찾아보더라도 설명은 라이브러리로 하지만 제목에 웹 프레임워크로 분류된다.

웹 라이브러리/프레임 워크들을 대부분 총칭하여 웹 프레임워크 라고 하는 것 같다.

React.js 는 이러저런 특징이 있고, 그래서 library 이다 라는 것만 알면 될 것 같다.


2. Module

전체 프로그램을 구성할 요소인데, 기능 단위로 묶은 것이며 재사용을 용이하게 하기 위해 만든다.

프로그램이 커지면 커질수록 그 복잡성이 커지게 되는데 많~ 은 코드들을 기능단위로 나누고,

*정보은닉통해서 안에 내부 구체 코드를 감추고 그 코드들이 구현한 기능만 가져다 쓰도록 한다.

*정보은닉: 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 한다.

Module 은 interface 가 있는데, interfaces는 그 module이 제공하는 기능과 어떻게 그 기능을 쓸 수 있을지 알려준다.

(interface 구현은 개발자 마음)

<Module VS. Library>

Module은 오직 하나의 기능을 제공하는 반면에,

Library 는 여러 관련 기능의 모음이다. 일반적으로 라이브러리 안에 여러개의 모듈이 포함된다.

 


3. Componenet

컴포넌트에 대한 내용은.. 찾아보는 곳마다 상이했다.

어떤 곳은 Module 이 Component의 구성요소라고 하고,

어떤 곳은 Component가 Module의 구성 요소라고 한다.

(기능이 비슷하다는 것을 의미하는게 아닐까..? 현업에 가야 알 수 있는 뉘양스의 차이 일 수도 있다. )

그 중 일관된 설명은

· 재사용 가능한 블럭이다.

· 다른 component들의 조합으로 이루어질 수 있다.

· component는 서로 다른 서버에 배치될 수 있으며, 서비스를 위해 서로 통신할 수도 있다.

· component의 예시:

- UI 단일버튼

- 작은 이자 계산기

- 데이터 베이스 관리자에 대한 인터페이스

'바로가기' 버튼 component

4. API(Application Programming Interface)

API는 응용 프로그램에서 어떤 프로그램 혹은 기능을 사용할 수 있도록 지켜야할 규칙들을 모아놓은 것이다.

API 를 정의하고, 그 규칙에 따라 API에서 기능을 부르면 그 기능을 사용할 수 있다.

(장점)

· 보안성 강화: API 를 사용하면, 그 안에 코드를 몰라도 그 기능을 쓸 수 있으므로

· 커뮤니케이션 증진: 서버가 어떤 기능을 가지고 있고 어떻게 요청해야하는지 클라이언트가 API를 통해 알 수 있다.

· API 가 하는 일의 예시

음식을 식당에서 주문하는 상황

1. 사람은 식당에서 음식을 웨이터 에게 규칙에 따라 "요청"한다.

(규칙) - 음식명, 개수, 추가 요청사항

→ 요청1: 닭칼국수 - 2개 - 안 맵게, 요청2: 김치 부침개 - 1개

2. 웨이터는 주문을 받아 부엌이라는 "시스템"에 알려주는 "메신저" 즉 API 이다.

3. 부엌은 주문을 준비할 "시스템"이다. 시스템이 다 완성이 되면 웨이터에게 말한다.

4. 웨이터는 우리가 요청한 주문에 대한 "결과물"인 음식을 준다.

 

 

[출처] 용어 정리 - Framework, Library, Module, Component, API|작성자 긍정 거북이