본문 바로가기

CS 잡지식

멀티 쓰레딩 상황에서 생길 수 있는 심각한 동시성(Concurrency issue)에 대한 고찰!! ( 면접에서 매우 고급 문제로서 잘 나옴 )

위 그림의 시나리오는, 2개의 쓰레드(멀티 쓰레드)가 동시에 실행이 되었을 때의 결과로서 매우 정상적인 결과이다.

( 2개의 쓰레드가 스프링 컨테이너에 올라 와 있는 싱글톤 객체, 즉, JVM에 올라 와 있는 단 1개의 객체에 접근한다는 가정

이다.)

( 2개 이상의 operation이 동시에 작업을 진행을 했을 때, 마치 operation 하나 하나를 따로 실행시킨 것과 같이 독립적

인 결과를 멀쓰 쓰레딩은 보장을 해야 한다.)

그러나 아래의 이미지는 멀티 쓰레딩에서 동시성 issue를 해결하지 못하였을 때 나오는 결과이다.

트랜잭션ID(aaaaaaaaa)를 2개의 쓰레드가 공유를 하게 되면서, 2개의 쓰레드가 각각 독립적으로 실행되지 못하여 그 결과

도 개발자가 원하는 결과값이 아니게 되었다. 

멀티 쓰레딩 환경에서는 싱글톤 객체에 접근할 때는 항상 동시성(Concurrency issue)를 의식하자!!!

 

스프링은 멀티 쓰레딩 상황에서 발생하는 동시성(Concurrency) issue를 해결해 주는 Thread Local 기능을 제공한다.