Spring Framework란 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 엔터프라이즈급 애플리케이션을 개발하기 위한 모든 기능을 종합적으로 제공하는 경량화된 솔루션이다. 엔터프라이즈급 개발이란 뜻대로만 풀이하면 기업을 대상으로 하는 개발을 뜻한다. 즉, 대규모 데이터 처리와 트랜잭션이 동시에 여러 사용자로 부터 행해지는 매우 큰 규모의 환경을 엔터프라이즈 환경이라 일컫는다.
스프링 사이트에 들어가보면 굉장히 많은 프로젝트들이 목록화 돼 있다. 근데 스프링이 처음 등장했을때는 이렇게 프로젝트가 따로 있는 것이 아니었고 스프링 프레임워크만 존재했다.
스프링이 존재감을 보이게 된 이유는 Dependency Injection 기능과 Transaction Management 이 두 가지 떄문이다. 이 두 가지의 기능은 일반적인 소프트웨어 개발, 일반 스탠다드한 응용 프로그램 만들 때는 그렇게 중요하지 않을 수 있지만 엔터프라이즈 애플리케이션을 만들 때는 Dependency Injection와 Transaction Management가 굉장히 중요하다.
물론 이것을 지원하는 Java EE(Java Enterprise Edition)이 존재한다. Java는 Java SE (Java Standard Edition), Java ME (Java Micro Edition), Java EE (Java Enterprise Edition) 이렇게 세 가지 버전이 있었는데 그중 Java EE가 Dependency Injection과 Transaction Management 기능을 지원하는 버전으로 있다.
하지만 Java EE에서는 트랙잭션을 관리하는 것이 쉽지 않았다. EJB라고 하는 컨테이너에 컴포넌트를 올리고 그들 간의 옵션 설정을 하고 그러다 보면 복잡도가 높아졌고 또한 EJB 서비스에 오류가 생기는 경우 등 여러 가지 대처 상황이 힘들었다. 하지만 스프링은 단순하게 라이브러리만 쓰는 방식으로 아주 깔끔하게 처리해줄 뿐만 아니라 Dependency Injection을 같이 쉽게 구현할 수 있게 해줌으로서 모듈 결합을 굉장히 쉽게 해주었다. 그 결과 Spring이 Java EE 영역을 조금조금씩 잠식해 나가기 시작했다.
Java SE (Java Standard Edition) : 자바 표준 에디션은 가장 기본이 되는 에디션이다. 또한, 흔히 자바 언어라고 하는 대부분의 패키지가 포함된 에디션이다. 주요 패키지로는 java.lang.*, java.io.*, java.util.*, java.awt.*, javax.rmi.*, javax.net.* 등이 존재한다.
Java ME (Java Micro Edition) : Java Micro Edition은 현재는 거의 사장된 에디션이다. 모바일 기기(피쳐폰, PDA폰) 등에서 사용되는 자바 기술에 대한 API가 포함된 에디션이였다. 피쳐폰으로 Nat*와 같은 인터넷 서핑을 할 때, 모바일에서 보여지는 자바 기술들에 효과적이였지만 현재는 스마트 폰이 대중화되고 각 스마트 폰들이 자체적인 OS를 가지고 있다보니 자체 API(안드로이드 SDK, iOS SDK)를 사용하게되어 현재는 잘 쓰이지 않는다.
Java EE (Java Enterprise Edition) : Java Enterprise Edition는 현업에서 사용되는 API들이 집약된 에디션이다. 자바로 구현되는 웹프로그래밍에서 가장 많이 사용되는 JSP, Servlet을 비롯하여, 데이터베이스에 연동하는 JDBC, 그 외에도 JNDI, JTA, EJB 등의 많은 기술들이 포함되어 있다. Java SE와 Java EE가 툴은 동일한 툴을 사용하되, Java EE는 Java SE의 API에 추가로 Java EE API를 import하여야만 사용할 수 있다.
EJB(Enterprise Java Beans) : EJB는 Jakarta Enterprise Beans 또는 엔터프라이즈 자바빈즈로도 불린다. EJB는 기업환경의 시스템을 구현하기 위한 서버측 컴포넌트 모델이다. 즉, EJB는 애플리케이션의 업무 로직을 가지고 있는 서버 애플리케이션이다. EJB 사양은 Java EE의 자바 API 중 하나로, 주로 웹 시스템에서 JSP는 화면 로직을 처리하고, EJB는 업무 로직을 처리하는 역할을 한다.
또한 Java EE는 유료 버전에다가 사용하기에도 불편하여 스프링으로 인해서 관심이 없어지기 시작했다. 하지만 지금은 스프링이 갖고 있는 기능이 Java EE에도 많이 반영이 돼서 Java EE를 이용해서 웹 개발을 하거나 데이터베이스 처리를 할 때도 훨씬 쉬어졌다. 오히려 스프링보다 쉬울 수도 있지만 Java EE는 유료 버전이고 많은 사용자가 이미 스프링으로 유입됐기 때문에 Java EE가 어떻게 바뀌든 관심이 없어진 상태가 됐다.
그래서 어느 순간 Java SE에 Jave EE을 얹지 않고 Spring을 얹어서 Java EE을 대신해서 기업형 애플리케이션을 만드는 용도로 사용하기 시작했다.
Spring을 통해 웹 개발을 한다고 하면 크게 MVC, 트랜잭션 관리(Transaction Management), 인증과 권한 세 가지 기능을 사용하게 될 것이다.
이 세 가지를 공부하기 위해서는 MVC를 처리할 때 사용되는 Dependency Injection(의존성 주입), 트랜잭션을 처리할 때 사용되는 AOP(Aspect Oriented Programming), 인증과 권한에 사용되는 Servlet Filter를 이용한다. 그리고 DI와 AOP를 이해하기 위해서 인터페이스의 의미와 느슨한 결합력의 의미를 우리가 이해할 필요가 있다.
참고자료
'🖥️ Backend > Spring' 카테고리의 다른 글
[Spring] 6.스프링 DI 설정을 위해 이클립스 플러그인 설치하기 (3) | 2024.10.20 |
---|---|
[Spring] 5.Spring없이 Dependency를 직접 Injection하기 (0) | 2024.10.08 |
[Spring] 4.IoC(Inversion Of Control) 컨테이너 (1) | 2024.10.02 |
[Spring] 3.DI(Dependency Injection) (0) | 2024.10.01 |
[Spring] 2.느슨한 결합력과 인터페이스 (0) | 2024.09.30 |