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