작성
·
568
0
안녕하세요.
최근 JPA강의와 Spring boot강의를 연달아 들었는데요, 너무 좋은 강의 감사드립니다.
지금까지 영한님께 배운 내용을 토대로 Spring boot + jpa를 이용하여 사이드 프로젝트를 진행중인데,
동기화 문제와 관련해 문의드리고자 글남깁니다.
제가 문제를 겪은 시나리오는 아래 코드와 같습니다.
이 경우 여러 사용자가 동시에 요청하지 않는 경우에는 문제없이 잘 동작하지만,
동시에 많은 사용자가 접근하게 되는 경우에는 동기화 문제가 발생될 것으로 생각됩니다.
( 어떤 thread가 jpa context에 업데만 해놓고 commit하기전에 다른 스레드에서 쿼리를 통해 데이터를
가지고 온 경우.)
그렇다고 Controller layer에서 단순히 sync 키워드를 사용하게 되면 많은 사용자가 동시에 접근할때,
너무 느려지지 않을까 우려되기도 하는데, 어떤 방식으로 접근하는게 좋을지 조언 여쭙고자 질문드립니다.
@Transactional
boolean addInformation(Data data) {
// 어떤 정보가 현재 DB에 쓰여져 있지 않은 경우에 한해 업데이트.
List<Infomation> info infoRepository.findAllWith(data);
if (info.size() > 1)
return false;
/// DB에 없으므로 db update
.....
}
답변 1
0
안녕하세요. bs Jeon님 좋은 질문입니다.
실무에서는 보통 장애에 대비해서 서버를 2대 이상 사용하기 때문에, sync 같은 명령어로 막는것은 어렵습니다.
그래서 JPA는 데이터 동기화 문제를 데이터베이스에 맡깁니다.
관련해서 다음 내용을 읽어보시면 도움이 되실거에요.
https://www.inflearn.com/questions/17498
감사합니다.