[Spring] Spring Framework 기본 개념 정리

2021. 2. 19. 10:58개발 관련

Spring Framework란 ? 

 

java platform을 위한 오픈소스 애플리케이션 프레임워크로서 enterprise급 애플리케이션을 개발하기 위한 모든 기능을 종합적으로 제공하는 경량화된 솔루션

 

* 엔터프라이즈급 애플리케이션 : 기업을 대상으로 하는 개발. 대규모 데이터 처리와 트랜잭션이 동시에 여러 사용자로부터 행해지는 매우 큰 규모의 환경을 가지는 애플리케이션

 

Spring Core

= Spring Container, 이 중 핵심은 Bean Factory Container : IOC 패턴을 적용하여 객체 구성부터 의존성 처리까지 모든 일을 처리

 

Spring Context

Spring Framework의 context 정보들을 제공하는 설정 파일. JNCI, EJB, Validation, Scheduling, Internalization 등 enterprise 서비스를 포함

 

Spring AOP

AOP를 적용할 수 있게 도와주는 Module

 

Spring DAO

Data Access Object의 약자로 DB data에 접근하는 객체, Spring JDBC DAO는 추상 레이어를 지원하여 코딩, 예외처리 부분을 간편화시켜준다.

 

Spring ORM

Object relational mapping의 약자, 객체와의 관계설정을 간단하게 할 수 있게 해준다. Ibatis, Hibernate, JDO 등 인기있는 객체 관계형 도구를 사용할 수 있도록 Spring에서 지원해준다.

 

Spring Web

Web context module은 Application module에 내장되어있고, Web기반의 응용프로그램에 대한 Context를 제공하여 일반적인 Web Application 개발에 필요한 기본적인 기능 지원

 

Spring MVC

Module2 구조로 Application을 만들 수 있도록 지원. 

 

특징

1. IOC기반

: Inversion of Control, 제어의 역전 기반

  • 제어의 흐름을 사용자가 컨트롤 하지 않고 위임한 특별한 객체에 객체의 생성부터 생명 주기 등 모든 객체에 대한 제어권이 넘어간 것

  • DL ( Dependency Lookup ) : 의존성 검색

    • 컨테이너에서 객체들을 관리하기 위해 별도의 저장소에 빈을 저장하는데, 개발자들이 컨테이너에서 제공하는 API를 이용하여 사용할 빈을 검색하는 방법

  • DI ( Dependenccy Injection ) : 의존성 주입

    • 객체가 서로 의존하는 관계가 되도록 의존성을 주입하는 것으로, 하라의 객체가 다른 객체를 사용하고 있음을 의미.

    • IOC에서 DI는 각 클래스 사이에 필요로 하는 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결해는 것

 

2. POJO ( Plain Old Java Object ) 지원

: 평범한 자바 오브젝트

 

 

  • 이전 EJB ( Enterprise JavaBeans )는 확장 가능, 재사용 가능한 로직을 개발하기 위해 사용되었는데, 한가지 기능을 위해 불필요한 복잡한 로직이 과도하게 들어가는 단점이 존재 -> POJO기반의 프레임워크 조명받음

  • POJO는 getter/setter를 가진 단순 자바 오브젝트로 정의

  • + : 의존성이 없음 -> +유연성 ( 유지보수 편리 ), 간결한 코드, 테스트 용이, 모듈화

 

 

3. AOP ( Aspect Oriented Programming )

: 관점 지향 프로그래밍

  • OOP ( Object Oriented Programming ) 가 관심사(aspect)가 같은 데이터를 한곳에 모아 분리하고 낮은 결합도를 가지게 하여 독립적인 객체를 구현하고 유연한 모듈로 캡슐화를 하는 것 -> 중복된 코드 多, -가독성, -확장성, -유지보수성

  • AOP는 핵심기능과 공통기능 분리.

    • 중복되는 코드 제거, 유지보수 효율적, 재활용성 극대화

 

 

 

4. MVC 패턴

 : Model, View, Controller 구조로 사용자 인터페이스와 비즈니스 로직을 분리하여 개발

 

 

  • Model : 부분은 Service영역과 DAO영역으로 나누어지게 됨 ( Model2 )
    • Service 부분은 불필요하게 HTTP통신을 하지 않아야하고 response나 request와 같은 객체를 매개변수로 받아서는 안된다.
    • Model부분의 Service는 view에 종속적인 코드가 없어야한다. View부분이 변경되더라도 Service부분은 그대로 재사용 가능
    • Model에서는 View와 Controller의 어떠한 정보도 가지고 있어서는 안된다.
  • View : 사용자 interface를 담당, 시각화 담당, 자신이 요청을 보낼 controller의 정보만 알고 있어야한다.

  • Controller : View에서 받은 요청을 가공하여 Model의 Service 영역에 이를 전달, Model로 부터 받은 결과를 View로 넘겨줌, 요청 에러와 모델 에러 처리, View와 Model의 정보를 알고있어야한다.

  • + 유지보수 용이 ( 소스를 분리하였기 때문 - Controller에서 매개변수의 데이터 가공만 처리하면 되기 때문 ) , + 모듈화 ( 재사용 가능 ), + 확장성 ( Service 영역 재사용 용이 )

 

 

 


참조 : 

khj93.tistory.com/entry/Spring-Spring-Framework%EB%9E%80-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-%ED%95%B5%EC%8B%AC-%EC%A0%95%EB%A6%AC