[NoSQL/Cassandra] NoSQL의 대표주자 Cassandra 설치하기

사용자 삽입 이미지
요즘들어 NoSQL이라는 말들을 많이 듣게 됩니다. 대용량 데이터베이스의 한계점을 넘어들 수 있는 것(?)들 쯤으로 인식이 되더군요. 좀 더 자세한것을 알아보기 위해서는 사용을 해볼 필요가 있을것 같습니다. 앞으로는 카산드라에 대해 몇개의 글을 작성해 보겠습니다.

최신버전의 카산드라는 [이곳]에서 다운받을 수 있습니다. 이글을 쓰고 있는 시점에서 보기엔 아직 1.0도 가지 못한 상태입니다만 그래도 Facebook과 Twitter등에서 멀쩡하게 사용중인것을 보면 능력에서 만큼은 인정 받을정도이지 않을까 생각이 됩니다. 카산드라는 일반적인 키/밸류 시스템보다 좀더 진화된 형태인 컬럼패밀리(ColumnFamily) 기반의 데이터 모델을 지원합니다. 이 개념은 쉬우면서도 쉽지 않은 개념이더군요. 계속해서 관련글을 작성해 보도록 하겠습니다.

지금부터 작성하는 설치에 관련된 글은 리눅스 기반에서 설명을 할 것입니다.

1. 필요조건 확인

카산드라는 구동하기 위해서는 단지 Java 1.6 이상의 버전이 설치되어있으면 됩니다.

2. 설치 방법

다음의 간단한 설치 방법은 기본적인 하나의 노드 클러스터를 구동하는 방법만을 설명할 것입니다.
[code]tar -zxvf apache-cassandra-$VERSION.tar.gz
cd apache-cassandra-$VERSION
sudo mkdir -p /var/log/cassandra
sudo chown -R `whoami` /var/log/cassandra
sudo mkdir -p /var/lib/cassandra
sudo chown -R `whoami` /var/lib/cassandra[/code]
로그가 쌓이는 위치나 데이터가 저장되는 공간의 위치를 변경하고 싶을 경우 conf/cassandra.yaml 파일의 설정을 변경하면 됩니다.

3. 실행

[code] bin/cassandra -f[/code]
위의 명령을 통해 카산드라를 foreground에서 구동할 수 있습니다. -f 옵션을 사용하지 않을 경우 기본적으로 백그라운드 형태로 구동을 하게 됩니다.

4. 클라이언트 접속하기

[code]bin/cassandra-cli –host localhost[/code]
[code]Connected to: “Test Cluster” on localhost/9160
Welcome to cassandra CLI.

Type ‘help;’ or ‘?’ for help. Type ‘quit;’ or ‘exit;’ to quit.
[default@unknown] [/code]

위와같은 명령을 사용하면 현재 구동중인 서버에 접속할 수 있습니다. 물론 원격지라면 적절한 아이피나 호스트명을 적어주면 접속이 가능하겠죠. –host옵션 없이 구동할 경우 클라이언트만 실행이 됩니다. 이후에 connect명령을 이용하여 호스트에 접속을 하여야 합니다.

5. 간단히 사용해 보기

4번과 같이 정상적으로 접속이 된다면 이후에 help;?명령을 통해 실행가능한 명령어 목록을 볼 수 있습니다. quit;exit;를 입력하면 접속이 종료됩니다. 몇가지 예시를 통해 카산드라를 느껴보도록 합시다.
[code][default@unknown] create keyspace Keyspace1;
ece86bde-dc55-11df-8240-e700f669bcfc
[default@unknown] use Keyspace1;
Authenticated to keyspace: Keyspace1
[default@Keyspace1] create column family Users with comparator=UTF8Type and default_validation_class=UTF8Type;
737c7a71-dc56-11df-8240-e700f669bcfc

[default@KS1] set Users[jsmith][first] = ‘John’;
Value inserted.
[default@KS1] set Users[jsmith][last] = ‘Smith’;
Value inserted.
[default@KS1] set Users[jsmith][age] = long(42);
Value inserted.
[default@KS1] get Users[jsmith];
=> (column=last, value=Smith, timestamp=1287604215498000)
=> (column=first, value=John, timestamp=1287604214111000)
=> (column=age, value=42, timestamp=1287604216661000)
Returned 3 results.[/code]
위와 같은 과정을 통해 키스페이스를 생성하고 컬럼패밀리를 생성하고 컬럼을 추가할 수 있습니다. 이 예는 jsmith라는 키와 거기에 속한 몇가지 속성값을 입력하는 예제입니다. 위의 예제에서의 User는 컬럼패밀리(Column Family)이며 jsmith는 키(Key)이고 first, last, age는 컬럼(Column)이고 ‘John’, ‘Smith’, 42는 값(Value)입니다.

[QR코드리더] ZXing을 이용하여 내 안드로이드 어플에 QR코드 스캐너 도입하기

[ZXING]이라는 정말 잘 만들어진 안드로이드에서도 사용할 수 있는 QR코드/바코드 스캐너가 있습니다. 아이폰에서는 적당히 자유롭게 쓸 수 있지만 안드로이드에서는 Intent라는 좋은(?) 개념때문인지 Barcode Scanner라는 프로그램을 설치하여 그것을 Intent로 호출해 사용하게끔 하고 있더군요.

그리하여 ZXing의 안드로이드 소스를 커스터마이징 해서 그냥 사용할 수 있도록 약간 고쳐보았습니다. 만들어진 소스는 ZXing android + android-integration을 통합하여 제작하였습니다.

사용하시는 방법은 소스코드를 그냥 통채로 올리니 참고하시면 되겟지만 간단하게 기록을 해보겠습니다.

1. AndroidManifest.xml에 다음을 추가합니다.

[code]<activity
  android:name=”com.google.zxing.client.android.CaptureActivity”
  android:screenOrientation=”landscape”
  android:configChanges=”orientation|keyboardHidden”
  android:theme=”@android:style/Theme.NoTitleBar.Fullscreen”
  android:windowSoftInputMode=”stateAlwaysHidden”>
    <intent-filter>
      <action android:name=”com.google.zxing.client.android.SCAN”/>
      <category android:name=”android.intent.category.DEFAULT”/>
    </intent-filter>
</activity>

<uses-feature android:name=”android.hardware.camera”/>
<uses-permission android:name=”android.permission.CAMERA”/>
<uses-permission android:name=”android.permission.INTERNET”/>
<uses-permission android:name=”android.permission.FLASHLIGHT”/>
<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE”/>[/code]

2. 리소스 파일을 복사합니다. UI를 변경하고 싶을 경우 capture.xml을 변경하시면 됩니다.

res/layout/capture.xml
res/layout/ids.xml

3. 스캐너 호출 방법 (android-integration)

[code]// QR코드/바코드 스캐너를 구동합니다.
IntentIntegrator.initiateScan(MainActivity.this);[/code]

4. 결과 처리 방법

[code]protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
  // QR코드/바코드를 스캔한 결과 값을 가져옵니다.
  IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);

  // 결과값 출력
  new AlertDialog.Builder(this)
  .setTitle(R.string.app_name)
  .setMessage(result.getContents() + ” [” + result.getFormatName() + “]”)
  .setPositiveButton(“확인”, new DialogInterface.OnClickListener()
  {
    @Override
    public void onClick(DialogInterface dialog, int which)
    {
      dialog.dismiss();
    }
  })
  .show();
}[/code]

1394066880.zip