목차
Spring Framework
등장 배경
2000년대 초, 자바 엔터프라이즈 개발은 주로 J2EE(Java 2 Enterprise Edition)를 기반으로 이루어졌습니다. 하지만 J2EE는 다음과 같은 단점이 있었습니다.
- 복잡한 설정과 무거운 API : 매우 복잡한 `XML 설정 파일`
- EJB(Enterprise JavaBeans) 컴포넌트 사용 강제 : EJB 같은 컴포넌트는 무겁고 테스트도 어렵습니다.
- 테스트 어려움
- 개발 속도 저하 : 간단한 기능도 구현에 많은 보일러플레이트 코드가 필요
J2EE(Java 2 Enterprise Edition)란 ❓
Java로 만들어지는 서버 기반 프로그램입니다. 대규모 웹/엔터프라이즈 애플리케이션을 쉽게 개발하고 운영할 수 있도록 표준 API와 아키텍쳐를 제공하는 플랫폼입니다.
❗이러한 문제점을 해결하고자 등장한 것이 Spring Framework입니다. 2003년, RodJohnson이 쓴 책 "Expert One-on-One J2EE Design and Development"와 함께 Spring은 가볍고 유연한 대안으로 소개되었고 빠르게 인기를 얻었습니다.
주요 특징
1. 경량 컨테이너
- 필요한 기능만 사용하는 구조로, 전체 J2EE 플랫폼보다 훨씬 가볍습니다.
- POJO(Plain Old Java Object)를 기반으로 객체를 관리합니다.
2. 의존성 주입(Dependency Injection, DI)
- 객체 간의 의존성을 외부에서 주입하여 결합도를 낮추고 유연성 향상.
3. 관점 지향 프로그래밍(AOP)
- 공통 기능(로깅, 트랜잭션 등)을 비즈니스 로직과 분리 가능
4. 모듈화 구조
- 필요에 따라 Core, Web, JDBC, AOP 등 원하는 모듈만 선택 가능
5. 테스트 용이성
- POJO 기반 구조로 단위 테스트가 쉽고 효율적입니다.
6. 풍부한 통합
- 다양한 기술(JPA, JMS, RabbitMQ, Kafka, Hibernate 등)과 자연스럽게 통합됩니다.
7. 객체지향적 특징
- Java 언어의 가장 큰 특징인 객체 지향 언어의 특징을 살려냈습니다.
(캡슐화, 상속, 추상화, 다형성)
Spring Boot
등장 배경
Spring Framework는 강력했지만, JavaConfig & XML 설정이 많고 복잡했습니다. 특히 XML 기반 설정, 다양한 라이브러리 호환성 문제, 톰캣 설정 등으로 인해 프로젝트 초기 설정이 많은 시간과 노력을 요구했습니다.
❗이를 해결하기 위해 2014년 다음과 같은 목표로 Spring Boot가 등장했습니다.
→ "스프링 애플리케이션을 더 빠르고 쉽게 만들자."
주요 특징
1. 자동 설정(Auto Configuration)
- 애플리케이션 환경에 맞춰 필요한 설정을 자동으로 적용해줍니다.
2. 내장 서버 제공
- Tomcat, Jetty, Undertow 등을 내장해 별도의 서버 설정 및 따로 설치할 필요 없이 .jar 파일만으로 실행 가능합니다.
3. Opinionated Defaults
- 기본 설정값을 제공하여 빠른 개발 가능. (필요하면 언제든 재정의 가능)
4. 간편한 의존성 관리
- `spring-boot-starter-web` 빌드 관리 도구에 추가하면 웹 애플리케이션에 필요한 모든 종속성과 설정이 자동으로 구성됩니다.
(라이브러리들의 버전을 명시하지 않아도, 호환 가능한 버전들을 찾아 자동으로 설정해줍니다. ❗주의 : 100% 해결은 ❌)
5. 프로덕션 준비 기능 내장
- Health check, metrics, 로그 설정 등 운영에 필요한 기능을 바로 제공 (actuator)
6. Spring Framework 기반
- Spring Boot는 Spring의 기능을 감싼 편의 레이어로, Spring의 모든 기능을 사용할 수 있습니다.
'Spring' 카테고리의 다른 글
[Spring] Bean 등록 방법 (0) | 2025.05.23 |
---|---|
[Spring] Spring Bean 어떻게 등록될까? (0) | 2025.05.23 |
[Spring] SOLID 원칙과 Spring의 등장 배경 (0) | 2025.05.15 |
[Project] Lv_2 스케줄 프로젝트 (0) | 2025.05.11 |
[Spring] 어노테이션(Annotation) (0) | 2025.05.10 |