본문 바로가기
Back/Spring

스프링(Spring)이란?

by Inventer 2022. 1. 11.

1. Intro

봄(Spring)이란 겨울(Winter)이 가고, Java의 봄(Spring)이 왔다는 것을 의미한다.

 

자바가 매우 어려워 겨울이란 별칭을 가지던 시기는 바로 EJB(Enterprise Java Beans)를 의미한다.

다루기가 까다로워 Java라는 언어 자체를 존폐위기까지 가져갔고,

이러한 EJB를 부수기 위해 탄생한 것이 Spring이다.

자세하게 살펴보기 위하여 Enterprise Java Beans을 먼저 살펴보겠다.

 

EJB를 직역하자면 "기업용 자바 콩"이다.

여기서 "기업용"과 "자바 콩" 두 가지로 분류할 수 있는데, 기업용(Enterprise)이라는 의미를 먼저 살펴보겠다.

현존하는 컴퓨터 메카니즘은 서버 중앙화된 체계를 갖는다. 이 때의 패러다임에 부합하기위해 1998년 탄생한 EJB는 한창 중앙화된 서버의 메카니즘을 구성하기 위해서 사용되었다. 

 

자바 콩(Java Beans)은 썬 마이크로시스템즈에서 다음과 같이 정의되었다. "빌더 형식의 개발도구에서 가시적으로 조작이 가능하고 또한 재사용이 가능한 소프트웨어 컴포넌트이다."

어려운 말은 건너뛰고, 재사용이 가능하도록 독립적으로 구성된 모듈인 것이다. 프로그램을 조립식으로 만들 수 있게 모듈화 했다는 것이다. Private Field인 ID 변수를 생성하고, 이에 GetID(), SetID()로 접근하는 것도 Java Beans의 방식이다. 즉 모듈화 및 캡슐화 등 자바의 특성에 대해 초점에 둔 하나의 관습인 것.

 

따라서 EJB는 대규모이고 구조가 복잡한 분산 객체 환경을 쉽게 구현하기 위해서 등장한 것이다.

주로 웹 시스템에서 JSP는 화면 로직을 처리하고, EJB는 업무 로직을 처리하는 역할을 한다.

이러한 EJB 부수고자 탄생한 Spring은 기업용(=서버용) 프레임워크의 새로운 패러다임을 가져오게 되었다.

 

2. Spring

<Fig 1> Architecture

Spring은 Framework이다. 여러가지의 툴 들을 한 군데 모아논 것이다.

<Fig 1>은 Spring이라는 Framework의 구조를 나타내고 있다.

스프링 프레임워크 Github

 

Core Container

  • Cores : 프레임워크의 기반이 되는 부분 IoC(Inversion of Control)와 DI(Dependency Injection)를 포함.
  • Beans : Bean Factory를 제공하며, 공장패턴을 정교하게 구현한 것.
  • Context : Core와 Beans 모듈에 기반하며 정의되고 구성된 모든 개체에 액세스할 수 있는 매체.
  • SpEL : Spring Expression language의 약자로 SpEL 모듈은 런타임에 객체 그래프를 쿼리하고 조작할 수 있는 강력한 표현식 언어를 제공.

 

Data Access / Integration

  • JDBC : JDBC 모듈 코딩과 관련하여 지저분한 JDBC의 필요성을 제거하는 JDBC-추상화 계층을 제공.
  • ORM : JPA, JDO, Hibernate, 그리고 iBatis를 포함하며 객체 관계 맵핑 API를 위한 통합 레이어를 제공.
  • OXM : JAXB, Castor, XMLBeans, JiBX 및 XStream을 위한 Object/XML 매핑 구현을 지원하는 추상화 레이어를 제공.
  • JMS : Java Messaging Service의 약자로 메시지를 생성하고 사용하기 위한 기능이 포함.
  • Transactions: 특별한 인터페이스를 구현하는 클래스 및 모든 POJO에 대한 프로그래밍 방식과 선언적 트랜잭션 관리를 지원.

 

Web

  • Web : 다중 파일 업로드 기능과 서블릿 리스너 그리고 웹 - 기반 애플리케이션 컨텍스트를 사용하여 IoC 컨테이너의 초기화와 같은 기능을 제공.
  • Web-MVC : 웹 애플리케이션을위한 Spring의 모델 - 뷰 - 컨트롤러 (MVC) 구현이 포함.
  • Web-Socket : 클라이언트와 웹 애플리케이션 서버 사이의 웹 소켓 기반 양방향 통신을 지원.
  • Web-Portlet : portlet 환경portlet 반영 기능에 사용되는 MVC 구현을 제공.

*portlet : 웹 컴포넌트의 일종

 

Others

  • AOP : 분리되어야 하는 기능을 구현하는 코드를 깔끔하게 분리하기 위해 method-interceptorspointcuts을 정의할 수 있는 관점지향프로그래밍(aspect-oriented programming) 구현을 제공.
  • Aspects : 강력하고 성숙한 AOP 프레임워크인 AspectJ와의 통합을 제공.
  • Instrumentation : 특정 애플리케이션 서버에 사용되는 class instrumentation 지원하며 class loader 구현을 제공.
  • Messaging : 응용 프로그램에서 사용할 수있는 웹 소켓 하위 프로토콜로 STOMP에 대한 지원을 제공하며 WebSocket 클라이언트의 STOMP 메시지 라우팅 및 처리를 위한 주석 프로그래밍 모델을 지원.
  • Test : JUnit 또는 TestNG 프레임워크를 사용한 스프링 구성 요소의 테스트를 지원.

 

3. Spring Boot

Spring Boot는 스프링의 상위 프레임워크이다. Spring Framework가 조립식 컴퓨터라면, Spring Boot는 삼성 완제품 PC인 것. 사용자 친화적으로 자주 사용하는 기능을 하나로 묶어 제공하는 것이다. 예를 들어 테스트 환경의 경우 WAS를 올리고, 직접 톰캣의 디렉터리 내에 환경을 설정해줘야 하는 불편함이 있지만, Spring Boot의 경우 톰캣서버가 내장되어 있는 등 편한 환경을 제공한다.


Ref.

 

https://www.tutorialspoint.com/spring/spring_overview.htm

 

Spring Framework - Overview

Spring Framework - Overview Spring is the most popular application development framework for enterprise Java. Millions of developers around the world use Spring Framework to create high performing, easily testable, and reusable code. Spring framework is an

www.tutorialspoint.com

https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94%EB%B9%88%EC%A6%88

 

자바빈즈 - 위키백과, 우리 모두의 백과사전

자바빈즈(JavaBeans)는 자바로 작성된 소프트웨어 컴포넌트이다. 자바빈즈의 사양은 썬 마이크로시스템즈에서 다음과 같이 정의되었다. "빌더 형식의 개발도구에서 가시적으로 조작이 가능하고

ko.wikipedia.org

 

http://dawoonjeong.com/spring-module/

 

[Spring] 스프링 모듈 구성

실행에 필요한 클래스를 스프링이 준비 인스턴스를 준비하는 역할은 스프링이 하기에 인스턴스 준비코드를 작성할 필요 없음 new를 사용해 인스턴스를 생성하거나 JNDI로 인스턴스를 취득하는

dawoonjeong.com

https://fastcampus.co.kr/dev_online_spring

 

한 번에 끝내는 Spring 완.전.판 초격차 패키지 Online. | 패스트캠퍼스

Spring의 30가지 연관 스택을 7가지 예제, 그리고 현업 프로세스와 동일하게 진행되는 4가지 프로젝트를 통해 완전 정복할 수 있는 강의! 어렵게만 느껴졌던 Spring, 업계 선호도 1위 현업 개발자가

fastcampus.co.kr

 

'Back > Spring' 카테고리의 다른 글

[Spring] Null Safety  (0) 2022.02.08
[Spring] SpEL(Spring Expression Language)  (0) 2022.02.08
[Spring] Resource  (0) 2022.02.08
[Spring] Validation, Data Binding  (0) 2022.02.08
[Spring] AOP  (0) 2022.02.08

댓글