개나소나고생
5k
2019-04-05 23:18:17
4
243

Springboot 트랜잭션 설정 문의


안녕하세요. 늦은 불금에 질문하나 올려봅니다.

Springboot + 저장 프로시저 환경으로 웹 사이트 기능 구현 진행중에 있습니다.

제가 Springboot지식은 부족하다보니 헷갈리는 영역이 생기네요.

프로시저로 연동을 진행하다보니 비지니스 로직 및 트랜잭션 관리는 및 프로시저를 통해 진행합니다.

따라서 스프링부트환경에서 트랜잭션 설정 부분을 제외해도 무방한것이 아닌라는 생각이 스쳐 지나갑니다.

요약을 하면 프로시저 호출 환경에서도 트랜잭션을 스프링 소스 영역에서 관리하는게 맞는가 라는 이슈입니다.


0
0
  • 답변 4

  • 초무쿤
    2k
    2019-04-05 23:54:44

    프로시저 호출 후 commit 또는 rollback은 해줘야 하니

    프로시저를 사용하더라도 transaction manager는 필요할것입니다.

    (설마 프로시져 않에서 commit을 하지는 않으실테니요.

    만약 프로시져안에서 commit을 하신다면

    프로시저에서는 성공해서 commit하더라도 어플리케이션 단에서 오류 발생하는 경우 트랜잭션 보장이 않될겁니다.)




    0
  • 개나소나고생
    5k
    2019-04-06 00:09:45

    초무쿤//답변 감사 드립니다. 우선 프로시저 내부에서 Commit 또는 Rollback 을 진행합니다.흠..어차피 어플리케이션 영역에서 오류발생한 경우 굳이 롤백이 필요한지 의문이네요..

    0
  • 초무쿤
    2k
    2019-04-06 00:15:11 작성 2019-04-06 00:18:00 수정됨

    @개나소나고생

    프로세스 자체를 모두 프로시져로 처리하신다면 상관없을수도 있는데요.

    예를 들어서

    1. 프로시져#1 호출해서 데이터 처리 ==> 성공

    2. REST API 호출 처리 ==> 성공

    3. 프로시져#2 호출해서 데이터 처리 ==> 오류 

    시 

    해당 Controller 호출은 오류처리 되는 경우

    프로시져#1은 commit , 프로시져#2는 rollback 되므로 데이터 정합성은 깨지겠죠.

    (프로시져#1과 #2가 전혀 정합성과 관련없는 비지니스라면 뭐 상관없을수도 있습니다만. 특별한 케이스일 겁니다.)

    보통 프로시져나 오라클 패키지 같은 기술 기반으로 어플리케이션 작성하더라도 commit / rollback은 

    caller에서 처리할수 있도록 특별한 케이스 말고는 callee 내부에서 commit/rollback은 처리하지 않는 것이 

    보통이더군요.

    하나의 트랜잭션은 하나의 프로시져로 구성된다는 대원칙을 세워서 거기 위반되지만 않는다면 상관은 없겠지만 그런 경우가 별루 없어서요.


    0
  • 개나소나고생
    5k
    2019-04-06 00:23:28

    초무쿤//와 완전 감사합니다. 좀 더 이해하는데 수월해졌습니다.ㅎㅎ 늦었지만 좋은 밤 되시고 즐거운 주말 보내시기 바랍니다.

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