CS

프레임워크 vs 라이브러리

D_Helloper 2022. 10. 3. 02:01

 

프레임워크

프레임워크란 ?


  • 원하는 기능 구현에 집중하여 개발할 수 있도록 일정한 형태와 필요한 기능을 갖추고 있는 골격, 뼈대를 의미한다.
  • 개발 시 필수적인 코드, 알고리즘, DB 연동과 같은 기능들을 위해 어느 정도의 뼈대(구조)를 제공하며, 이러한 뼈대 위에서 사용자는 코드를 작성하여 애플리케이션을 개발한다.
  • 앱/서버 등의 구동, 메모리 관리, 이벤트 루프 등의 공통된 부분은 프레임워크가 관리하며, 사용자는 프레임워크가 정해준 방식대로 클래스, 메서드 등을 구현하면 된다.

 

예시

  • Java 서버 개발의 Spring
  • Python 서버 개발의 Django, Flask
  • 안드로이드 앱 개발의 Android
  • 아이폰 앱 개발의 Cocoa Touch
  • 웹 개발의 Angular, Vue.js 등
  • 자바 기반의 JSP를 위한 Struts

 

장점

  • 개발 프로세스 간소화
    • 프레임워크에서 제공해주는 도구들이나 패키지를 사용하면, 개발자는 처음부터 코드를 일일히 작성하지 않아도 되고, 이미 작성되어 있는 코드를 가져다 쓰고, 재사용 하므로 효율이 증대된다.
  • 코드 길이 간소화 및 완성도
    • 이미 검증되어 있는 코드들이 제공되기 때문에, 개발자가 직접 하나하나 코딩하는 것 보다 더 간결해질 수 있다.
  • 유지보수 용이
    • 프레임워크를 사용할 시에, 일련의 과정이 동일하고, 나뉘어진 부분이 명확하기 때문에 코드가 정형화 된다.
  • 보안
    • 개발자는 일반적으로 외부에서 들어오는 공격에 대해 고려를 해야 하지만, 프레임워크는 기본적인 보안이나 보호 방법을 제공한다.

 

단점

  • 러닝커브
    • 새로운 프레임워크를 사용하기 위해 팀원들이 해당 프레임워크를 학습해야 한다. 이 과정은 부담으로 다가올 수 있다.
  • 제약사항
    • 프레임워크는 보통, 설계가 되어 있고, 사용법이 정해져 있기 때문에. 이를 벗어나서 유연하게 개발을 하기는 쉽지 않다.
  • 크기
    • 개발자가 필요로하지 않는 기능 또한 포함되어있어 불필요하게 자원을 차지하는 일이 발생하기도 한다.

 

 

라이브러리

라이브러리란?


  • 비휘발성 자원의 모임, 즉 특정 기능을 모아둔 코드, 함수들의 집합이며 누군가가 임의로 정의해놓은 다양한 기능들의 집합
  • 완전한 프로그램이 아닌, 특정한 부분 기능만을 수행하도록 제작되어 있음.

 

예시

  • Python pip로 설치한 패키지/모듈 (tensorflow, pandas, beautifulsoup 등등)
  • C++의 표준 템플릿 라이브러리(STL)
  • Node.js에서 npm으로 설치한 모듈
  • HTML의 클라이언트 사이드 조작을 단순화 하는 JQuery
  • 웹에서 사용자 인터페이스 개발에 사용되는 React.js

 

라이브러리는 정적 링킹 방식과 동적 링킹 방식에 따라 정적 라이브러리와 동적라이브러리(공유 라이브러리)로 나눌 수 있다.

 

정적 라이브러리(Static Link Library : SLL) 정의


  • 정적 링킹(Static Linking) 과정에서 링커가 프로그램에 필요로 하는 부분을 라이브러리에서 찾아 실행 파일에 복사하는 방식의 라이브러리.
  • 윈도우 환경에서는 *.lib, 리눅스 환경에서는 *.a
    • *.lib라고 무조건 정적 라이브러리는 아님

 

정적 라이브러리의 장점

  • 실행 파일이 라이브러리를 복사해서 가지고 있으므로 실행할 때 라이브러리가 필요 없다. 즉, 실행 파일만 있으면 프로그램이 동작하는 만큼 이식성이 좋고 안정적이다.

 

정적 라이브러리의 단점

  • 실행파일이 라이브러리 내용을 복사해서 가지고 있으므로 라이브러리에서 수정할 부분이 있으면 파일 전체를 다시 컴파일하여 재배포 해야 한다.
  • 실행 파일의 크기가 커진다.
  • 같은 라이브러리를 가진 여러 프로그램이 동시에 실행될 경우 코드가 중복되어 메모리 자원을 낭비한다.
  • 정적 라이브러리 전체를 링킹하면서 사용하지 않는 함수들까지 전부 다 포함한다.

 

 

동적 라이브러리(Dynamic LInk Library : DLL) 정의


  • 라이브러리 자체를 복사하지 않고 주소만 가지고 있다가 필요할 때 해당 주소로 접근하여 필요한 부분을 가져오는 방식
  • 윈도우는 *.dll, 리눅스는 *.so

 

동적 라이브러리 장점

  • 정적 라이브러리에 비해 실행 파일의 크기가 작음
  • 라이브러리를 메모리에 올려놓고 사용하기 때문에 효율적으로 메모리 사용 가능
  • 라이브러리만 다시 컴파일 하면 실행 파일을 새로 컴파일 하지 않아도 됨

동적 라이브러리 단점

  • 실행할 때 dll 파일이 필요. 외부 의존도가 생기며 이식성이 낮아짐
  • 매번 프로그램 영역에서 라이브러리가 저장된 주소로 이동하는 과정이 생기기 때문에 약간의 성능 감소가 있을 수 있음.

 

프레임워크 vs 라이브러리


  • 프레임워크와 라이브러리의 차이점은 ‘제어 흐름의 권한이 어디에 있는가’이다.
  • 라이브러리를 사용할 경우에는 어플리케이션 코드가 라이브러리를 활용하여 흐름을 직접 제어
  • 프레임워크를 사용할 경우에는 어플리케이션 코드를 프레임워크의 틀 안에서 작성하고 프레임워크의 플로우에 맞게 동작하도록 해야 함. (제어 역전)