프레임워크와 라이브러리
1. 프레임워크란?
- 개발 프로젝트의 일관된 구조를 제공하여 코드의 일관성과 가독성을 높여주며, 팀 협업이 편해지는 소프트웨어
- 개발자가 코드의 흐름을 직접 제어하는 것이 아니라, 프레임워크가 전체적인 실행 흐름을 관리
- 예: Spring Framework, Django, Ruby on Rails
✅ 프레임워크의 장점
- 일관된 구조 제공 → 코드의 일관성과 가독성을 높여주며 팀 협업이 편리해짐
- 핵심 비즈니스 로직에 집중 가능 → 기본적으로 필요한 기능과 도구를 제공하여 개발자가 로직 구현에 집중할 수 있음
- 보안 기능 제공 → 보안 취약점을 방지하는 기본적인 보안 기능이 포함됨
- 테스트 환경 지원 → 통합된 테스트 환경과 도구를 제공하여 테스트 작성 및 실행이 용이함
- 커뮤니티 지원 → 인기 있는 프레임워크는 방대한 커뮤니티에서 다양한 문서를 제공
❌ 프레임워크의 단점
- 학습 비용이 높음 → 복잡한 구조로 인해 처음 익히는 데 시간이 많이 소요됨
- 버전 호환성 문제 → 새로운 버전이 기존 코드와 호환되지 않을 수 있음
- 자유도 제한 → 정해진 규칙과 구조를 강제하여 자유로운 변경이 어려울 수 있음
☞ Spring Framework는 Java 기반의 대표적인 웹 애플리케이션 프레임워크
2. 라이브러리란?
- 특정 기능을 수행하는 코드의 모음
- 개발자가 필요할 때 직접 호출하여 사용하며, 프로그램의 흐름을 제어하지 않음
- 예: Lombok, Gson, Apache Commons
✅ 라이브러리의 장점
- 필요한 기능만 선택적 사용 가능 → 불필요한 코드 작성 최소화
- 자유로운 활용 가능 → 개발자가 코드 흐름을 직접 제어
- 다양한 조합 가능 → 여러 라이브러리를 조합하여 사용 가능
❌ 라이브러리의 단점
- 일관성이 부족할 수 있음 → 프로젝트 내에서 다양한 스타일이 혼재할 가능성
- 반복적인 코드 작성 필요 → 여러 라이브러리를 사용할 경우 코드 복잡도가 증가할 수 있음
- 호환성 문제 발생 가능 → 라이브러리 간 충돌 가능성
- 효율성 관리 어려움 → 불필요한 기능 포함 시 효율성 감소
☞ Spring에서는 다양한 라이브러리를 활용하여 기능을 확장할 수 있음
3. 프레임워크 vs 라이브러리 비교
| 구분 | 프레임워크 | 라이브러리 |
|---|
| 제어권 | 프레임워크가 흐름을 제어 | 개발자가 직접 제어 |
| 사용 방식 | 정해진 구조를 따라야 함 | 필요할 때 호출하여 사용 |
| 기능 제공 | 전체적인 애플리케이션 구조 제공 | 특정 기능만 제공 |
| 예제 | Spring, Django | Lombok, Gson |
☞ 프레임워크는 전체적인 개발 방식과 구조를 제공하지만, 라이브러리는 특정 기능을 수행하는 도구
4. Spring Framework란?
- Java 기반의 웹 애플리케이션 프레임워크
- 다양한 기능을 제공하며, 유지보수성과 확장성이 뛰어남
Spring의 주요 개념
- 의존성 주입(DI, Dependency Injection) → 객체 간의 의존 관계를 자동으로 설정
- 제어의 역전(IoC, Inversion of Control) → 객체 생성 및 실행 흐름을 개발자가 아닌 프레임워크가 관리
- AOP(Aspect-Oriented Programming) → 공통 기능(로깅, 보안, 트랜잭션 등)을 분리하여 코드 중복 최소화
- Spring MVC → 웹 애플리케이션 개발을 위한 구조 제공
☞ Spring을 활용하면 유지보수성과 확장성이 뛰어난 애플리케이션을 개발할 수 있음
정리
- 프레임워크: 개발을 위한 구조 제공 (예: Spring, Django) → 애플리케이션을 개발할 때 전체적인 구조(frame)를 잡기 위해 사용하는 것, 기본적으로 프레임워크 내에서 사용하는 라이브러리들이 존재
- 라이브러리: 개발을 진행하는 과정에서 필요한 기능을 구현하기 위해 사용하는 것