동시성 제어 - 메시징 큐
이번에는 메시징 큐를 통해 동시성 문제를 해결하는 방법을 알아보자. 메시징 큐 메시징 큐(Message Queue)는 분산 시스템에서 다양한 컴퓨넌트 간에 비동기적으로 메시지를 전송하고 처리하기 위한 중간 매개체이다. 메시징 큐는 주로 다음과 같은 목적으로 사용된다. 비동기 통신: 메시지 큐를 사용하면 발신자(Producer)와 ...
이번에는 메시징 큐를 통해 동시성 문제를 해결하는 방법을 알아보자. 메시징 큐 메시징 큐(Message Queue)는 분산 시스템에서 다양한 컴퓨넌트 간에 비동기적으로 메시지를 전송하고 처리하기 위한 중간 매개체이다. 메시징 큐는 주로 다음과 같은 목적으로 사용된다. 비동기 통신: 메시지 큐를 사용하면 발신자(Producer)와 ...
이번에는 레디스를 통해 동시성 문제를 해결하는 방법을 알아보자. 레디스는 메모리 기반의 키-값 데이터베이스로 기존 RDB보다 훨씬 빠른 속도를 가지고 있다. 동시성 문제 해결 시 레디스는 특히 분산락을 구현하는데 매우 유용하다. 분산 락 단일 서버에서 돌아가는 환경이라면 synchronized 키워드나 ReentrantLock을 사용하여 동시성...
이전 글 동시성 제어 - 프로그래밍 언어에서는 자바에서 동시성 문제를 해결하는 방법을 알아보았다. 이번에는 데이터베이스 수준에서 동시성 문제를 해결하는 방법을 알아보자. 데이터베이스 수준에서는 잠금과 트랜잭션 격리 수준을 이용하여 동시성 문제를 해결한다. 먼저 잠금에 대해 알아보자. 데이터베이스에서도 잠금을 이용해 동시성 문제를 해결한다. 데이터...
이제 전에 글에서 알아보았던 동시성에서 발생할 수 있는 원자성과 가시성의 문제를 언어수준에서 해결하는 방법에 대해 알아보려 한다. 그 전에 관련된 개념을 간단히 살펴보자. 임계영역(Critical Section): 한 번에 한 스레드만 접근할 수 있는 영역을 뜻한다. 상호 배제(Mutual Exclusion): 임계 영역에 접근하는 스레드...
동시성에서 발생할 수 있는 문제는 원자성과 가시성의 문제로 설명할 수 있다. 원자성 원자성이란 하나의 작업이 완전히 실행되거나 전혀 실행되지 않는 성질이다. 멀티 쓰레드 환경에서는 여러 스레드가 동시에 실행되기 때문에 원자성을 지키지 못한다면 데이터의 무결성이 깨질 수 있다. int형 변수에 1을 더하는 작업을 생각해보자.(i++) 이 작업은 1...
동시성이란? 동시성이란 여러 작업을 동시에 수행하는 것을 말한다. 만약 동시성 개념이 갑자기 없어졌다고 가정해보자. 그러면 우리가 인터넷 브라우저에서 무엇인가를 다운 받거나 검색할 때 그 작업이 끝날 때까지 다른 어떠한 작업도 할 수 없다. 동시에 다른 작업을 할 수 없기 때문에 한 스레드가 작업을 수행하는 동안 다른 스레드는 대기해야하기 때문이다....
LongestCommonPrefix 사전순으로 문자열이 정렬하면 중간은 반드시 같은 문자열이 있다는 것을 알 수 있기 때문에 맨 첫번째와 마지막 인덱스의 값만 서로 공통된 값이 있는지 체크하면 됩니다. fun longestCommonPrefix(strs: Array<String>): String { if (strs....
문제 이진 값이 들어 있는 a, b를 서로 더합니다. Long 범위를 넘는 케이스가 있어 BigInteger를 사용했습니다. 더한 숫자 값을 다시 각 원소별 리스트로 변환합니다. 리스트에서 오른쪽부터 왼쪽으로 가면서 값이 2 이상인 경우 2로 나눈 나머지로 대체하고, 그 전 인덱스 값에 1을 더해 캐리를 흉내냅니다. 첫번째에서 캐리가...
Add Binary 이진 값이 들어 있는 a, b를 서로 더합니다. Long 범위를 넘는 케이스가 있어 BigInteger를 사용했습니다. 더한 숫자 값을 다시 각 원소별 리스트로 변환합니다. 리스트에서 오른쪽부터 왼쪽으로 가면서 값이 2 이상인 경우 2로 나눈 나머지로 대체하고, 그 전 인덱스 값에 1을 더해 캐리를 흉내냅니다. 첫...