본문 바로가기
카테고리 없음

Spring Framework 정의와 모듈

by am6:00 2019. 8. 4.
목차
1. Spring Framework
    1-1 ) 프레임워크 정의 및 이해를 돕기 위한 예시
2. Spring Framework 구성 모듈
   2-1 ) AOP, Instrumentation
   2-2) Messaging
   2-3) Data Access, Integration
   2-4) Web
3. 프레임워크와 라이브러리의 차이점

1. Spring Framework 정의

Framework란?

스프링 프레임워크에 대해 알아보기 전에 프레임워크가 무엇인지 알아보겠습니다. 예를 들어, 이케아에서 식탁세트를 샀다고 가정해 봅시다. 책상 상판과 책상 다리, 의자 등받이, 의자 다리 등등 완제품이 아닌 상태로 배송됩니다. 이때 우리는 조립 설명서를 보고 책상 상판과 책상다리를 조립해 하나의 책상을 만듭니다. 이렇듯 반제품을 이용해 책상 하나를 금방 만들 수 있습니다. 

프레임워크를 이용한 웹 개발도 이와 비슷합니다. 이미 중요한 부분, 어려운 부분, 복잡한 부분은 대체로 구현이 되어있고 이렇게 구현되어 있는 것들을 이용해 웹 애플리케이션을 완성할 수 있습니다. 이렇게 개발의 중요한 뼈대 부분이 어느정도 완성된 프레임워크는 정말 많은데, 그중 스프링 프레임워크에 대해 자세히 알아 보겠습니다.

 

스프링 프레임워크 정의

스프링 프레임워크는 Java 애플리케이션 개발을 위한 포괄적인 인프라 지원을 제공하는 Java 플랫폼이다. Spring은 당신이 당신의 애플리케이션에 집중할 수 있도록 인프라를 관리한다.
(출처: https://docs.spring.io/spring/docs/4.3.14.RELEASE/spring-framework-reference/htmlsingle/#overview)

스프링 프레임워크는 큰 규모의 Java 애플리케이션 개발을 위한 포괄적인 인프라 지원을 제공합니다. 또한, IoC 컨테이너이며 약 20개의 모듈로 구성되어 있는 솔루션입니다. 모든 모듈을 다 사용하는 것이 아닌 필요한 모듈만 가져다 쓸수 있어 가벼운 솔루션이라 불립니다. 모듈들을 레고블럭이라 생각하면 쉽습니다.

 

스프링 프레임워크 핵심

POJO ( Plain Old Java Object)

객체지향 프로그래밍 기법과 언어가 주는 장점인 유연한 설계와 재사용성을 활용하여 비즈니스의 복잡성과 변화를 상대함

 

IoC (Inversion of control) 제어의 역전

프로그래머가 작성한 소스코드가 프레임워크의 흐름제어를 받는 디자인 패턴

 

DI (Dependency Injection) 의존성 주입

IoC 구현을 통해 의존관계 해결을 위한 디자인 패턴.

XML 설정 혹은 애노테이션을 통해 의존성 주입을 쉽게 할수 있는 방법

 

AOP ( Aspect Oriented Programing )

모듈성을 높일 목적으로 서로 다른 관심사를 분리(separation of cross-cutting concerns)하는 프로그래밍 패러다임. 

성격이 다른 로직(업무 로직과 업무 로직 외 공통적인 부분)이 함께 있는 경우 이를 분리해서 처리해야 복잡성을 해결할 수 있음.

로깅, 보안, 트랜잭션 등이 있음.

 

PSA ( Potable Service Abstraction )

개발환경과 세부 기술의 변화에 관계없이 일관된 방식으로 기술에 접근하게 해주는 기능

서비스 추상화를 통해서 로우 레벨의 기술 구현 부분과 기술을 사용하는 인터페이스를 분리하고, 환경과 세부 기술에 독립적인 접근 인터페이스를 제공하면 기술적인 복잡함을 줄일 수 있음.

 

2. Spring Framework 모듈 구성

스프링 프레임워크는 약 20개의 모듈로 이루어져 있습니다. 이 모듈들은 크게 6개의 기능 카테고리에 속합니다. 이 6개의 기능은 엔터프라이즈 애플리케이션(큰 규모의 애플리케이션) 제작시 보편적으로 필요한 기능들 이지만, 모듈들을 전부 사용할 필요는 없으며 부분적으로 필요한 모듈만 가져다 쓸수 있습니다. 


1. Core Container (코어)

스프링 프레임워크의 핵심은 빈의 생명주기와 설정 그리고 처리방법을 관리하는 스프링 컨테이너 입니다. 

 

2.AOP 와 인스트루멘테이션 (Instrumentation)

  • spring-AOP : 모듈을 통해 관점 지향 프로그래밍을 가능하게 해주며, 객체간의 결합도를 낮출 수 있도록 도와줍니다. AOP 얼라이언스(Alliance)와 호환되는 방법으로 AOP를 지원합니다.
  • spring-aspects : AspectJ와의 통합을 제공합니다.
  • spring-instrument : 인스트루멘테이션을 지원하는 클래스와 특정 WAS에서 사용하는 클래스로 더 구현체를 제공합니다. 참고로 BCI(Byte Code Instrumentations)은 런타임이나 로드(Load) 때 클래스의 바이트 코드에 변경을 가하는 방법을 말합니다.

3.Messaging

  • spring-messaging : 스프링 프레임워크 4는 메시지 기반 어플리케이션을 작성할 수 있는 Message, MessageChannel, MessageHandler 등을 제공합니다. 또한, 해당 모듈에는 메소드에 메시지를 맵핑하기 위한 어노테이션도 포함되어 있으며, Spring MVC 어노테이션과 유사합니다.

3.데이터 엑서스(Data Access) / 통합(Integration)

  • 데이터 엑세스/통합 계층은 JDBC, ORM, OXM, JMS 및 트랜잭션 모듈로 구성되어 있다.
  • spring-jdbc : 자바 JDBC프로그래밍을 쉽게 할 수 있도록 기능을 제공합니다.
  • spring-tx : 선언적 트랜잭션 관리를 할 수 있는 기능을 제공합니다.
  • spring-orm : JPA, JDO및 Hibernate를 포함한 ORM API를 위한 통합 레이어를 제공합니다.
  • spring-oxm : JAXB, Castor, XMLBeans, JiBX 및 XStream과 같은 Object/XML 맵핑을 지원합니다.
  • spring-jms : 메시지 생성(producing) 및 사용(consuming)을 위한 기능을 제공, Spring Framework 4.1부터 spring-messaging모듈과의 통합을 제공합니다.

4. 웹 (Web)

  • 웹 계층은 spring-web, spring-webmvc, spring-websocket, spring-webmvc-portlet 모듈로 구성됩니다.
  • spring-web : 멀티 파트 파일 업로드, 서블릿 리스너 등 웹 지향 통합 기능을 제공한다. HTTP클라이언트와 Spring의 원격 지원을 위한 웹 관련 부분을 제공합니다.
  • spring-webmvc : Web-Servlet 모듈이라고도 불리며, Spring MVC 및 REST 웹 서비스 구현을 포함합니다.
  • spring-websocket : 웹 소켓을 지원합니다.
  • spring-webmvc-portlet : 포틀릿 환경에서 사용할 MVC 구현을 제공합니다.

5. Test

테스트 컨텍스트 프레임워크나 목(mock)오브젝트 등을 이용해 테스트할 때 사용합니다.


3. 프레임워크과 라이브러리의 차이점

프레임워크

뼈대나 기반구조를 뜻하고, 제어의 역전 개념이 적용된 기술. 특정 개념들의 추상화를 제공하는 여러 클래스나 컴포넌트로 구성되어있음.


라이브러리

단순 활용 가능한 도구들의 집합. 개발자가 만든 클래스에서 호출하여 사용, 클래스들의 나열로 필요한 클래스를 불러서 사용하는 방식을 취함


프레임워크와 라이브러리의 차이

프레임워크 안에서 개발자가 필요한 코드를 작성하지만,  라이브러리는 개발자가 라이브러리를 가져다가 씁니다. 즉, 어플리케이션의 Flow 프름을 누가 쥐고 있느냐에 달려있습니다. 제어의 흐름에 대한 주도성이 누구에게 어디에 있는가에 차이점이 있습니다. 프레임워크는 가져다 사용하는 개념이 아닌 프레임워크 안에서 사용한다는 느낌/관점으로 접근할수 있습니다.

 


요약

  • 큰 규모의 애플리케이션(엔터프라이즈급) 구축시 사용할 수 있는 가벼운 솔루션
  • 원스-스탑-숍(One-Stop-Shop) 즉, 모든 과정을 한꺼번에 해결하는 상점처럼 스프링 프레임워크 하나로 애플리케이션 개발의 모든과정을 해결할 수 있음.
  • IoC 컨테이너
  • 스프링 프레임워크는 모듈화가 잘 되어있어 가벼운 솔루션임 왜? 전체 프레임워크를 다 가져다 쓰는것이 아닌 필요한 모듈만 가져다 사용할수 있어서! 예) 레고블록.
  • 약 20개의 모듈로 구성 되어있고 필요한 모듈만 가져다 사용가능.예) Spring-jdbc, Spring-web, Spring-webmvc, Spring-websoket, spring-webportlet
  • 선언적으로 트랜잭션 관리 할 수 있음
  • 완전한 기능 갖춘 MVC Framework 제공
  • AOP 지원
  • 도메인 논리 코드와 쉽게 분리될 수 있는 구조

출처

https://www.edwith.org/boostcourse-web/lecture/20655/

 

[LECTURE] 1) Spring이란? : edwith

들어가기 전에 이번 시간엔 Spring Framework가 무엇인지, 그리고 Spring Framework를 구성하고 있는 모듈에는 어떠한 것들이 있는지 알아보도록 하겠습니다.  ... - 부스트코스

www.edwith.org

https://scroogy.atlassian.net/wiki/spaces/SPRING/pages/1114310

 

Confluence

 

scroogy.atlassian.net

https://dololak.tistory.com/21?category=636502

 

[스프링] 스프링 모듈 구조

스프링 모듈 스프링 프레임워크는 20여개의 서로 다른 모듈로 이루어져 있습니다. 각 모듈마다 세 개의 JAR 파일을 갖게 되는데 각각 컴파일된 .class 라이브러리, 원본 소스 JAR 파일, JavaDoc JAR 파일입니다...

dololak.tistory.com

https://webclub.tistory.com/458