1. 참조 :
    1. Spring을 배워야할 이유 : https://seolin.tistory.com/119
    2. https://goddaehee.tistory.com/156
    3. https://khj93.tistory.com/entry/Spring-Spring-Framework
  2. 정의
    1. 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크
    2. 엔터프라이즈급 애플리케이션을 개발하기 위한 모든 기능을 종합적으로 제공하는 경량화된 솔루션
    3. 동적 웹 사이트를 개발하기 위한 여러가지 서비스 제공
    4. 대한민국 공공기관의 웹서비스 개발시 사용을 권장하고 있는 [전자정부 표준 프레임워크]의 기반 기술
  3. 특징
    1. Open Source : 제작자의 권리를 지키면서 원시 코드를 누구나 열람할 수 있도록 한 소프트웨어
    2. Framework : 설계 기본이 되는 뼈대나 구조
    3. 경량 컨테이너로서 자바 객체를 직접관리 : 각각의 객체 생성, 소멸과같은 라이프 사이클을 관리
    4. 제어 역행(IoC; Inversion of Cotrol)
      1. 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어 필요에 따라 스프링에서 사용자의 코드를 호출
      2. 제어의 흐름을 사용자가 컨틀로하지 않고 위임한 특별한 객체에 모든 것을 맞기는 것
    5. 의존성 주입(DI; Dependency Injection) : 각각의 계층이나 서비스들 간의 의존성이 존재할 경우 프레임워크가 서로 연결시켜줌
    6. 관점지향 프로그래밍(AOP; Aspect-Oriented Programming) : 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.
    7. 컨테이너(Container) 라고도 함
    8. 모델-뷰-컨트롤러(MVC; Model View Controller) 패턴
    9. 공통 부분의 소스 코딩이 용이하며 확장성이 매우 높음
  4. MVC(Model View Controller)
    1. Model
      1. 데이터 처리를 담당하는 부분
      2. Service 영역과 DAO 영역으로 나누어짐
      3. Service는 불필요하게 HTTP 통신을 하지 않고, request나 response와 같은 객체를 매개변수로 받아서는 안됨
      4. Service에서는 View에 종속적인 코드가 없어야 함
      5. View가 변경이 되더라도 Service는 재사용 가능해야 함
      6. Model에서는 View와 Controller의 어떠한 정보도 가지고 있으면 안됨
    2. View
      1. 사용자 인터페이스를 담당하며 사용자에게 보여지는 부분
      2. View는 Controller를 통해 모델에 데이터에 대한 시각화를 담당
      3. View는 자신이 요청을 보낼 Controller의 정보만 알고 있어야 함
      4. Model이 가지고 있는 정보를 저장해서는 안되고, Model과 Controller의 구성요소를 알아서도 안됨
    3. Controller
      1. View에서 받은 요청을 가공하여 Model(Service영역)에 전달
      2. Model로 부터 받은 결과를 View에 넘겨주는 역할
      3. 모든 요청 에러와 모델 에러를 처리
      4. Model과 View에 대한 정보를 알고 있어야 함
    4. MVC로 분리하면
      1. 소스의 목적이 명확, 유지보수가 용이
      2. Model의 Service영역은 자신을 어떠한 Controller가 호출하든 상관없이 정해진 매개변수만 받는다면 자신의 비즈니스 로직을 처리할 수 있어야함
      3. 즉, 모듈화를 통해 어디서든 재사용이 가능
      4. View의 정보가 달라지더라도 Controller에서 Service에 넘겨줄 매개변수 데이터 가공만 처리하면 되기 때문에 유지보수 비용을 절감할 수 있는 효과가 있다.
      5. Service영역의 재사용이 용이하기 때문에 확장성 부분에서도 큰 효과를 볼 수 있다.
  5. Spring Framework의 구조
    1. Spring Core
      1. 스프링 프레임워크의 근간 요소
      2. IoC(또는 DI) 기능을 지원하는 영역 담당
      3. BeanFactory를 기반으로 Bean클래스들을 제어할 수 있는 기능 지원
    2. Spring Context
      1. Spring Core 외의 추가적인 기능과 좀 더 쉬운 개발이 가능하도록 지원
      2. JNDI, EJB 등을 위한 Adapter들을 포함
    3. Spring DAO : Data Access Object
      1. 기존의 JDBC 기반의 DAO를 좀더 쉽고, 일관된 방법 지원
      2. 기존의 DAO보다 적은 코드와 쉬운방법으로 개발이 가능
    4. Spring ORM : Object Relation Mapping
      1. Hibernate, IBatis, JDO와의 결합 지원
    5. Spring AOP : Aspect Oriented Programming
      1. AOP Alliance 기반하에서 개발
    6. Spring Web
      1. 웹 애플리에키션 개발에 필요한 Web Application Context와 Multipart Request 등의 기능 지원
      2. Struts, WebWork와 같은 프레임워크의 통잡 지원
    7. Spring Web MVC
      1. Web UI Layer에 Model-View-Controller를 기원
      2. Struts, Webwork의 기능을 대체 가능
      3. Velocity, Excel, PDF와 같은 다양한 UI기술들을 사용하기 위한 API 제공
error: Content is protected !!