동시성이란?

홍지범·2023년 6월 1일
0

Intro

동시성에 대해 이야기 해볼까 합니다.

동시성 문제를 다룰 때에는 트래픽과 적절한 균형을 맞춰야 합니다.

동시성을 잘 제어해야만 데이터의 정합성을 맞출 수 있습니다.

동시성이란?

그렇다면 동시성(Concurrency) 란 무엇일까요?

동시성(Concurrency) 이란,
컴퓨터 과학에서 여러 계산을 동시에 수행하는 시스템의 특성으로, 잠재적으로는 서로 상호 작용이 가능하다.
출처 : 위키백과

우리 주변에서 쉽게 접할 수 있는 사례를 예시를 들어보겠습니다.
바로 선착순 행사 입니다.

https://www.youtube.com/watch?v=MTSn93rNPPE

100개의 재고가 있는 음식배달 50% 할인 쿠폰을 오늘 10시에 선착순으로 나누어준다고 가정해보겠습니다.

군침이 도는 쿠폰이기 때문에 평소보다 많은 요청이 순식간에 몰려들었습니다.

이벤트가 끝난 후 지급된 쿠폰의 수와 쿠폰을 지급받은 회원의 수가 동일해야 합니다.

즉, 100개의 물건만 선착순으로 지급되어야 한다. 라는 규칙이 있다면 이벤트가 끝난 후 지급된 물건의 개수는 100개 이어야 하고, 물건을 획득한 회원의 수 역시 100명 이어야 합니다.

더 많이 지급되거나 덜 지급된다면 서비스의 신뢰는 떨어질 것 입니다.

동시성 발생 case

우리가 생각하는 이상적인 모습은 모든 요청이 순차적으로 처리되는 아래와 같은 모습 입니다.

이상적인 요청의 흐름
하나의 요청이 완료되고 다음 요청이 수행 된다.

하지만 이러한 이상적 흐름은 아래와 같은 조건이 필요 합니다.

  • 요청과 요청 사이 충분한 텀이 있다.
  • 한 번에 하나의 요청만 처리 된다.

반면 프로젝트의 실행 환경은 아래와 같습니다.

  • 동시에 수많은 요청이 들어온다. -> 요청 사이에 텀이 짧다.
  • 자바는 멀티 스레드 환경이다. -> 공유 자원을 동시에 이용할 수 있다.
  • 공유되는 자원이 존재한다.

공유되는 자원여러 스레드들이 동시에 접근변경 하는 일이 발생했기 때문입니다.

동시성 문제가 발생한 흐름
공유 자원에 동시에 두 스레드가 접근 후 변경하면 초과 지급되는 문제가 발생한다.

(혹은 덮어쓰기 같은 문제가 발생할 수도 있습니다.)

동시성 문제 해결 방법 키워드

동시성 문제는 많은 서비스들에서 다루고 있는 주제 입니다.
문제 해결을 위해 다양한 방법이 있습니다만 앞으로 연재할 글에서 다뤄보도록 하고 이번 글에서는 키워드 위주로 간단하게 적어보겠습니다.

  • 언어 레벨 :
    스레드 동기화, synchronized, volatile, critical section
  • DB 레벨 : 락, 트랜잭션
  • 인프라 레벨 : 싱글 스레드
profile
왜? 다음 어떻게?

0개의 댓글

관련 채용 정보