IT/SpringFramework

스프링 DataAccess 공부 후 고찰(선언적 트랜잭션)

주현태 2019. 11. 24. 09:44

 토비의 스프링 vol2 Chapter2 DataAccess에서는 DAO클래스를 어떠한 식으로 작성하며, 추상화 기법을 이용하여 어떻게 DataAccess 기술을 사용하는지에 대해 나와있었다.

 

 특히, 생각을 많이한 부분은 트랜잭션에 대한 설명이었는데, 개발자들이 '선언적 트랜잭션을 사용하기 위해 스프링을 사용하는 개발자가 많다.'라는 글귀에서 많은 생각을 하게 되었다.

 

 '선언적 트랜잭션'. vol1 AOP를 공부할 때도 많이 나오는 단어인데, 과연 여기서 말하는 선억적이란 무슨 의미일까 하는 궁금증이 생겨서 네이버 국어사전을 살펴보았다.

 

선언적의 의미로는 두가지의 동음 이의어를 발견할 수 있었다.

1. 선언적(選: 가릴선, 言: 말씀 언, 的, 과녁적)

 개의 배타적 개념이나 빈사() 가운데에서 선택하게 되어 있는. 또는 그런 .

 

2. 선언적(宣: 베풀 선, 言: 말씀 언, 的, 과녁적)

어떤 방침이나 의견, 주장 따위를 외부에 표명하는. 또는 그런 .

 

그리고 선언적 트랜잭션의 정의에 대해 살펴보니 아래와 같은 기능을 제공하는 것을 선언적 트랜잭션이라고 한다.

 

선언적 트랜잭션(declarative transaction)

 Transaction Template와 달리 트랜잭션의 처리를 코드에서 직접적으로 수행하지 않고 설정파일이나 어노테이션을 이용하여 트랜잭션의 범위, 콜백을 적용하는 것

 

즉, 어떠한 메소드나 클래스에 트랜잭션을 적용할 것인지 설정파일을 통해 설정한다는 의미이므로 선언적(選: 가릴선, 言: 말씀 언, 的, 과녁적)의 의미가 맞지 않나 싶다.

 

 어쨌든, 스프링은 데이터 액세스 기술에대하여 선언적 트랜잭션을 제공한다. 토비의 스프링 vol1을 공부하면서 트랜잭션과 관련하여 두 가지 궁금증이 있었는데 vol2의 데이터 액세스기술을 공부하면서 내가 가장 궁금해 했던것에 대한 두가지 궁금증이 풀렸다. 그에대해 기술해 보고자 한다.

 

궁금증1) <tx:annotation-driven/>을 사용할 때 TransactionManager빈을 참조하는 프로퍼티의 명시는 어디에 있는가

 

 트랜잭션을 공부하면서 어노테이션을 이용한 트랜잭션 처리를 할 경우<tx:annotation-driven/> 이라는 네임스페이스를 사용할 경우 어떠한 TransactionManager빈을 사용할지 명시하지 않는데 대해 항상 궁금해 했었는데, TransactionManager빈의 id는 transactionManager로 관습적으로 적용하기 때문에 네임스페이스에 명시되지 않는다는 사실을 알았다.

 

궁금증2) 카카오 면접당시 기존의 AOP방식의 문제에 대해 설명해보라고 했는데 그 문제는 무엇인가

 

 스프링에서 선언적 트랜잭션을 생성하는 방법은 두가지인데, 프록시를 이용한 트랜잭션 이용방법과 바이트코드를 이용한 AspectJ방법이 있다. 기존의 스프링 AOP방식을 사용하여 트랜잭션을 생성할 경우 클래스내 메소드를 호출할경우 프록시를 거치지 않기때문에 트랜잭션이 만들어지지 않는다는 문제점이 있다고 한다. 그러나, AspectJ의 경우 프록시로 트랜잭션을 생성하는 것이 아닌 바이트코드에서 트랜잭션코드를 생성하기 때문에 이러한 문제가 없다.

 

 

Chapter2 공부를 마치며..

DataAccess챕터를 공부하면서 많은 생각을 해볼 수 있는 기회를 가졌다. 그러면서 JPA, Hibernate등에 대해 차 후 공부를 해야겠다는 숙제또한 남긴 Chapter였다.