전체 글 133

※걸레,겪다,곰곰이,기슭,꼼꼼히,띠다,맡기다,매다,메다,메우다,목메다,무릅쓰다,배다,베다,벼르다,볕,북돋우다,쓰레기,애꿎다,줆,쫓다,찌개,켕기다,통틀어,틈틈이,헤매다,희한하다

■ 걸레 1 더러운 곳을 닦거나 훔쳐 내는 데 쓰는 헝겊. 2 걸레처럼 너절하고 허름한 물건이나 사람을 비유적으로 이르는 말. ┖ 걸레로 닦다. ■ 겪다 1. [동사] 어렵거나 경험될 만한 일을 당하여 치르다. 2. [동사] 여러 사람을 청하여 음식을 차려 대접하다. 3. [동사] 사람을 사귀어 지내다. [유의어] 가까이하다 경험하다 느끼다2 ┖ 고통을 겪다. 손님을 겪다. 그 사람을 얼마 겪어 보지는 않았지만 나쁜 사람은 아닌 것 같네. ■ 곰곰이 여러모로 깊이 생각하는 모양. ┖ 곰곰이 생각에 잠기다. 진우는 방에 틀어박혀 뭔가를 곰곰이 생각하고 있다. ■ 기슭 1. [명사] 산이나 처마 따위에서 비탈진 곳의 아랫부분. 2. [명사] 바다나 강 따위의 물과 닿아 있는 땅. ┖ 북한산 기슭의 양지바른 ..

※강경하다,경망스럽다,경직되다,고지식하다,냉정하다,느긋하다,당혹스럽다,덜렁거리다,데면데면하다,방만하다,부담스럽다,부드럽다,산만하다,살뜰하다,소심하다,시답잖다,안면몰수,얌전..

■ 강경하다 強硬하다 [형용사] 굳세게 버티어 굽히지 않다. [유의어] 강고하다 강직하다2 강하다2 ┖ 強 강할 강 부수 弓 총획 11획 1. 강하다(強--) 2. 강(強)하게 하다 3. 굳세다 ┖ 硬 굳을 경/가로막을 경 부수 石 총획 12획 1. 굳다 2. 단단하다 3. 강하다(強--) ┖ 강경한 주장 강경한 태도 사태(事態)에 강경하게 대처하려는 입장에 선 사람들 ■ 경망스럽다 輕妄스럽다 [형용사] 행동이나 말이 가볍고 조심성 없는 데가 있다. [유의어] 경망하다1 방정맞다 호들갑스럽다 ┖ 輕 가벼울 경 부수 車 총획 14획 1. 가볍다 2. 가벼이 여기다 3. 가벼이 하다 ┖ 妄 망령될 망 부수 女 총획 6획 1. 망령되다(妄靈--), 어그러지다 2. 허망하다(虛妄--), 헛되다 3. 속이다 ┖ ..

카산드라(cassandra), Commit Log, Memtable, SSTable

카산드라는 테이블의 데이터를 넣는 저장소를 SSTable(Sorted String Table)이라 합니다. SSTable은 파일이기 때문에 데이터가 입력되는 시점에 항상 SSTable로 저장한다면 저장하는 데 많은 시간이 소요될 것입니다. 저장뿐만 아니라 데이터를 읽기 위해 항상 SSTable에서 읽어와야 한다면 읽는 시간도 오래 걸릴 겁니다. 그래서 SSTable에 저장하기 전에 메모리에 먼저 기록합니다. 이 메모리를 Memtable 이라 합니다. 그러나 Memtable의 이름에서 알 수 있듯이 Memtable은 메모리이므로 휘발성입니다. 서버가 다운되면 메모리에 기록된 데이터는 모두 지워집니다. 그러므로 메모리에 기록하기 전에 디스크 파일로 저장할 필요가 생깁니다. 이를 커밋로그(Commit Log)..

NoSQL/Cassandra DB 2021.08.11

카산드라(cassandra), 데이터를 저장하는 과정(심화)

이전 글에서는 데이터를 읽고 쓰는 과정을 간단히 설명하였습니다. 또한 아래 그림의 각 부분에 대한 설명은 Commit Log, Memtable, SSTable 글을 참고할 수 있습니다. 본 글에서는 데이터를 저장하는 과정을 조금 더 깊게 들여다보겠습니다. 카산드라가 데이터의 입력이 성공했다고 판단하는 시점은 Commit Log에 기록된 후입니다. 최종 목적지인 SSTable에 입력할 데이터를 차곡차곡 Commit Log에 기록합니다. 그러므로 Commit Log에 입력된 후라면 해당 노드가 다운되더라도 노드가 재가동되면 SSTable에 기록되지 않는 입력데이터를 Commit Log를 통해 순차적으로 기록하게 됩니다. 이것이 Commit Log의 유일한 목적입니다. Commit Log은 크기는 commit..

NoSQL/Cassandra DB 2020.11.18

카산드라(cassandra), 데이터를 읽는 과정(심화)

카산드라(cassandra), 데이터를 읽고 쓰는 과정에서는 클라이언트에서 카산드라의 데이터를 읽는 절차를 가볍게 설명하였습니다. 이번 글에서는 데이터를 읽는 과정을 좀 더 자세히 설명하겠습니다. 가장 단순한 경로는 요청한 데이터를 디스크(SSTable)에서 읽는 것입니다. 그러나 해당 데이터를 디스크에서 바로 읽는 것은 매우 비용이 큽니다. 즉, 시간이 오래 걸립니다. 그래서 카산드라는 최대한 메모리에서 읽으려고 시도합니다. 위의 그림에서는 이름이 "홍길동"인 데이터를 찾는 과정을 도식화한 것입니다. 이해를 돕기 위해 데이터를 요청한 노드에 데이터가 존재한다고 가정합니다. 데이터 조회 요청 시 ① "홍길동"의 번호 "1"을 조회 조건으로 입력하여 데이터를 요청합니다. 해당 요청을 받는 노드를 코디네이터..

NoSQL/Cassandra DB 2020.11.16

카산드라(cassandra), 데이터 저장 구조 - 클러스터링 키(Clustering Key)

카산드라 테이블 생성 시 아래의 PRIMARY KEY 구문을 유심히 보시기 바랍니다. PRIMARY KEY의 선두에 위치한 (month, day)는 파티션 키(Partition Key)이며, 파티션 키 뒤에 위치한 컬럼이 클러스터링 키(Clustering Key)입니다. 파티션 키로 데이터가 저장될 노드의 위치를 알 수 있다면 클러스터링 키의 역할은 무엇일까요? 아래의 테이블을 예로 들어 설명하겠습니다. 위의 표는 그림 1의 weather_data_by_date 테이블에 데이터를 넣은 모습을 표현한 것입니다. 데이터는 모두 5건이 존재하며 Partition Key인 month와 day가 모두 1월, 1일 이므로 동일한 노드에 저장됩니다. 그러나 동일한 노드에 데이터가 저장되더라도 무작위로 입력되는 것이 ..

NoSQL/Cassandra DB 2020.11.02

카산드라(cassandra), 데이터 저장 구조 - 키스페이스(Keyspace)

카산드라는 데이터를 노드에 저장합니다. 이 노드의 연결 구조를 클러스터(Cluster) 또는 링(Ring)이라 합니다. 그러나 데이터가 노드에 직접 저장되는 것은 아닙니다. 노드에 저장하기 위해서는 테이블이라는 논리적인 저장소가 필요합니다. 이를 도식화하면 다음과 같습니다. 위의 그림에서 노드는 키스페이스(Keyspace)를 포함하며 논리적 저장소인 테이블은 키스페이스에 포함됩니다. 카산드라에서는 테이블을 생성하기 전에 반드시 키스페이스를 생성해야 합니다. 키스페이스 생성 시 데이터를 몇 개의 노드에 복제할지를 결정하는데 이를 Replication Factor(이하 RF)라 합니다. 예를 들어 RF를 3으로 선언한 경우는 저장된 데이터를 인접한 두 개의 노드에 데이터를 복제합니다. 만약, RF를 테이블마..

NoSQL/Cassandra DB 2020.10.23

카산드라(cassandra), Virtual Node(vnode)

카산드라의 노드에는 토큰 범위(token range)가 할당돼 있습니다. 그리고 파티션 키를 통해 얻은 토큰 값으로 해당 노드를 찾게 됩니다. 그런데 토큰의 범위는 -2^63 부터 (2^63)-1 사이의 한정된 값을 가지는데 노드마다 일부를 부여합니다. 토큰의 범위를 단순화하여 예를 들면 아래의 그림과 같습니다. 카산드라의 초기 버전(ver. 1.1 이하) 에서는 위의 그림처럼 노드마다 오직 하나의 토큰 범위를 수작업으로 할당했습니다. 그러므로 노드가 추가되거나 제거된다면 기존의 토큰 범위를 조정해야 했습니다. 토큰 범위를 조정한다는 것은 해당 데이터의 이동이 발생한다는 의미입니다. 그러므로 토큰 범위를 재할당하는 작업은 비용이 큰 작업입니다. 카산드라는 이러한 문제를 개선하기 위해 카산드라 ver. 1..

NoSQL/Cassandra DB 2020.10.21

카산드라(cassandra), 토큰(token)

카산드라에서는 토큰(token) 값을 사용하여 데이터가 저장될 위치를 찾습니다. 토큰 값을 얻기 위해 파티션 키(Partition Key)를 파라미터로 전달합니다. 토큰 값으로 데이터가 저장될 위치(클러스터의 노드 위치)를 알 수 있는 이유는 무엇일까요? 위의 그림은 쉽게 설명하기 위해 4개의 노드로 구성된 클러스터를 예시로 들었습니다. 그림의 예에서 클러스터 전체에 할당된 토큰의 범위는 1부터 12까지입니다. 그리고 각 노드마다 1~12 사이의 토큰 값을 할당하였습니다. 즉, 노드 1은 1~3의 토큰 범위를 가지며 노드 2는 4~6의 토큰 범위를 가집니다. 노드 3은 7~9의 토큰 범위를 가지고 노드 4는 10~12의 토큰 범위를 가집니다. 서두의 질문으로 돌아가서 토큰 값으로 데이터가 저장될 노드의 ..

NoSQL/Cassandra DB 2020.10.12

카산드라(cassandra), 데이터 저장 구조 - 파티션 키(Partition Key)

아래 그림에서 '홍길동' 데이터를 입력할 때 저장될 노드를 찾는 역할을 파티셔너(Partitioners)라고 설명했습니다. 파티셔너가 데이터가 저장될 위치를 찾을 때는 해시(hash) 함수를 사용하는데 이 해시 함수의 파라미터(parameter)가 파티션 키(Partition Key)입니다. 즉, 아래의 그림처럼 해시 함수의 파라미터로 입력된 값 "1" 이 파티션 키입니다. 카산드라는 테이블을 생성할 때 파티션 키를 지정해야 하는데 아래의 예에서는 "번호"를 파티션 키로 지정하였습니다. 파티션 키가 해시 함수를 통과하면 토큰(token) 값을 받습니다. 토큰 값은 클러스터에 존재하는 여러 노드 중 하나에 속합니다. 토큰 값이 속하는 노드에 데이터를 저장합니다. 아래는 테이블 생성 시 파티션 키를 지정하는..

NoSQL/Cassandra DB 2020.09.23