인프런 커뮤니티 질문&답변

디미터님의 프로필 이미지
디미터

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

세션 2개 상황에서 동시성 문제

작성

·

290

0

스승님 그간 평안하셨는지요,, 다름이 아니라 불초의 제자 질문이 있어 이 야심한 시간에 편지 올립니다. 

 

WAS를 한대만 운용한다는 가정하에 사용자의 접속 세션 허용범위를 2개로 주었어요, 웹으로 접속함과 동시에 모바일에서도 접속이 가능하게 만들어 주었다고 생각해 보았습니다.

전에  아래와 같은 말씀을 해주셨는데 

----------------------------

서버가 한대만 있고, 자바(JVM)로 웹 애플리케이션을 단 하나만 구동하는 상황이면 자바 만으로 동시성 제어를 할 수 있습니다. 그런데 실무에서는 보통 서버 두 대 이상을 사용하기 때문에, 동시성 제어를 JVM안에서 해결하는게 어렵습니다. 관계형 데이터베이스는 이런 동시성 제어를 고려해서 개발되었기 때문에, 결국 관계형 데이터베이스에 동시성 제어를 위임해야 합니다. 그 중에 관계형 데이터베이스가 제공하는 유니크 제약조건을 사용하면, 같은 이름을 절대로 동시에 저장할 수 없습니다. 그래서 name에 유니크 제약조건을 실무에서는 걸어주어야 한다고 이야기 했습니다. 그런데 이런 유니크 제약조건은 정말 최악의 경우(진짜 초 단위로 같은 데이터가 저장되었을 때)가 발생했을 때 동작하는 것이고, 대부분은 validation에서 막힙니다.

-----------------------------

위에서 제가 가정한 상황에서 사용자가 웹이랑 모바일에서 동시에 요청을 보냈는데 그게 하필 동시성 문제를 일으킨다면 이런 상황에서도  데이터베이스 lock을 안걸고 자바만으로 동시성을 제어할 수 있는 방법이 있을까요??

(혹은 세션이 2개가 아니더라도 1개의 세션에 1 명의 사용자가 동시에 같은 요청을 보낼 경우에두요!,, 너무 여러개 번거로운 질문 죄송합니다 ,, ㅠㅠ)

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 랄지님

WAS를 한대만 운용한다면 데이터베이스와 무관하게 자바의 synchronized 같은 기능을 사용해서 동시성 문제를 예방할 수 있습니다. synchronized 관련해서 공부해보시길 바랍니다.

감사합니다.

디미터님의 프로필 이미지
디미터

작성한 질문수

질문하기