작성
·
290
0
스승님 그간 평안하셨는지요,, 다름이 아니라 불초의 제자 질문이 있어 이 야심한 시간에 편지 올립니다.
WAS를 한대만 운용한다는 가정하에 사용자의 접속 세션 허용범위를 2개로 주었어요, 웹으로 접속함과 동시에 모바일에서도 접속이 가능하게 만들어 주었다고 생각해 보았습니다.
전에 아래와 같은 말씀을 해주셨는데
----------------------------
서버가 한대만 있고, 자바(JVM)로 웹 애플리케이션을 단 하나만 구동하는 상황이면 자바 만으로 동시성 제어를 할 수 있습니다. 그런데 실무에서는 보통 서버 두 대 이상을 사용하기 때문에, 동시성 제어를 JVM안에서 해결하는게 어렵습니다. 관계형 데이터베이스는 이런 동시성 제어를 고려해서 개발되었기 때문에, 결국 관계형 데이터베이스에 동시성 제어를 위임해야 합니다. 그 중에 관계형 데이터베이스가 제공하는 유니크 제약조건을 사용하면, 같은 이름을 절대로 동시에 저장할 수 없습니다. 그래서 name에 유니크 제약조건을 실무에서는 걸어주어야 한다고 이야기 했습니다. 그런데 이런 유니크 제약조건은 정말 최악의 경우(진짜 초 단위로 같은 데이터가 저장되었을 때)가 발생했을 때 동작하는 것이고, 대부분은 validation에서 막힙니다.
-----------------------------
위에서 제가 가정한 상황에서 사용자가 웹이랑 모바일에서 동시에 요청을 보냈는데 그게 하필 동시성 문제를 일으킨다면 이런 상황에서도 데이터베이스 lock을 안걸고 자바만으로 동시성을 제어할 수 있는 방법이 있을까요??
(혹은 세션이 2개가 아니더라도 1개의 세션에 1 명의 사용자가 동시에 같은 요청을 보낼 경우에두요!,, 너무 여러개 번거로운 질문 죄송합니다 ,, ㅠㅠ)
답변 1
1
안녕하세요. 랄지님
WAS를 한대만 운용한다면 데이터베이스와 무관하게 자바의 synchronized 같은 기능을 사용해서 동시성 문제를 예방할 수 있습니다. synchronized 관련해서 공부해보시길 바랍니다.
감사합니다.