IT/Tech Notes | Posted by 철규님(최규철) 2011. 2. 23. 01:22

NoSQL - 클라우딩 컴퓨팅 환경에서의 데이터 관리



NoSQL(Not only SQL)은 데이터베이스 관리 시스템(Database Management System, DBMS)을 의하는 용어인데, 최근에는 그 동안 사용되어 온 관계형 데이터베이스 관리 시스템(Relational Database Management System, RDBMS)과 대치되는 용어로 자주 사용된다.

덕분에 가장 쉽게 NoSQL에 대한 개념을 정리하려면 RDBMS와 어떻게 다른가를 찾아보면 된다. 대표적으로 정리되는 NoSQL의 특징은 아래와 같다.

  • 고정된 테이블 스키마 없음
  • 테이블 간의 JOIN 연산을 하지 않음
  • 수평적인 확장성이 있음
  • 대용량(heavy) 읽기/쓰기 성능이 좋음

개략적은 특징은 위와 같이 정리할 수 있지만, 더 자세한 내용을 알기 위해서는 DB의 기본적인 이론, RDBMS의 특징, NoSQL의 등장 배경 등에 대해서도 알아보아야 한다.


CAP Theorem은 분산형 시스템에서 아래의 세 가지 특성 모두를 제공하는 것이 불가능하다는 것을 언급하고 있는 정리이다.

 

  • Consistency : 모든 노드는 동시에 같은 데이터를 가지고 있음
  • Availability : 모든 노드는 항상 동작 해야함
  • Partition Tolerance : 전체 시스템은 물리적으로 분리된 노드 상에서도 잘 동작해야 함

CAP Theorem에 따르면 위의 세 가지 중에 최대 두가지 특성만을 적용할 수 있고, 때문에 분산형 시스템을 설계할 때는 그 시스템의 특성에 따라 필요한 특성을 골라 시스템을 구성해야 한다.

기존의 RDBMS를 위의 특성에 대입해서 판단한다면, RDBMS가 사용될 당시에는 데이터의 항시성과 무결성이 가장 중요한 요소이었기 때문에 RDBMS는 CA 특성을 가진 시스템에 해당 된다.

하지만 네트워크 발전으로 인해 많은 양의 데이터가 생겨나고 이를 처리하기 위해 클라우드 컴퓨팅 등 분산 처리 시스템이 도입되면서 기존의 RDBMS는 이를 위한 확장성을 지원하는 못하는 한계를 드러내게 된다. 때문에 기존의 RDBMS가 가지는 CA 특성 중 하나를 포기하고 P 특성을 도입하기 위한 다양한 시도들이 나오게 되는데, 그 과정에서 NoSQL이 나타나게 된다.

시스템이 사용되는 환경에 따라서 P를 중심으로 C 또는 A 특성을 추가하게 되는데, 대표적인 실사용예는 다음과 같다.

  • Google: BigTable - Consistency + Partition Tolerance
  • Amazon: Dynamo - Availability  + Partition Tolerance
  • Digg.com: Cassandra - Availability  + Partition Tolerance
  • Twitter: Cassandra - Availability  + Partition Tolerance


이처럼 NoSQL이 기존의 RDBMS가 가지던 CA 특성 중 하나를 포기하고 P를 선택함에 따라서 RDBMS가 가지는 일부의 장점을 잃게 되었다. 대표적인 것이 ACID이다.

  • Atomic : 데이터 처리의 원자성. 성공 또는 실패만 존재. 처리 중간에 정지할 수 없음
  • Consistent : 데이터의 일관성. 서로 다른 세션에서 동시에 참조할 경우 데이터는 항상 동일 해야 함
  • Isolated : 데이터 처리 트랜젝션 중에는 다른 세션에서 데이터를 참조할 수 없음
  • Durable : 데이터 처리 트랙젝션이 종료되면 완료된 값은 항상 유지되어야 함.


NoSQL의 경우에는 위의 네 가지를 모두 보장하지 않는데, 예를 들면 CAP 중 C를 포기하고 AP를 채용한 Cassandra 같은 경우에는 100%의 Consistency를 포기하고 Eventually consistency를 지원한다. 즉, Cassandra를 이용하는 시스템의 경우 동일한 데이터에 어떤 클라이언트에서는 값을 쓰고, 어떤 클라이언트에서는 값을 읽는 다면 두 클라이언트가 가지는 데이터 값이 다를 수도 있다는 것이다.

NoSQL은 구조화된 스키마를 가지지 않고 STL의 MAP 컨테이너와 유사한 Key-Value 방식으로 데이터를 저장한다.
분류적으로는 Key-Value 방식 이외에도 GraphDB, Documente-Oriented DB, Column-Orinted DB 등이 있지만, 넓은 의미에서 MAP 컨테이너의 Key-Value 방식으로 저장된다고 보면 된다.

NoSQL을 구성하는 아키텍처는 구현하는 시스템에 따라 매우 다양하지만, 큰 공통점은 아래와 같다.

  • 각각의 물리적 노드는 내부에 가상의 노드를 가지기도 함
  • 가상의 노드는 여러 물리적 노드에 복제본을 가지고 있음 => 물리적 노드 및 그 내부에 가상의 노드를 추가하고 기존의 데이터를 복제함으로써 수평적 확장성 지원
  • Key를 기준으로 검색 요청이 올 경우 물리적 노드를 대상으로 Hashing, Tree searching, Key meta server 등을 이용하여 해당 노드에 접근함


특정한 표준에 의해 만들어진 기술이 아닌 필요에 의해서 만들어진 기술이기 때문에 구체적인 내용에서는 많은 차이점을 가진다. 하지만 어떤 NoSQL 제품을 사용하던 개념적인 큰 틀은 이러한 내용에서 벗어나지 않는다고 볼 수 있다.

댓글을 달아 주세요

IT/Computing | Posted by 철규님(최규철) 2011. 2. 22. 23:10

stackoverflow- 프로그래머를 위한 전문 Q&A 사이트


블로터닷넷에 다음과 같은 제목을 가진 기사가 떴다.

개발자를 위한 Q&A 서비스…”잡담, 저리 가”

바로 프로그래머를 위한 전문 Q&A 사이트인 스택오버플로(stackoverflow, http://stackoverflow.com/)에 대한 안내기사였다.



스택오버플로(stackoverflow)는 특정인에 의해서 운영되는 것이 아니라 WiKi와 같이 사용자에 의해서 운영되고 만들어지는 구조로 되어 있는데, 사용자들은 아무런 비용 부담없이 프로그래밍 관련 질문을 올리고 답변을 하고, 또 기존의 질문과 답변을 검색하고 볼 수 있게 되어 있다. 아주 간단한 기능만을 제공하기 때문에 화면의 구성 또한 아주 단준해서 메인 화면에는 최근에 등록된 질문, 최근에 등록된 게시물의 태그 등이 포시된다.



위의 특징만으로도 충분한 설명이 되지만, 좀 더 알아보기 위해서는 메인화면 우측의 About 링크를 확인하면 된다.
About 페이지에서 확인할 수 있는 스택오버플로(stackoverflow)의 특징을 정리하면 아래와 같다.

- 무료 프로그래밍 Q&A 사이트(a programming Q & A site that's free)
- 프로그래머인 사용자에 의해서 운영됨(collaboratively built and maintained by your fellow programmers)
- Wiki 처럼 수정 가능(Once the system learns to trust you, you’ll be able to edit anything)

그래도 명확하지 않은 사람들이 있을 것 같아서 FAQ 페이지도 준비되어 있다. FAQ 사이트의 내용을 간단하게 정리해보자.

우선 소스코드가 포함된 질문이 제일 좋지만, 특별한 프로그래밍 문제, SW 알고리즘, 개발자들이 많이 쓰는 SW 툴에 대한 질문, 프로그래머란 직업에 대한 것들도 질문해도 된다고 한다.
그리고 당면한 실질적이고 답변 가능한 질문을 해달라는 멘트도 있다. 이말은 다음의 두 예문을 통해 쉽게 이해할 수 있다.

   (1) "I would like to participate in a discussion about ______"
   (2) "I would like others to explain ______ to me"

(1)과 같이 어떤 것에 대한 토론을 원한다면 올리며 안되는 질문이고,
(2)와 같이 어떤 것에 대한 설명을 원한다면 올려도 되는 질문이다.

사이트가 양질의 자료로 가득차고, 완전히 사용자들에 의해서 운영되게 하기 위해서 포인트 및 우수 회원 제도, 뱃지 제도 등을 도입하고 있는데, 질문에 대한 답변에 따라서 포인트나 뱃지를 얻을 수도 있고, 우수 회원으로 선정될 경우 사이트의 운영 및 관리에 대한 권한 또한 생긴다.

전세계적으로 운영되는 사이트이지만 어떠한 기준으로는 분류가 되어 있지 않기 때문에, 원하는 답변을 얻거나 또는 자신의 지식을 공유하기 위해서는 태그를 적극적으로 활용해야 될 필요가 있다.

아래에 보듯이 사람들의 관심이 집중되는 질문은 조회수도 높고, 답변도 빨리 달리는 반면 1분도 안되는 시간 간격으로 등록되었지만 상대적으로 덜 관심을 받는 질문도 있다.


질문을 하나 올림에 있어서도 제목 지정이나 태그 선정 등에 대해서 공을 들어야 될꺼 같다.

댓글을 달아 주세요

  1.  댓글주소  수정/삭제  댓글쓰기 Codeflow 2013.07.02 22:48

    stackoverflow 한글판이 있으면 좋겠다고 생각하여 codeflow.co.kr 을 만들었습니다. 구경오시고, 질문도 올려주시면 성실히 답변드려요~



바다(bada)는 2010년 삼성전자가 "Smartphone for Everyone"이라는 모토 아래 발표한 스마트폰 플랫폼이다. 일부에서는 삼성전자의 "바다(bada)"와 구글의 "안드로이드(Andriod)", 애플의 "iOS"를 스마트폰 OS의 경쟁자로 묘사하고 있지만, 삼성전자가 바다(bada)를 발표하면서 내건 모토처럼 일단은 기존의 사용자를 스마트폰으로 끌어들이는 역할을 할 것으로 기대 된다.

바다(bada)에 대한 설명을 보다보면 "cost-effective"라는 단어가 자주 등장하는데, 이 역시 가격 경쟁력으로 기존의 스마트폰 플랫폼들과 경쟁을 하겠다는 의미보다는, 기존의 중고가 하이엔드 피처폰이 차지하던 시장을 대상으로, 가격적인 거부감을 최소화하면서 사용자들을 스마트폰 영역으로 끌어들이겠다는 의미가 강하다고 할 수 있다.
삼성 바다 홈페이지(http://www.bada.com)에서도 아래와 같은 도표로 확인할 수 있다.



현존하는 모바일 플랫폼 중 가장 늦게 출발하고, 또 기존의 플랫폼과는 다른 시장을 대상으로 하고 있지만, 삼성 바다(bada)를 무시할 수 없는 이유 중에 하나가 바로 위와 같은 사실에서 기인한다.

삼성 바다 홈페이지에 따르면 삼성전자는 2009년 약 2.2억대의 휴대폰을 판매했고, 이 중 터치폰이 4천만대 정도를 차지하고 있는데, 앞으로는 이 사용자들이 모두 바다(bada) 플랫폼을 사용한 단말기의 잠재적인 수요자 역할을 하게 될 가능성이 높으므로 바다(bada) 어플리케이션 개발자 등에게도 충분히 매력적인 비지니스 모델을 제시할 수 있다. 

바다(Bada)는 스마트폰을 위해 새로 만들어진 플랫폼이 아니라, 기존의 삼성 피처폰에 쓰이던 RTOS를 개선해서 만들어진 플랫폼으로, 기존의 RTOS에 스마트폰의 기본 기능인 프로그램 다운로드와 설치를 가능하게 하고 멀티터치 기능 추가, 3D 그래픽 지원, UI 개선 등을 통해 만들어진 플랫폼이다. 이를 바탕으로 Flash 지원, 각종 센서 지원, 통합 SNS 등을 통해 사용자 편의성을 기본적으로 최대한 제공하려 했다.


스마트폰 플랫폼 열풍이 불면서 등장한 또 하나의 화두로 'Eco system'을 들 수 있다.
'생태계'라는 우리말로 번역되는 'Eco system'은 그 시스템을 구성하는 구성 요소들이 얼마나 많은 상호 작용을 하고, 그 상호 작용을 통해 얼마나 많은 부가 가치를 생산해 내는지를 통해 그 시스템의 우월성을 평가 받는다.

삼성이 바다(bada) 구현하고자 하는 Eco system은 사용자와 개발자 사이를 'Samsung Apps', 'bada platform', 'Developer support' 등으로 연결하는 모양을 갖추고 있다.


이 중 가장 관심을 받고, 또 가장 중요한 부분이 'Samsung Apps'라 이름이 붙여진 어플리케이션 스토어이다.
스마트폰 또는 스마트폰 플랫폼의 경쟁력을 평가하는 아주 중요한 요소 중의 하나로 어플리케이션의 양과 질적인 면을 들 수 있는데, 삼성의 바다(bada)는 후속 주자이니 만큼 아직은 이 분에서 열세를 면치 못하고 있다. 하지만 수개월이 걸리기도 하는 타 플랫폼의 어플리케이션 등록 기간을 삼성 바다(bada) 어플리케이션 스토어는 7일 이내로 규정하고, 개발에 Tool부터 관련 정보를 쉽게 얻을 수 있는 통합 사이트를 운영하는 한편, 어플리케이션 개발 대회 Samsung bada Developer Challenge(http://developer.bada.com/challenge/index.do) 개최, 개발자들에게 바다(bada) 플랫폼을 알리기 위한Samsung bada Developer Day(http://developer.bada.com/apis/event/developerDayInfo.do?menu=MC01160100) 실시, 개발자들의 실제적인 문제 해결에 도움을 주기 위한 '삼성 바다 One Day Clinic' 실시, 오프라인 개발 지원 센터 OCEAN(http://developer.bada.com/developercenter/ocean/index.do) 운영 등 개발을 위한 지원을 아끼지 않고 있다.

바다(bada) 어플리케이션 개발 환경을 간단히 살펴보면, 이에서도 개발자의 편의를 위한 많은 고려가 있었음을 알 수 있다. 공식적으로 릴리즈 되는 SDK에는 통합 개발 환경(IDE)가 포함되어 있어 별도의 IDE 설치 과정이 필요 없으며, IDE를 포함한 SDK, 분리된 언어팩(LP) 지원, SDK 및 LP 통합 지원 등 작은 부분에서도 초기 개발자의 편의성에 신경을 썼다.


바다(bada) 플랫폼을 기존의 RTOS에서 발전해 나온 플랫폼이니만큼 초기 플랫폼임에도 불구하고 어느 정도의 안정성을 갖추고 있고, 잠재적 수요층의 규모가 엄청나다는 장점을 가지고 있는 반면, 어플리케이션의 수가 부족하고 아직은 지원하는 단말이 많지 않아 개발자의 입장에서는 규모의 경제를 실현하기에는 시기상조라는 단점 또한 가지고 있다.

바다(bada) 플랫폼이 기존의 모바일 플랫폼 양대 산맥인 구글 안드로이드와 애플 iOS와 경쟁하기는 버거워보이나, 처음 세웠던 전략이 먹힌다면 적어도 수적인 면에서는 모바일 플랫폼의 한 축을 담당할 수 있을 것으로 예상되고, 향후에는 이 양적인 세력을 바탕으로 질적인 성장 또한 이뤄낼 수 있을지도 모른다. 

댓글을 달아 주세요