본문 바로가기
코딩 이야기

프레임워크(Framework)와 라이브러리(Library)

by trouveler-Seong 2024. 1. 30.

프레임워크(Framework)와 라이브러리(Library)

1. 프레임워크란?

  • 소프트웨어 프레임워크(software framework)는 복잡한 문제를 해결하거나 서술하는 데 사용되는 기본 개념 구조이다. 간단히 뼈대, 골조(骨組), 프레임워크(framework)라고도 한다.[1]
  • 개발자가 소프트웨어를 개발할 때 코드를 구현하는 시간을 줄이고, 코드의 재사용성을 증가시키키 위한 목적으로 클래스의 묶음들을 라이브러리 형태로 제공하는 것을 말함.

1. 1. 프레임 워크의 특징

  • 개발자가 따라야 하는 가이드를 제공함
  • 개발의 범위가 정해져있음
  • 개발자를 위한 다양한 도구 등을 제공함

1. 2. 프레임 워크의 종류

구분 설명 중류
JAVA기반 Web Framework Jave를 통한 웹 어플리케이션 개발에 초점을 맞추워 필요한 요소들을 모듈화 하여 제공하는 프레임워크 - Spring Framework
- 전자정부표준 - Spring    
- Struts    
Front-end Framework Front-end를 쉽게 구현할 수 있게 틀을 제공하는 프레임 워크 - Bootstrap
-MDL    
python기반 Web Framework 파이썬을 기반으로 웹 어플리케이션 개발을 자원하는 프레임워크 - Django
- Flask    
컴퓨터 비전 프레임워크 컴퓨터비전 개발을 위한 기능을 제공하는 프레임워크 - OpenCV

표 외에도 다양한 프레임워크가 존재한다.

2. 라이브러리란?

2. 1. 라이브러리 예시

  • Browser환경에서 script src 로 불러들이는 js파일(JQuery, React 등)
  • node.js 환경에서 npm으로 설치한 모듈
  • Python 환경에서 pip로 설치한 패키지/모듈(파이썬은 프레임워크 또한 pip로 설치를 지원함.)
  • Java 환경에서 설치한 jar

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

가장 큰 차이점은 “코드 흐름의 제어권”이 어디에 있는가가 중요함

라이브러리는 개발자가 객체나 함수를 직접 호출하여 사용하지만

프레임워크는 개발자가 구현한 메서드가 프레임워크에 의해 호출됨

간단한 예시를 보게 되면 우리가 만약 대표적인 딥러닝 프레임워크 keras를 통해서 AI모델을 개발한다면

keras.Model.fit()

우리는 여기에서 모델이 학습할 데이터는 넣어주기만 한다면

Untitled

해당 데이터를 통해 학습하는 과정의 많은 메소드들을 프레임워크가 자동으로 수행한다.

이를 우리는 제어의 역전이라고 말한다.

4. 제어의 역전?

프로그래머가 작성한 프로그램이 재사용 라이브러리의 흐름 제어를 받게 되는 소프트웨어 디자인 패턴을 말한다. 줄여서 IoC(Inversion of Control)이라고 부른다.[3]

위에서 보인 예시와 같이 fit()메소드를 수행하는 순간 프로그램의 전체 제어권은 케라스 프레임워크에 넘어가게 된다. 제어의 연속을 원하지 않는다면 fit 메서드가 아닌 위에 그림에 나타난 on_begin, on_end 등의 라이브러리들을 개발자가 직접 제어하고 실행해주어야 한다. 이처럼 객체의 생명주기를 개발자가 제어하지 않고 프레임워크가 대신해주는 것을 제어역전이라고 한다.

말 그대로 개발자가 제어하던 전통적 프로그래밍 방식에서 소프트웨어 즉 프레임워크에 제어권을 빼앗겼다는 의미로 이해하자.

5. 결론

  • 프레임워크는 라이브러리의 묶음으로, 객체의 생명주기 등을 자동으로 수행해줍니다.
  • 라이브러리는 프로그램의 필요한 기능들의 묶음으로, 프레임워크에 속할 수 있습니다.
  • 쉽게 말해, 프레임워크가 집이라면 라이브러리는 집안의 가구라고 할 수 있습니다.
  • 프레임워크와 라이브러리는 코드 작성에 도움이 되는 타인의 코드의 집합입니다!
  • 프레임워크는 프로그램이 필요한 것을 개발자에게 위임받아 제어권을 역전하고, 라이브러리는 개발자가 필요할 때 호출함으로써 개발자가 능동적으로 사용합니다.

[1] 위키백과 : https://ko.wikipedia.org/wiki/소프트웨어_프레임워크

[2] 위키백과 : https://ko.wikipedia.org/wiki/라이브러리_(컴퓨팅)

[3] 위키백과 : https://ko.wikipedia.org/wiki/제어_반전

'코딩 이야기' 카테고리의 다른 글

서버 알고쓰자 2편 프록시서버, 메일서버  (880) 2024.02.18
네트워크 기초 및 장비  (659) 2024.02.17
서버 알고 쓰자 1편 웹서버와 WAS  (350) 2024.02.17
서버도 컴퓨터다!  (258) 2024.02.01
파이썬으로 DB 정제  (601) 2024.01.31

댓글