프레임워크 vs 라이브러리
프레임워크
<aside>
프레임워크(Framework) 는 애플리케이션을 만들기 위한 뼈대(구조)와 규칙을 미리 제공하는 도구이다.
</aside>
개발자는 모든 것을 처음부터 만드는 대신, 프레임워크가 제공하는 구조 안에서 비즈니스 로직에 집중할 수 있다.
라이브러리
<aside>
라이브러리는 특정 기능을 제공하는 코드 묶음으로, 필요할 때 가져다 사용한다.
</aside>
차이점
- 프레임워크
- 프레임워크가 전체 흐름을 제어
- 개발자는 정해진 위치에 코드만 작성
- 예시 : React, Django, Spring Boot
- 라이브러리
- 내가 필요할 때 호출해서 사용
- 제어 흐름은 개발자에게 있음
프레임워크 사용 이유
- 빠른 개발
- 기본적인 기능이 이미 구현되어 있어 개발 속도가 빨라짐
- 일관성 유지
- 팀 프로젝트에서 코드 스타일 통일
- 유지보수 용이
- 구조가 체계적이라 기능 추가나 수정이 쉬움
- 보안 강화
- 보안, 트랜잭션, 예외 처리 등 기본 제공
Spring
<aside>
Spring 은 JAVA 기반 애플리케이션 개발을 위한 오픈소스 애플리케이션 프레임워크이다.
</aside>
Spring 이전의 Java 웹 개발
Spring이 등장하기 이전, Java 기반 웹 애플리케이션은 주로 EJB(Enterprise JavaBeans) 기반의 기술을 이용해 개발되었다.
EJB는 다음과 같은 기능을 제공했다.
- 데이터베이스 접근
- 트랜잭션 관리
- 보안
- 분산 처리
하지만 EJB에는 치명적인 단점들이 존재했다.
- 특정 벤더의 EJB 컨테이너에 강하게 의존
- 복잡한 설정과 높은 러닝 커브
- 컴포넌트 간 강한 결합도
- 컨테이너 없이 실행하기 어려워 단위 테스트가 거의 불가능
이로 인해 개발 생산성과 유지보수성이 크게 떨어졌다.
스프링은 EJB 의 단점을 해결하여, 순수 자바 객체(POJO) 만을 사용하여 복잡성을 제거하고, 단순하고 가벼운 코드로 개발하기 위한 프레임워크이다.
- POJO(Plain Old Java Object)
- 특정한 규약이나 프레임워크에 종속되지 않는 간단하고 순수한 자바 객체
Spring 특징
- 제어 역전(IoC)
- 객체의 생명 주기 및 의존성 관리를 담당하는 IoC 컨테이너 제공
- 객체의 생성과 관계 설정을 스프링에 위임
- 스프링 컨테이너가 객체의 생명 주기를 관리하고 필요한 의존성을 주입
- 의존성 주입(DI)
- 의존성 주입을 통해 객체 간의 관계를 설정
- 애플리케이션의 결합도를 낮춰 코드의 재사용과 테스트 용이성을 향상 시킴
- AOP(관점 지향 프로그래밍)
- 핵심기능을 제외한 부수적인 기능은 프레임워크가 제공함
- 예시 : security, logging 등 추가할 때 비즈니스 로직을 건들지 않고 AOP 로 추가
- 중복 코드 제거
- JDBC 같은 템플릿을 사용할 때 중복되는 코드도 많고 복잡해지는데 이를 모두 제거
- 다른 프레임워크와의 통합
- JUnit, Mockito 와 같은 유닛 테스트 프레임워크와 통합이 간단함
- 웹 개발 지원
- 스프링 MVC 는 MVC(Model-View-Controlle) 아키텍처를 지원
Spring 문제점
- 설정의 복잡성
- 스프링은 강력한 기능을 제공하기 위해 많은 설정과 구성이 필요
- 초기 설정의 복잡성을 증가, 초보자에게 어려움
- 애플리케이션 컨텍스트 설정, 빈 정의, 컴포넌트 구성 등
- 높은 초기 학습 난이도
- 다양한 개념과 기능을 이해하고 사용하기 위해 시간과 노력이 필요
- 의존성 관리
- 여러 의존성과 버전을 관리하는 것이 복잡함
- XML 설정 파일에 많은 빈을 등록해야 함
- 가독성이 떨어지고 의존성 관리가 어려움
- 별도 WAS 서버 구성
- 별도의 WAS 설치하고, 설정해야 함
Spring Boot
<aside>
스프링의 문제점을 해결해주기 위해 개발된 스프링의 프레임워크
</aside>
Spring Boot 특징
- 자주 사용되는 라이브러리들의 버전 관리 자동화
- 자주 사용되는 라이브러리들의 호환되는 버전을 미리 정의해두고 관리
- maven, gradle 등과 같은 빌드 도구에 버전을 명시하지 않아도 적합한 라이브러리 버전을 찾아서 가져
- 자동 설정 (Auto Configuration)
- 클래스패스에 있는 라이브러리를 기준으로 설정
- ElasticSearch,Redis 등 자주 사용되는 외부 라이브러리들 역시도 자동 설정 제공
- 번거로운 XML 설정이 필요 없으며, 최소한의 설정으로 Spring 을 사용할 수 있음
- 내장 서버
- 과거 : 웹서버 설치 → war 생성 → 서버에 배포
- 내장 서버(Tomcat,Jetty,Undertow)를 제공하여 별도의 서버 설정 없이 애플리케이션을 실행
- JAR 파일에는 모든 의존성 라이브러리가 포함되어 있어 외부 서버 없이도 애플리케이션 실행
- 의존성 관리 간소화
- 3rd party 의존성 관리를 용이하게 하기 위한 ‘starter’ 의존성 통합 모듈을 제공
- web, data-jpa, security
- 운영 편의성
- 애플리케이션의 상태 모니터링, 로깅, 보안 설정 등 운영에 필요한 기능들을 제공
- 운영과 관리가 편해지고 안정성이 향상됨
Spring vs Spring Boot 차이
구분 Spring Spring Boot
| 개념 | 자바 기반 엔터프라이즈 애플리케이션 프레임워크 | Spring을 쉽고 빠르게 사용하기 위한 확장 도구 |
| 목적 | 안정적이고 확장 가능한 애플리케이션 구조 제공 | 설정과 초기 구성을 최소화하여 생산성 향상 |
| 설정 방식 | XML 또는 Java Config 기반 수동 설정 중심 | 자동 설정(Auto Configuration) 중심 |
| 초기 설정 | 설정 항목이 많아 진입 장벽이 높음 | 기본 설정 제공으로 빠른 시작 가능 |
| 의존성 관리 | 라이브러리와 버전을 직접 관리 | Starter + BOM(의존성 버전 목록)으로 버전 자동 관리 |
| 빌드 설정 | 의존성, 플러그인 직접 설정 | 기본 빌드 설정 제공 |
| 서버 실행 | 외부 WAS(Tomcat 등) 필요 | 내장 서버 기본 제공 |
| 배포 방식 | WAR 파일 중심 | JAR 파일 단독 실행 |
| 실행 방법 | 서버에 배포 후 실행 | main() 메서드로 즉시 실행 |
| 운영 지원 | 별도 설정 필요 | Actuator 등 운영 기능 기본 제공 |
| 모니터링 | 직접 구현 또는 외부 도구 필요 | Health, Metrics 등 기본 제공 |
| 학습 목적 | Spring 핵심 원리 이해에 적합 | 실무 표준, 빠른 개발에 적합 |
정리
Spring 은 개발자가 직접 설정 파일을 작성하고, 빈 객체를 등록하고, 빈 객체 간의 의존성을 설정하는 것을 요구한다. 반면, Spring Boot 는 개발자가 보다 쉽게 스프링을 사용할 수 있도록 설정과 의존성 처리 등을 자동으로 처리한다.
Spring 은 기존 EJB 대신해 자바 애플리케이션을 더 쉽게 만들고, 스프링 프레임워크를 보다 세밀하게 제어하고자 하는 경우, Spring Boot 는 빠르고 간단하게 스프링 애플리케이션을 개발하고자 하는 경우에 사용한다.
참고자료
https://wikidocs.net/blog/@inetsos/2094/
https://www.elancer.co.kr/blog/detail/158
https://velog.io/@ksu9704/Spring-VS-SpringBoot
https://www.inflearn.com/blogs/3315?srsltid=AfmBOooM3uIbqXIQYpo7oXwkYTyQ-iy1ytzUudHluWsZNPJDo68pmFfF
'CS' 카테고리의 다른 글
| [CS] 컴포넌트 스캔과 의존관계 주입 (0) | 2026.01.27 |
|---|---|
| [CS] 싱글톤과 싱글톤 컨테이너 (0) | 2026.01.27 |
| [CS] 스프링 컨테이너, 스프링 빈 (0) | 2026.01.26 |
| [JWT] - Access Token , Refresh Token 만료 (0) | 2026.01.11 |