개발자

트랜잭션을 붙여야하는 로직인지 궁금합니다..

2023년 11월 27일조회 354

안녕하세요. 자바 스프링을 개발하고 있는 개발자입니다. 현재 거래처자동등록 로직을 구현하고있습니다. 거래처자동등록버튼을 누르면 a,b,c 테이블의 거래처코드 칼럼을 모두 Update 해줘야합니다. 이때 3개의 update 를 수행하는 서비스단에 transactional 을 붙여줘야할지 판단이 안섭니다. 데이터 정합성이 크게 중요한 부분이 아니라고 판단되서 오류발생시 롤백처리를 해야할 필요가 없을것같아 transactional 어노테이션을 붙이지 않았습니다. fm 대로 하려면 붙여야하겠지만 트랜잭션이 아무래도 테이블 락을 초래하는 단점도 있어서 이런 경우에 어떻게 해야할지 조언을 구하고 싶습니다. 감사합니다.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

인기 답변

김대현님의 프로필 사진

질문에 답이 나와있네요. "데이터 정합성이 크게 중요한 부분이 아니라고 판단되서"라는 구문이 있네요. 정합성이 중요하지 않으면 안해도 되겠죠. a,b는 업데이트 되고 c는 안되도 상관없다 이 말씀이잖아요? 정합성이 아무래도 상관없고, 퍼포먼스에 부담이 있는 상황이라면 가끔 트랜잭션을 묶어야 할 곳을 의도적으로 안 묶기도 합니다만, 권장할 만한 일은 아니죠. 정합성이 아무래도 상관없다하더라도, 예외적인 경우가 아니라면 묶는 게 맞겠습니다. 그런데 정합성이 중요치 않으면 왜 a, b, c를 다 업데이트 하나요?

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2023년 11월 27일

본질적으로, 여러분의 어플리케이션에서 데이터 정합성이 중요하지 않다면, 트랜잭션을 사용하지 않아도 무방합니다. 하지만, 세 개의 업데이트 작업 중 하나라도 실패하는 경우 다른 작업들도 롤백되어야 한다면 트랜잭션이 필요합니다. 사실 스프링 트랜잭션 관리는 꽤 효율적이며 자동 커밋 모드를 사용하거나, 각 SQL 명령을 개별적인 트랜잭션으로 처리하는 것보다 성능상 이점이 있습니다. 테이블 잠금 문제가 걱정된다면, 이는 대부분의 RDBMS에서 MVCC(Multi-Version Concurrency Control)를 지원함으로써 해결할 수 있습니다. 즉, 당신의 상황에 대해 조언을 드리자면 Update 연산들 사이에 데이터 불일치가 발생하더라도 괜찮고, 각각의 update가 독립적으로 수행될 수 있다면 @Transactional 어노테이션을 사용하지 않아도 됩니다. 하지만 그게 아니라면 @Transactional 어노테이션이 필요할 것 같습니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!