
- Framework -
개념
-
프레임워크라는 단어는 일반적으로 뼈대나 하부 구조를 의미한다.
-
소프트웨어 개발의 뼈대와 같은 역할을 담당하며 개발자에게 기본적인 구조와 규칙을 제공한다.
이로 인해 개발자는 보다 빠르고 효율적으로 소프트웨어를
개발할 수 있으며 코드의 재사용성과 유지보수성을 향상시킬 수 있다.
특징
-
개발자에게 기초적인 가이드를 제공하여 개발 과정에서의 방향성과
구조를 제시하고 개발의 일관성을 유지하며 복잡성을 줄여준다.
-
DB 연결, 사용자 인증, 라우팅 등의 개발자들이 반복적으로
자주 사용하는 기능들(미리 구현한 클래스나 컴포넌트)을
재사용 가능한 형태로 제공하여 개발 속도를 빠르게 한다.
-
웹 개발, 모바일 어플리케이션, 데이터 분석 프레임워크 등
각기 다른 목적과 기능을 가지고 있어 이 범위에 따라 선택할
프레임워크가 결정되며 그에 맞는 개발 작업을 수행할 수 있다.
-
빌드, 패키지 관리, 디버깅, 테스트 도구 등의 개발자의
편의성을 높이기 위한 다양한 도구들을 지원하는데 이러한 도구들은
코드 작성, 디버깅, 테스트, 빌드 배포 등의 작업을 쉽게 할 수 있도록 도와준다.
장점
-
자주 사용되는 기능과 구조를 미리 구현해 놓아서
개발자는 기본적인 요소를 직접 만들 필요가 없다.
-
표준화된 방법으로 작성된 코드가 품질 높은 결과물을 보장할 수 있다.
-
프레임워크의 구조와 규칙 덕분에 변경사항을 관리하고
오류를 최소화할 수 있으며 즉 유지보수가 용이하다.
단점
-
프레임워크에 너무 의존하면 개발자 스스로의 능력만을 이용하는 것이
아니기 때문에 실질적인 개발 실력이 낮아질 수 있다.
-
개발에 활용하기 위해서는 해당 프레임워크를 공부해야 하기에
개개인에 따라 다르겠지만 이러한 부분에서 많은 시간이 소요될 수 있다.
프레임워크의 예시
-
React : 페이스북에서 개발한 UI 라이브러리이며 컴포넌트 기반 구조와
가상 DOM을 사용하여 빠르고 효율적인 UI 개발을 지원하며 SPA와
모바일 어플리케이션 개발에 적합하다.
-
Django : 파이썬으로 작성된 웹 프레임워크이며
MTV(Model-Template-View)패턴을 사용하며 강력한 내장 기능을 제공하여
빠르고 효율적인 웹 어플리케이션 개발이 가능하다.
- Library -
개념
-
라이브러리라는 단어는 일반적으로 도서관을 의미하며, 다양한 정보가 정리되어 있는 집합을 떠올리면 된다.
-
소프트웨어에서의 라이브러리는 특정 기능을 개발하기 위해 필요한 도구나 함수들의 집합으로, 미리 작성된 코드, 변수, 함수, 클래스 등이 포함되어 있다. 개발자는 필요할 때 이들을 호출하여 사용할 수 있다.
특징
-
특정 함수, 클래스, 컴포넌트 등을 모아둔 집합으로, 누구나 만들 수 있다.
-
특정 동작에 대한 로직을 이미 구현해 두었기 때문에, 이를 활용하는 것이 간편하다. 직접 구현할 필요 없이 미리 만들어진 기능을 호출하여 사용할 수 있다.
장점
-
코드 재사용성: 이미 작성된 코드를 재사용할 수 있어 개발 시간이 단축된다. 중복된 작업을 피하고, 기능을 손쉽게 추가할 수 있다.
-
기능 간소화: 특정 기능이나 작업을 간단하게 처리할 수 있어, 복잡한 로직을 직접 작성할 필요가 없다.
-
유지보수 용이: 잘 정의된 라이브러리를 사용하면 코드의 일관성이 유지되며, 버그 수정과 기능 업데이트가 상대적으로 용이하다.
단점
-
의존성 문제: 외부 라이브러리에 의존하게 되면, 해당 라이브러리의 업데이트나 변경 사항에 영향을 받을 수 있다. 라이브러리가 더 이상 유지보수되지 않거나, 호환성 문제로 인해 문제가 발생할 수 있다.
-
성능 문제: 라이브러리가 제공하는 기능이 과도하게 복잡하거나 필요 이상의 기능을 포함하고 있을 경우, 성능에 영향을 미칠 수 있다.
라이브러리의 예시
-
C++의 표준 템플릿 라이브러리 (STL): 다양한 데이터 구조와 알고리즘을 제공하는 라이브러리로, C++에서 자주 사용되는 벡터, 리스트, 맵 등의 컨테이너와 정렬, 검색, 반복 등의 알고리즘을 포함한다.
-
jQuery: JavaScript 라이브러리로, HTML 문서의 조작, 이벤트 처리, 애니메이션 및 Ajax 기능을 간단하게 사용할 수 있게 해준다. 클라이언트 사이드에서의 DOM 조작을 쉽게 할 수 있도록 도와준다.
사진 인용 및 두 방식에 대한 참고 블로그