🌱 스프링 프레임워크란?
스프링은 2002년에 세상에 처음 나왔다.
Rod Johnson이 자신의 저서에서 MVC 모델을 설명하면서 스프링의 이름을 최초로 언급하였다.
'스프링'이라는 이름의 유래는 이전에 Java EE(엔터프라이즈 에디션)의 스펙을 구현한 EJB가 기술의 복잡도가 증가해서 성능이 느렸던 것을 탈피하여, EJB 시절을 “겨울”에 빗대어 겨울 후의 “봄”으로 새로운 시작한다는 것을 의미하는 스프링(봄)이 되었다.
이런 스프링에 대하여 가장 잘 알려진 정의는 아래와 같다.
자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크
스프링은 다른 프레임워크에 비해 다음과 같은 특징을 가진다.
- 경량 컨테이너로서 자바 객체를 직접 관리한다.
각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다. - 스프링은 Plain Old Java Object 방식의 프레임워크이다.
일반적인 J2EE 프레임워크에 비해 구현을 위해 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없어
기존에 존재하는 라이브러리 등을 지원하기에 용이하고 객체가 가볍다. - 스프링은 제어 반전(IoC : Inversion of Control)을 지원한다.
컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다. - 스프링은 의존성 주입(DI : Dependency Injection)을 지원한다.
각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다. - 스프링은 관점 지향 프로그래밍(AOP : Aspect-Oriented Programming)을 지원한다.
따라서 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다. - 스프링은 영속성과 관련된 다양한 서비스를 지원한다.
iBATIS나 하이버네이트 등 이미 완성도가 높은 데이터베이스 처리 라이브러리와 연결할 수 있는 인터페이스를 제공한다. - 스프링은 확장성이 높다.
스프링 프레임워크에 통합하기 위해 간단하게 기존 라이브러리를 감싸는 정도로 스프링에서 사용이 가능하기 때문에
수많은 라이브러리가 이미 스프링에서 지원되고 있고 스프링에서 사용되는 라이브러리를 별도로 분리하기도 용이하다.
🌱 스프링 역사
버전 | 공개일 | 주요 특징 |
1.X | 2004년 3월 ~ | - DI / AOP 컨테이너의 시작, Bean 정의 파일 시대의 개막 - 1.1 버전에서 Bean 정의 파일의 간략화 - 1.2 버전에서 Bean 정의 파일의 거듭 간략화 (1.1 버전에서 평이 좋지 않아 개선되었다.) |
2.X | 2006년 10월 ~ | - Bean 정의 파일이 DTD에서 XML 스키마 형식으로 변경되었다. - JPA와 스크립트 언어 지원 - 2.5 버전부터 Java 1.4와 JUnit 4 지원 - 어노테이션 강화 |
3.X | 2009년 12월 ~ | - 클라우드 시대에 대응하여 스프링 캐시 기능 등장 - Java 7 대응 |
4.X | 2014년 4월 ~ | - Java 8 서포트 - Web Component의 강화 (RestController, WebSocket 등의 등장) - 스프링 부트 등장 |
5 | 2017년 9월 ~ | - Java 9 대응 - 리액티브 프로그래밍(WebFlux) 제공 |
🌱 스프링 구조
Spring Core
Spring Core는 Spring Container를 의미한다.
Core라는 말 그대로 Container는 Spring Framework의 핵심이며 그 중 핵심은 Bean Factory Container 이다.
그 이유는 Bean Factory는 객체 구성부터 의존성 처리까지 모든 일을 처리하는 역할을 하고 있기 때문이다.
Spring Context
Spring context는 Spring Framework의 context 정보들을 제공하는 설정 파일이다.
Spring Context에는 JNDI, EJB, Validation, Scheduiling, Internaliztaion 등 엔터프라이즈 서비스들을 포함하고 있다.
Spring AOP
Spring AOP는 Spring Framework에서 관점지향 프로그래밍을 할 수 있게 도와주는 Module 이다.
Spring DAO
DAO란 Data Access Object의 약자로 Database Data에 접근하는 객체이다.
추상 레이어를 지원함으로써 코딩이나 예외처리 하는 부분을 간편화시켜 제공하여 개발자로 하여금 일관된 방법으로 코드를 짤 수 있게 도와준다.
Spring ORM
ORM이란 Object relational mapping의 약자로 객체와의 관계 설정을 하는 것을 뜻한다.
Spring에서는 Ibatis, Hibernate 등 객체 관계형 도구를 사용 할 수 있도록 지원한다.
Spring Web
Spirng에서 Web context module은 Application module에 내장되어 있으며,
Web기반의 응용프로그램에 대한 Context를 제공하여 일반적인 Web Application 개발에 필요한 기본적인 기능을 지원한다.
Spring MVC
Spring에서는 MVC에서는 Model2 구조로 Apllication을 만들 수 있도록 지원한다.
MVC 프레임 워크는 전략 인터페이스를 통해 고급 구성 가능하며, JSP, Velocity 등 수많은 뷰 기술을 지원하고 있다.
🌱 스프링의 3대 주요 특징
IoC (Inversion of Control) & DI(Dependency Injection)
제어 반전(IoC: Inversion of Control) 컨테이너는 스프링의 가장 중요하고 핵심적인 기능으로서 자바의 반영(reflection)을 이용해서 객체의 생명주기를 관리하고 의존성 주입(Dependency Injection)을 통해 각 계층이나 서비스들간의 의존성을 맞춰준다.
POJO(Plain Old Java Object)
확장 가능하고 재사용이 가능한 로직을 개발하기 위해 이전에는 EJB(Enterprise JavaBeans) 라는 기술을 사용했다.
EJB는 한 가지 기능에 불필요하고 복잡한 로직이 과도하게 들어간다는 단점이 있었다.
이후 다시 자바의 단순한 오브젝트를 이용하자는 의견이 나왔고, 사람들이 많이 사용하도록 유도하기 위해 있어 보이는 이름을 사용한 것이 바로 POJO이다.
AOP(Aspect Oriented Programming)
스프링은 로깅이나 보안, 트랜잭션 등 핵심적인 비지니스 로직과 관련이 없으나 여러 곳에서 공통적으로 쓰이는 기능들을 분리하여 개발하고 실행 시에 서로 조합할 수 있는 관점 지향 프로그래밍(AOP)을 지원한다.
기존에 널리 사용되고 있는 강력한 관점 지향 프로그래밍 프레임워크인 AspectJ도 내부적으로 사용할 수 있으며, 스프링 자체적으로 지원하는 실행시(Runtime)에 조합하는 방식도 지원한다.
PSA (Portable Service Abstraction)
환경의 변화와 관계없이 일관된 방식의 기술 접근 환경을 제공하려는 추상화 구조를 뜻한다.
예를들어 트랜잭션 처리를 위해 Platform TransactionManager의 구현체들인 JpaTransactionManager, DatasourceTransactionManager, HibernateTransactionManager을 사용하는데 구현체가 바뀌어도 트랜잭션을 처리하는 코드는 변경되지 않는다.
이러한 기술 덕분에 개발자는 어떠한 방법을 사용할지라도 Transactional의 내부 코드를 수정하지 않을 수 있다.
References.
1. 하세가와 유이치(한빛미디어), 스프링4 입문
2. 김영한(인프런), 스프링 핵심 원리 - 기본편
3. 위키백과
4. 히진쓰의 서버사이드 기술 블로그
5. 유혁의 개발 스토리
'Spring' 카테고리의 다른 글
[Security] JWT 소개 (0) | 2023.02.12 |
---|---|
[Spring] 스프링 AOP (0) | 2023.02.07 |
[Spring] 스프링 IoC (0) | 2023.02.05 |
[Spring] 스프링 DI (2) | 2023.02.02 |
[Spring] 스프링 MVC (0) | 2023.01.29 |