스프링 유래 및 어원
과거 EJB라는 기술을 통해 웹 애플리케이션을 개발하였다.
EJB(Enterprise Java Bean) : 엔터프라이즈급 애플리케이션 개발을 단순화하기 위해 발표한 스펙이다. Java bean이라는 자바 객체를 재사용할 수 있도록 컴포넌트화 시킬 수 있는 코딩 방식을 활용하였으며, 비즈니스 객체들을 관리하는 컨테이너를 만들어 컨테이너로부터 객체를 받는 식으로 관리한다.
하지만, 서비스는 실제 비즈니스 로직보다 EJB 컨테이너를 사용하기 위한 상속, 구현할 클래스 등이 많아 불편하다. 즉, 비즈니스 로직에 특정 기술이 종속된다는 문제점이 있었다.
2002년 로드 존슨(Rod Johnson)에 의해 처음 개발되었으며, 그의 책 "Expert One-on-One J2EE Design and Development"에서 소개되었다. 과거 EJB라는 겨울을 지나 새로운 봄을 맞이하는 스프링을 개발하여 혁신적인 변화를 만들어냈다.
프레임워크(Framework)? 라이브러리(Library)?
- 라이브러리(Library)는 특정 기능을 구현한 코드의 집합으로, 개발자가 필요할 때 호출하여 사용할 수 있다. 개발자가 애플리케이션 흐름을 제어한다.
- 프레임워크(Framework)는 애플리케이션 구조를 정의하고, 전체적인 흐름을 제어하는 반면, 개발자는 그 구조 안에서 필요한 코드를 작성한다. 즉, 제어의 역전(Inversion of Control, IoC) 원칙을 따른다. 스프링 프레임워크는 IoC 원칙을 중심으로 설계되었다.
- 소프트웨어에서의 프레임워크란, 소프트웨어의 특정 문제를 해결하기 위해 상호 협력하는 클래스와 인터페이스 집합이라 할 수 있다.
스프링 프레임워크(Spring Framework)
자바 엔터프라이즈 개발을 편하게 해주는 오픈 소스 경량급 애플리케이션 프레임워크
- 엔터프라이즈 애플리케이션 개발을 단순화하고, 복잡한 코드를 줄이고, 테스트를 쉽게 할 수 있다.
- 스프링 코어 : 기본적인 기능을 제공하며, IoC와 의존성 주입(Dependency Injection, DI)을 지원한다.
- 스프링 AOP : 관점 지향 프로그래밍(Aspect-Oriented Programming)을 지원하여, 애플리케이션의 각 모듈에 대한 공통 관심사를 분리한다.
- 스프링 데이터 : 데이터 접근을 단순화하며, 다양한 데이터베이스와의 통합을 지원한다.
- 스프링 웹 : 웹 애플리케이션 개발을 위한 기능을 제공하며, MVC 패턴을 지원한다.
스프링 특징
1. 경량 컨테이너
스프링은 경량 컨테이너로서 자바 객체를 관리하고 생명주기를 제어한다. EJB(Enterprise JavaBeans)와 비교하여 훨씬 가벼우며, 단순한 POJO(Plain Old Java Object)를 사용하여 애플리케이션을 구성할 수 있다.
2. POJO 기반의 구성
스프링은 복잡한 엔터프라이즈 애플리케이션도 단순한 POJO(Plain Old Java Object, 평범한 자바 객체)를 사용하여 구성할 수 있도록 한다. 이는 코드가 특정 프레임워크에 종속되지 않게 하며, 유연성과 테스트 용이성을 높인다.
3. DI를 통해 객체 간 관계 구성
의존성 주입(Dependency Injection)은 객체 간의 의존 관계를 코드가 아닌 설정 파일이나 어노테이션을 통해 주입하는 방식이다. 이를 통해 객체 간의 결합도를 낮추고, 코드의 유연성과 재사용성을 높일 수 있다.
4. AOP 지원
스프링은 관점 지향 프로그래밍(Aspect-Oriented Programming, AOP)을 지원하여, 트랜잭션 관리, 보안, 로깅 등과 같은 횡단 관심사를 분리할 수 있다. 이는 코드의 모듈성을 높이고, 유지보수를 용이하게 한다. 또한, 개발자가 비즈니스 로직에 집중할 수 있다.
횡단 관심사(Cross-Cutting Concerns)는 소프트웨어 시스템의 여러 모듈에서 공통적으로 발생하는 기능이나 관리를 말한다. 이는 애플리케이션의 핵심 비즈니스 로직과는 별개로, 여러 부분에서 반복적으로 필요로 하는 기능이다. 횡단 관심사의 예로는 로그(logging), 보안(security), 트랜잭션 관리(transaction management), 캐싱(caching), 에러 처리(error handling), 모니터링 및 성능 관리(performance monitoring)이 있다.
5. WAS에 독립적인 개발 환경
스프링은 특정 웹 애플리케이션 서버(WAS)에 종속되지 않으며, 다양한 WAS에서 동일하게 동작할 수 있다. 이는 개발자가 특정 서버에 종속되지 않고 자유롭게 애플리케이션을 배포할 수 있게 한다. 톰캣(Tomcat), 제티(Jetty)와 같은 단순한 서버 환경에서 완벽하게 동작한다.
스프링 부트(Spring Boot)
스프링 프레임워크를 더욱 간편하게 사용할 수 있도록 도와주는 확장 도구이다.
1. 설정의 자동화
스프링 부트는 많은 설정을 자동으로 해주기 때문에 개발자가 설정 파일을 일일이 작성할 필요가 없다.
2. 독립 실행형 애플리케이션
Tomcat과 같은 내장 웹 서버를 사용하여 독립적으로 실행 가능한 애플리케이션을 만들 수 있다.
3. 빠른 시작
미리 정의된 스타터 프로젝트를 사용하여 빠르게 프로젝트를 시작할 수 있다.
4. 프로덕션 준비 기능
모니터링, 로깅, 외부 설정 등의 기능을 제공하여, 프로덕션 환경에서 바로 사용할 수 있다.
5. 빠른 개발과 배포
스프링 부트를 사용하면 개발자는 더 적은 설정과 코드로 애플리케이션을 빠르게 개발하고 배포할 수 있다. 이는 애자일 개발 방법론을 지원하며, DevOps와 같은 현대적인 소프트웨어 개발 및 운영 환경에 적합하다.
참고 자료
https://www.devkuma.com/docs/spring-framework/overview/
https://steady-coding.tistory.com/457
'Spring' 카테고리의 다른 글
[Spring] 스프링 싱글톤 컨테이너(Singleton Container) (0) | 2024.06.06 |
---|---|
[Spring] POJO(Plain Old Java Object)란? (1) | 2024.06.06 |
[Spring] 스프링의 삼각형(IoC/DI, AOP, PSA) (0) | 2024.06.05 |
[Spring] 스프링 컨테이너(Spring Container), 스프링 빈(Bean), 빈 설정 방법(XML, Java 기반, Annotation 기반) (0) | 2024.06.04 |
[Spring] IoC(Inversion of Control 제어의 역전), DI(Dependency Injection 의존성 주입), 의존성 주입 3가지 방법 (0) | 2024.06.04 |