위 그림의 시나리오는, 2개의 쓰레드(멀티 쓰레드)가 동시에 실행이 되었을 때의 결과로서 매우 정상적인 결과이다.
( 2개의 쓰레드가 스프링 컨테이너에 올라 와 있는 싱글톤 객체, 즉, JVM에 올라 와 있는 단 1개의 객체에 접근한다는 가정
이다.)
( 2개 이상의 operation이 동시에 작업을 진행을 했을 때, 마치 operation 하나 하나를 따로 실행시킨 것과 같이 독립적
인 결과를 멀쓰 쓰레딩은 보장을 해야 한다.)
그러나 아래의 이미지는 멀티 쓰레딩에서 동시성 issue를 해결하지 못하였을 때 나오는 결과이다.
트랜잭션ID(aaaaaaaaa)를 2개의 쓰레드가 공유를 하게 되면서, 2개의 쓰레드가 각각 독립적으로 실행되지 못하여 그 결과
도 개발자가 원하는 결과값이 아니게 되었다.
멀티 쓰레딩 환경에서는 싱글톤 객체에 접근할 때는 항상 동시성(Concurrency issue)를 의식하자!!!
스프링은 멀티 쓰레딩 상황에서 발생하는 동시성(Concurrency) issue를 해결해 주는 Thread Local 기능을 제공한다.
'CS 잡지식' 카테고리의 다른 글
Util Class - 여러 클래스에서 공통적으로 사용되는 기능!! (0) | 2023.02.20 |
---|---|
객체의 속성 값(필드값)을 변경 시 주의해야 할 사항~~~!!! (0) | 2023.02.20 |
동기화(Synchronization) VS 동시성(Concurrency) (0) | 2023.02.18 |
HTML vs CSS (0) | 2023.02.18 |
HTML, CSS, Java Script에 대한 고찰! (0) | 2023.02.18 |