diff --git a/_posts/database/2024-12-14-DB-Cassandra.md b/_posts/database/2024-12-14-DB-Cassandra.md
new file mode 100644
index 0000000..94b1bd4
--- /dev/null
+++ b/_posts/database/2024-12-14-DB-Cassandra.md
@@ -0,0 +1,106 @@
+---
+layout: post
+title: "[DB] 카산드라(cassandra) "
+subtitle: ""
+comments: true
+categories : Database
+date: 2024-12-14
+background: '/img/posts/mac.png'
+---
+
+## 1. 카산드라(Cassandra) 개요
+
+아파치 카산드라(Apache Cassandra)는 비정형 데이터를 여러 노드에 분산
+저장하여 대량의 트래픽을 신속히 처리하는 분산 저장형 데이터베이스이다.
+클러스터 중단 없이 노드 수를 손쉽게 증가할 수 있어 확장성과
+고가용성이 필요한 대용량 데이터 관리에 최적화되어 있다.
+
+
+
+- - -
+
+## 2. 카산드라 특징
+
+카산드라는 SQL과 비슷한 Cassandra Query Language(CQL)을 이용한다.
+
+- Keyspace: 데이터세트를 어떻게 구성할 것인지에 대한 정의를 한다.
+- Table: 데이터 스키마를 정의한다.
+- Partition: 모든 행에 이
+- Row:
+- Column: 해당 테이블에서 행에 속하는 열을 말한다.
+
+- - -
+
+## 3. 카산드라 장점
+
+### 3-1) 고성능 분산처리
+
+카산드라는 여러 노드에 클러스터를 분산하여 저장할 수 있다.
+링 구조로 된 노드들은 마스터 노드가 따로 존재하지 않고 모든 노드가
+각자 들어온 요청을 처리하는 구조이므로 대용량 데이터를 신속하게 병렬
+처리 가능하다.
+
+
+### 3-2) 탄력적인 확장성
+
+하드웨어 용량을 늘리는 수직 확장 대신 노드를 추가하여 요청을 분산해서
+처리하는 수평 확장으로 간편하게 클러스터 처리 용량을 확대할 수 있다.
+노드는 클러스터 재구성 없이 손쉽게 증가, 감소 시킬수 있으며
+트랜잭션 처리 성능은 노드를 추가한 만큼 선형적으로 증가한다.
+
+
+
+
+- - -
+
+## 4. 카산드라 단점
+
+### 4-1) 높은 진입장벽
+
+컬럼형 데이터베이스로 로우형 데이터베이스인 관계형 데이터베이스와는
+다른 생소한 개념이라 진입장벽이 높다.
+
+### 4-2) 복잡한 조건의 검색 불가
+
+`복잡한 조건의 검색이 불가능하며, 대량이지만 검색 조건은 단순한
+서비스에 적합하다.`
+
+- - -
+
+## 5. 카산드라 데이터 구조
+
+카산드라의 데이터 구조는 비교적 간단하다.
+`최상위에 논리적 데이터(Data) 저장소인 키 스페이스(keyspace)가 있고,
+ 키 스페이스 아래에는 테이블이 존재한다.`
+
+테이블은 다수의 row 들로 구성되어 있으며 각 row는 키 값(key value)으로
+이루어진 컬럼들로 구성된다.
+
+
+
+`카산드라는 기본적으로 링(Ring) 구조를 가지며,
+ 링을 구성하는 각 노드에 데이터를 분산하여 저장한다.`
+파티션 키라고 불리는 데이터의 해시(hash)값을 기준으로
+데이터를 분산하게 된다.
+
+
+
+
+
+
+
+
+
+
+- - -
+Referrence
+
+
+
+{% highlight ruby linenos %}
+{% endhighlight %}
+
+{%- if site.disqus.shortname -%}
+ {%- include disqus.html -%}
+{%- endif -%}
+
diff --git a/_posts/database/2024-12-15-DB-Cassandra-Query-Language.md b/_posts/database/2024-12-15-DB-Cassandra-Query-Language.md
new file mode 100644
index 0000000..72307e0
--- /dev/null
+++ b/_posts/database/2024-12-15-DB-Cassandra-Query-Language.md
@@ -0,0 +1,134 @@
+---
+layout: post
+title: "[DB] 카산드라 CQL(Cassandra Query Language)"
+subtitle: "데이터 타입(Data Type) 및 쿼리 사용법 / Partition key, Primary key, Clustering key"
+comments: true
+categories : Database
+date: 2024-12-15
+background: '/img/posts/mac.png'
+---
+
+Cassandra Query Language는 테이블에 저장된 데이터를
+찾기 위한 Query로 사용된다.
+
+관계형 데이터베이스에서는 다른 테이블의 데이터와 연관짓기 위해
+FK를 테이블에 지정하고 조인을 통해 데이터를 조회한다.
+`하지만 카산드라에서는 단일 테이블에 접근하는 것이 최고의 설계이며,
+ 쿼리에 포함된 모든 엔티티는 하나의 테이블에 포함되어 있어야
+ 가장 빠른 접근이 가능하다.`
+
+관계형 데이터베이스에서 여러개의 테이블 데이터를 불러오기 위하여
+조인이 사용되었던 것과는 다르게 `카산드라는 조인을 지원하지 않는다.`
+따라서 필요한 모든 필드는 하나의 테이블에 모여있어야 한다.
+
+이처럼 CQL과 SQL은 사용방법에 차이가 발생하며, 차이가 발생하는 주요 원인은
+카산드라는 분산 데이터를 다루며 비효율적인 쿼리를 방지하는 것을 목표로 삼기 때문이다.
+특히 CQL where 절에서 CQL과 SQL의 차이가 두드러지며
+이번글에서는 이러한 부분에 대해서 자세히 살펴보자.
+
+
+- - -
+
+## 1. Cassandra Query Language
+
+SQL과 유사한 방식으로 CQL 를 사용하며 CRUD 연산을 수행한다.
+다양한 데이터 타입을 지원하는데, 그 중에서 가장 일반적인
+Built-in type, Collection, 그리고 User-definded 타입 이렇게 세가지 타입을
+먼저 살펴보자.
+
+> CQL의 keyspace는 SQL의 database와 비슷한 개념이다.
+
+
+### 1-1) Data type
+
+먼저 Built-in data type을 아래와 같다.
+
+
+### 1-2) CQL key
+
+Primary key와 Partiton key의 선택은 클러스터에 데이터를
+분배하기 위하여 중요하다.
+
+
+카산드라는 클러스터의 노드에 분산해서 데이터를 저장하는
+분산 시스템이다.
+`partition key가 노드에 데이터를 분산하는데 사용`된다.
+카산드라는 데이터 분배를 위해 일관된 해싱을 사용하여 데이터를 분배한다.
+`Partition key는 Primary key의 첫번째 필드로 결정되며,
+ 적은 Partition은 Query에 대한 응답을 빠르게 한다.`
+
+아래 예제에서 테이블 t 는 Primary key인 id를 가지고 있다.
+
+```sql
+CREATE TABLE t (
+ id int,
+ k int,
+ v text,
+ PRIMARY KEY (id)
+);
+```
+
+`클러스터에 데이터 분배를 위한 Partition key는 첫번째 Primary Key 인
+id로 생성된다.`
+
+테이블 t 가 Primary key로 복합키인 2개 이상의 key를 갖는다고 가정해보자.
+
+```sql
+CREATE TABLE t (
+ id int,
+ c text,
+ k int,
+ v text,
+ PRIMARY KEY (id,c)
+);
+```
+
+`클러스터에 데이터 분배를 위한 Partition key는 첫번째 Primary key 인
+id로 생성되고 두번째 필드인 c 는 Clustering key가 되어
+Partition 안에서 Sorting 을 위해 사용된다.`
+
+> Clustering key를 사용하여 데이터를 정렬하게 되면 데이터 검색에 더 효과적이다.
+
+일반적으로 Primary key 의 첫번째 필드는 Partition key를 생성하기 위하여
+Hasing되고 남은 필드는 Partition 안에서 정렬을 하기 위한 Clustering key로
+사용된다.
+
+Partition 된 데이터는 Read 와 Write 의 효율성을 향상시킨다.
+Primary key 외에 다른 필드들은 개별적으로 Indexing 되어 쿼리 성능 향상에
+사용될 수 있다.
+
+`Partition key는 그룹핑된다면 여러개의 필드로 사용될 수 있다.`
+t 테이블의 다른 버전을 보면 첫번째 Primary key가
+그룹핑되어 2개의 id를 갖는걸 볼 수 있다.
+
+```sql
+CREATE TABLE t (
+ id1 int,
+ id2 int,
+ c1 text,
+ c2 text
+ k int,
+ v text,
+ PRIMARY KEY ((id1,id2),c1,c2)
+);
+```
+
+`id1, id2가 Partition key를 생성하는데 사용되고
+나머지 필드인 c1, c2가 Clustering key로서 사용된다.`
+
+- - -
+
+
+
+- - -
+Referrence
+
+
+
+{% highlight ruby linenos %}
+{% endhighlight %}
+
+{%- if site.disqus.shortname -%}
+ {%- include disqus.html -%}
+{%- endif -%}
+