스프링 프레임워크는 가장 인기 있는 Java EE 프레임워크 중 하나입니다. 이 기사에서는 다음에 대해 배우게 될 것입니다:
- 스프링 프레임워크 아키텍처
- 스프링의 핵심 구성 요소
- 스프링 프레임워크 아래의 다양한 프로젝트들.
I looked at the Google Trends chart for Spring Framework, Servlet, JSP, and JSF. It’s clear that Spring is far ahead from all other Java EE technologies.

스프링 프레임워크란?
스프링은 Java 엔터프라이즈 에디션을 위한 가장 인기 있는 프레임워크 중 하나입니다. 전 세계의 개발자들은 신뢰성 있고 고품질의 애플리케이션을 개발하기 위해 스프링을 사용합니다. 스프링 프레임워크는 Rod Johnson에 의해 설계되었습니다. 그 이후로 스프링은 EJB 모델을 대체하기 위한 Java 세계의 대안 기술이 되었습니다. 스프링 프레임워크를 사용하여 다양한 종류의 애플리케이션을 만들 수 있습니다.
스프링 핵심 개념 – DI, IoC, AOP
- 의존성 주입(Dependency Injection)과 제어의 역전(Inversion of Control)이 무엇인지 이해하지 않으면 스프링 프레임워크가 무엇인지 이해하는 것은 불가능합니다. 의존성 주입은 제어의 역전(IoC)의 한 유형으로도 불립니다.
- 제어의 역전 – 이는 객체 지향 프로그래밍의 원칙으로, 프로그램의 객체들이 다른 객체들의 구체적인 구현에 의존하지 않고, 후에 상호작용을 위해 추상화(인터페이스)에 대한 지식을 가질 수 있다는 것입니다.
- 의존성 주입 – 이는 구조적 설계 패턴들의 조합으로, 애플리케이션의 각 기능에 대해 조건적으로 독립적인 객체(서비스)가 있으며, 이 객체는 인터페이스를 통해 알려진 다른 객체(의존성)를 사용해야 할 필요가 있을 수 있습니다. 의존성은 서비스가 생성될 때 전달(구현)됩니다. 이는 한 클래스의 요소를 다른 클래스에 도입하는 상황입니다. 실제로 DI는 생성자에 매개변수를 전달하거나 세터를 사용하여 구현됩니다. 이 접근 방식을 구현하는 라이브러리는 IoC 컨테이너라고도 합니다.
- 관점 지향 프로그래밍 – 이는 애플리케이션에서 횡단(cross-cutting) 기능을 구분할 수 있는 프로그래밍 패러다임입니다. 여러 애플리케이션 노드에 걸쳐 있는 이러한 기능을 횡단 관심사(cross-cutting concerns)라고 하며, 이러한 횡단 노트는 애플리케이션의 직접적인 비즈니스 로직과 분리됩니다. OOP에서 주요 단위는 클래스이지만, AOP에서는 주요 요소는 관점(Aspect)입니다. DI는 애플리케이션 클래스를 별도의 모듈로 분리하는 데 도움을 주고, AOP는 효과를 미치는 객체들로부터 횡단 관심사를 분리하는 데 도움을 줍니다.
스프링 프레임워크 아키텍처
스프링 프레임워크는 여러 개의 독립된 모듈로 나누어져 있어 응용 프로그램에서 사용할 모듈을 선택할 수 있습니다. 아래 이미지는 스프링 프레임워크 아키텍처의 가장 중요한 모듈을 보여줍니다. 이제 하나씩 스프링 생태계 모듈을 살펴보겠습니다.
스프링 프레임워크 핵심 구성 요소
스프링의 핵심 컨테이너는 SpEL, Context, Core, Beans 네 개의 모듈로 구성됩니다. 이러한 요소들에 대한 설명은 다음과 같습니다:
- SpEL 모듈은 실행 중에 객체를 조작하기 위한 강력한 표현 언어를 제공합니다.
- Context는 Beans와 Core를 기반으로 구축되며, 설정에서 정의된 모든 객체에 액세스할 수 있게 해줍니다. Context 모듈의 핵심 요소는 ApplicationContext 인터페이스입니다.
- Core 모듈은 IoC 및 DI 속성을 포함한 프레임워크의 핵심 부분을 제공합니다.
- Bean 모듈은 스프링 Bean을 생성하고 관리하는 역할을 담당합니다 – 이는 응용 프로그램 컨텍스트의 구조 단위입니다.
Spring Framework Web
Spring 프레임워크의 웹 계층은 웹, 웹-MVC, 웹-소켓, 웹-포틀릿 등으로 구성됩니다.
- 웹 모듈은 파일 다운로드, 웹 애플리케이션 생성, REST 웹 서비스 등과 같은 기능을 제공합니다.
- 웹-MVC에는 웹 애플리케이션을 위한 Spring MVC 구현이 포함되어 있습니다.
- 웹-소켓은 웹 애플리케이션에서 웹-소켓을 사용하여 클라이언트와 서버 간의 통신을 지원합니다.
- 웹-포틀릿은 포틀릿 환경에서의 MVC 구현을 제공합니다.
Spring Framework 데이터 액세스
데이터 액세스/통합 컨테이너에는 JDBC, ORM, OXM, JMS 및 트랜잭션 모듈이 포함되어 있습니다.
- JDBC는 JDBC의 추상 레이어를 제공하며, 개발자가 데이터베이스에 연결하는 데 관련된 지루한 코드를 수동으로 등록할 필요가 없게 합니다.
- Spring ORM은 Hibernate, JDO와 같은 인기 있는 ORM과의 통합 기능을 제공합니다. 이들은 JPA의 구현체입니다.
- OXM 모듈은 객체/XML 링킹을 담당하는 XMLBeans, JAXB 등을 처리합니다.
- JMS (Java Messaging Service) 모듈은 메시지를 생성, 전송 및 수신하는 역할을 담당합니다.
- Transactions은 특정 메서드와 POJO를 구현한 클래스에 대한 트랜잭션 관리를 지원합니다.
기타 모듈
Spring은 또한 AOP, Aspects, Instrumentation, Messaging 및 Test와 같은 여러 가지 중요한 모듈을 포함하고 있습니다.
- AOP는 관점 지향 프로그래밍을 구현하며 AOP의 모든 기능을 사용할 수 있게 해줍니다.
- Aspects 모듈은 강력한 AOP 프레임워크인 AspectJ와의 통합을 제공합니다.
- Instrumentation은 서버 애플리케이션에서 사용되는 클래스 인스트루멘테이션 및 클래스 로더를 지원합니다.
- Messaging 모듈은 STOMP 지원을 제공합니다.
- 마지막으로, Test 모듈은 TestNG 또는 JUnit 프레임워크를 사용하여 테스트를 제공합니다.
Spring 5 기능
Spring 5는 Spring 4에 대한 대규모 업데이트를 가져왔습니다. Spring 5의 중요한 기능 중 일부는 다음과 같습니다:
- Java 8, Java 9, Java EE 7, Java EE 8, Servlet 4.0, Bean Validation 2.0, 그리고 JPA 2.2에 대한 지원. Spring이 주요 기술의 최신 버전을 따라가려는 것을 보는 것이 기쁘다.
- 새로운 모듈인 spring-jcl을 통해 개선된 로깅.
- 파일 작업은 NIO 2 스트림을 사용하여 성능이 향상되었다.
- Spring MVC 컨트롤러 메서드의 반환 값으로 Reactor 3.1 Flux와 Mono, 그리고 RxJava 1.3과 2.1을 지원.
- Kotlin, Project Lombok, Jackson과 GSON의 대체로 JSON Binding API에 대한 지원.
- Spring WebFlux – Spring이 Reactive로 발전 중이다.
- JUnit 5를 지원.
- Kotlin을 통한 함수형 프로그래밍 지원.
Spring Projects는 GitHub Repository에서 확인할 수 있다.
참고 자료: Spring 공식 웹사이트, Spring 참조 문서
Source:
https://www.digitalocean.com/community/tutorials/spring-framework