조회 및 읽기 트랜잭션 적용 문의
안녕하세요 트랜잭션 옵션 소개 강의를 시청 중에 궁금한 점이 있어 질문 드립니다.
데이터베이스에서 조회 및 읽기만 수행을 할 때 데이터의 변경이 없어 트랜잭션이 필요하지 않다고 생각하는데 굳이 트랜잭션을 거는 이유가 있을까요??
보통은 클래스 레벨에 트랜잭션을 걸게되어 안에 있는 여러 메서드에도 트랜잭션이 자동으로 걸리게 되어 조회 혹은 읽기 메서드에도 트랜잭션을 의도하지 않게 걸리게 되는 것 일까요?
답변 1
2
안녕하세요 RSH 님, 인프런 AI 인턴이에요.
조회 및 읽기 작업은 데이터의 변경을 동반하지 않기 때문에 일반적으로는 트랜잭션을 걸 필요가 없습니다. 그러나 특정 상황에서 조회 작업에도 트랜잭션을 적용하는 이유가 있을 수 있습니다.
첫째로, 일관성(Consistency)을 유지하기 위해서입니다. 다른 트랜잭션에서 데이터를 수정 중일 때 조회 작업이 동시에 실행되면 수정이 완료되기 전의 데이터를 읽을 수 있습니다. 이를 방지하기 위해 조회 작업에도 트랜잭션을 적용하여 일관성을 유지할 수 있습니다.
둘째로, 로드 밸런싱을 위해 트랜잭션을 걸 수 있습니다. 특정 작업이 많은 시간이 걸리는 경우, 다수의 조회 작업이 해당 작업을 참조하는 경우가 발생할 수 있습니다. 이때 트랜잭션을 걸어 작업이 완료될 때까지 조회 작업을 블록하여 일관된 데이터를 제공할 수 있습니다.
마지막으로, 프레임워크나 라이브러리에서 메서드 단위의 트랜잭션을 제공할 때 클래스 레벨의 트랜잭션 설정에 따라 조회 메서드에도 트랜잭션이 적용될 수 있습니다. 이 경우 의도하지 않은 트랜잭션이 적용되기 때문에 성능 등의 이슈가 발생할 수 있습니다. 이 경우 트랜잭션을 제외하거나 따로 설정을 변경하여 해결할 수 있습니다.
결론적으로, 조회 및 읽기 작업에 일반적으로 트랜잭션을 걸지 않지만 특정 상황에서 트랜잭션을 사용하는 이유는 일관성과 성능을 위해서입니다. 자세한 내용은 해당 강의를 참고해 주세요. 감사합니다!
RepositoryTest의 패키지 위치가 domain인 이유
0
30
2
REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!
0
30
1
update()에 사용하는 setter 질문드립니다.
0
48
1
SQL 중심적 개발의 문제점에 대한 질문
0
72
1
혹시 Containing 을 안쓰신 이유가 있을까요?
0
84
2
[공유] 스프링부트 4.x 버전 mybatis 연동
0
176
1
@repository 어노테이션
0
89
3
ItemService
0
58
1
논리 커밋, 물리 커밋 질문드립니다.
0
54
1
내부 트랜잭션 커밋은 필수인가요?
0
57
1
프록시 커넥션 객체를 반환할 때 생성하는건가요?
0
54
1
Transaction readOnly 성능 개선 (김영한님의 대한 감사인사)
2
178
2
JPQL 대신 네이티브 쿼리를 사용해야 하는 경우
0
79
1
@EventListener(ApplicationReadyEvent.class) 관련
0
88
1
트랜잭션 동기화 매니저와 데이터 소스
0
76
1
DB 관련 강의 개설 계획은 없으신건가요?
0
133
2
물리 트랜잭션 과 논리트랜잭션 용어를 맞게 이해한걸까요
0
94
1
스프링 3 버전 이상 rollbackFor 변경된듯요
1
112
1
트랜잭션 전파 질문.
0
87
1
프로젝트 오픈 에러
0
126
1
외부 트랜잭션에서 isNewTransaction이 false로 나오는거에 대해 질문드립니다
0
84
2
같은 스레드를 사용하면 트랜잭션 동기화 매니저는 같은 커넥션을 반환
0
73
1
h2 인메모리 테스트중 예약어 충돌날 경우 대처방법
0
102
1
커스텀aop와 트랜잭션을 같이 사용할때 우선순위에 관한 질문
0
98
2





