코딩. 캠핑

스프링 이란 ? 본문

Dev(개발)/Spring(스프링)

스프링 이란 ?

진영_8 2021. 1. 7. 12:42

 작성자도 완전히 이해하지 못하고 작성한 게시글입니다.

 스프링을 이용한 게시판을 만들어야 하는 과업이 생겨서 처음부터 차근차근 공부해보려고 티스토리 블로그를 개설하고 이렇게 적게 되었다.

스프링 공식 홈페이지

Spring Framework

자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크 로서 간단히 스프링(Spring)이라고도 한다.

특징으로는 우리나라 공공기관의 웹 서비스 개발시에 쓰이는 전자정부 표준프레임워크 의 기반 기술로 쓰이고 있다.

 

위키백과에 적혀있는 스프링에 대한 기본 설명이다.

내용들이 와닿지 않아서 관련 서적과 구글링을 통해 궁금한것들을 찾아보았다.


스프링 이란?

 

스프링을 살펴보면 DI, IoC, 경량 컨테이너 라는 말이 많다. 일단 스프링 프레임워크란 객체의 라이프 사이클을 관리하기 위하여 DI를 사용하는 경량 컨테이너 이다. 라고 한다. 복잡한 엔터프라이즈 어플리캐이션 개발을 겨냥해 만들어졌고, 평범한 Java Beans를 사용함에도 EJB에서만 가능했던 일들이 모두 이루어진다.

EJB도 뭔지 몰라 궁금해서 찾다보니 역사도 어렴풋이 알게되었다.


스프링 프레임워크의 역사 및 Java EE와의 관계

스프링 프레임워크의 역사를 알아보기 전에 먼저 J2EE(Java 2 Enterprise Edition)에 대해 알아보자.

J2EE는 웹 기반의 엔터프라이즈 애플리케이션을 구축하기 위한 플랫폼이다. JSP, Java Servlet, 분산 애플리케이션을 지원하는 컴포넌트 기반의 객체 EJB(Enterprise Java Bean), 비동기 메시징 처리를 위한 JMS(Java Message Service), 데이터베이스 처리를 위한 JDBC(Java Database Connectivity) 등등의 기능을 포함하고 있다. 이 J2EE가 훗날 우리가 알고있는 Java EE로 명명법이 바뀐다.

이중에서도 EJB(Enterprise Java Bean)는 JavaEE의 핵심 기술이라고 한다. Servlet이나 JSP가 웹 GUI를 만들기 위해 필요한 기술인 반면, EJB는 JavaEE가 대체하는 미들웨어에서 구동되던 기업의 핵심 서비스를 만들기 위한 분산처리 및 트랜잭션, 보안 등을 지원하는 컴포넌트 모델을 제공하는 기술이기 때문이다. 그래서 많은 개발자들의 주목을 받으며 널리 쓰이게 되었지만, 시간이 지남에 따라 몇 가지 심각한 문제들로 인해 비판 받게 되었다고 한다. 예를 들어, EJB는 ORM 기능을 제공하기도 했는데 2.x 버전이 나올 때 까지 결과값을 정렬할 수 있는 표준적인 방법 조차 제공하지 않았다고 한다...ㄷㄷ 그래서 표준에서 정의하지 않은 이런 기능들은 모두 Java EE서버를 판매하던 기업들이 각자 다른 방식으로 구현해서 제공할 수 밖에 없었고, 미들웨어 제품에 종속적인 기존 환경을 극복하기 위해 만든 Java EE를 사용하면 특정 자바 EE 서버 제품에 종속되어 버리는 이상한 상황까지 되어버렸다고 한다.

스프링 프레임워크는 이러한 문제점들을 개선하기 위해 처음 개발되었다. 또한 고가의 Java EE 서버가 아닌 톰캣과 같은 일반 서블릿 컨테이너에서도 구동 된다는 것이 큰 강점이 되었다고 한다.


스프링 왜 쓰는건데?

특징
POJO(Plain Old Java Object)
- 위에서 설명한 EJB를 사용하면서 해당 플랫폼에 종속되어 있는 무거운 객체들을 만드는 것에 대해 반발하며 나타난 용어다. 별도의 프레임워크 없이 Java EE를 사용할 때에 비해 특정 인터페이스를 구현하거나 상속받을 필요가 없어 기존 라이브러리를 지원하기가 용이하고, 객체가 가볍다.

관점 지향 프로그래밍(Aspect Oriented Programming, AOP)
- 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.  이 내용은 후에 스프링 코어를 공부할때에 같이 다룰 내용이다.

의존성 주입(Dependency Injection, DI)
- 구성 요소 간의 의존 관계가 소스코드 내부가 아닌 외부에서 설정을 통해 정의되는 방식이다. 코드 재사용을 높여 소스코드를 다양한 곳에 사용할 수 있으며 모듈간의 결합도도 낮출 수 있다. 계층, 서비스 간에 의존성이 존재할 경우 스프링 프레임워크가 서로 연결시켜준다. 이 내용도 뒤에 따로 다룰 내용이다.

제어 반전(Inversion of Control, IoC) 
- 전통적인 프로그래밍에서는 개발자가 작성한 프로그램이 외부 라이브러리의 코드를 호출해서 이용했다. 이와 반대로 외부 라이브러리 코드가 개발자의 코드를 호출하게 된다. 즉, 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다.

생명주기 관리
- 스프링 프레임워크는 Java 객체의 생성, 소멸을 직접 관리하며 필요한 객체만 사용할 수 있다.

 

스프링 프레임워크의 핵심 모듈 7개

코어 컨테이너(core container)
스프링프레임워크의 핵심 기능을 제공한다. 코어 컨테이너의 주요 컴포넌트는 Bean-Factory이다. BeanFactory는 IoC 패턴을 사용하여 애플리케이션의 설정, 의존성 스팩을 실제 애플리케이션 코드에서 분리시킨다.

스프링 컨텍스트(Spring context)
스프링을 컨테이너로 만든 것이 핵심 모듈의 BeanFactory라면, 스프링을 프레임워크로 만든 것은 컨텍스트 모듈이다. 이 모듈은 국제화된 메시지, 애플리케이션 생명주기 이벤트, 유효성 검증 등을 지원함으로써 BeanFactory의 개념을 확장한다. 이 모듈은 이메일, JNDI 접근, EJB 연계, 리모팅, 스케쥴링 등과 같은 다수의 엔터프라이즈 서비스를 추가로 제공한다. 

스프링 AOP 모듈(Spring AOP)
설정 관리 기능을 통해 aspect 지향 프로그래밍 기능을 스프링 프레임워크와 직접 통합시킨다. 따라서 스프링 프레임워크에서 관리되는 모든 객체에서 AOP가 가능하다. 스프링 AOP 모듈은 스프링 기반 애플리케이션에서 객체에 트랜잭션 관리 서비스를 제공한다. 스프링 AOP에서는 EJB 컴포넌트에 의존하지 않고도 선언적 트랜잭션 관리를 애플리케이션과 결합할 수 있다.

스프링 DAO(Spring Data Access Object)
Spring JDBC DAO 추상 레이어는 다른 데이터베이스 벤더들의 예외 핸들링과 오류 메시지를 관리하는 중요한 예외 계층을 제공한다. 이 예외 계층은 오류 핸들링을 간소화하고, 예외 코드의 양도 줄여준다. Spring DAO의 JDBC 예외는 일반 DAO 예외 계층에 순응한다.

스프링 ORM(Object-Relational Mapping)
프레임워크는 여러 ORM 프레임워크에 플러그인 되어, Object Relational 툴 (JDO, Hibernate, iBatis SQL Map)을 제공한다. 이 모든 것은 스프링의 일반 트랜잭션과 DAO 예외 계층에 순응한다.

스프링 Web module
웹 컨텍스트 모듈은 애플리케이션 컨텍스트 모듈의 상단에 구현되어, 웹 기반 애플리케이션에 컨텍스트를 제공한다. 스프링 웹 모듈은 다중 요청을 핸들링하고, 요청 매개변수를 도메인 객체로 바인딩하는 작업을 수월하게 한다.

스프링 MVC framework
MVC 프레임워크는 완전한 기능을 갖춘 MVC 구현이다. MVC 프레임워크는 전략 인터페이스를 통해 설정할 수 있으며, JSP 등 과같은 다양한 뷰 기술을 허용한다.

 

이 파트는 대부분의 내용들을 이해 하지 못한채 그냥 이런 내용들이 있구나~ 하고 넘어가려고 한다.
아직 Java EE에 대한 경험도 없고, 프로그래밍 문헌들이 그러하듯 대부분의 용어들이 보통 직역되어 있어서 이해하기가 난해한 경우가 많다. 그래서 훗날 나만의 방식으로 재해석해서 다시 작성해보려고 한다.

 

출처

 

Spring Framework 개요

1. 개요 1.1. 목적 수 많은 프로젝트에서 프레임워크나 아키텍체에 대한 관심 없이 대부분의 개발을 개발자의 능력에 전담시키는 것이 일반적이다. 이는 프로젝트의 위험 요소를 증가시킬 뿐만

leetaehoon.tistory.com

 

스프링 프레임워크 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전.

ko.wikipedia.org

 

Comments