adsense(728_90)


noSQL의 기본 개념 정리 IT

작년에 noSQL기반 기술을 이용해서 성공적으로 프로젝트한 것을 블로그로 정리하려다가 먼저 첫번째로 noSQL의 기본 개념에 대해 먼저 정리하는 것이 좋겠다는 생각이 들어 Jimbojw.com의 2년전 포스트를 번역 및 정리할까 한다.

noSQL기술이 BigData처리와 함께 갑자기 화두가 되고 있다. 5년전 memory cache기반의 noSQL기술을 접했을 때에는 '이걸로 과연 어디에 적용할 수 있을까?' 하며 부정적이었는데, 어느새 이런 기술이 이전의 많은 기술을 뒤엎기라도 할 기세다. 아무튼 noSQL에 대한 나의 부정적인 감정(?)에 대한 토로는 나중으로 미루고 이번에는 noSQL의 기본 개념에 대해 정리해보자.

구글의 BigTable paper에 보면 구글의 BigTable이 대체 무엇인지에 대해 간단하고 명료하게 기술하고 있다.

A Bigtable is a sparse, distributed, persistent multidimensional sorted map.

이 간단한 문장에 noSQL기반 기술의 거의 모든 기본이 들어있다고 보면 된다. 자 이제 하나 하나 파들어가볼까?

Map이다

이게 정말 핵심중의 핵심이다. 이것만 이해해도 상당히 많은 기본개념을 이해한거라 나는 생각한다. 바쁘면 이제 이 글의 나머지를 안 읽어도 된다(^^). 거의 모든 noSQL은 Map이다. 즉, 유일한 키와 그것에 관련된 하나의 값을 가진 자료형이 noSQL이 데이타를 저장하는 기본적인 방식이다. JSON방식으로 예를 들면 다음과 같은 형태로 noSQL은 자료를 저장한다.
{
 "zzzzz" : "woot",
 "xyz" : "hello",
 "aaaab" : "world",
 "1" : "x",
 "aaaaa" : "y"
}
영구적이다 (Persistence)
noSQL은 기본적으로 데이타베이스의 역할을 수행한다. 당연히 데이타는 어느 정도 이상은 영구적이어야한다. 다만 메모리기반의 noSQL의 경우 이 영구적인 특성이 조금 떨어진다고 볼수도 있겠다.

분산기반이다 (Distribute)

noSQL이 나온 배경중의 하나는 기존의 RDB가 데이터 확장에 따른 확장성에 제약이 심했기 때문이다. 따라서 대부분의 noSQL은 데이터 저장 및 복제에 대해 설계 초기부터 분산시스템을 기반에 두게 되었다. 구글의 BigTable의 경우 Google File System(GFS)을 기반으로 하고, HBase를 비롯한 많은 noSQL은 하둡(Hadoop)의 분산 파일 시스템(HDFS)을 사용한다.
데이타 복제와 분산처리를 어떻게 하는지 자체에 대한 것은 사실 noSQL 기본 개념과는 큰 상관이 없는 주제이므로, 그리고 나도 사실 그쪽에는 내공이 딸리므로 넘어가자.

정렬기능이 있다 (Sorted)

모든 noSQL이 이 기능을 가지고 있다는 게 아니라 HBase, BigTable같은 일부가 가지고 있는 기능이다. 키와 값이 알파벳순으로 정렬이 되는 기능을 가진다. 실로 어마어마한 데이타를 처리하기 위한 용도로 만들어진게 noSQL이다보니 이런 정렬기능은, 혹은 이런 정렬기능의 성능은 너무나도 중요한 요소이다.

다차원적이다 (Multidimentional)

noSQL의 개념이 기존 데이타베이스에 익숙한 사람들에게 전달되기 위해 많은 noSQL기술들이 기존의 개념을 많이 차용한다. 테이블이나 칼럼 혹은 Row같은 RDB의 개념이 그대로 noSQL에서도 쓰이는 경우가 있고 이로 인해 noSQL의 이해를 어렵게 하는 경우가 있다. 새술은 새푸대에 담았으면 싶다. 그래서 다차원적인 Map을 지원하는게 noSQL의 특징이라고 강조하고 싶다. 다차원적이라는 말이 어렵다면 Map의 Map을 지원한다라고 할까? 즉,
{
 "1" : {
 "A" : "x",
 "B" : "z" },
 "aaaaa" : {
  "A" : "y",
  "B" : "w"
}
,
 "aaaab" : {
  "A" : "world",
  "B" : "ocean"
},
 "xyz" : {
 "A" : "hello",
  "B" : "there"
},
 "zzzzz" : {
 "A" : "woot",
 "B" : "1337"
}
}
위의 코드와 같이 Map의 Map의 형태로 데이터를 저장하는 것이 가능하다. 이 특성을 이용해서 "1"이나 "aaaa"를 row에 대한 키로 정의하고 "A"나 "B"를 column의 키로 정의하는 것이 가능하고 전체를 하나의 테이블로 정의할수도 있겠다.

엉성하다 (Sparse)
noSQL의 데이타 모델의 특징은 엉성하다는데 있기도 하다. 기존 RDB가 명확한 데이타 스키마 기반으로 데이타를 처리하고 그 스키마를 변경하는데 많은 비용이 들었다면, noSQL의 경우는 그보다 훨씬 더 데이타 모델에 대해 유연성을 제공한다.
{  // ...
 "zzzzz" :
{
"A" :
{

"catch_phrase" : "woot",
}
  }
}
위의 예처럼, "zzzz" Row의 "A"칼럼은 이제까지 없었던 "catch_phrase"라는 키를 가지고 있다. 이처럼 noSQL은 데이타 모델에 대해 훨씬 더 유연한 특성을 가지고 있다.

그럼 어떤 종류의 noSQL이 있을까?
맵+엉성+다차원= memcache: 일단 가장 단순한 형태로 memcache를 들수 있다. 쉽게 말해 메모리상에 맵형태로 데이터를 처리하는 방식인데, 이 메모리가 해싱기법에 의해 다중 서버에 의해 관리되는 방식이다. 클라이언트는 자신만의 해싱키를 이용해서 자기가 원하는 서버에 데이터를 저장하고 처리할 수 있다. 하지만 Persistence를 지원하거나 확장성이 높은 형태를 지원하지는 않는다. 또한 메모리만을 사용하므로 가격이 저렴한 편도 아니다. 하지만 가장 단순하게 noSQL을 적용해서 처리할 수 있는 기술이고 특히 캐시용도로 많이 사용한다.

맵+엉성+다차원+분산= 오라클 coherence, IBM ObjectGrid: memcache에다가 그리드 기반의 기술을 접목한 것으로 메모리만 충분히 많다면 가장 빠른 처리시스템을 보유할 수 있고 데이타 복제나 분산기반 확장등에 아주 많은 잇점을 가져올 수 있다. 별도의 솔루션을 이용하면 일반 Disk기반의 영속성등을 처리할 수도 있다.

맵+엉성+다차원+분산+영속성+정렬=HBase, BigTable, Cassandra: 이것은 앞서 설명했던 기본적인 noSQL의 기능을 대부분 가지고 있는 기술들이다. 더 설명할 게 없다. MongoDB같은 문서기반의 noSQL도 설명할 수도 있겠는데, 일단 본 포스트는 기본 개념에 충실하자고 쓴 글이므로 여기서 마무리 한다.


이정도면 기본이겠지
noSQL기술이 얼마나 앞으로 사람들을 더 열광시킬지 잘 모르겠다. 분명 재미있는 기술이고 부분적으로나마 상당히 효과를 볼만한 곳이 많은 기술이다. 아무튼 기본적인 noSQL의 개념은 여기까지로 하고 그것에 얽힌 내 경험은 다음에 풀어보도록 하겠당.

핑백

  • NoSQL?? | CSniper 2012-06-04 19:59:39 #

    ... e Book C'S Foundation C'S OT History C'S 재학생 C'S 졸업생 NoSQL?? 2012/06/04By 13기 최일지 링크 오늘 빅데이터에 관한 걸 보다가 NoSQL이라는 기술이 있길래 찾아보았습니다. SQL을 안 쓰고 어떻게 찾고 저장할까? 했드만… Map의 형태로 정보를 저장하더군요 ... more

덧글

  • 긁적 2011/05/29 17:51 # 답글

    오호라. 재미있는 기술이군요. 객체지향형DB의 과도기 같은 느낌도 좀 있구요(잘은 모르겠지만^^;;;) 여튼 다움 포스트 기대하겠습니다^^
  • Calmglow 2011/05/29 19:09 #

    예 감사합니당
  • RillFlow 2011/06/21 11:04 # 삭제 답글

    제가 본 NoSQL 설명들은 대부분 복잡해서 다 읽고 나서도 항상 "그래서 NoSQL이 뭐지?" 라는 의문을 갖게 만들었는데, 이 포스트를 보고 나서야 감이 오네요.
    간단 명료한 글 감사합니다. ^^
  • Calmglow 2011/06/22 12:53 #

    저도 아는게 많지는 않은지라 오히려 처음 접근하시는 분들에게 눈높이를 맞출 수 있었던 것 같네요. 찬사 감사합니다.
  • shakddoo 2011/07/21 16:58 # 삭제 답글

    좋은 글 감사합니다.
    그런데 '엉성함'에 대한 궁금점이 있습니다. 제가 앱엔진으로 서비스를 제공하고 있는데 앱엔진에서는 BigTable을 사용합니다. 한번은 속성을 추가해야 해서 그냥 필드하나 추가 하면 되겠지 했는데, 오류가 나더군요. 알아봤더니 속성을 추가했을 시 기존에 저장된 데이터 값을 모두 알아서 변경해줘야 한다고 하던데, 이건 no sql의 엉성합?에 대한 장점을 이용하지 못한 예 인가요?
  • 팔팔청춘 2011/09/07 11:47 # 삭제 답글

    좋은 요약 감사드립니다.^^
  • Calmglow 2011/09/09 03:04 #

    댓글까지 남겨주시니.. 명랑 인터넷사회의 모범네티즌이십니다. 감사해요
  • tkang 2011/09/09 08:23 # 삭제 답글

    기름기 쫘~악 뺀 설명 감사드립니다. ^^
  • 넘고 2011/11/01 14:04 # 삭제 답글

    좋은 요약 감사합니다^_^
  • 다크엔젤 2011/12/12 13:08 # 삭제 답글

    NoSQL 관심이 있으신 분들은 한번 방문해 보시길 바랍니다



    아직 국내에 Couchbase 관련 자료가 많이 없어서 신규 카페라 원하는 정보가 모두 있는건 아니지만 좋은 정보가 많이 있으니



    한번 방문해 보시길 바랍니다



    naver cafe: http://cafe.naver.com/couchbase



    facebook: http://www.facebook.com/pages/Couchbase/159035930813922



    twitter: http://twtkr.olleh.com/Couchbase_Korea
  • 애너벨리 2012/02/28 10:36 # 삭제 답글

    요약이 잘돼있네요 ^^ 잘보고갑니다 ~ 괜찮으시다면 제 블로그로 퍼가도 될까요? 출처는 꼭 밝히겠습니다.
  • Calmglow 2012/02/28 23:48 #

    굳이 펌 안하셔도 본 포스트가 없어질 일은 거의 없을 겁니다. 출처 밝혀 퍼가는 거야 개인 자유지만... 굳이 개인 정보 저장용으로 사용하시고 싶으시면 evernote나 google docs등 활용할 만한 전용 도구는 많은데, 개인 블로그에 clone화 하는 게 어떤 의미이신지 모르겠네요. 아무튼 감사합니다.
  • 2012/04/25 18:45 # 답글 비공개

    비공개 덧글입니다.
  • Calmglow 2012/04/27 23:25 #

    감사합니당~~~
  • j 2012/12/26 17:51 # 삭제 답글

    형~ NoSQL 찾아보다 많이 보던 아이디가 구글 상위에 떠서 들어와봤어요. ㅎ
    잘지내요? 한국 들어가면 술 한잔 해요~~
댓글 입력 영역


Google Analytics