티스토리 뷰

회사내에서 wms 개발을 하고있습니다.

어색한 jpa에 처음 겪은 msa환경에서 개발을 하니 문제가 많이 생기고 있습니다.

msa환경에 대하여 말을 하고자하는 것은 아니고

method에 @transactional을 걸고 트랜잭션처리를 하고있고

method 바로 안쪽에 try, catch를 wrapping해서 

"시간도 촉박하니 세세하게 예외처리를 하기는 무리다. 대략적으로만이라도 로그처리를 하자"

했는데 insert, update query가 method 호출 종료후 날리고있어 헛수고구나 생각을 했습니다.

 

spring은 AOP기능을 proxy개념으로 사용하고 있구나라고 알게되었습니다.

 

JDK proxy방식은 target method의 class가 interface를 가지고있을시 해당 interface를

사용하는 class를 만들어 위 아래로 전처리, 후처리하는 기능을 추가하여

예로들어 @transactional은 전처리 begin(), 후처리 commit()을 행하고

 

CG Lib방식은 interface를 가지고있지 않는 class의 method에 대하여 전처리, 후처리를 넣으려 할때

해당 class를 확장해 전처리 begin(), 후처리 commit()을 행합니다.

 

이렇게 interface를 가진다면 JDK Proxy, CG Lib 두가지 모두 사용가능하고

class만 가진다면 CGLib방식을 사용해야합니다. 대신 extends인 만큼 final키워드를 사용이 불가능하며

 

추가적으로 두방식 모두다 target의 method가 private이면은 안됩니다.

 

당연하게 사용, 확장하는 쪽에서 부모의 private method는 호출이 불가합니다.

 

고로 Proxy로 처리하는 기능들은 그 기능을 호출하는 쪽에서 wrapping을 해야 원하는 바를 얻을수 잇슴니다 ㅎ

 

JDK Proxy CG Lib
interface O class, interface O
private method X private method X
interface에서 명시된 기능만 interface 존재 X
final O final X
반응형

'끄적끄적' 카테고리의 다른 글

선인장과 바위  (0) 2022.12.17
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함