Gidhub BE Developer

스프링 프레임워크(Spring FrameWork) 알아보기

2019-06-07
goodGid

스프링 프레임워크

  • 스프링 프레임워크는

  • 평범한 POJO(Plain Old Java Object)

  • 사용하면서도 많은 일을

  • 가능하도록 지원한다.


  • 또한 많은 디자인 패턴이 적용되어 배포되므로

  • 프레임워크를 사용하는 것 자체가

  • 디자인 패턴을 사용하는 것이다.

POJO란?
POJO란 말 그대로 평범한 옛날 자바 객체를 의미한다.
POJO를 좀 더 쉽게 이해하기 위해서 
반대로 Not POJO에 대해 알아보자.

대표적인 Not POJO 클래스는 Servlet 클래스이다.
Servlet 클래스는 우리 마음대로 만들 수 없으며,
반드시 Servlet에서 요구하는 규칙에 맞게 클래스를 만들어야 실행할 수 있다.
다음은 Servlet 클래스 작성 규칙이다.

1. javax.servlet, javax.servlet.http 패키지를 import해야 한다.
2. public 클래스로 선언되어야 한다.
3. Servlet, GenericServlet, HttpServlet 중 하나를 상속해야 한다.
4. 기본 생성자(Default Constructor)가 있어야 한다.
5. 생명주기에 해당하는 메소드를 재정의(Override)해야 한다.

스프링 프레임워크의 특징

  • 한줄 요약 : “IoC와 AOP를 지원하는 경량의 컨테이너 프레임워크”

  • 이 요약에 등장하는 각각의 의미를 풀어서 살펴보자.

경량(Lightweight)

  • 스프링은 여러 개의 모듈로 구성되어 있다.

  • 각 모듈은 하나 이상의 JAR 파일로 구성되어 있다.

  • 그리고 이 몇개의 JAR 파일만 있으면

  • 개발과 실행이 모두 가능하며

  • 크기 역시 몇 메가바이트를 넘지 않는다.

  • 따라서 스프링을 이용해서 만든 애플리케이션의 배포 역시 매우 빠르고 쉽다.


  • 스프링을 경량이라고 하는 두 번째 이유는

  • 스프링 프레임워크POJO형태의 객체를 사용하기 때문이다.

  • POJO를 관리하는 것은

  • 기존의 EJB 객체를 관리하는 것보다

  • 메모리를 적게 사용하기 때문에

  • 가볍고 빠를 수 밖에 없다.


제어의 역행(Inversion of Control)

  • 우리가 비즈니스 컴포넌트를 개발할 때

  • 신경 쓰는 것이 바로 낮은 결합도높은 응집도이다.


  • 스프링은 IoC를 통해

  • 애플리케이션을 구성하는 객체 간의 느슨한 결합

  • 낮은 결합도를 유지한다.


  • IoC가 적용되기 전에는

  • 애플리케이션 수행에 필요한

  • 객체의 생성 이나 객체와 객체 사이의 의존 관계

  • 개발자가 직접 자바 코드로 처리했었다.

  • 이런 상황에서는

  • 의존 관계에 있는 객체를 변경할 때

  • 반드시 자바 코드를 수정해야 한다.


  • 하지만 IoC가 적용되면

  • 객체 생성을 자바 코드로 직접 처리하는 것이 아니라

  • 컨테이너가 대신 처리한다.


  • 그리고 객체와 객체 사이의 의존관계 역시 컨테이너가 처리한다.

  • 결과적으로 소스에 의존 관계가 명시되지 않으므로

  • 결합도가 떨어져서 유지보수가 편리해진다.


관점지향(Aspect Oriented Porgramming, AOP)

  • 관점지향 프로그래밍은

  • 비즈니스 메소드를 개발할 때

  • 핵심 비즈니스 로직과

  • 각 비즈니스 메소드마다 반복해서 등장하는 공통 로직

  • 분리함으로써 응집도가 높게 개발할 수 있도록 지원한다.


  • 공통으로 사용하는 기능들을 외부의 독립된 클래스로 분리하고

  • 해당 기능을 프로그램 코드에 직접 명시하지 않고

  • 선언적으로 처리하여 적용하는 것이 AOP의 기본 개념이다.

  • 이렇게 되면 공통 기능을 분리하여 관리할 수 있으므로

  • 응집도가 높은 비즈니스 컴포넌트를 만들 수 있을 뿐만 아니라

  • 유지보수를 혁신적으로 향상 시킬 수 있다.


컨테이너(Container)

  • 컨테이너는 특정 객체의 생성과 관리를 담당하며

  • 객체 운용에 필요한 다양한 기능을 제공한다.

  • 컨테이너는 일반적으로 서버 안에 포함되어 배포 및 구동된다.

  • 대표적인 컨테이너로

  • Servlet 객체를 생성하고 관리하는 Servlet 컨테이너

  • EJB 객체를 생성하고 관리하는 EJB 컨테이너가 있다.


  • 그리고 Servlet 컨테이너는

  • 우리가 사용하는 톰캣 서버에도 포함되어 있다.

  • 애플리케이션 운용에 필요한 객체를 생성하고

  • 객체 간의 의존 관계를 관리한다는 점에서

  • 스프링도 일종의 컨테이너라고 할 수 있다.


Reference


Index