My footsteps
AOP / 프록시 / 전파옵션과 고립화 본문
- EJB (엔터프라이즈 자바 빈) : 함수를 두개 호출하고 트랜젝션이 열리고 트랜젝션이 끊어지고 반복해서 그것들을 묶어서 쓰려고 나온것이다
- EJB는 실행되고 나서 DAO를 얹어서 쓴다
- EJB는 서버다 이거 대안으로 나온게 스프링임!
- 원래는 다 나눠서 썼는데 스프링이 그걸 하나로 통합시켰다
- 원자성이 담보된다
- AOP (트랜젝션관리 방법론)
- 고객은 코드를 요구하지 않는다
- AOP : 방법론
- 자기가 가짜면서 진짜를 흉내내는것 프록시(?)
- aop를 만들때 프록시를 사용한다
- invoke는 실제 왕자님을 실행시켜줌
- 프록시는 필터랑 비슷한데 필터보다 범용성을 갖고 있다
package kr.co.rland.web.api.aop;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Program {
//AOP
public static void main(String[] args) {
Calculator calc = new NCalculator();
//가짜가 진짜 흉내..냄
Calculator proxy = (Calculator)Proxy.newProxyInstance(
NCalculator.class.getClassLoader(),
new Class[] {Calculator.class},
new InvocationHandler(){
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
long start = System.currentTimeMillis();
SimpleDateFormat dayTime = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
String strDate = dayTime.format(new Date(start));
System.out.println(strDate);
//가짜호출했을때 얘가 사용되고 진짜를 호출하면 얘가 빠짐
Object result = method.invoke(calc, args);
//완댜님호출
long end = System.currentTimeMillis();
String message = (end - start) + "ms가 사용됨";
System.out.println(message);
return result;
}
});
//구현하고 있는 인터페이스가 하나가 아닐수 있어서 배열로 줌
int result = proxy.add(3, 5);
System.out.printf("result is %d\n",result);
}
}
- 크로스 컨선 : 곁다리 업무
- aop는 코드 결합했다가 뺐다가 하는것을 요긴하게 해줌
- 전파옵션 / 고립도
- never : 트랜젝션 안쓰는애 / mandatory : 트랜잭션 쓰는애
https://deveric.tistory.com/86
[Spring] 트랜잭션의 전파 설정별 동작
트랜잭션의 전파 설정이란 Spring에서 사용하는 어노테이션 '@Transactional'은 해당 메서드를 하나의 트랜잭션 안에서 진행할 수 있도록 만들어주는 역할을 합니다. 이때 트랜잭션 내부에서 트랜잭
deveric.tistory.com
< 고립화 >
- 사용자의 요청이 오면 코드가 병렬이 됨
- 고립도 : 레코드나 테이블을 잠궈놓고쓸꺼냐, 열어놓고 쓸꺼냐..
- 근데 안잠궈놓고 쓰면 성능이 좋아짐 비록 데이터 나오는건 좀 이상할수 있어도...
- 고립도를 켜놓으면 줄서는 애들이 많아져서 성능이 떨어질수 있음
- 일반적으로 리피터블 리드를 사용함
- 팬텀 또는 페노미넘 이라고도 한다
- 옵션을 적절하게 열어주면 성능이 좋아진다
- 리피터블리드는 row를 막아버리고, 시리얼 어쩌구는 테이블 자체를 막는다
- 아이솔레이션 : 고립도의 정도
- 일반유저로 있다가 관리자 권한으로 바꾸려면 reboot를 쓰면 된다
'국비수업 > 수업정리' 카테고리의 다른 글
Node.js (0) | 2023.07.05 |
---|---|
Vue.js / 1 (0) | 2023.07.04 |
스프링 예외처리 + 유닉스 (0) | 2023.06.30 |
RestController / 11 (0) | 2023.06.29 |
RestController / 10 (0) | 2023.06.28 |