목록분류 전체보기 (145)
쿼카러버의 기술 블로그
리더 선출이란 여러 대의 동일한 코드로 동작하는 어플리케이션 인스턴스들 중에서 특정 인스턴스를 '대표'로 선정하는 과정을 말한다. 리더 선출의 주된 목적은 시스템 내에서 중요한 결정이나 작업을 담당할 ‘리더’를 선정하는 것이다. 이 과정은 특히 분산 시스템이나 클러스터 환경에서 중요하다. 본 글에서는 그 중에서도 쿠버네티스에서의 리더 선출에 대해 다룬다. 다시 말해 쿠버네티스에 의해 조정되고 관리되는 리더 선출 메커니즘에 대해 다루려고 한다. 쿠버네티스는 Distributed Lock을 활용해 다수의 인스턴스 중 한 인스턴스를 리더로 선출할 수 있게 하여, 오직 그 인스턴스만이 특정 작업을 수행할 수 있도록 보장한다. 참고로 블록체인에서도 리더를 선출한다. 하지만 이 글에서 말할 리더 선출과는 다른 개념..
ScyllaDB는 세계에서 가장 빠른 NoSQL 데이터베이스라고 소개될 만큼 높은 성능을 자랑한다. SycllaDB에 대해 한 줄 요약하자면 C++로 구현된 Cassandra DB다. 실제로 Apache Cassandra와 완벽하게 호환되는 대체품으로 카산드라의 커맨드와 메서드를 그대로 사용할 수 있다. Cassandra의 아키텍처를 기반으로 하되 C++로 재작성되어 성능 최적화에 신경을 쓴 제품이기 때문이다. ScyllaDB가 자랑하는 장점들을 요약해보면 다음과 같다. Cassandra에 비해 5배 빠른 성능 : lower latency, higher throughput Cassandra에 비해 1/10정도의 규모의 클러스터로 동일 성능을 낼 수 있음 GC로 인한 Stop the world 현상 없음 ..
분산 시스템과 블록체인 그리고 데이터 일관성(Consistency) 블록체인은 그 자체로 분산환경 시스템의 한 형태다. 일반적으로 분산 시스템이란 여러 컴퓨터가 네트워크를 통해 연결되어 작동하는 시스템을 말하기 때문이다. 그래서 블록체인과 데이터베이스 분산 처리에 대해 개발자 입장에서 공부하다보면 사실 기술적으로는 공통점이 정말 많을 수 밖에 없다. 누가 데이터를 다루고 보존하고 책임지냐의 문제에서만 차이가 있을뿐, 결국 성능 입장에서 직면하는 문제와 해결해야 하는 문제들 그리고 해결방법들은 서로 밀접하게 연결되어 있다. 탈중앙화 개념을 도입하기 위해 암호학기술, 난수 개념을 활용해서 좀 더 복잡한 메커니즘이 추가되는 정도..? 무튼 본 글은 백엔드 개발자 입장에서 매번 생각만하다 정리해봐야겠다 싶었던 ..
NoSQL을 공부하다보면 가장 많이 접하게 되는 단어 중 하나가 CAP이다. 아무래도 NoSQL 스토리지들이 분산 시스템으로 동작하다보니, 이들을 이해하기 위해서는 꼭 알아두어야 할 개념이기 때문이다. 프로젝트 특성에 따라 데이터베이스 솔루션을 선택해야 하는데, 이 때 이 개념을 잘 이해하고 있으면 프로젝트 특성에 맞는 솔루션을 선택하는데 도움이 된다. 근데 이 CAP Theorem은 매우 심플하게 분산 시스템의 성질을 설명해주는 정리 같으면서도 잘못 읽으면 오히려 오해가 생길 위험이 있다. 따라서 CAP이 의미하는 바가 무엇이고, 이 정리가 진정 무엇을 알려주고자 하는지 좀 제대로 이해해보기 위해 글을 쓴다. 참고로 이번 글은 분산시스템과 데이터베이스에 대한 기본적인 이해가 됐다는 전제하에 쓴 글이다...
데이터베이스를 사용하고 있는 많은 개발자들은 DBMS의 기본 isolation level을 사용하는 경우가 많다. 하지만 지금 내 서비스에 적합한 isolation level을 지정해주지 않으면 여러 요청이 동시에 처리될때 예상치 못한 동작이 발생할 수 있다. 따라서 본 글에서는 Isolation level에 대해 알아볼 것이다. 그치만 그전에, 동시에 트랜잭션이 처리될 때 어떤 이상 현상(Concurrency Problem)들이 발생할 수 있는지에 대해 알아보려고 한다. SQL표준에서 제시한 이상현상 외에도 다른 이상현상들도 알아볼 것이다. 다양한 이상현상들을 공부해두면 트랜잭션을 사용할 때 본인 서비스에 치명적일 수 있는 이상현상(Concurrency Problem)들을 미연에 방지할 수 있고, 문제..
Serializabiltiy와 Recoverability는 여러개의 트랜잭션을 동시에 실행할 때, 데이터에 이상 현상이 발생하지 않도록 보장해야 하는 특성들이다. 이 개념을 익히고 트랜잭션 개념을 공부해야 용어들이 익숙하고 이해가 쉽다. 한번 드루가보자. Serializability란? DBMS는 여러 사용자들의 요청을 처리할 때 성능을 위해 요청을 동시에 수행하는게 필수적이다. 하지만 이렇게 동시에 요청을 처리하면서도 트랜잭션간의 간섭이 일어나지 않은 것처럼 데이터를 처리하기 위한 방법이 필요하다. 이를 데이터베이스의 Isolation을 보장한다고 표현하는데, 이를 다르게 표현하면 Seralizability가 보장됐다고 표현할 수 있다. 다시 말해 여러 트랜잭션들이 동시에 실행된다고 하더라도, 마치 순..
본 글에서는 트랜잭션이라는 단어가 의미하는 바가 무엇인지, 그리고 트랜잭션을 검색하면 항상 같이 따라오는 ACID라는 특성이 의미하는 바가 무엇인지 한번 다루어보도록 하겠다. 트랜잭션 정의 : all or nothing 트랜잭션이란 DBMS가 데이터베이스를 다룰 때 사용하는 논리적 작업 단위다. 여기서 말하는 논리적 작업 단위는 여러 작업들을 하나로 묶은 덩어리라고 볼 수 있다. 트랜잭션에서 이 작업 덩어리는 전체가 수행되거나 혹은 전혀 수행되지 않아야 한다. 이게 무슨 말인지 헷갈려도 괜찮다. 아래의 가장 흔한 은행 입출금 예시를 보면 쉽게 이해가 될 것이다. A의 계좌에서 B의 계좌로 100원을 전송하는 트랜잭션을 실행하는 방법은 아래와 같다. START TRANSACTION A 계좌에서 100원을 ..
어플리케이션을 개발하는 개발자라면 필연적으로 데이터베이스를 사용하게 된다. 백엔드라는 분야 자체가 데이터베이스를 어떻게 다루는지에 대한 것이라고 봐도 과언이 아닐 정도로 백엔드 개발자에게 있어서 데이터베이스에 대한 이해는 필수적이다. 데이터베이스와 관련해서 정말 많은 내용을 공부해야 하지만 그중 가장 핵심적이고 중요한 개념 하나를 꼽자면 필자는 트랜잭션이라고 생각한다. 사실 트랜잭션에 대한 공부는 데이터베이스를 사용하기 위한 SQL구문 공부, 설치법 등과 같이 실용적인 성격의 내용과는 살짝 다르고 복잡하다. 초심자 혹은 규모가 작은 서비스만 운영해야 하는 경우에는 데이터베이스를 사용할 때 트랜잭션에 대한 깊은 이해없이 데이터베이스에서 알아서 설정해주는 기본 설정만으로도 충분히 장애 없이 데이터베이스를 사..