DB 운영과 @Transactional
현업에서의 DB 운영
DB도 물리적인 디스크 상에 존재 -> 여러 원인에 의해 DB가 웨손될 수 있음 -> 현업에서 DB를 1대 이상 운영
이 때 DB1과 DB2를 어떻게 Sync하는가??
Primary / Replica 운영 방식 사용 (Master / Slave)
primary: 쓰기 전용으로, @Transactional 의 readOnly 속성을 false로 둠(default값이 false이므로 명시하지 않아도 됨)
@Transactional(readOnly = false)
-> Write 된 Data(Create, Update, Delete)가 Replica 로 Sync됨(Replication)
Replica(Secondary): 읽기 전용으로, @Transactional 의 readOnly 속성을 true로 둠
@Transactional(readOnly = true)
Primary-Replica 방식의 DB 운영을 하면 Primary에 문제가 생겼을 때 Replica 중 1개가 Primary가 되어 운영함.
트랜잭션
- DB에서 데이터에 대한 하나의 논리적 실행절차
- 더이상 쪼갤 수 없는 최소 단위의 작업으로 모두 저장되거나, 아무것도 저장되지 않아야 함
- 트랜잭션을 안전하게 수행하기 위해 ACID(원자성, 일관성, 고립성, 지속성)을 지켜야 함
@Transactional
데이터를 다루다 보면 예상치 못한 오류로 인해 한번에 처리되어 DB에 저장되어야 하는 내용들이 절반만 수행된 채로 저장될 수 있음 -> @Transactional 어노테이션을 사용하면 이러한 문제를 예방할 수 있음. 즉, 트랜잭션을 안전하게 수행해 줌.
따라서 read 작업만 하는 경우에는 굳이 사용하지 않아도 되는 어노테이션이지만, 하나의 트랜잭션에 여러 번 데이터를 수정해야 할 때는 사용해 주어야 함.
참조
스파르타코딩클럽 [Spring 심화반]
Spring 뽀개고 취업하기
spartacodingclub.kr