✔️ Spring Framework
스프링 프레임워크는 자바 기반의 오픈 소스 프레임워크로,
엔터프라이즈급 애플리케이션을 개발하는 데 사용되는 모듈과 라이브러리의 집합이다.
스프링은 경량성, 확장성, 모듈성, 테스트 용이성 등을 강조하며,
다양한 애플리케이션 유형에 적용될 수 있도록 다양한 모듈과 기능을 제공한다.
동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있으며
대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는
전자정부 표준 프레임워크(Spring MVC Project 기반 프레임워크)의 기반 기술로서 쓰이고 있다.
Spring 공식 사이트
스프링 프레임워크의 주요 특징과 구성 요소는 다음과 같다.
IOC (Inversion of Control) 제어 반전 |
컨트롤의 제어권이 개발자가 아니라 프레임워크에 있다는 뜻으로 객체의 생성부터 모든 생명주기의 관리까지 프레임워크가 주도하고 있다. 객체를 생성하고, 직접 호출하는 프로그램이 아니라, 만들어둔 자원을 호출해서 사용한다. |
DI (Dependency Injection) 의존성 주입 |
설정 파일이나 어노테이션을 통해 객체간의 의존 관계를 설정하여 개발자가 직접 의존하는 객체를 생성할 필요가 없다. |
POJO 기반 프레임워크 (Plain Old Java Object) |
J2EE, EJB와 같은 특정 기술이나 라이브러리의 내용을 상속받아 클래스를 구현하지 않고 일반적인 기본 기능만을 가진 순수한 자바 객체를 의미한다. 특정 클래스에 종속되지 않으므로 자바의 객체지향적 설계가 쉬워지고, 코드 길이 감소, 유지보수성 증가, 기존 Java API, 라이브러리 지원에 용이하다. |
Spring AOP (Aspect Oriented Programming) 관점 지향 프로그래밍 |
트랜잭션, 로깅, 보안 등 여러 모듈, 여러 계층에서 공통으로 필요로 하는 기능의 경우 해당 기능들을 분리하여 관리한다. |
Spring JDBC | Mybatis나 Hibernate 등의 데이터베이스를 처리하는 영속성 프레임워크와 연결할 수 있는 인터페이스를 제공한다. |
Spring MVC | MVC 디자인 패턴을 통해 웹 애플리케이션의 Model, View, Controller 사이의 의존 관계를 DI 컨테이너에서 관리하여 개발자가 아닌 서버가 객체들을 관리하는 웹 애플리케이션을 구축할 수 있다. |
PSA (Portable Service Abstraction) |
스프링은 다른 여러 모듈을 사용함에 있어 별도의 추상화 레이어를 제공한다. 예를 들어 JPA를 사용할 때에서 Spring JPA를 사용하여 추상화하므로 실제 구현에 있어서 Hibernate를 사용하든 EclipseLink를 사용하든 개발자는 이 모듈의 의존 없이 프로그램에 집중할 수 있다. |
➕ 보안
스프링은 보안과 관련된 기능을 제공하며, 인증(Authentication)과 권한 부여(Authorization)를 지원한다.
➕ 테스트
스프링은 JUnit과 같은 테스트 프레임워크와 통합하여 테스트 용이성을 제공하며,
단위 테스트와 통합 테스트를 쉽게 수행할 수 있다.
➕ 컨테이너
스프링은 빈(Bean)을 생성하고 관리하는 컨테이너를 제공하여 객체의 생명 주기와 의존성 관리를 지원한다.
✔️ Spring의 구성 모듈
1. Spring Core Container 모듈
Spring의 핵심 부분이라고 할 수 있으며 모든 스프링 관련 모듈은 이 Core Container 기반으로 구축된다.
Spring의 근간이 되는 IOC 기능을 지원하는 영역을 담당하고 있다.
BeanFactory를 기반으로 Bean 클래스드을 제어할 수 있는 기능을 지원한다.
● spring-core : IOC와 DI 기능을 제공하는 핵심 모듈이다.
● spring-beans : 빈(Bean) 생성과 관리를 담당한다.
● spring-context : 빈의 생명주기 관리, 리소스 로딩, 국제화 등의 기능을 제공한다.
● spring-context-support : 컨텍스트와 관련된 특정 기능을 제공하는 보조 모듈이다.
● spring-expression : Spring EL (Expression Language)을 지원한다.
2. Spring AOP 모듈
Spring에서 각 흐름 간 공통된 코드를 한 쪽으로 빼내어 필요한 시점에 해당 코드를 첨부하게 하기 위해
지원하는 계층으로, 별도의 proxy를 두어 동작한다.
이를 통해 객체 간의 결합도를 낮출 수 있다.
● spring-aop : 관점 지향 프로그래밍 (AOP) 기능을 제공한다.
● spring-aspects : AOP 관련 기능을 제공하는 보조 모듈이다.
3. Spring Data Access/Integration 모듈 (Data 접근 계층)
JDBC나 데이터베이스에 연결하는 모듈로, Data 트랜잭션에 해당하는 기능을 담당하여
영속성 프레임워크의 연결을 담당한다.
● spring-jdbc : JDBC (Java Database Connectivity)를 통한 데이터베이스 액세스 기능을 제공한다.
● spring-tx : 트랜잭션 관리 기능을 제공한다.
● spring-oxm : 객체 관계 매핑(ORM) 기능을 제공하며, 하이버네이트(Hibernate), JPA 등과 통합된다.
● spring-jms : Java Message Service(JMS) 기능을 지원한다.
● spring-message : 메시징과 관련된 기능을 지원한다.
4. Spring Web 모듈
Spring Framework에서 Servlet 등의 웹 구현 기술과의 연결점을
Spring MVC 구성으로 지원하기 위해 제공되는 모듈 계층이다.
또한 스프링의 리모팅 기술로 RMI, Hessian, Burlap, JAX-WS, HTTP 호출자 그리고 REST API 모듈을 제공한다.
● spring-web : 웹 애플리케이션 개발을 위한 기본 기능을 제공한다.
● spring-webmvc : 스프링 MVC (Model-View-Controller) 웹 프레임워크를 제공한다.
● spring-websocket : 웹 소켓 지원을 제공한다.
5. Spring Test 모듈
● spring-test : 스프링 애플리케이션을 테스트 하기 위한 테스트 기능을 제공한다.
6. 기타 모듈
● spring-boot : 스프링 부트 프로젝트로 독립적으로 실행 가능한 스프링 애플리케이션을 개발하기 위한 기능을 제공한다.
● spring-data : 다양한 데이터 스토리지와 통합하여 데이터 액세스를 단순화하는 기능을 제공한다.
● spring-security : 보안과 인증 관련 기능을 제공한다.
● spring-cloud : 클라우드 네이티브 애플리케이션을 위한 기능을 제공한다.
스프링 프레임워크는 이외에도 다양한 모듈을 제공하여 다양한 애플리케이션 개발 요구에
맞춰 유연한 구성이 가능하도록 한다.
✔️Spring의 동작 구조
스프링 프레임워크의 동작구조는 크게 아래와 같은 단계로 이루어진다.
이 단계들은 스프링 애플리케이션이 실행되고 동작할 때의 일반적인 흐름을 설명한 것이다.
1. 환경 설정 (Configuration)
스프링 프레임워크는 XML, Java Configuration 등의 방식을 통해 애플리케이션의 환경 설정을 정의한다.
빈(Bean) 정의, 의존성 주입(Dependency Injection), AOP 설정 등이 여기에 포함된다.
2. 빈 생성과 관리 (Bean Creation and Management)
스프링은 설정된 빈 정의를 바탕으로 빈을 생성하고 관리한다.
빈의 생명주기를 관리하며, IOC와 DI를 통해 의존성을 주입한다.
3. 의존성 주입 (Dependency Injection, DI)
빈들 간의 의존성을 주입하고 관리하는 단계이다.
스프링 컨테이너가 객체들의 의존성을 해결하여 필요한 객체들을 주입한다.
4. AOP (Aspect-Oriented Programming) 처리
스프링은 AOP를 사용하여 애플리케이션의 관심사(Aspects)를 분리하고 모듈화한다.
메서드 실행 전후에 공통 기능을 삽입할 수 있다.
5. 이벤트 처리 (Event Handling)
스프링은 애플리케이션 내에서 발생하는 이벤트를 처리하는 기능을 제공한다.
옵저버 패턴을 기반으로 하며, 이벤트 리스너들이 해당 이벤트를 수신하고 처리한다.
6. 리소스 관리 (Resource Management)
스프링은 리소스 로딩과 관련된 기능을 제공한다.
클래스패스, 파일 시스템, URL 등 다양한 리소스를 쉽게 로딩할 수 있다.
7. 웹 애플리케이션 개발 (Web Application Development)
스프링 MVC를 사용하여 웹 애플리케이션을 개발한다.
요청과 응답을 처리하는 컨트롤러와 뷰를 통해 웹 애플리케이션을 구축할 수 있다.
8. 데이터 액세스 (Data Access)
스프링은 JDBC, JPA, 하이버네이트 등과 통합하여 데이터베이스 액세스를 지원한다.
트랜잭션 관리와 데이터 액세스 작업을 쉽게 처리할 수 있다.
9. 테스트 (Testing)
스프링은 JUnit과 같은 테스트 프레임워크와 통합하여 단위 테스트와 통합 테스트를 수행할 수 있도록 도와준다.
10. 보안 (Security)
스프링은 인증(Authentication)과 권한 부여(Authorization)를 관리하는 보안 기능을 제공한다.
11. 클라우드 기능 (Cloud Features)
스프링은 스프링 클라우드(Spring Cloud)를 통해 클라우드 네이티브 애플리케이션 개발을 지원하나.
'Spring' 카테고리의 다른 글
Apache Maven 란? (POM) (0) | 2023.08.18 |
---|---|
Spring MVC 란? (주요 컴포넌트, 요청 처리 과정, 프로젝트 폴더 구조) (0) | 2023.08.17 |
프레임워크(Framework)란? (라이브러리(Library)와 차이점) (0) | 2023.08.17 |
흔히 사용되는 이스케이프 문자들 (0) | 2023.08.07 |
"Mapper XML 파일 구문들" (insert, update, delete, select..) (0) | 2023.05.23 |