밤과라임
3k
2020-04-06 13:47:51
4
572

@Transactional 질문입니다.


 보통 @Transaction 어노테이션은 각 메소드마다 붙이는지, 따로 붙이는지 궁금합니다.

스프링5 트랜잭션 예제를보면 메소드가 있는 클래스에 Transactional 어노테이션을 붙이고 find가 있는곳에만

다시 @Transactional(readOnly=true)와 같이 하지만 

부트 2.2.4버전에는 @Transactional(readOnly=true) 와같은 옵션은 없고,

블로그 예제들을 봐도 해당 public메소드에 각각 붙이더군요.

무엇이 일반적인지 궁금합니다.


두번째로 find나 save와같이 하나만 찾거나 저장할때도 @transaction annotation을 적용하는지 궁금합니다.

제 생각으로는 하나단계면 필요하지 않을 것 같은데 이럴때도 붙이는지 알고싶습니다.



0
  • 답변 4

  • Dierslair
    5k
    2020-04-06 14:07:23

    인서트 모디파이 메서드만 걸어요 클래스 단위로 걸면 런타임에 프록시 위빙이 시간이 오래걸려서 겁나 느립니다;

  • 밤과라임
    3k
    2020-04-06 17:09:42

    @John Suhr

    답변 감사합니다.

    그럼셀렉트하는 메소드에는 안거나요??

    예제들은 셀렉트에도 많이 걸려있던데 의미 없다 생각해도될까요??

  • kmksk
    1k
    2020-04-06 17:53:42

    @Transactional(readOnly=true) 는  DB 를 이중화 해서 write, read Datasource 분리 할때 이런 패턴을 주로 쓰는데


    일반적으로 쓰고 안쓰고 결정하는 문제가 아닙니다. insert 할때 쓰고 select 할때 안쓰고 하는 문제가 아님..


    비즈니스 로직에 따라서 써야할때 쓰고 쓰지 말아야할때 안씁니다. 안쓴다고 저장안되고 업데이트 안되는 그런 옵션이 아님.


    스프링 기능이 아니라 DBMS 기능입니다. 쉬운 내용이 아니니 위키 주소를 첨부합니다. 데이터베이스 관련 서적이나 관련 정보를 공부하시기 바랍니다.

    https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98

  • 밤과라임
    3k
    2020-04-20 07:08:41

    @kmksk 

    감사합니다. 몰랐던걸 또 알게되었네요.

  • 로그인을 하시면 답변을 등록할 수 있습니다.