https://www.youtube.com/watch?v=XtXHIDnzS9c&list=PLq8wAnVUcTFUHYMzoV2RoFoY2HDTKru3T&index=2&t=1s
Spring이 support하는 것 중에서 중요한 것을 꼽는다면
DI, TM 이 중요하다. 특히 connection이 끊겼을 때 JDBC만으로 관리가 힘든 것을
Spring은 단순히 라이브러리 사용만을 통해 지원한다.
JavaEE vs Spring
1. MVC => DI => 느슨한 결합, Interface
2. transaction => AOP
3. 인증과 권한 => Servlet filter
Interface
서로상관없는 객체들이 특정 service를 사용하려 할 때, 그 service가 요구하는
기능을 구현 및 재정의 한 후 사용하려는 것.
이 때 service가 요구하는 기능이 interface. 인터페이스는 반드시 함수의 몸체가 비어야 하고, 이를 구현하는 쪽에서 override 할 것.
(일반적인 상속과 좀 달라 혼동되서 찾아봄)
Transaction Management
(출처 : https://www.tutorialspoint.com/spring/spring_transaction_management.htm)
먼저 Transaction이란, 작업이 한 번 작동할 때마다 움직이는 처리단위를 뜻한다. 총 네 개의 키워드가 있다.
Atomicity : 전체 작업이 모두 성공하거나, 모두 실패해야만 한다.
Consistency : data 일관성을 위해 primary key가 table에 존재해야 한다.
Isolation : transaction processing 시, 동일한 시간내에 중복된 data set이 작업될 수 있다. data corruption을 막기 위해 각 transaction은 고립돼야 한다.
Durability : transaction이 되면, 그 결과는 지워져선 안된다. 그 이유가 system failure라도.
이런 transaction 방식에는 크게 Programmatic과 Declarative가 있다. 스프링은 양쪽 모두를 지원한다.
Programmatic : programming 방식으로 당신이 직접 제어한다. 매우 유연하나, 유지가 어렵다.
Declarative : 당신은 annotation을 통한 제어 혹은 XML파일 설정 기반으로한 제어만 수행하면 된다.
Declarative방식은 조금 덜 유연하나, Spring AOP를 통해 모듈화과 더 쉽다는 장점이 있다.