개발공부

동시성 이슈가 발생하는 이유

Mactto 2024. 6. 26. 11:22
728x90

동시성 이슈는 여러 스레드나 프로세스가 동시에 동일한 데이터에 접근하거나 수정하려고 할 때 발생하는 문제입니다. 이러한 문제는 데이터 일관성을 해치고, 예상치 못한 결과를 초래할 수 있습니다.

 

동시성 이슈에 대한 이해를 돕기 위해 아래 사진처럼 5명이 버튼을 동시에 누르려하는 예제를 들어보겠습니다.

버튼을 누르면 Value 값이 1씩 오른다고 했을 때 Value 값은 무엇이 될까요?

 

우리는 당연히 5라고 생각합니다.

하지만 컴퓨터 세계에서의 답은 알 수 없다 입니다.

이유가 무엇일까요??

 

Value 값이 오르는 과정을 살펴보면 그 이유를 알 수 있습니다.

Value 값에 1을 더하기 위해서는 아래 2가지 작업이 필요합니다

 

1. 현재 Value 값을 가져온다.

2. 가져온 Value 값에 1을 더한다.

 

문제는 여기서 발생하는데 그림을 통해 하나하나 살펴보겠습니다.

 

먼저 1번이 버튼을 가장 빨리 눌러서 처음으로 Value 값을 가져왔습니다.

 

이제 1번이 가져온 Value 값에 1을 더하는 작업을 처리하는데 이때 다른 작업도 동시에 처리되고 있기 때문에

처리되는 도중 2번이 버튼을 눌렀고 아직 1번이 가져온 Value 값에 1을 더하는 작업이 완료되지 않았기 때문에

Value는 0이라는 값을 가져오게 됩니다.

 

이후 1번이 Value 값에 1을 더하는 작업이 완료돼 글로벌한 Value 값을 업데이트하였고

이어서 2번도 자신이 가져온 Value 값에 1을 더하고 업데이트를 합니다.

 

 

이렇게 최종적으로 업데이트된 Value의 값은 2가 아닌 1이 되게 됩니다.

따라서 5명이 동시에 버튼을 누른 경우 처리되는 순서에 따라 Value 값은 5가 아닌 예측할 수 없는 값으로 업데이트가 됩니다.

 

 

동시성 이슈는 프로그래밍이 설계한 대로 동작하지 않는 중대한 이슈이며 운영체제, 데이터베이스뿐만 아니라 우리가 개발하는 프로그램에서도 다양하게 발생하는 이슈임으로 잘 이해하고 대응해야 합니다.

 

728x90