개요
이번에는 프레임워크와 라이브러리를 각각 알아보고 어떤 차이점이 있는지 정리해보았습니다.
프레임워크
프레임워크란?
프레임워크는 소프트웨어 개발에 필요한 기본 구조와 규칙을 제공하는 도구 모음입니다. 개발자는 이 구조안에서 특정 규칙에 따라 효율적으로 애플리케이션을 개발할 수 있습니다. 프레임워크는 제어의 역전이 적용된 기술로 애플리케이션의 흐름을 제어합니다. 프레임워크는 애플리케이션 대부분의 라이프사이클을 관리하며 앱, 서버 구동, 메모리 관리, 네트워킹, 보안 등 다양한 기능을 통합적을 제공합니다. 이를 통해 개발자는 기초적인 세부 사항보다는 애플리케이션의 핵심 기능과 비즈니스 로직 구현에 더 집중할 수 있습니다. 프레임워크의 예시로는 Spring, Django, React 등이 있습니다.
프레임워크 특징
- 프레임워크는 작업(work)의 구조(frame)가 정해져 있습니다. 개발자는 이 구조 안에서 정해진 규칙에 따라 애플리케이션을 개발합니다.
- 프레임워크는 제어의 역전이 적용된 기술입니다. 애플리케이션이 흐름을 제어하며 개발자는 프레임워크가 제공하는 특정 지점에 자신의 코드를 삽입함으로 기능을 개발합니다.
- 프레임워크는 개발에 도움을 줍니다. 앱, 서버 구동, 메모리 관리, 네트워킹, 보안 등 다양한 기능을 제공하며 애플리케이션의 라이프사이클을 관리합니다. 이로 인해 세부적인 사항은 신경쓰지 않고 비즈니스 로직 개발에 집중할 수 있습니다.
프레임워크 장점
- 개발 속도 및 효율성 향상 : 반복적인 작업을 줄여주고 이미 개발된 코드 라이브러리를 제공하여 개발 속도를 높입니다.
- 표준화된 개발 프로세스 : 프레임워크의 규약과 패턴을 따름으로 일관된 개발 방식을 유지할 수 있습니다. 팀 내 협업을 용이하게 하며, 프로젝트의 유지보수성을 높입니다.
- 보안 강화 : 보안 측면에서 검증된 요소를 제공하며 주기적인 업데이트를 통해 보안 문제를 해결합니다.
프레임워크 단점
- 학습 곡선 : 새로운 프레임워크를 배우는데 시간이 필요합니다.
- 과도한 오버헤드 : 모든 프로젝트에 필요하지 않은 기능들이 포함될 수 있어 성능에 부정적인 영향을 미칠수도 있습니다.
해결법
프레임워크는 관련 문제나 학습에 있어 공식 문서, 튜토리얼 등을 제공합니다. 이를 활용하면 사전 학습 시간을 단축시킬 수 있습니다. 프레임워크는 모듈화되어 있어 개발자들이 필요한 부분만 선택적으로 사용할 수 있습니다. 예를 들어 Spring은 Spring MVC, Spring Security 등으로 구성되어 있으며 필요한 모듈만 사용할 수 있습니다. 이로 인해 과도한 오버헤드를 완화할 수 있습니다.
라이브러리
라이브러리란?
라이브러리란 프로그래밍에서 필요한 기능들이 묶여있는 코드의 집합입니다.자주 사용되는 기능들을 라이브러리로 만들어두어 필요할 때마 호출해 사용함으로 재사용성과 코드 품질을 높일 수 있습니다.
현실 세계에서 라이브러리(도서관)는 필요할 때 마다 꺼내볼 수 있는 책들이 모여있는 곳 입니다. 프로그래밍에서도 마찬가지로 필요한 기능들이 모여있는 코드의 집합입니다. 개발자들은 필요할 때마다 라이브러리를 호출하여 코드를 구현합니다.
라이브러리의 장점
- 개발 시간 단축 : 라이브러리 코드를 재사용함으로 개발 시간을 단축할 수 있습니다.
- 품질 향상 : 라이브러리는 여러 프로젝트에서 사용되고 테스트하므로 높은 품질의 코드와 안정성을 제공합니다.
- 유지보수 용이성 : 코드의 일관성을 유지하고 유지보수를 용이하게 할 수 있습니다.
라이브러리의 단점
- 호환성 문제 : 다른 라이브러리나 프레임워크와의 호환성 문제가 발생할 수 있습니다. 여러 라이브러리를 사용하면 버전 충돌이나 상호 작용 문제가 발생할 수 있ㅅ브니다.
해결법
Maven, Gradle, npm 과 같은 의존성 관리 도구를 사용하여 라이브러리의 버전을 관리하고 의존성 충돌을 해결할 수 있습니다.
프레임워크와 라이브러리의 차이
프레임워크와 라이브러리의 가장 큰 차이점은 ‘코드 흐름 제어권’ 이 누구에게 있냐는 것 입니다.
- 제어의 흐름 : 프레임워크가 제어의 흐름을 가지고 있으며 개발자는 그 안에서 작업을 진행합니다. 라이브러리는 개발자가 직접 제어합니다.
- 용도 : 프레임워크는 애플리케이션 전체 구조화 흐름을 제공합니다. 라이브러리는 특정 기능을 위해 사용됩니다.