티스토리 뷰

1) Spring이란?

프레임워크

  • 프레임워크는 반제품이라고 볼 수 있습니다.
  • 애초에 처음부터 제품을 만드는 경우도 있으나 그러기에는 시간과 노력이 너무 많이 소요됩니다. 어느 정도 형태를 갖춘 반제품을 사용하면 그 위에 필요한 기능들만 추가하여 적은 노력과 적은 시간으로 완성된 제품을 만들 수 있습니다.
  • 즉, 중요한 부분어려운 부분복잡한 부분들은 구현이 되어 있는 반제품을 가지고 필요한 제품을 만들어내면 됩니다.
    그런 것을 프레임워크라 합니다.

Spring Framework?

  • 엔터프라이즈급 어플리케이션을 구축할 수 있는 가벼운 솔루션이자, -스탑-(One-Stop-Shop). -스톱-숍은 모든 과정을 한꺼번에 해결하는 상점이라 할 수 있습니다.
  • 원하는 부분만 가져다 사용할 수 있도록 모듈화가 잘 되어 있습니다.
  • IoC 컨테이너입니다.
  • 선언적으로 트랜잭션을 관리할 수 있습니다.
  • 완전한 기능을 갖춘 MVC Framework를 제공합니다.
  • AOP 지원합니다.
  • 스프링은 도메인 논리 코드와 쉽게 분리될 수 있는 구조로 되어 있습니다.

프레임 워크 모듈

프레임 워크 모듈

  • 스프링 프레임워크는 약 20개의 모듈로 구성되어 있습니다.
    필요한 모듈만 가져다 사용할 수 있습니다.

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

  • spring-AOP : AOP 얼라이언스(Alliance)와 호환되는 방법으로 AOP를 지원합니다.
  • spring-aspects : AspectJ와의 통합을 제공합니다.
  • spring-instrument : 인스트루멘테이션을 지원하는 클래스와 특정 WAS에서 사용하는 클래스로 더 구현체를 제공합니다. 참고로 BCI(Byte Code Instrumentations)은 런타임이나 로드(Load) 때 클래스의 바이트 코드에 변경을 가하는 방법을 말합니다.

메시징(Messaging)

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

데이터 엑서스(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모듈과의 통합을 제공합니다.

(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 구현을 제공합니다.

생각해보기

  • 스프링은 프레임워크라고 합니다. 프레임워크와 라이브러리는 어떤 차이가 있을까요? 조사해보세요.

    라이브러리와 프레임워크의 차이
    "엄밀한 구분 기준은 없다!" -> 결국 어떤 일을 하는데 도움을 준다는점에서 같다.
    라이브러리는 그 일이 범용적이고, 상대적으로 단순하다.
    망치, 톱 등의 도구에 비유할 수 있다.

    프레임워크가 도움을 주는 일은 상대적으로 거대하다.
    비행기로 비유해서 생각해보면 보다 이해가 빨라진다.
    비행기는 "하늘을 날게 해준다" 란 목적에 특화된 거대 차량이다.
    추진력을 내게 해주는 엔진, 공기중에서 이동하게 해주는 날개, 내부 기압 조절 시스템 등등이 포함되어 있고 이것들은 각각의 기능이 있지만 전부 "하늘을 날게 해준다"란 거대한 목적에 부합하는 것들이며, 다른 목적으로 이용하긴 쉽지 않다. 비행기로 심해에 내려갈 순 없는 것이다.

    망치를 가져와 못을 박는데 쓴다 라고 말하는 것처럼 라이브러리를 사용한다는 것은 내가 "가져와서 사용한다"라고 생각할 수 있다.
    그러나 프레임워크를 사용한다는 것은 내가 "끌려가서 사용된다" 로 말할 수 있다.
    즉, 비행기에 내가 타서, 목적에 맞게 운용하는 것이다.

    다시 비행기로 예를 들면나는 바다 건너편의 적을 공격하는 전투기를 만들고 싶다고 해보자.
    그럼 일단 하늘을 날 수 있어야 한다. 그러기 위해 비행기란 프레임워크를 사용하고, 그 다음에 거기에 무기를 추가하거나, 몸체 전체를 보다 견고하게 다시 만들수도 있다.
    왜냐면 하늘을 난다는 기능 자체를 망치, 톱 등으로 만들기는 어렵고 오래 걸린다.
    그렇기 때문에 비행기 프레임워크를 사용하여 "하늘을 난다"는 도움을 받고거기에서 변경 가능한 부분을 내가 목적에 맞게 바꾸는게 훨씬 효율적이다.
    출처: http://penji.tistory.com/157

참고 자료

[참고링크] Spring Framework Reference Documentation
https://docs.spring.io/spring/docs/4.3.14.RELEASE/spring-framework-reference/htmlsingle/#overview

[참고링크] Java BCI(Byte Code Instrumentation) 간단 예제와 설명
http://deidesheim.tistory.com/entry/%EC%9E%90%EB%B0%94-BCIByte-Code-Instrumentation-%EA%B0%84%EB%8B%A8-%EC%98%88%EC%A0%9C%EC%99%80-%EC%84%A4%EB%AA%85

 

'부스트코스 웹 프로그래밍 > 3. 웹 앱 개발: 예약서비스 1' 카테고리의 다른 글

7. Spring Core - BE (3)  (0) 2019.08.03
7. Spring Core - BE (2)  (0) 2019.08.03
6. Tab UI 실습 - FE (2)  (0) 2019.08.03
6. Tab UI 실습 - FE (1)  (0) 2019.08.03
5. WEB UI - FE (5)  (0) 2019.08.03
Comments