Framework
- IOC ( 제어 역전 )
제어의 흐름이 어디에 위치한가에 따라 프레임워크와 라이브러리가 차이 난다
- 개발 시간을 줄일수 있고
- 정형화되어 있어 일정 수준 이상의 품질을 기대할 수 있음
- 유지 보수가 쉬움
Library
- .jar
- new [라이브러리 이름]으로 생성해 사용함
영속성 Framework
- DB
- 데이터의 저장 , 조회 ,변경,삭제를 다루는 클래스 및 설정 파일을 라이브러리화 하여 구현한 것
MVC ? Boot 차이
Spring MVC
- 설정 처음부터 다함
- 자체 서버 X
- 일반웹 (서블릿)
Spring Boot
- 자동 설정
- 톰캣 내장
- API ( 데이터만 응답(AJAX) )
- 보통 화면단에서 데이터를 처리한다(Vue , React , Augler)으로 화면단 작성
Spring Framework
자바로 동적웹 개발을 위한 여러 기능 제공
IOC (Inversion of Control) [제어 역전]
- DI와 연괄성을 가짐
- 객체의 생명주기를 프레임워크가 책임짐.
- 객체를 만드는게 아닌 프레임워크가 만든 Bean(객체)를 호출해 사용한다.
- Bean ( 프레임워크가 만들어낸 객체 )
- 프로그램 개발중 주도권이 필요한 순간에 제어권이 필요한 순간이 있다
프레임워크가 생성한 객체를 @으로 의존성 주입 요청을 한다
DI
- IOC와 연관성을 가짐
POJO기반 프레임 워크
Spring AOP
POJO
- 순수하고 오래된 자바 객체( ? )
- 라이브러리의 내용을 상속받지 않고 자바의 기본적인 기능만 가진 순수한 자바객체를 의미한다.( Extends HttpServlet 등 외부요소 상속 X )
AOP ( Aspect Oriented Programming )
- 원래 요청 <-> Controller <-> service <-> DAO <-> DB
- AOP는 이 중간 중간에 관여 할 수 있다 ( DB <-> DAO )에서 주로 사용
Spring JDBC
- Mybatis나 Hibernate등의 데이터 베이스를 처리하는 영속성 프레임워크와 연결 할 수 있는 인터페이스
Spring MVC
- MVC디자인 패턴을 통해서 Model , View, Controller 사이의 의존 관계를 DI 컨테이너에서 관리해 개발자가 아니라 서버가 객체를 관리하는 웹 어플리케이션을 구축 할 수 있다
PSA( Portable Service Abstraction )
- 여러 모듈을 사용함에 있어 별도의 추상화 레이어를 제공한다
예를 들어 JPA를 사용할때에는 Spring JPA 사용하여 추상화 하여 실제 구현할 때 Hibernate 혹은 EclipsLink를 사용하든 개발자는 모듈에 의존 없이 프로그램에 집중할 수 있다.
Spring Container
- Data Access
- JDBC나 DB에 연결하는 모듈 영속성 프레임워크 연결을 담담
- Web 계층 (MVC / Remoting )
- Spring Framework에서 Servlet등의 웹 구현 시굴과으 연결점을 Spring MVC 구성으로 지원하기 위해 제공되는 모듈 계층
- remoting 기술로 RMI , Hessian , Burlap , JAX-ws ,HTTP 호출자 REST API를 지원 ( 다 뭔지 모름)
- AOP계층
- 흐름간 공통된 코드를 한쪽으로 빼내어 필요한 시점에 해당 코드를 첨부하게 하기 위해 지원하는 계층 별도의 Proxy가 존재
객체간의 결합도를 낮출 수 있다.
- Core Container
- Spring 핵심 부분이라고 할 수 있으면 모픈 스프링 관련 모듈은 이 컨테이너를 기반으로 구축된다 Spring의 기반이 되는 IOC(제어역전)담당하고 있다.
BeanFactory를 기반으로 Bean 클래스르를 제어할 수 있다
Spring MVC 요청 처리 과정
Spring Web
Spring Framework에서는 클라이언트의 화면을 표현하기 위한 View 서비스를 수행하기 위한 개발 로직을 나누는 MVC2 패턴을 지원함
M - V - C 사이의 의존 관계를 DI 컨테이너에서 관리하여 유연한 웹 애플리케이션을 쉽게 구현 및 개발 할 수 있다.
요청 처리 과정
DispatcherServler
- 클라이언트의 요청을 전달 받고 요청에 맞는 컨트롤러가 리턴한 결과 값을 View에 전달하여 알맞은 응답(Response)을 생성
HandlertMapping
Controller
- 클라이언트의 요청을 수행 처리 후 결과를 다시 DispatcherServlet으로 반화(Retrun)
ModelAndView
- 컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담음
ViewResolver
- 컨트롤러의 처리 결과를 생성할 View를 결정
View
- 컨트롤러의 처리 결과 화면을 생성 JSP / Velocity 템플릿 파일등을 View로 활용
Spring 프로젝트 기본 구조
Spring 폴더구조
main 폴더
webapp폴더