<< 1월 2010 | | 3월 2010 >>

오픈 소스 기반의 고성능의 분산 데이터 저장 시스템들(NoSQL)

High Performance Scalable Data Stores

최근들어 MySQL, Oracle, DB2, and SQL Server 등의 상용 관계형 DB보다 성능이 우수한 오픈소스 및 인덱스 기반의 데이터 저장 구조를 가진 이른바 NoSQL이라는 새로운 형태의 데이터 스토리지 솔루션이 개발자들사이에 많이 회자되고 있네요.

재정이 빈약한 Web 2.0 기업들이 구글이나 아마존, MS 등의 대기업군을 따라 잡을려면 오픈 소스 기반의 NoSQL 밖에는 대안이 없다고 생각한다는 증거죠.
한 예로, 페이스북은 기존 데이터베이스인 MySQL이 아니라 카산드라(Cassandra) 데이터 스토어에서 개발해 새로운 검색 기능을 추가해서 전세계 개발자들에게 주목 받았죠.

그래서 관련 Paper인 Rick Cattell의 High Performance Scalable Data Stores라는 내용을 한번 정리해 보았습니다.

이들 NoSQL 이라는 데이터 저장 시스템의 공통된 특징들은...
  • 데이터 베이스라 부르기를 거부하고
  • Key & Value로 저장되고
  • 분산 환경 지원되고
  • Call level interface 지원(DBMS에 접근하는 표준)
  • 막대한 양의 데이터를 처리할 수 있는 대용량 데이터의 빠른 인덱싱
  • 클러스터나 그리드에서의 구동을 위해 다양한 테이블로 데이터베이스를 나눠야 하는 복잡한 작업과 ‘샤딩(sharding)’ 없이 손쉽고 저렴하게 여러 서버들의 수평적 확장(horizontal scaling)됨
  • 데이터의 스키마와 속성들을 동적 정의

Data Stores의 다양한 관점에서 종류들을 요약해보자면...

1. Key-value Stores : 해쉬 방식으로 데이터 저장
 - Redis : 트위터에서 사용된 C기반의 데이터베이스
 - Scalaris : Erlang 기반 데이터 베이스
 - Tokyo Tyrant : B-trees & hash, C기반 데이터 베이스, memcached 프로토콜을 지원
 - Voldemort : LinkedIn 채택중, Java 기반 데이터베이스
 - Riak : REST지원, Erlang 기반 데이터 베이스

2. Document Stores
 - SimpleDB : 아마존에서 제공하는 DB
 - CouchDB : Map-Reduce, rest 지원, Apache 소속, Erlang 기반 데이터 베이스
 - MongoDB : 다중 인덱싱가능, Map-Reduce 지원, C++ 기반 DB

3. Extensible Record Stores : 컬럼 지형의 데이터 베이스
 - BigTable : 구글의 구조화된 데이터 관리, C++기반, B-trees
 - HBase : Java 기반 파일 시스템, B-trees, BigTable과 유사한 Hadoop 기반
 - HyperTable : 오픈소스 칼럼을 기반으로 하는 데이터베이스, 지역 검색 엔진인 지벤츠에 적용됨, BigTable과 유사
 - Cassandra : Twitter에서 MySQL + memcached에서 Cassandra 전환중, facebook에서는 검색에서 활용중, 그외 Digg 사용중, apache incubate된 상태임, Java기반
 
4. Relational Databases : RDBMS
 - MySQL Cluster : C++기반의 오픈 소스 관계형 데이터 베이스
 - ScaleDB : C++기반,  MySQL에서 branch됨
 - Drizzle :  C++기반, MySQL의 아류작
 - VoltDB : Java 기반, 개발진행중임
 
각 데이터 저장장치별로 동시제어, Replication, 트랜젝션 모델, 완성도, 히트 등의 관점에서 비교를 해 놓아서 서비스 아키텍처 설계시 DB선택 및 설계에 도움을 받을 수 있을것 같네여.

[참고 사이트]

OAuth1.0a + OAuth Access Tokens using credentials draft

Twitter.com에서 2-legged 방식으로 access token을 제공하는 방식의 OAuth Access Tokens using credentials draft 스펙을 적용해서 운영을 하고 있군요. 이에 대해 분석을 좀 해 봤습니다.

1. 배경
 - 기존에는 웹 방식으로 3-legged 방식으로 진행되어 웹이 지원되지 않는 클라이언트 어플에서 한계점이 있었음.
 - OAuth WRAP/2.0이 아직 안나와서 OAuth Access Tokens using credentials draft + OAuth 1.0a를 트위터에서 구현한 것임.
 - 이 스펙의 draft로 인해 클라이언트 및 모바일 어플에서도 확장되어 사용할 가능성이 많아 보임.

2. 개요
 - OAuth1.0a +  OAuth Access Tokens using credentials draft(xAuth) 개념 도입함.
 - xAuth : x_auth_mode, x_auth_username, x_auth_password 요청 파라미터에 추가되었음.
 - 기존은 3-legged 방식이었는데 이 방식은 2-legged 방식으로 변환되어 바로 access token을 제공하여 이 토큰을 가지고 보호 개인 콘텐츠들을 공유할 수 있는 기반을 마련해 줌.
 - Third Party(Consumer)에서는 아이디/패스워드는 관리하지 않고 access token만 관리를 하게 됨.
 - OAuth WRAP/2.0는 FriendFeed,  Facebook에서 적용하고 있음.
 
3. OAuth Access Tokens using credentials draft 상세 정보
 *. 요청시 파라미터
  - x_auth_mode=client_auth
  - x_auth_username=트위터 아이디
  - x_auth_password=트위터 패스워드
  - oauth_consumer_key : 트위터에서 발급한 consumer 인증용 키
  - oauth_signature_method : 시그너처 암호화 방법
  - oauth_signature : 시그너처
  - oauth_timestamp : 요청 시간
  - oauth_nonce : phishing용 방어 Nonce
  - oauth_version : OAUTH 스펙 버전(1.0)

 *. 요청 응답 파라미터(아래 파라미터만 Consumer 사이트에서 관리함)
  - oauth_token : TwitterPic에서 이미지 공유가능하도록 접근 허용 키 발급(access token)
  - oauth_token_secret : 키에 대한 credentials 값
  - x_auth_expires : 인증 세션 만료 기간(0:무기한, 만료되었을 경우 Consumer 사이트는 재 인증 절차를 밟아야 함)

4. 이슈
 - username, password 정보를 Third-Party에서 저장해서 관리할 가능성 존재.
 - Phishing Attacks, Session Fixation Attacks의 OAuth 자체가 안고 있는 보안 이슈에 대해서도 보완도 필요해 보임.

[참조사이트]

[북 리뷰] 돈 버는 모바일, 아이폰 앱스토어

iphone- 지은이 : 야마사키 준이치로 지음, 성윤아 옮김
- 출판사 : 랜덤하우스코리아
- 출판일자 : 2009.12.10

책 내용을 살펴보면...
 
1장 아이폰 애플리케이션으로 꿈을 실현하자
-인디의 꿈을 이루어 줄 앱스토어
-아이폰 주말 기업! 실제 비용은 얼마나 드나?
-대기업이 끼어들기 어려운 시장
-수많은 애플리케이션에 묻히지 않기 위해
-세계 시장에 당당히 진출하는 1인 기업가!

1장을 요약하자면 세계 77개국의 시장이 있고, 아이디어와 250여만원이면 어플을 개발할 수 있는 환경이 되고, 개인이 얼마든지 뛰어들 수 있어 진입 장벽도 없고,기존 마케팅의 원리가 적용받지 않는곳이 아이폰 시장이라고 한다.
대상층이 폭넓다기보다는 소수 마니아를 향하고 있고, 상업적이기 보다는 특유의 고집과 특색이 강한 등 이런 특징으로 인해 대기업의 장점이 상쇄되어 인디 개발자가 더 유리하다고 한다.
마케팅 부분은 롱테일의 원리를 최대한 활용 하면 인디 개발자에게도 기회를 줄 수 있다.
 
2장 아이폰 비즈니스의 최신 트렌드를 잡아라!
-아이폰보다 더한 자유, 구글‘안드로이드’
-휴대폰 애플리케이션 시장의 동향은?
-나도 모르게 권리를 침해할 수 있다!
-클라우드와 매쉬업

2장을 요약하자면 개방과 자유를 표방한 구글 안드로이드의 매력, 애플(아이폰)의 앱스토어, 구글(안드로이드)의 안드로이드, 마이크로소프트(윈도우 모바일)의 윈도 마켓플레이스, 노키아(심비안)의 오비스토어, SKT(윈도우 모바일)의 T스토어, KT(윈도우 모바일)의 쇼앱스토어 등의 앱스토어들이 있지만 단말간 호환, 콘텐츠 수급능력에 의해 우열이 가려질 것이다.
본인의 앱이 혹시 다른 사람이나 기업의 상표권을 침해할 수 있는지에 대해 미리 조사해 보는게 좋고, 배경음악을 사용할 경우에는 저작권 침해에 유의하라. 구글의 아키텍처를 보면 안드로이드가 클라우드의 진가를 취대한 발휘할 것이다.

3장 그들은 어떻게 아이폰 비즈니스에 성공했나?
-낡은 연립주택에서 탄생한 히트작
-4개월 만에 50만 번 다운로드
-안드로이드가 휴대폰의 벽을 허문다?

3장을 요약하자면 창조하는 즐거움을 느끼기 위해서 작고 허름한 공간에서 열정을 쏟아내어 전통과 개성을 투입한 결과 좋은 어플을 개발한 작자의 경험을 투영시켰고, 저자는 프로모션에 투입여력을 개발에 투자하라고 한다.만들어서 올리고 개선하면서 어플의 완성도를 높이는 것도 중요해 보인다.
안드로이드의 활발한 커뮤니티에서 많은 지식들을 얻을 수 있고, 안드로이드는 하드웨어 컨트롤이 가능해서 인디 가전등으로 확장 가능한 점을 들어 안드로이드의 장점을 설명한다.

4장 애플리케이션 준비에서 공개까지 비즈니스 핵심 매뉴얼
-애플리케이션 공개를 위해 준비할 것
-개발하는 동안 유의할 점
-등록할 때는 이것만 기억하자!
-드디어 공개된 애플리케이션! 어떻게 홍보할까?

4장을 요약하자면 아이폰 어플을 등록하는 전 과장을 설명함으로써 처음 사용하는 아이폰 개발자로 하여금 쉽게 접근할 수 있도록 노하우를 전하고 있다.
기술적 단계 : 매킨토시 준비, 아이폰 SDK를 설치하고 애플리케이션 개발, 시뮬레이터로 검증, 아이폰으로 전송하여 검증,애플리케이션 완성, 애플리케이션 공개로 끝난다.
애플과의 커뮤니케이션 과정 : 애플 ID 취득, 애플 개발자 커넥션에 등록(아이폰 SDK 다운로드), 아이폰 개발자 프로그램 구입, 은행 정보 수속, 세무정보 수속, 고객 지원용 페이지 개발, 앱스토어 애플리케이션 등록, 애플리케이션 심사, 애플리케이션 프로모션, 애플리케이션 버전업으로 끝난다.

그리고 마지막으로 아이폰 애플리케이션 15개 추천을 해 주었다. 앱커넥트, 앱박스 프로, 트위티2, 야미투, 웨더버그, 구글어스, 다음/네이버지도, 디스커버, 드롭박스앱, 스카이프, 위키피디아 모바일, 포토샵 모바일, 비쥬얼드2, 헤비매크, 쿠킹대시를 추천했다.

위 책은 아이폰 어플을 개발해서 올려보고 싶은 개발, 기획자 모두에서 도움이 되는 일반적인 내용입니다. 개발 스킬에 관련된 내용은 아니지만 스마트폰에서부터 아이폰의 위치, 안드로이드, 아이폰 어플 등록, 트랜드 등 다양한 사례를 통해 재미있게 기술되어 있습니다.
태그 :

Iphone Ringtone(벨소리) 무료 사용 방법

Iphone을 사면서 어플에만 신경쓰다보면 관심을 놓게되는 부분아 Ringtone(벨소리) 관련 contents죠. 근데 인기도 측면에서는 어플 못지않게 인기있는게 사실입니다.
그래서 무료로 벨소리를 다운 받을 수 있는 곳이 있어 소개해 드립니다.

Audiko

Audiko.net  이라는 곳인데 한번 들러보세요. 직접 mp3파일을 올려서 벨소리를 만들 수 있고(인기있는 구간을 선정할 수도 있음), 기존에 만들어놓은 벨소리를 다운받을 수 있습니다. 물론 인기있는 순으로도 알 수 있고, 검색해서 벨소리를 받을 수도 있습니다.

소녀시대, 백뱅, 2PM, 2AM 들의 곡도 있네요 ^^

toString 클래스 유틸리티 샘플

toString()자동으로 만들어주는 소스들이 많지만 그 중 하나를 소개해 드립니다. 심플하고 쉽게 활용이 가능하여 공유합니다.

1. ClassUtils 샘플

package client;

import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class ClassUtils
{
private ClassUtils() {
}

public static String toString(Object o)
{
String ret = null;
List<Object> list = null;

try {
list = new ArrayList<Object>();
ClassUtils.toString(o, o.getClass(), list);
ret = o.getClass().getName().concat(list.toString());
} catch (Exception e) {
e.printStackTrace();
ret = null;
}
return ret;
}

private static void toString(Object o, Class<?> clazz, List<Object> list)
{
Field[] f = null;
try {
f = clazz.getDeclaredFields();
AccessibleObject.setAccessible(f, true);
for (int i = 0; i < f.length; i++) {
list.add(f[i].getName() + "=" + f[i].get(o));
}
if (clazz.getSuperclass().getSuperclass() != null)
toString(o, clazz.getSuperclass(), list);
} catch (Exception e) {
e.printStackTrace();
}
}
}
2. 테스트  샘플

package client;

public class ClassUtilsClient
{
public String hello = "Test";
public int i = 9999;

public static void main(String... args) {
System.out.println(ClassUtils.toString(
new ClassUtilsClient()));
}
}
3. 테스트 결과
client.ClassUtilsClient[hello=Test, i=9999]

[관련포스트]
 
태그 :

HTML5의 개요

1. HTML5 변천사
 - HTML3.2 -> HTML4.01 -> XHTML1.0 -> HTML5

2. HTML Elements

2.1. 섹션(구조) 정의 요소
<section>: 문서의 특정 영역을 구분
<header>: 문서 또는 영역의 머리말에 해당하는 내용 구분
<footer>: 문서 또는 영역의 꼬리말에 해당하는 내용 구분
<nav>: 다른 페이지를 가리키는 링크들의 모음(네비게이션) 구분
<article>: 하나의 글 또는 기사(본문)의 단위 구분
<hgroup> : 태그에서는 h1-h6태그를 사용하고 subheading, 대체제목, line으로 구분할때 사용되어짐
<aside>: 본문의 흐름에서 벗어나는 내용 구분(참고, 팁, 사이드바, 인용)

2.2. 콘텐츠 삽입 요소
<figure>: 이미지, 비디오 등에 자막(캡션) 표현
<source> : codec의 지원이나 media type에 기초하여 브라우져가 선택하게 하여 video와  audio파일을 거기에 맞게 대체시켜 줌
<video>: 별도의 플러그인 설치를 필요로 하지 않는 동영상 자료를 표시(UI API 제공)
예) <video src="myVideo.ogg"></video>
<audio>: 별도의 플러그인 설치를 필요로 하지 않는 음원 자료를 표시(UI API 제공)
예) <audio src="myAudio.ogg" controls="controls">
<canvas> : 그래프나 게임 같은 동적인 비트맵 그래픽 표시하는데 사용
예)
<canvas id="myCanvas" width="500" height="500"></canvas>
<script type="text/javascript">
function draw(){
   var canvas = document.getElementById('myCanvas');
   if (canvas.getContext){
     var defineContext = canvas.getContext('2d');
   }
}
</script>
<embed> : 플러그인 컨텐츠 표시할 때 사용

2.3. Form 요소
<datalist> :
<keygen> : 키의 페어를 생성하기 위한 컨트롤을 나타냄
<output> : 스크립트에 의한 계산 결과 등 어떠한 출력 결과를 나타냄

2.4. 인터렉티브(상호작용) 요소
<dialog>: 사람 간에 일어난 대화 영역 구분
<details>: 추가적인 상세정보를 담고있는 영역(툴팁의 내용)
<datagrid>: 동적인 데이터를 효과적으로 표현(트리, 목록, 표)
<menu>, <command>: menu는 command 요소를 포함하여 즉각적인 동작 발생(콘텍스트 메뉴)
<command> : 사용자가 실행할 수 있는 명령어를 표시하는데 사용

2.5. 텍스트레벨 요소
<mark>: 강조할 필요까진 없으나 주목해야 할 문구를 표현(형광펜)
<meter>: 특정한 범위에 속하는 숫자 값을 표현(월급, 득표율, 테스트 점수 등)
<time>: 특정한 시각을 표현
<progress>: 현재 진행 중인 상태를 표현(다운로드 완료율)
<ruby/rt/rp> : 루비를 마크업함

3. HTML5 Attributes

3.1. input type
 - text, password, hidden, file 같은 제한적인 사용을 하며 필요한 부분은 스크립트로 제어해왔는데 좀더 다양해짐
 . tel : 전화번호
 . search : 검색 박스
 . url : 웹 주소
 . email : 이메일 주소
 . datetime : 정확하고 절대시간 지정
 . date : 날짜 pickers
 . month : 잘 표시
 . week : 주표시
 . time : timestamps
 . datetime-local : 로컬의 날짜와 시간
 . number : 숫자(spinbox)
 . range : 슬라이더
 . color : 색깔 pickers

3.2 Form Controls
 - form을 동적으로 콘틀로할 수 있게 됨
  . required : 사용자들은 빈필드로 submit할 수 없음
  . placeholder   : input내에 text를 보여주거나 focus가 활성화 되면 필드를 공백으로 만들어 주고, focus가 되지 않았을때는 기본적으로 입력된 내용이 보여지게 함 
  . autofocus : 특정 input태그에 focus를 이동시키지만, script가 아닌 마크업이기때문에 모든 웹사이트에서 동일한 동작을 함
  . autocomplete : 자동 완성 데이터 저장
  . novalidate : form 요소에는 폼을 제출할 때 유효성 검증을 거치지 않도록 함
  . list : datalist와 select와 함께 사용할 수 있음
  . pattern :정규표현식으로 체크 가능

3.3. html
 - manifest : 응용 프로그램은 저장을 위한 캐쉬와 데이타 추출을 위한 manifest를 가짐, 어플리케이션 캐싱과 관련됨

4. HTML5 Features
 - Web workers : HTML4 지원 브라우저의 자바스크립트는 단일 프로세스로 순차적으로 동작하는데 반해 HTML5는 다중 쓰레딩 지원(단일 프로세스로 순차적으로 동작함을 극복한 동시에 다양한 어플리케이션을 실행가능하게 함)
  예)     var worker = new Worker('js/worker.js'); worker.onmessage = function(event) {console.log('Result: ' + event.data);}
 - Web Database : 자바 스크립트를 이용해 웹 브라우저 내장 데이터베이스에 SQL을 통해 질의하는 API며, 오프라인 웹 애플리케이션 개발이나 모바일에서 로컬 데이터 캐싱이 필요할 때 유용하게 사용할 수 있으며, 일반적인 DB 라이브러리 수준의 메소드를 지원해 줌
  예) var dbase = window.openDatabase("Test", "1.0", "Sample DB", 90000);
 - Web Storage : 업체별 로컬 스토리지기술을 표준화함(IE의 userData, FF의 Dom Storage, Flash의 Local Shared Object, Google Gear), Session Storage와 Local Storage 를 제공함
 - Web Socket : 한 웹 페이지에서 서로 다른 서버에 있는 웹 페이지에 양방향 통신을 할 수 있는 별도 프로토콜을 정의할 수 있는 API를 제공함
 - Geolocation API : 위치 정보(GPS/WiFi/3G based location)를 브라우저에서 Script API를 통해 제공받을 수 있음(위치 정보 : 위도, 경도, 높이, 정확도, 진행방향, 진행속도)
  예) navigator.geolocation.getCurrentPosition(function(position);
 - Drag & Drop API :  쉬운 Drag & Drop 지원
 - Application cache : App Cache는 원하는 리소스를 오프라인으로 선언하면 되고 CACHE MANIFEST로 선언후 cache.manifest 파일에 내용을 적으면 됨
 - Cross-document messaging : 서로 다른 도메인간의 메세지를 주고 받을 수 있음(보안 이슈 발생 가능성 존재)
 - Microdata :  itemprop라는 속성을 통해 사용자 정의로 의미를 부여해 검색 엔진이나 시맨틱 엔진이 이를 처리할 수 있게 함
 - HTML-RDFa : Microdata와 함께 마크업언어에 의미 정보 표현이 가능해 시맨틱웹의 기반 표준이 될 것임

5. 데모 사이트
 - HTML 5 Demos and Examples
 - HTML5 Gallery
태그 :

우리아들 지훈이 한컷

하지훈

하지훈

하지훈

하지훈

하지훈

하지훈

하지훈

태그 :

HTML에서 Local Storage 에 관한 기술

1. 개요

기존의 데이터 저장은 클라이언트 사이드는 쿠키, 서버 사이드는 세션 외에는 GET아나 POST 방식으로 데이터를 전달받으면서 기능 구현을 했습니다. 하지만 Server-Side 로 처리 되던 데이터 처리에 대한 부하를 Client-Side 로 가져 오면서 좀더 여유있는 리소스의 이용을 통하여 보다 빠른 속도의 웹 어플리케이션의 구현이 가능 해지게 한 방식이 바로 Local Storage 에 관한 기술들입니다.
오프라인(Offline) 상에서 수정된 데이터를 온라인(Online)이 되었을 때 실 서버로 동기화하여 온라인 Only의  환경적 제약을 뛰어 넘을 수 있게 될 것입니다.

2. 종류

 - Internet Exploere 의 userData - 1M
 - Firefox 의 DOM Storage - 5M
 - Flash Local Shared Object - 100KB
 - Google Gears
 - Cookie  - 4K

3. 영향

이 기술은 HTML 5 Client-Side Database Storage에 영향을 주어서 draft에 포함되어 있습니다.
Ajax Performance 이슈의 대안으로도 활용되고 있죠.

[참조 사이트]