목록[Database] (12)
쿼카러버의 기술 블로그
ScyllaDB는 세계에서 가장 빠른 NoSQL 데이터베이스라고 소개될 만큼 높은 성능을 자랑한다. SycllaDB에 대해 한 줄 요약하자면 C++로 구현된 Cassandra DB다. 실제로 Apache Cassandra와 완벽하게 호환되는 대체품으로 카산드라의 커맨드와 메서드를 그대로 사용할 수 있다. Cassandra의 아키텍처를 기반으로 하되 C++로 재작성되어 성능 최적화에 신경을 쓴 제품이기 때문이다. ScyllaDB가 자랑하는 장점들을 요약해보면 다음과 같다. Cassandra에 비해 5배 빠른 성능 : lower latency, higher throughput Cassandra에 비해 1/10정도의 규모의 클러스터로 동일 성능을 낼 수 있음 GC로 인한 Stop the world 현상 없음 ..
데이터베이스를 사용하고 있는 많은 개발자들은 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구문 공부, 설치법 등과 같이 실용적인 성격의 내용과는 살짝 다르고 복잡하다. 초심자 혹은 규모가 작은 서비스만 운영해야 하는 경우에는 데이터베이스를 사용할 때 트랜잭션에 대한 깊은 이해없이 데이터베이스에서 알아서 설정해주는 기본 설정만으로도 충분히 장애 없이 데이터베이스를 사..
필자는 최근 회사에서는 SQL보다는 dynamoDB, redis, mongoDB와 같은 NoSQL 데이터베이스를 주로 활용하다보니, SQL의 기본 개념이 슬슬 가물가물해지기 시작했다(ㅠㅠ). 물론 막상 보면 기억은 나지만, A to Z 설명해보라고 하면 논리정연하게 설명할 자신이 없다보니, 앞으로 간단하게나마 기본 개념들을 시간 날 때마다 정리해보려고 한다. 본 글의 주제는 데이터베이스 관계(Relationship)의 기본 개념이다. 관계와 관련된 모든 키워드를 다루진 않고, 데이터베이스의 관계를 이루는 주요 개념들은 무엇이 있는지, 그리고 각 관계 (1:1, 1:N, N:N) 종류에 따른 설명과 테이블 생성 예시를 다루는 아주 기본적인 내용으로 이루어져있다. 앞으로 꾸준히 여러 키워드들에 대한 in-d..
조인을 할 때 여러 테이블이 겹칠 경우, 컬럼명이나 테이블명을 쉽게 알아보지 못하는 경우가 많다. 웹상의 여러 쿼리 예시를 보더라도 테이블이나 컬럼에 별칭을 붙여 활용한다. 따라서 본 글에서는 SQL에서 어떻게 별칭을 붙이는지에 대해 다룬다. Alias는 값에 별칭을 주어 접근을 별칭 형태로 할 수 있도록 하는 역할을 한다. 데이터, 컬럼, 테이블, 서비쿼리, Where절 등에 사용할 수 있다. ALIAS 사용 이유 별칭을 지정하면 쿼리의 가독성을 향상시킬 수 있다. 일반적으로 알아보기 힘든 컬럼명이나 테이블 명에 대해 별칭을 붙인다. 예: EID → EID as Employer ID ALIAS(사용 방법) AS키워드 사용하는 경우 ColumnName AS 컬럼명칭 --컬럼에 별칭 부여하기 TableNa..
현재 SQL의 조인 시리즈를 작성하고 있다. Join시리즈의 목차를 참고하려면 이 글을 참고하길 바란다. 본 글은 SQL의 EXISTS문에 대해 다룬다. EXISTS문이란? SQL에서 EXIST문은 WHERE절에서 사용되며 조건에 따라 데이터를 걸러내어 결과를 조회할 때 사용한다. JOIN관점에서는 Semi Join과 Anti Join에 사용된다. EXIST문은 예시만 보면 쉽다가도, outer table과 subquery의 관계를 이해하는 관점에서는 매우 헷갈리는 개념이라, 예시와 함께 정리해보려고 한다. EXISTS / IN 개념 비교 EXIST와 IN은 WHERE절에 사용되며 조건에 따라 데이터를 걸러내어 결과를 조회할 때 사용되는 공통점을 가지고 있다. 본 글에서는 EXISTS와 IN을 간단하게 ..