

프레임워크 : 재료까지 준비된 밀키트 느낌
라이브러리는 : 재료는 내가 준비해야 하는 레시피 느낌
제어의 역전개념이 적용된 대표적인 기술 : 객체를 따로 만들어주지 않음
→ 개발자가 신경쓸 게 많이 없어진다
servlet, jdbc 등으로 여러 단계로 왔다갔다 한 게 많이 없어짐
라이브러리가 많이 뭉치면 프레임워크 느낌도 나옴
A 라이브러리 + B 라이브러리 이거 2개 잘 연결하면 괜찮겠는데? 프레임워크가 되기도 함

라이브러리와 프레임워크의 차이는 제어 흐름에 대한 주도성이 누구에게 / 어디에게 있는가에 있다.
즉, 애플리케이션의 Flow(흐름)을 누가 쥐고 있느냐에 달려있다.
💡 프레임워크(ex. 스프링)는 범위가 정해져 있음
→ 스프링의 경우, 자바에 국한되어 있음

자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크로 간단하게 스프링(Spring)이라고도 불린다.
동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있으며 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준 프레임워크(Spring MVC Project 기반 프레임워크)의 기반 기술로서 쓰이고 있다.
동적 웹 사이트를 위한 여러 가지 서비스 제공
MVC 기반으로 사용하고 있다

특히 IOC, DI, POJO 기반 프레임워크, Spring AOP 중요하다
1. IOC(제어 반전) :
원래는 객체 만들려면 개발자가 객체를 만들었는데
제어반전!! 프레임워크가 직접 관리한다!
개발자가 new로 만들지 않는다!!
프레임워크가 new 객체()로 생성한다
개발자가 객체 만들 때마다 heap 메모리를 사용했는데 → 관리가 어려움
근데 프레임워크는 컴퓨터이니 관리까지 알아서 메모리 관리를 해줌
| 개발자 | 프레임워크 |
|---|---|
| Object | new 객체() |
| Instance | Bean |
그럼 개발자가 만든 객체랑 프레임워크가 만든 객체를 어떻게 구분?
❗프레임워크 객체 이름을 Bean이라고 부름❗
Object, Instance, Bean 모두 다 객체인데 이름을 다르게 해서 구분해준 것
- DI
개발자
@(어노테이션)여기로 주입해줘!
근데 new를 안 쓰잖아!
@Service service;
service라는 주소에 넣어줘
주입 : 프레임워크에 의존해서 주입을 받는다
= DI(의존성 주입)
그래서 IOC랑 DI는 서로 짝꿍이다
치킨 먹고 싶으면 치킨을 만드는게 아니라 배달을 통해 시키는 것처럼 배달주소 적는게 @
- POJO 기반 프레임워크
서블릿을 쓸 때 extends Https를 썼는데 이거는 의존도가 높은 것
근데 이젠 더이상 이렇게 쓰지 않기에 코드길이 감소, 유지보수성 증가, 기존 Java API, 라이브러리 지원에 용이
- Spring AOP
관점지향프로그래밍
요청
Controller
Service
DAO
DB
이 과정에서 주로 Service에 트랜잭션 개입한다

- PSA : 다른 여러 모듈을 사용함에 있어 별도 추상화 레이어를 제공한다
구체적이지 않다, 모두 다 가능하다
@ : Controller 어노테이션도 있고, Service 어노테이션 등 굉장히 많다
스프링에서 쉽게 쓸 수 있게 추상화된 레이어를 제공한다
다른 모듈들을 알아서 쓸 수 있게 제어해준다

JDBC나 데이터베이스에 연결하는 모듈로, Data 트랜잭션에 해당하는 기능을 담당하여 영속성 프레임워크의 연결을 담당한다.
Spring Framework에서 Servlet등의 웹 구현 기술과의 연결점을 Spring MVC 구성으로 지원하기 위해 제공되는 모듈 계층이다.
또한 스프링의 리모팅 기술로 RMI, Hessian, Burlap, JAX-WS, HTTP 호출자 그리고 REST API 모듈을 제공한다.
Spring에서 각 흐름 간 공통된 코드를 한 쪽으로 빼내어 필요한 시점에 해당 코드를 첨부하게 하기 위해 지원하는 계층으로, 별도의 proxy를 두어 동작한다. 이를 통해 객체간의 결합도를 낮출 수 있다.
Spring의 핵심 부분이라고 할 수 있으며 모든 스프링 관련 모듈은 이 Core Container 기반으로 구축된다.
Spring의 근간이 되는 IOC 기능을 지원하는 영역을 담당하고 있다.
BeanFactory를 기반으로 Bean 클래스들을 제어할 수 있는 기능을 지원한다.




Spring Framework 에서는 클라이언트의 화면을 표현하기 위한 View와 서비스를 수행하기 위한 개발 로직 부분을 나누는 MVC2 패턴을 지원한다.
또한 Model, View, Controller 사이의 의존 관계를 DI 컨테이너에서 관리하여 유연한 웹 애플리케이션을 쉽게 구현 및 개발할 수 있다.

Handler Mapping, View REsolver, View 가 추가되었지만 기본적인 흐름은 동일하다
💡 Dispatcher Servlet(발송자 서블릿) : 요청을 컨트롤러로 전달 + 응답
중앙처리 느낌인데, 우리가 만들지 않고 spring이 만들어준다
Handler Mapping(매핑 처리) : 어떤 요청을 어떤 클래스/메소드로 연결할 지 제어하는 객체
View Resolver(뷰 해결사) : Controller에서 반환된 문자열(”common/main”)
앞, 뒤에 경로(/WEB-INF/views/), 확장자(.jsp)를 붙여 jsp 파일의 경로를 지정한 후 forward(요청 위임)을 하는 객체



