<Spring이 해주는 일>
AOP(Aspect Oriented Programming)에 따른 트랜잭션 관리 가능 (AOP : annotation만 잘 선언해놓으면 됨. )
의존성, 결합력은 낮추고 응집력은 높이기 가능
=> 많은 일들을 해주는 Enterprise Framework
docs.spring.io/spring-framework/docs/4.3.29.RELEASE/spring-framework-reference/htmlsingle/
스프링은 IoC(Inversion of Control) container로서 역할 (= DI Container)
www.egovframe.go.kr/wiki/doku.php?id=egovframework:rtea3.9
egovframework:rtea3.9 [eGovFrame]
www.egovframe.go.kr
EJB: 비싼 서버를 만들어 파는 벤더들이 만들었음 (oracle, IBM, sun) 그래서 정리 안하고 본인들이 원하는 스펙을 다 집어 넣어버림.
그 결과 서버 돌리면 이안에 든거 다 메모리에 올려야하고, 엄청 무거워짐
<EJB의 대안: Spring>
<-> 스프링은 가볍다 (모듈화가 잘 돼있고, jar파일이 다 분리되어있어 내가 필요한 모듈만 갖다 쓰기 가능(조립해서 쓰면 된다!!))
- Spring은 오픈소스 프레임워크
- Spring은 pojo를 기반으로 해 걍 가져다가 아무데서나 쓸 수 있음
의존 관계 형성해서 flow 만들어내는 과정을 프레임워크가 관리 가능
POJO 기반으로 빈에 대한 Lifecycle 관리 (컨테이너 안에 있는 객체들은 제어권이 컨테이너에 있음)
=(DI container에 의해 관리되는 모든 객체: bean)
: 이 bean들을 inject(주입)받아 사용한다.
- Spring은 Object Relation Mapping 가능. (myBatis랑 연동해야겠졍?)
- 3rd 파티 제품과 연동 쉬움. (왜냐면 Spring은 레고 같기 때문에)
3rd party 제품???
e.g. 내가 myBatis 썼는데 반복되는 코드가있고, 그거 쉽게 쓸수있는 프레임워크 만들었음.=> 3rd 파티 제품.
Spring이 가능한 것 중
OXM( Object Xml Mapper) : mars, unmarshalling 지원.
JMS(Java Message System): Java 로 push message 보내기
Bean: container안에서 관리되고 있는 객체
<결합력 최상의 코드에서 패턴 하나하나씩 적용해보기>
1. new 키워드 직접 사용. !!결합력 최상(Bad)!!
dao와 의존관계 형성되어있음.
dao가 어떻게 구현됐는지 상관없이 ServiceImpl 작성 가능하긴 함
View -> service -> Dao 순으로 의존하는 플로우임 => 객체지향 프로그래밍 방법론
OOP loves 의존관계
2. Factory Object Pattern 적용하기
ISampleDAO dao = new DAOFactory().getSampleDAO();
=> dao와 service간의 결합력 낮아짐. DaoFactory만 수정하면 됨. 하지만 !!! 팩토리 , 팩토리 안에서 생성되는 객체 간의 결합력 발생. + 팩토리 객체와의 결합력 잔존
3. DI 구조를 바탕으로 한 Strategy Pattern
sampleView 가 다 갖게됨
ISampleDAO dao;
주의할 점: Dependency Injector가 꼭 필요하다. 이 전략 주입자가 모든 결합력을 떠안음 (단점)
setter, 생성자를 통해 dependency를 주입받을수있음
(View 안에 setService나 Service를 파라미터로 받는 생성자가 있어야한다는거)
4. DI Container구조.
Dependency Injector가 app 밖에 있게 된다. container를 사용하기 위해 pom.xml을 수정해서 spring에 dependency 추가했음.
이제 spring만 객체 생성이 가능하게 됨. app에서는 그 생성객체를 주입받아 쓰기만 할거임(= dependency injection)
<순서>
1. spring에 "니가 관리할 객체는 이런것들이야~~" 알려줘야함 (spring의 configuration 파일 필요)
'WEB Application' 카테고리의 다른 글
JAVA 누적 방문자 수 체크 (0) | 2020.11.18 |
---|---|
자바 Tiles 프레임워크 사용법과 특징 (0) | 2020.10.12 |
Front Controller Pattern 복습, CKEditor 파일 올리기 (0) | 2020.10.05 |
TIL (Command 패턴, jQuery 폼 플러그인 ) (0) | 2020.10.03 |
TIL 웹 프로그래밍 (Filter, Wrapper, JAVA 파일 업로드) (1) | 2020.09.26 |