스프링 프레임워크자바 엔터프라이즈 개발을 위한 오픈 소스 애플리케이션 프레임워크로서 간단히 스프링이라고 하며, 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있습니다.

 

스프링 프레임워크는 경량 컨테이너로 자바 객체를 담고 직접 관리합니다. 

객체의 생성 및 소멸 그리고 라이프 사이클을 관리하며 언제든 스프링 컨테이너로부터 필요한 객체를 가져와 사용할 수 있습니다. 

 

*엔터프라이즈 개발이란? 

대규모 데이터 처리와 트랜잭션이 동시에 여러 사용자로부터 행해지는 매우 큰 규모의 환경에서 개발하는 것을 의미합니다. ​ 

 

*엔터프라이즈급 애플리케이션 특징 

-기존 데이터베이스 및 툴과 호환 가능 

-특정 부서의 요구 사항에 맞게 사용자 정의 가능 

-비즈니스 요구 사항에 맞게 확장 가능 

-외부 리스크 및 데이터 유출로부터 보안 

 

*오픈소스란? 

오픈소스는 소스 코드를 공개해 누구나 특별한 제한 없이 그 코드를 보고 사용할 수 있는 오픈 소스 라이선스를 만족하는 소프트웨어를 말합니다. 한마디로 소스가 공개되어 여러 개발자가 플랫폼을 함께 개발, 구축, 보완해 나가는 시스템입니다. 


 

<스프링 프레임워크의 특징 및 장점> 

 

경량 컨테이너로서 자바 객체를 직접 관리한다. 

각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있습니다. 

 

스프링은 Plain Old Java Object (POJO)방식의 프레임워크이다. 

POJO방식은 단순 자바 오브젝트로 정의됩니다. 이는 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없어 기존에 존재하는 라이브러리 등을 지원하기에 용이하고 객체가 가볍습니다. 또한, 의존성이 없고 추후 테스트 및 유지보수가 편리한 유연성의 장점을 가집니다. 

 

스프링은 제어 반전(IoC : Inversion of Control)을 지원한다. 

컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출합니다. 즉, 제어의 흐름을 사용자가 컨트롤하지 않고 위임한 특별한 객체에 모든 것을 맡기는 것입니다. 이때 IOC는 DI와 DL에 의해 구현되니다. 

 

스프링은 의존성 주입(DI : Dependency Injection)을 지원한다. 

DI는 의존성 주입으로 객체가 서로 의존하는 관계가 되도록 하는 것을 의미합니다. 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜줍니다. IOC에서 DI의 역할은 각 클래스 사이에 필요로 하는 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것입니다. 

 

*DL(Dependency Injection): 의존성 검색을 의미합니다. 컨테이너에서는 객체들을 관리하기 위해 별도의 저장소에 빈을 저장합니다. 이때, 개발자들이 컨테이너에서 제공하는 API 를 이용하여 사용하고자 하는 빈을 검색하는 방법입니다. 

 

스프링은 관점지향 프로그래밍(AOP)을 지원한다. 

따라서 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있습니다. 

 

스프링은 영속성과 관련된 다양한 서비스를 지원한다. 

iBATIS나 하이버네이트 등 이미 완성도가 높은 데이터베이스 처리 라이브러리와 연결할 수 있는 인터페이스를 제공합니다. ​

 

스프링은 확장성이 높다. 

스프링 프레임워크에 통합하기 위해 간단하게 기존 라이브러리를 감싸는 정도로 스프링에서 사용이 가능하기 때문에 수많은 라이브러리가 이미 스프링에서 지원되고 있고 스프링에서 사용되는 라이브러리를 별도로 분리하기도 용이합니다. 


 

<스프링 프레임워크의 주요 모듈> 


① Spring Core= spring container 

- Spring 프레임워크의 근간이 되는요소로. IoC(또는 DI) 기능을 지원하는 영역을 담당합니다. - 빈 저장소를 기반으로 빈 클래스들을 제어할 수 있는 기능을 지원하기도 니다. 빈 저장소의 경우, IOC 패턴이 적용되어 객체 구성부터 의존성 처리까지 모든 일을 처리하는 핵심적인 역할을 합니다. 

 

②Spring Context 

- Spring Core에서 지원하는 기능 외의 추가적인 기능들을 지원합니다. 

- JNDI, EJB, Validation, Scheduiling, Internaliztaion 등 엔터프라이즈 서비스들을 포함하고 있습니다. 

 

③Spring DAO 

- JDBC 기반하의 DAO개발을 좀 더 쉽고, 일관된 방법으로 개발하는 것이 가능하도록 지원합니다. 

- Spring DAO는 추상 레이어를 지원함으로써 코딩이나 예외처리 하는 부분을 간편화 시켜 일관된 방법으로 코드를 짤 수 있게 도와줍니다. 

 

④Spring ORM 

- 객체 관계형 도구를 사용할 수 있도록 Hibernate, IBatis, JDO와의 결합을 지원합니다. 

- Spring ORM을 이용할 경우 Hibernate, IBatis, JDO 프레임워크와 쉽게 통합하는 것이 가능합니다. 

 

⑤Spring AOP 

- Spring 프레임워크에 관점지향 프로그래밍을 할 수 있도록 지원하는 기능입니다. 

- 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있습니다. 

 

*OOP와 AOP 

 

☞OOP는 객체지향 원칙에 따라 관심사가 같은 데이터를 한곳에 모아 분리하고 낮은 결합도를 갖게하여 독립적이고 유연한 모듈로 캡슐화를 하는 것을 말합니다. 하지만 이러한 과정 중 중복된 코드들이 많아지고 가독성, 확장성, 유지보수성을 저하시킵니다. 이러한 문제를 보완하기 위해 나온 것이 AOP입니다. 

 

☞AOP에서는 핵심기능과 공통기능을 분리시켜 핵심 로직에 영향을 끼치지 않게 공통기능을 끼워 넣는 개발 형태입니다. 무분별하게 중복되는 코드를 한 곳에 모아 제거 할 수 있어지고 공통기능을 한 곳에 보관함으로써 공통 기능 하나의 수정으로 모든 핵심기능들의 공통기능을 수정 할 수 있어 효율적인 유지보수가 가능하며 재활용성이 극대화됩니다. 

 

⑥Spring Web 

- Web 기반의 응용프로그래램에 대한 context를 제공하여 Web Application 개발에 필요한 기본적인 기능을 지원합니다. 

 

⑦Spring MVC 

- Spring 프레임워크에서 독립적으로 Web UI Layer에 Model-View-Controller를 지원하기 위한 기능입니다. 

- Velocity, Excel, PDF와 같은 다양한 UI 기술들을 사용하기 위한 API를 제공합니다. 

- DispatcherServlet이 Controller 역할을 담당하여 각종 요청을 적절한 서비스에 분산시켜주며 이를 각 서비스들이 처리를 하여 결과를 생성하고 그 결과는 다양한 형식의 View 서비스들로 화면에 표시될 수 있도록 합니다. ​ 

 

 

-위 글은 아래 자료들을 토대로 재작성되었습니다. 

*참고자료 

1. 위키 백과 : 스프링 프레임워크

2. 히진쓰의 서버사이드 기술 블로그

3.갓대희님의 블로그