안녕하세요, 성조입니다.
라이브러리 프레임워크 등 개발하다 보면 다양한 용어들을 접하게 됩니다.
라이브러리와 프레임워크라는 단어를 자주 사용하면서도 가끔씩 헷갈리는 부분이 있었기 때문에 이번 포스팅을 통하여 정리하고자 합니다.
라이브러리 (Library)
결론 : 특정 기능을 수행하는 코드의 모음이다.
라이브러리는 소프트웨어 개발자가 자주 사용하는 기능을 미리 작성하여, 필요한 상황에 활용하여 개발 속도를 높이고 코드 재사용성을 높인다.
라이브러리는 일반적으로 보면 함수 또는 클래스의 집합이며, 사용자는 이러한 함수 및 클래스를 프로그램에 직접 호출하여 사용할 수 있게 된다.
예를 들면 Django, express.js 또는 Spring boot 등에서 데이터베이스 작업을 수행할 경우. 데이터베이스 연결 및 쿼리 실행 등의 기능을 제공하는 데이터베이스 라이브러리를 활용하는 것이 일반적으로 활용되는 라이브러리이다.
다음의 포스팅은 장고에서 MySQL을 연동하는 라이브러리를 활용하여 연동한 포스팅이다.
2022.10.02 - [Python 🐍/Django] - [Django] 장고(Django) MYSQL 연동하기
이처럼. 라이브러리가 존재하며, Django나 Flask에서 Postgresql의 경우 다음과 같은 명령어를 입력 후. import해서 포스트그레를 활용하는 것이 라이브러리를 활용하는 것이다.
pip install psycopg2
import psycopg2
또한 파이썬의 경우. 데이터과학에서 너무 유명해진 넘파이(NumPy)도 라이브러리이다.
다른 Express.js와 Spring Boot에서도 라이브러리 사용 예시를 들 수 있으나, 길이 너무 길어질 것 같다고 판단하여 여기서 마친다.
프레임워크 (Framework)
결론 : 개발자가 애플리케이션을 개발하는데 사용하는 일종의 체계 또는 구조이다.
프레임워크는 어떠한 목적을 가지고 프로그래밍할 때. 목적을 달성하기 위하거나, 복잡한 문제를 해결할 때 문제를 풀이해내기 위해 필요한 구조 또는 체계라고 한다.
또한 프로그램 네이밍에서 명사 의미를 이해하면 조금 더 와닿을 수 있는데 틀 구조, 뼈대, 골격, 구조, 구성 등등 단어 그대로 활용된다.
프레임워크는 상황에 맞게 다양하게 활용 중이며, 파이썬은 [Django, Flask, Fastapi] 자바는 [Spring, Spring Boot]등 활용되고 있다.
파이썬 장고(Django)의 경우. 프로젝트를 실행 할 때 기본적으로 관리자(admin) 페이지를 지원하는데 서비스에서 필요로 하는 기능 중 관리자 기능이 필수인 경우. 장고 프레임워크에서 제공되는 기능을 활용하여 관리자를 추가로 구축할 필요 없이. 시간을 단축할 수 있는 장점이 존재한다. 또한 데이터베이스도 기본적으로 장고는 SQLite Database를 제공한다. 그렇기 때문에 추가적인 설정 없이도 바로 데이터베이스를 작업할 수 있다.
기능들을 체계적으로 정의하고, 구조를 잡아서 제공하는 것이 프레임워크라고 할 수 있다. 이를 활용하여 비즈니스 로직 구현에만 집중할 수 있게 된다.
별도의 예시를 들면. 건물을 올리는 경우. 최근에는 3D프린팅 기술로 뼈대 없이 건물을 짓는 경우도 존재하지만 프레임워크는 현재 아파트 건물등의 뼈대를 설계하는 건축구조를 의미한다.
라이브러리(Library)와 프레임워크(Framework)의 차이점
결론 : 제어 흐름(Control Flow)에 대한 차이가 존재한다.
라이브러리의 경우. 개발자가 작성한 코드에서 호출되어 사용되며, 개발자가 전체적으로 흐름을 제어할 수 있다. [본인 의지로 제어 가능]
프레임워크의 경우. 개발자가 작성한 코드를 프레임워크가 호출하여 사용하며, 프레임워크가 전체적인 흐름의 제어를 강제한다. [프레임워크가 강제 제어]
라이브러리는 직접 구현할 때 활용되는 코드의 모음이기 때문에 높은 자유도로 개발할 수 있다. 하지만 구조 없이 개발하면 높은 자유도가 프로젝트 기능 설계 또는 구현에서 부담을 초례하여 오히려 독이 될 수 있다.
프레임워크에서 제공되는 기능들을 활용하면 개발자는 비즈니스 로직 구현에만 집중할 수 있으며, 일관된 개발 방법론을 제공받아 프레임워크 내에서 사용되는 코드의 일관성을 유지할 수 있다. 이러한 일관성은 개발자들끼리 협업할 때 중요한 요소로 작용된다.
프레임워크는 보안, 성능, 확장성 등의 중요한 측면을 고려한 구조를 제공하여 구조의 측면을 고려하지 않고 적재적소에 맞는 코드를 구현하여 안정적이고, 효율적인 개발을 할 수 있도록 도와준다.
단점으로 프레임워크 내에서 제공하는 구조와 규칙에 맞게 개발해야 하므로, 개발자가 원하는 기능을 구현할 때 자유도를 잃고, 프레임워크가 지시하는 것대로 개발할 수 있다. 사용되는 언어와 별도로 프레임워크를 학습하는 학습 곡선이 가파를 수 있으며, 프레임워크 내부 구조에 대한 이해도 기본적으로 필요하게 된다.
요약
- 라이브러리 : 자주 사용되는 기능을 코드 재사용성을 높이기 위해 제공한다.
- 프레임워크 : 일괄된 개발 방법론과 안정적인 구조를 제공하여 개발자가 안정적이고 효율적인 애플리케이션을 개발할 수 있도록 도와준다.
내용에 대해서 궁금하신 사항이나, 포스팅에 부족한 점이 있다면 언제든지 댓글 달아주시면 감사드리겠습니다.
다음 포스팅 때 뵙겠습니다.
감사합니다.
참조
'Study 📔' 카테고리의 다른 글
[Study] IaaS, PaaS, SaaS이란? (0) | 2023.03.30 |
---|---|
[Study] React.js + TypeScript로 GitHub Blog 만들기 (0) | 2023.03.09 |
[Study] 패스트캠퍼스 12월 비동기 처리 세미나 후기 (0) | 2022.12.31 |
[Study][Architecture] 모놀리식(Monolithic)와 마이크로서비스 아키텍처(Microservices, MAS) 정리하기. (0) | 2022.12.10 |
[Study] 인프런 플러터와 장고 1시간 강의 (수강 후기) (0) | 2022.11.05 |