Spring 의 개요
스프링의 개요
Java 언어를 사용하면 꼭 사용하게 되는 대세 프레임워크인 스프링 !
어째서 많은 프레임워크 중 스프링을 사용하는지, 스프링이란 무엇인지 핵심개념부터 살펴보자
Spring Framework 란?
자바 오픈소스 애플리케이션 프레임워크로 간단하게 Spring 이라 불린다.
동적인 웹 사이트를 개발하기 위한 여러가지 서비스를 제공하고 있으며, 공공기관의 웹 개발 시
사용을 권장하고 있는 전자정부 표준 프레임워크의 기반 기술로서 쓰인다.
가장 큰 특징은 의존성주입 (DI, Dependency Injection) 과 제어 반전(IOC, Inversion of Control)
이 있으며 그 외에도 Spring AOP, POJO 등이 존재한다.
이 특징들을 이용해 결합도를 낮추는 방식으로 어플리케이션을 안정적인 프로그램으로 개발이 가능하며
이러한 개발방식은 프로그램의 단위테스트에 용이하기 때문에 보다 퀄리티높은 프로그램을 개발할 수 있다.
Spring 핵심 기능과 특징
DI, Dipendency Injection (의존성 주입) | 설정파일이나 어노테이션을 통해 객체간의 의존관계를 설정하여 개발자가 직접 의존하는 객체를 생성할 필요가 없다. |
AOP, Aspect Oriented Programming (관점지향 프로그래밍) | 트랜잭션, 로깅, 보안 등 여러 모듈, 여러 계층에서 공통으로 필요로 하는 기능의 경우 해당 기능들을 분리하여 관리한다. |
POJO, Plain Old Java Object | 일반적인 J2EE 프레임워크에 비해 특정 라이브러리를 사용할 필요가 없어 개발이 쉬우며, 기존 라이브러리의 지원이 용이하다. |
IOC, Inversion of Control (제어 반전) | 컨트롤의 제어권이 개발자가 아닌 프레임워크에 있다는 뜻으로 객체의 생성부터 모든 생명주기의 관리까지 프레임워크가 주도한다. 객체를 생성하고, 직접 호출하는 프로그램이 아니라, 만들어둔 자원을 호출해서 사용한다. |
Spring JDBC | Mybatis 나 Hibernate 등 데이터베이스를 처리하는 영속성 프레임워크와 연결할 수 있는 인터페이스를 제공한다. |
Spring MVC | MVC 디자인 패턴을 통해 웹 어플리케이션의 Model, View, Controller 사이의 의존관계를 DI 컨테이너에서 관리하여 개발자가 아닌 서버가 객체들을 관리하는 웹 애플리케이션을 구축할 수 있다. |
PSA, Portable Service Abstraction | 스프링은 다른 여러모듈을 사용함에 있어 별도의 추상화 레이어를 제공한다. 예를 들어 JPA 를 사용할때에서 Spring JPA를 사용하여 추상화하므로 실제구현에 있어서 Hibernate 를 사용하든 EcliposeLink를 사용하든 개발자는 이 모듈의 의존없이 프로그램에 집중할 수 있다. |
Spring 구성 모듈
- Data 접근 계층 : JDBC 나 데이터베이스에 연결하는 모듈로, Data 트랜잭션에 해당하는 기능을 담당하여 영속성 프레임워크의 연결을 담당한다.
- Web 계층 (MVC/ Remoting) : Spring Framework 에서 Servlet, Struts 등의 웹 구현 기술과의 연결점을 Spring MVC 구성으로 지원하기 위해 제공되는 모듈 계층이다. 또한 스프링의 리모팅 기술로 RMI, Hessian, Burlap, JAX-WS, HTTP 호출자 그리고 REST API 모듈을 제공한다.
-AOP 계층 : Spring 의 핵심이라고 할 수 있으며 모든스프링 관련 모듈은 이 Core Container 기반으로 구축된다.
Spring의 근간이 되는 IOC 또는 DI 기능을 지원하는 영역을 담당하고 있다. BeanFactory를 기반으로 Bean 클래스들을 제어할 수 있는 기능을 지원한다.
Spring 동작 구조
Spring 동작 방식
- XML 파일 : Spring 컨테이너 구동 시 한개의 Spring 환경설정된 xml파일을 불러오는데 이 파일에 bean, aop, transaction 등
여러 사항을 다 작성하여 구동하는 방식 - @Annotation : xml 파일에는 구송시킬 필수요소만 작성하고 소스코드에 Annotation 으로 표시하여 구동하는 방식
Spring MVC
Spring Framework 에서는 클라이언트의 화면을 표현하기 위한 View 와 서비스를 수행하기 위한 개발로직 부분을 나누는 MVC2 패턴을 지원한다. 또한 Model, View, Controller 사이의 의존관계를 DI컨테이너에서 관리하여 유연한 웹 애플리케이션을 쉽게 구현 및 개발할 수 있다.
MVC 요청 처리 과정
MVC 구성요소
DispatcherServlet | 클라이언트의 요청(Request)을 전달 받고 요청에 맞는 컨트롤러가 리턴 한 결과를 View에 전달하여 알맞은 응답(Response)을 생성 |
HandlerMapping | 클라이언트의 요청 URL을 어떤 컨트롤러가 처리할지 결정 |
Controller | 클라이언트의 요청을 처리한 뒤, 결과를 DispatcherServlet 에게 리턴 |
ModelAndView | 컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담음 |
ViewResolver | 컨트롤러의 처리결과를 생성할 View를 결정 |
View | 컨트롤러의 처리결과 화면을 생성, JSP 나 Velocity 템플릿 파일등을 View로 사용 |