My footsteps

AOP / 프록시 / 전파옵션과 고립화 본문

국비수업/수업정리

AOP / 프록시 / 전파옵션과 고립화

밀김 2023. 7. 3. 15:07
728x90

 

 

 

 

 

 

 

 

 

 

 

 

- EJB (엔터프라이즈 자바 빈) : 함수를 두개 호출하고 트랜젝션이 열리고 트랜젝션이 끊어지고 반복해서 그것들을 묶어서 쓰려고 나온것이다 

 

 

- EJB는 실행되고 나서 DAO를 얹어서 쓴다

 

 

- EJB는 서버다 이거 대안으로 나온게 스프링임!

 

 

- 원래는 다 나눠서 썼는데 스프링이 그걸 하나로 통합시켰다

 

 

- 원자성이 담보된다

 

 

 

 

- AOP (트랜젝션관리 방법론)

https://youtu.be/Hm0w_9ngDpM

 

 

 

 

 

- 고객은 코드를 요구하지 않는다

 

 

 

 

 

 

 

 

 

 

 

- AOP : 방법론

오른쪽의 하드코드를 떼서 가운데서 연결하는식으로 쓴다. 오른쪽에 직접 코드를 때려박지 말자 XX

 

 

 

 

- 자기가 가짜면서 진짜를 흉내내는것 프록시(?)

 

 

 

- 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를 쓰면 된다

 

 

 

 

슈퍼유저 sudo 사용자 바꾸기 switch user => su

 

 

 

 

 

 

 

 

 

 

728x90

'국비수업 > 수업정리' 카테고리의 다른 글

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