/ FRAGMENTARY-KNOWLEDGE

Library, Framework, Architecture, Platform

Introduction

Library, Framework, Architecture, Platform은 우리가 너무나 많이 들어본 용어이고 그 의미도 대충 알고 있습니다. 하지만 명확하게 설명해봐!! 라고 한다면 주춤 주춤하게 만드는 용어이기도 합니다.

이번 포스트는 저 위에 나열된 4개의 용어에 대한 간략한 정리입니다.


Library

가장 쉬운 개념입니다. 일반적으로 Library는 다른 프로그램에서 링크 되기 위해 사용되는 하나 이상의 function 혹은 class 들의 집합이며 이들은 일반적으로 파일형태로 존재합니다.

Library를 사용하는 가장 큰 목적은 코드의 재사용성을 높이기 위함이지요. 자주 사용되는 기능들은 매번 새롭게 작성하지 말고 function이나 class 형태로 만들어 놓고 필요할 때 그 기능을 쉽게 불러다가 사용하자는 개념입니다.

  • Library의 가장 간단한 예로는 jQuery가 있습니다. Front-End 작업을 할 때 DOM 구조에서 내가 원하는 Element를 빠르고 쉽게 찾아 DOM 에서 제거하고 싶을 때 jQuery Library를 이용하면 단 1줄에 해결할 수 있습니다. 순수 JavaScript로 작업하려면 많은 양의 복잡한 코드를 직접 작성해야 합니다.

  • Java에서 사용하는 여러 외부 class 역시 모두 Library입니다. Java에서 랜덤값을 얻고싶을 때 우리는 Random class를 이용해 instance를 생성하고 method를 호출해서 간단하게 원하는 범위의 랜덤값을 도출할 수 있습니다. 만약 Library를 이용하지 않고 랜덤값을 구할려면 역시나 복잡한 로직과 연산을 우리가 직접 구현해야 됩니다.

  • 비슷한 예로 Java에서 JSON 데이터를 처리할 때 역시 특정 Library class를 이용하면 쉽게 처리할 수 있습니다. 가장 대표적인 Library는 Jackson이 아닐까 합니다. 이 Library class들을 이용하면 프로그램에서 JSON 데이터를 아주 쉽게 핸들링 할 수 있습니다.

이렇듯 Library프로그램을 작성할 때 필요한 단위 기능을 모아놓은 모듈이라고 볼 수 있습니다.


Platform

Platform“Software를 실행시킬 수 있는 실행환경(Runtime Environment)”을 의미합니다.

예를 들어 보자면, 우리가 사용하는 모든 OS(Operation System)는 모두 Platform입니다. Windows Platform은 windows 응용 프로그램을 실행시키기 위한 실행 환경이고 Linux Platform은 Linux 응용 프로그램을 실행시키기 위한 실행 환경이란 말이지요.

Java 배울 때 처음에 JVM(Java Virtual Machine)이란 걸 배우게 됩니다. 우리가 작성한 모든 Java 프로그램은 JVM위에서 동작하게 됩니다. 다시 말하면 JVM은 Platform입니다. Java 프로그램을 실행시켜 줄 수 있는 실행 환경이란 말이지요.

개념적으로 본다면 우리가 사용하는 Web이라는 서비스 역시 Platform 범주에 들어가게 됩니다. 정확하게는 Web 이라는 서비스가 아닌 Web Server와 Web Client(browser)로 구성되는 실행환경이 우리가 작성한 Front-End Web Application이 실행되는 Platform 이라 볼 수 있습니다.

Java의 예에서 알 수 있듯이 Platform은 Hierarchical 구조를 가질 수 있습니다. 제일 하단에 OS Platform이 있고 그 위에 JVM이 실행되는 것이죠. 다시 JVM은 Java 프로그램을 실행시킬 수 있는 Platform이 되고 그 위에 사용자가 작성한 Java 프로그램이 실행되는 것입니다.


Architecture

알고는 있지만 딱히 설명하라면 어버버하게 만드는 개념입니다. Architecture는 소프트웨어의 특징을 결정짓는 설계 구조 입니다. 말이 좀 어렵습니다.

Architecture는 다음과 같은 내용을 포함합니다.

  • 소프트웨어의 주요 구성 요소에 대한 정의가 포함됩니다. 소프트웨어의 주요 구성 요소란 소프트웨어를 구성하고 있는 컴포넌트 혹은 모듈을 의미합니다. 어떤 기능의 컴포넌트들이 소프트웨어에 필요한지를 구상해서 구성 요소를 정의합니다. ( View Component, Service Component, Database Component, Transaction component, Message Component 등등)

  • 이런 소프트웨어 주요 구성 요소들 간에 어떤식의 구성이 이루어지고 있는지 정의합니다. 한 컴포넌트가 다른 컴포넌트와 어떤 관계로 연결되는지에 대한 정의를 지칭한다고 보시면 됩니다. 일반적으로 유지보수성을 높이기 위해 Layered Model을 기반으로 컴포넌트간의 연결 관계를 정의합니다.

  • 결국 소프트웨어의 주요 구성 요소들 간에 연관관계가 맺어지는데 이들 간의 상호 인터페이스는 어떻게 할지를 정의합니다. 어떤 값이 넘어가고 이 값을 받아서 결과값으로 어떤 값을 리턴해주는지에 대한 명세를 포함합니다.

  • 소프트웨어의 주요 구성 요소가 하는 중요한 동작 방식을 정의합니다.

위와 같은 내용으로 Architecture를 이해하시면 됩니다. Architecture는 결국 소프트웨어의 주요 특징을 결정하기 때문에 개발에 미치는 영향이 아주 높은 상당히 중요한 부분이라 볼 수 있습니다.

Architecture에 대해 한가지 더 기억하셔야 할 점은 Architecture구체적인 구현을 포함하지 않습니다. 즉, 어떤 프로그래밍 언어를 사용할 것인지, Library는 어떤것을 사용할 것인지, 개발 지원 프로그램은 어떤것들을 이용할 것인지에 대한 내용은 Architecture에는 포함되지 않습니다. 하지만 특수한 경우 Architecture안에 구체적인 표현이 포함 될 수는 있습니다. 하지만 본질적으로 Architecture는 기술적인 설계를 명시하는 것이지 구체적인 구현 방법은 포함하지 않습니다.


Framework

Framework은 소프트웨어 프로젝트가 개발 될 수 있는 뼈대 구조를 지칭합니다. 역시 말이 좀 어려운데요. 다음과 같은 사항을 포함합니다.

  • 소프트웨어 개발시 필요한 지원프로그램
  • Library (Framework은 Library를 포함하는 상위개념입니다.)
  • 프로그래밍 언어
  • 소프트웨어 구성 요소들을 연결시켜주고 동작시켜주는 소프트웨어(일반적으로 Container라고 합니다.)

Framework은 소프트웨어 구성 요소들이 어떻게 동작하는지에 대한 규약이 정해져 있습니다. 이 규약대로 프로그램은 진행이 될 것이고 프로그래머는 기능 구현에만 초점을 맞추어 빠르게 개발을 진행 시킬 수 있습니다.

Framework 도입의 가장 큰 목적 중 하나는 바로 유지보수입니다. 정해진 규칙대로 프로그램이 동작하고 작성되어야 하다보니 다른 사람이 프로그램을 분석하는데 시간이 오래 걸리지 않고 유지보수하는것도 상대적으로 쉽게 진행이 됩니다. Library를 기반으로 하는 프로그램은 모든 로직을 개발자가 직접 구현하기 때문에 다른 개발자가 유지보수하기 쉽지 않은 것에 비해 Framework은 이런 유지보수 측면에서 강점을 가질 수 있습니다.

개발 시 기본 골격이 되는 프로그램 코드가 제공되는것이 일반적인데 이 또한 Framework의 특징이라고 할 수 있습니다. ( Scaffolding 이라고 합니다. )

Framework부분은 사실 더 써야 하는 사항이 많습니다. 하지만 차이점 위주로 살펴본 것이니 위의 내용 정도만 이해해도 충분하지 않을까 합니다.

End.