엔터프라이즈급 웹 어플리케이션을 제작하기 위한 솔루션. AOP, IoC, DI, 선언적 트랜잭션등 여러 기능을 제공하며,
이들의 모듈화된 부분들을 사용할 수 있도록 설계된 프레임워크.
여기서 프레임워크란, 라이브러리와는 확연한 차이가 있다.
강의에서는 라이브러리와 프레임워크를 원재료와 반제품으로 묘사하였다.
라이브러리 - 자주 사용하는 기능들을 함수 또는 기능으로 제작하여, 컴파일 타임에 링킹되는 소스코드(또는 기능)
프레임워크 - 자주 사용되는 기능이나 기본적인 실행환경 및 구조를 제공한다. (Spring에서는 DI,IoC,AOP etc..)
A 라이브러리 사용한 프로그램이 어떤 종류의 프로그램인지 알지 못하지만-->'원재료 비유',
B 프레임워크에서 동작하는 프로그램은 어떤 프로그램인지 알 수 있다. --> '반제품 비유' BCI : 실행시간에 .class 바이트코드 수정
AOP가 뭔데? __important
AOP_링크 - 자세한 AOP 설명은 여기에서 많이 참고했다.
Aspect Oriented Programming 직역하면 관점지향 프로그래밍인데, 이는 비즈니스 로직과 공통 모듈을 구분하여, 비즈니스 로직에 공통 모듈을 삽입하는 개발 방법이다.
대표적으로 메소드의 성능을 검사할 때, 비즈니스 로직에 System.currentTimeMills() 메서드를 삽입해 성능을 측정하는 방법이 있지만, AOP를 이용해 해당 로직 밖에서 성능 측정코드를 삽입하는 AOP방법이 사용된다.
Spring의 AOP에는 BCI(Btye Code Instrumentation) 이라는 기술이 핵심적으로 사용된다.
메시지란, 네트워크에서 컴퓨터간 일반 통신을 의미.
spring-messaging - 스프링4에서는 메시지 기반 어플리케이션을 작성하기 위해 Message, MessageChannel, MessageHadler, 메시지 매핑 어노테이션 제공
spring-jdbc, spring-tx(선언적 트랜잭션 관리), spring-orm(JPA,JDO,Hibernate), spring-oxm, spring-jms
spring-web - 멀티파트 파일 업로드, 서블릿 리스너 등의 웹 지향 통합 기능 제공
spring-webmvc - webservlet모듈, SpringMVC 및 REST 웹서비스 구현 포함
spring-websocket - 웹소켓 지원
XML, java_config 설정부분
Spring JDBC 부분
Model - View - Controller
서비스에서 저장되는 데이터, 주문목록, 회원정보, 상품목록 자체를 Model이라고 함.
최종적으로 말단 기기에서 유저에게 보여지는 화면. 또는 화면을 렌더링하는 주체를 View라고 함
사용자의 요청에 의해 Model에서 비즈니스 로직을 거쳐 View를 만들기 까지의 액션을 수행하는 주체를 Controller라고 함
웹 상에서 MVC 구조는 몇 단계의 발전을 이뤄왔다.
위 MVC 구조에서는 JSP Page 내에 html과 java 코드가 섞여있어 유지/보수가 힘들었다.
뷰를 담당하는 영역과 컨트롤을 담당하는 영역이 혼재되어 있어, 한사람이 본다면 문제가 없겠지만,
뷰와 컨트롤을 담당하는 사람이 분리된 프로젝트의 경우 상당한 불편함을 초래했다.
MVC2 구조에서는 요청을 servlet이 받아, Controll 작업을 수행해, 로직과 뷰를 분리하였다.
이는 다음과 같은 장점을 갖는다
위의 MVC2 발전형태에서는, Front Controller가 요청을 받고, 또 다른 Controller 클래스가 요청을 위임받는다.
이를 ControllerClass, HandlerClass라고 한다.
Spring은 model2 아키텍처로 구현되어 있음.
붉은색(보라색) 부분이 개발자가 구현하는 부분.
초록색은 가끔씩 개발자가 구현하는 부분.