직렬화 적절하게 격리되지 않은 동시 트랜잭션으로 인해 몇가지 잠재적인 이상이 발생한다. 시스템을 이러한 이상 현상으로 부터 보호하기 위해 트랜잭션이 엄격히 직렬화가 되어야 한다. 동시성 제어 메커니즘 동시성 제어에는 두가지 주요 메커니즘이 존재한다. 비관적 동시성 제어(Pessimistic concurrency control) ...
Distributed Systems - Distributed Transactions
중앙 집중식 시스템에서 분산 시스템이로 변경할때 직면하는 가장 일반적인 문제중 하나는 여러 노드에 걸쳐 원자적으로 작업을 수행한다는 것이다. 이를 분산 트랜잭션 이라고 부른다. Transactions 트랜잭션은 데이터베이스 시스템내에서 잠재적으로 여러 작업으로 구성되어 상태의 변경을 나타내는 작업 단위이다. ACID 는 트랜잭션 예상 동작에 대한...
Distributed Systems - CAP
The CAP Theorem CAP 정리는 분산시스템 분야에서 가장 기본적인 정리중 하나이다. 이는 분산 시스템 설계의 본질적인 균형을 설명한다. 일관성(Consistency) 모든 읽기 요청이 마지막 쓰기 요청의 결과를 수신함 가용성(Availability) 모든 요청이 마지막 쓰기 ...
Distributed Systems - Replication
Replication 분산 시스템을 사용함으로써 얻을 수 있는 또 다른 이점은 가용성(availability) 이다. 가용성(availability) 은 시스템의 일부에 장애가 발생하더라도 시스템이 지속적으로 기능을 유지할수 있는 능력을 말한다. 이러한 가용성을 달성하기 위해 사용되는 기술은 복제(Replication) 가 있다. 복제 는 이름...
Distributed Systems - Partitioning
Partitioning 분산 시스템의 주요 이점중 하나는 확장성(Scalability) 이다. 이러한 확장성을 달성하기 위한 주요 구현 방식중 하나는 파티셔닝(Partitioning) 이다. 파티셔닝은 데이터 세트를 여러개의 작은 데이터 세트로 분할한 다음 이를 저장하고 처리하는 책임을 분산 시스템의 여러 노드에 각각 할당하는 방법을 말한다. 파...
Distributed Systems - 분산 시스템 소개
Distributed Systems 이란? 분산 시스템은 흔히 구성 요소가 서로다른 네트워크 컴퓨터에 위치하며 서로 메세지를 전달하여 작업을 통신하고 조정하는 시스템이다. 이 시스템의 구성요소는 컴퓨터와 같은 물리적 하드웨어에서 실행되는 소프트웨어 프로그램으로 생각할 수 있다. 이러한 구성 요소는 웹 서버, 라우터, 웹 브라우저와 같이 다양한 형태를...
Programmers - 이진 변환 반복하기
이진 변환 반복하기 - lv.2 문제 0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다. x의 모든 0을 제거합니다. x의 길이를 c라고 하면, x를 “c를 2진법으로 표현한 문자열”로 바꿉니다. 예를 들어, x = “0111010”이라면, x에 이진 변환을 가하면 x = “0111010” -> ...
Programmers - JadenCase 문자열 만들기
JadenCase 문자열 만들기 - lv.2 문제 JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고) 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solut...
Programmers - 키패드 누르기
한 해에 잡은 물고기 수 구하기 - lv.1 문제 낚시앱에서 사용하는 FISH_INFO 테이블은 잡은 물고기들의 정보를 담고 있습니다. FISH_INFO 테이블의 구조는 다음과 같으며 ID, FISH_TYPE, LENGTH, TIME은 각각 잡은 물고기의 ID, 물고기의 종류(숫자), 잡은 물고기의 길이(cm), 물고기를 잡은 날짜를 나타냅니다...
Data Intensive Application - 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 어플리케이션
데이터 시스템 일반적으로 오늘날의 데이터 중심 어플리케이션들은 아래와 같은 부분들을 필요로 한다. 데이터 수집 및 저장(데이터베이스) 읽기 속도 향상을 위해 결과 기억(캐시) 사용자가 키워드로 데이터를 검색 하거나 필터링할 수 있게 제공(검색 색인(search index)) 비동기 처리를 위해 다른 프로세스로 메세지 전송(스트림 처...