달력

12

« 2019/12 »

  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  

   

   

 

Realm ()

·         SQLite, OrmLite, greenDAO, Core Data REST API 통해서 데이터를 관리하는 방법을 개선하기 위해 개발된 오픈소스 모바일 데이터베이스

·         모바일 데이터 베이스로 안드로이드의 SQLite, iOS Core Data 대체해서 있습니다.

·         간결하고 짧은 코드로 속도가 빠른 앱을 만들 있습니다.

·         자바 객체를 해석해서 그 객체의 데이터를 그대로 저장, 획득할 수 있습니다.

 

http://realm.io/kr/

   

'Development > Database' 카테고리의 다른 글

메타데이터(Meta Data)  (0) 2018.10.08
dbdiagram.io - 온라인 ERD 도구  (0) 2018.10.02
Realm - 오픈소스 모바일 데이터베이스  (0) 2018.09.25
CAP 정의, CAP theorem, 브루어 정리(Brewer’s theorem)  (0) 2018.09.17
VLDB(very large data base)  (0) 2018.09.01
DBClient  (0) 2018.08.26
Posted by codedragon codedragon

댓글을 달아 주세요

   

Code::Blocks

오픈소스, 크로스 플랫폼 C, C++, Fortran IDE

   

http://www.codeblocks.org/

   

   

다운로드

http://www.codeblocks.org/downloads

   

Download the binary release 클릭

   

Download from에 있는 Sourceforge.net 링크 클릭

   

   

 

 

 

직접다운로드


codeblocks-13.12-setup.zip.001


codeblocks-13.12-setup.zip.002


codeblocks-13.12-setup.zip.003


Posted by codedragon codedragon

댓글을 달아 주세요

   

   

Docker

  • VMware, Microsoft Hyper-V(Virtual PC), Xen, 리눅스 KVM 등의 가상 머신과 비슷
  • Linux 기반의 Container RunTime 오픈소스
  • Virtual Machine과 유사한 기능을 가지지만 Virtual Machine보다 훨씬 가벼운 형태로 배포 가능
  • 이미지 생성과 배포에 특화된 기능을 제공

   

https://www.docker.com/

   

   

Docker Korea

http://forum.docker.co.kr/

 

'Security > Virtualization' 카테고리의 다른 글

VMWARE Workstation Pro 12 설치하기-install  (0) 2015.11.03
Amazon AWS 강좌-qwikLABS  (0) 2015.08.08
Cloud Computing 이란?(클라우드 컴퓨팅)  (0) 2015.03.13
Docker – 오픈소스 가상화  (0) 2015.02.01
Amazon Web Services  (0) 2015.01.28
VMWare Player 설치  (0) 2015.01.16
Posted by codedragon codedragon

댓글을 달아 주세요

2014. 12. 6. 00:15

SQLite Development/Database

   

http://www.sqlite.org/

   

   

   

SQLite

내장된 관계형 데이터베이스

   

   

   

SQLite의 특징

  • 오픈 소스
  • 최소한의 라이브러리만으로 동작
  • 관리유저나 설정파일 등이 불필요
  • 원자성(atomicity), 일관성(consistency), 독립성(isolation), 영속성(durabilitiy)이라는 데이터베이스에 필요한 특성을 갖추고 있습니다.
  • SQL92에서 정의된 명령어의 대부분 이용가능
  • 하나의 데이터베이스가 하나의 파일로 저장
  • MS Access보다 좀 더 유연하고 성능이 뛰어남

   

   

*SQL92

SQL92는 표준SQL(ANSI/ISO SQL)을 지칭합니다.

http://en.wikipedia.org/wiki/SQL-92

   

   

데이터베이스

데이터를 영속적으로 저장할 수 있는 공간

   

테이블

  • 데이터베이스에서 데이터가 모이는 집합공간
  • SELECT, INSERT, UPDATE, DELETE같은 쿼리문으로 제어할 수 있습니다.

   

데이터 베이스 특성

원자성(atomicity)

하나의 트랜젝션이 하나의 작업 단위로 처리.

여러 단계에 걸쳐 수행되더라도 트랜젝션이 실패가 되면 모든 상태가 트랜젝션 수행 상태 전으로 rolled back되어, 이전 상태를 유지하게 됩니다.

즉, 트랜젝션이 완전히 수행되거나, 아무것도 수행되지 않은 상태(All or Nothing)을 의미합니다.

일관성(consistency)

트랜잭션 수행후 완전한 데이터만 저장이 됩니다.

독립성(isolation)

격리성이라고도 합니다.

트랜젝션 수행 완료되기전까지의 변경되는 내용이 다른 트랜젝션에 영향을 주지 않습니다.

영속성(durabilitiy)

비휘발성으로 사라지지 않게 하는 것.

스마트폰 전원이 꺼져도 데이터가 계속 저장되어 있습니다.

   

   

   

Posted by codedragon codedragon

댓글을 달아 주세요

   

BackTrack site

  • 오픈 소스 리눅스 배포판으로 배포판 안에 해킹과 관련된 도구와 설명서를 제공
  • 더 이상 업데이트 되지 않으며 다운로드도 제공하지 않습니다.
  • 최종 버전은 2012년 8월 출시된 BackTrack5 R3
  • 대신 Kali Linux를 통해 지원

http://www.backtrack-linux.org/

   

   

BackTrack Reborn - Kali Linux

http://www.kali.org/

   

'Security > Tools' 카테고리의 다른 글

BackTrack 실행 w/VMWare Player  (0) 2014.12.07
BackTrack tutorial-Wiki  (0) 2014.12.06
BackTrack - 모의해킹도구  (0) 2014.12.05
TeamViewer, 원격 제어 프로그램  (0) 2014.12.03
VMWare Player 설치 / 실행  (0) 2014.11.17
Icon Viewer, 아이콘(icon)추출 프로그램  (0) 2014.10.29
Posted by codedragon codedragon

댓글을 달아 주세요

SQLite의 특징

  • 오픈 소스
  • 최소한의 라이브러리만으로 동작
  • 관리유저나 설정파일 등이 불필요
  • 원자성(atomicity), 일관성(consistency), 독립성(isolation), 영속성(durabilitiy)이라는 데이터베이스에 필요한 특성을 갖추고 있습니다.
  • SQL92에서 정의된 명령어의 대부분 이용가능
  • 하나의 데이터베이스가 하나의 파일에 저장

   

   

데이터베이스

데이터를 영속적으로 저장할 수 있는 공간

   

테이블

  • 데이터베이스에서 데이터가 모이는 집합공간
  • SELECT, INSERT, UPDATE, DELETE같은 쿼리문으로 제어할 수 있습니다.

   

데이터 베이스 특성

원자성(atomicity)

하나의 트랜젝션이 하나의 단위로 처리.

어려 단계에 걸쳐 수행되더라도 트랜젝션이 실패가 되면 모든 상태가 트랜젝션 수행 상태 전으로 rolled back되어, 이전 상태를 유지하게 됩니다.

즉, 트랜젝션이 완전히 수행되거나, 아무것도 수행되지 않은 상태(All or Nothing)을 의미합니다.

일관성(consistency)

트랜잭션 수행후 완전한 데이터만 저장이 됩니다.

독립성(isolation)

격리성이라고도 합니다.

트랜젝션 수행 완료되기전까지의 변경되는 내용이 다른 트랜젝션에 영향을 주지 않습니다.

영속성(durabilitiy)

비휘발성으로 사라지지 않게 하는 것.

스마트폰 전원이 꺼져도 데이터가 계속 저장되어 있습니다.

   

   

DatabaseAdapter

데이터베이스와 데이터를 불러오는 기능 수행시 중계역할을 수행하는 클래스

DatabaseHelper

SQLiteOpenHelper클래스를 상속받다 데이터베이스에 접근하게 하는 사용자 정의 클래스

Cursor

Select쿼리문으로 데이터를 읽으면 Cursor을 이용하여 데이터의 위치를 가리키고 ArrayList에 정하는 역할을 하는 클래스

SQLiteOpenHelper

데이터베이스에 접근할 수 있도록하는 클래스

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

데이터베이스 접근 방법

   

   

ListView에 데이터베이스의 저장된 데이터를 표시하는 도식도

   

   

어플리케이션 개발시 SQLite 사용

  • 애플리케이션이 작성한 SQLite의 데이터베이스는 /data/data/<패키지명>/databases 디렉토리에 생성됩니다.
  • 하나의 애플리케이션에 대해서 하나의 디렉토리가 할당됩니다.
  • 데이터베이스는 다른 애플리케이션에서 읽고 쓰기 할 수 없습니다. (다른 애플리케이션에서 사용 가능하게 하고 싶을 경우 Content provider 구성해야 합니다.)
  • 애플리케이션이 작성한 데이터베이스를 조작하고자 할 때는 /system/xbin 디렉터리에 있는 sqlite3 명령어를 사용합니다.

   

   

SQLite 사용시 기본 사항

테이블의 작성과 삭제

 

Create [TEMP] TABLE <테이블명> (Column정의, [테이블제약]);

  • TEMP(또는 TEMPORARY) 키워드를 지정하면 임시 테이블을 작성할 수 있습니다.
  • 이 테이블은 데이터베이스를 close했을 때에 자동적으로 삭제됩니다.

   

 

SQLite에서 지원하는 컬럼 타입

컬럼타입

설명

text,

varchar

문자열

smallint,

integer

정수(2바이트 또는 4바이트)

real,

float,

double

부동소수(4바이트 또는 8바이트)

boolean

true 또는 false

date,

time,

timestamp

시간(날짜, 시간, 날짜 + 시간)

blob,

binary

바이너리

   

 

테이블의 작성 예

Create table contact_list(

_id integer primary key autoincrement,

name text not null,

tel text not null default 'unknown',

unique (name, tel),

check(length(tel)>=3));

);

_id: primary key라는 걸 알려주기 위해 일반적으로 _id형태로 표시

*외래키는 지원하지 않음

   

* 외래키(Foreign Key 참조키): 테이블과 테이블이 관계를 갖고 연결할때 참조하는 속성으로 다른 테이블의 기본키가 됩니다.

   

   

테이블 삭제 Drop 명령어 사용

drop table 테이블명;

   

 

테이블명의 변경과 컬럼 추가

테이블 명의 변경에는 ALTER 명령어의 RENAME TO를 사용

alter table 테이블명 rename to 새로운 테이블명;

 

테이블의 column추가에는 alter 명령어의 add column을 사용

alter table 테이블명 add column 컬럼 정의;

 

   

 

SQLite의 내장 함수(Built-in Function)

 

내장함수(Built-in Function)

함수

개요

min(X,Y,…,)

최소값을 반환합니다.

max(X,Y,…,)

최대값을 반환합니다.

typeof(X)

데이터의 형을 반환합니다.

length(X)

문자열의 길이를 반환합니다.

substr(X,Y,Z)

X의 문자열의 Y번째에서 Z문자의 길이의 문자열을 반환합니다.

abs(X)

절대값을 반환합니다.

round(X,Y)

X의 수치를 소수점 이하 Y에서 반올림합니다.

upper(X)

대문자로 변환합니다.

lower(X)

소문자로 변환합니다.

coalesce(X,Y,…,)

최초의 NULL이 아닌 값을 반환합니다.

hex(X)

문자열을 16진수 표기로 반환합니다.

Ifnull00,Y,…(X)

최초의 NULL이 아닌 값을 반환합니다.

random()

Radom한 값을 반환합니다.

randomblob(X)

X바이트의 random한 값의 열을 반환합니다.

nullif(X,Y)

2개의 값이 다르면 최초의 값을 반환합니다. 같다면 NULL을 반환합니다.

sqlite_version()

SQLite의 버전을 반환합니다.

quote(X)

문자열을 SQL의 문자열로 삽입할 수 있도록 escape처리를 실행합니다.

last_insert_rowid()

마지막에 삽입한 레코드의 ID를 반환합니다.

sum(X,Y,…,)

NULL이 아닌 행의 값의 합계를 반환합니다.

행이 없는 경우 NULL을 반환합니다.

total(X,Y,…,)

NULL이 아닌 행의 값의 합계를 반환합니다.

행이 없는 경우 0를 반환합니다.

avg(X,Y,…,)

NULL이 아닌 행의 값의 평균을 반환합니다.

행이 없는 경우 NULL을 반환합니다.

count(X)

그륩 안에서 X가 NULL이 아닌 행의 행수를 반환합니다.

count(*)

그룹 별의 행수를 반환합니다.

 

   

SQLite 데이터베이스 이용하기

 

SQLiteOpenHelper

  • 데이터베이스를 생성하고 오픈하거나 닫기를 하려면 SQLiteOpenHelper 객체를 사용해야 합니다.(데이터베이스에 접근할 수 있게 해주는 클래스)
  • SQLiteOpenHelper 클래스는 애플리케이션에서 요구하는 내용에 따라 데이터베이스를 생성하거나 업그레이드하는 기능 제공합니다.
  • DatabaseHelper클래스는 SQLiteOpenHelper클래스를 상속받아 데이터베이스에 접근하게 하는 사용자 정의 클래스

   

public class DatabaseHelper extends SQLiteOpenHelper{

 

// 생성자

public DatabaseHelper (Context context){

super(context, "dbtest", null, 1);

//context: Activity등의 Context 인스턴스

//dbtest: 데이터베이스의 이름

//null: 커서 팩토리(보통 null지정)

//1: 데이터베이스 스키마 버전

}

public void onCreate(SQLiteDatabase db){

//테이블을 생성하고 초기 데이터를 추가

String table_sql = "create Table test( _id INTEGER PRIMARY KEY

AUTOINCREMENT, name TEXT NOT NULL);";

db.execSQL(table_sql);

}

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){

// 버전 번호를 확인해서 새로운 스키마로 적절하게 업그레이드 함

db.execSQL("DROP TABLE IF EXISTS test");

onCreate(db); //onCreate 메소드를 호출해서 새로 table 셋팅

}

}

  

   

   

INSERT - 데이터 추가

데이터베이스에 데이터를 저장하는 명령어

ContentValues cv = new ContentValues();

cv.put("title", "해피 데이");

cv.put("name", "홍길동");

db.insert("member", "title", cv);

   

SELECT - 데이터 가져오기

db.query(TABLE_NAME,        //테이블병

String[] {"name", "member"},        //컬럼 명세

null,                                 //WHERE 절

null,                                 //WHERE절에 전달될 데이터

null,                                 //groupBy절

null,                                 //having절

MEMO_ID + " DESC"         //ORDER BY

);

   

UPDATE - 데이터 업데이트

데이터베이스에 저장된 데이터를 수정하는 명령어

ContentValues cv = new ContentValues();

cv.put("name", "홍길동");

 

String[] params = new String[] {"dragon"};

db.update("member", cv, "userid=?", params);

 

   

DELETE - 데이터 삭제

데이터베이스에 저장된 데이터를 삭제하는 명령어

String[] params = new String[]{userid};

db.delete("member", "userid=?", params);

 

   

 

데이터 불러오기

rawQuery() 메소드를 사용해 SELECT 구문을 직접 실행

Cursor c = db.rawQuery("SELECT name FROM sqlite_master where type='table' AND name='constants'", null);

   

query() 메소드를 인자로 각 부분의 값을 넘겨 실행

public Cursor query(String table, String[] columns, String selection, String[] selcetionArgs, String groupBy, String having, String orderBy, String limit)

 

설명

table

대상 테이블 이름

columns

값을 가져올 컬럼 이름의 배열 (null : 모든 열)

selection

WHERE 구문. 물음표를 사용해 인자의 위치를 지정할 수 있음 (null : 모든 레코드)

selectionArgs

WHERE 구문에 들어가는 인자값

groupBy

GROUP BY 구문 (null : 미사용)

orderBy

ORDER BY 구문 (null : 미사용)

limit

레코드수 지정 (null : 미사용)

 

SQLiteQueryBuilder 클래스의 query() 메소드 이용

   

 

   

   

커서(Cursor)

  • 데이터베이스나 내용 제공자(Content Provider)의 데이터를 쿼리하여 가져올 때 사용됩니다.
  • 결과값을 가지고 있는 포인터입니다.
  • 즉, Select쿼리문으로 데이터를 읽으면 Cursor을 이용하여 데이터의 위치를 가리키고 ArrayList 같은 배열에 데이터베이스에서 읽은 데이터를 저장해주는 역할을 하는 클래스입니다.

   

커서의 활용

moveToFirst

가장 처음에 위치한 레코드로 커서를 이동

moveToNext

커서를 다음 행으로 옮김

moveToLast

가장 마지막에 위치한 레코드로 커서를 이동

moveToPrevious

이전 레코드로 커서를 이동

moveToPosition

특정 레코드로 커서를 이동

getPosition

커서가 현재 가리키고 있는 위치를 반환

getCount

전체 결과 건수가 몇 개인지 확인

getColumnCount

컬럼들의 전체 개수를 반환

getColumnIndex

특정 컬럼 번호 조회

getColumnName

특정 인덱스 값에 해당하는 컬럼 이름을 반환

getColumnNames

결과에 포함된 전체 컬럼 이름

isFirst

커서가 첫번째 레코드에 위치하는지를 반환

isLast

커서가 마지막 레코드에 위치하는지를 반환

isBeforeFirst

커서가 첫번째 레코드의 앞에 위치하는지를 반환

isAfterLast

커서가 마지막 레코드의 뒤에 위치하는지를 반환

getString()

getInt()

컬럼값 반환

requery()

쿼리를 재실행

close()

커서가 확보한 자원을 모두 해제

 

 

트랜잭션(Transaction) 다루기

여러 데이터베이스 연산이 반드시 모두 성공해야 하는 경우가 있습니다.

이런 경우, 연산들 중 하나라도 실패하면 연산 모두를 없던 일로 철회해야 합니다.

모든 연산이 성공한다면, 비로소 연산 결과가 데이터베이스에 실제로 반영됩니다. 이와 같이 데이터베이스의 무결성이 보장되는 상태에서 요청된 연산들을 완수하기 위한 기본 작업 단위를 "트랜잭션(Transaction)"이라고 한다.

 

mDatabase.beginTransaction();

try{

 

mDatabase.setTransactionSuccessful();

}catch(Exception e){

}finally{

mDatabase.endTransaction();

}

 

Posted by codedragon codedragon

댓글을 달아 주세요

이미지 출처: images.google.com 키워드 검색

기사 출처: http://www.ciokorea.com/t/37/%EB%B3%B4%EC%95%88/21317

 

1. 품질

2. 기능

3. 보안

4. 더 빠른 혁신

5. 확장성

6. 맞춤화

7. 협업

8. 표준

9. 최첨단

10. 비용

 

 

1. 품질

  • 현재 상용 툴 수준으로 간단하게 설치할 수 있는 오픈소스 툴들이 많습니다.
  • 구매나 조달 프로세스가 없는 오픈소스가 많다는 점을 감안한다면 더 간단할 수도 있습니다.

 

2. 기능

  • 오픈소스 소프트웨어는 지원 비용이 추가되는 경우에도 전반적으로 훨씬 저렴합니다.
  • 조사에 따르면, 향후 5년간 리눅스 사용을 늘릴 계획을 갖고 있다는 기업은 80%에 달하는 반면, 윈도우 사용을 확대하겠다고 밝힌 기업은 20%에 불과했습니다.

 

3. 보안

  • 오픈소스의 투명성이라는 장점 때문에
  • 사용자가 잠재적인 보안 취약점을 찾기 위한 목적으로 코드를 점검할 수 있습니다.
  • 오픈소스의 경우 데이터 스트림에서 무슨 일이 일어나는지 알 수 있다는 장점이 있습니다

 

4. 더 빠른 혁신

  • 공통의 인프라를 혁신하는 방법을 씁니다.
  • "오픈소스는 처음부터 소프트웨어를 개발하는 프로젝트의 필요성을 없애주는 '소프트웨어 토대'를 제공한다. 특정 목적에 맞게 맞춤화가 가능해 개발 프로세스에 박차를 가할 수 있다"(애널리스트인 존 올트시크)

 

5. 확장성

  • 기존의 상용 소프트웨어들은 엔터프라이즈나 중소기업 등 특정 시장 부문의 요구사항에 초점을 맞추는 경우가 많다.
  • 오픈소스 프로젝트에는 고객의 요건에 맞춰 개발되는 경우가 많기 때문이다.
  • 예를들어, 그루폰은 전적으로 오픈소스 기술에 의지해 IT 백본을 구현하고 있으며 탈렌드(Talend)의 오픈소스 데이터 통합 플랫폼을 이용하고 있습니다.

 

6. 맞춤화-적응성과 유연성(Adaptability and Flexibility)

  • 오픈소스 소프트웨어에 정통한 사용자들은 소스 코드를 찾아 수정할 수 있다.
  • 다른 사람의 도움 없이, 사용하고 있는 오픈소스 소프트웨어를 우리의 요구사항에 맞춰 확장할 수 있다"

 

7. 협업

  • 과거에는 처음부터 개발을 하거나, 외부 업체의 제품을 이용하거나, 콘소시움을 구성해 제품을 개발 및 유지관리 해야 했습니다.
  • 그러나 오픈소스 소프트웨어는 서로 경쟁하는 기업들이 협력을 하도록 만들어, 과거의 프로세스를 간소화 시킵니다.
  • 기업은 스스로를 차별화하는 프로젝트에 돈과 시간을 투자할 필요가 없이 개발 단계부터 에 참여하면서 소프트웨어의 발전 방향에 영향을 주고, 다른 개발자와 관계를 구축할 수 있습니다.
  • (블랙 덕의 조사에 따르면, 50%의 기업들이 오픈소스에 기여를 하고 있으며, 56%는 올해 이런 기여의 폭을 넓힐 계획이라고 밝혔다. )

 

8. 표준

  • 성공을 거둔 오픈소스는 특정 업체에 종속될 염려 없이 동일한 기능을 제공할 수 있습니다.
  • 인터넷 초기에 많은 웹 표준 도입에 원동력을 제공했던 플랫폼인 아파치 웹 서버가 대량 도입의 장점을 보여주는 좋은 사례.

 

9. 최첨단

  • 많은 분야에서 오픈소스 소프트웨어가 상용 플랫폼을 뒤쫓아 가는 것이 아니라 선도를 하고 있습니다.
  • 클라우드와 모바일, 빅 데이터, 사물의 인터넷(IoT) 분야에서 이들 플랫폼의 진화를 견인하는 중요한 오픈소스 프로젝트가 추진되고 있습니다.
  • 많은 웹들이 리눅스 오픈스택, 아파치, 마이SQL, PHP에 기반을 두고 있습니다.
  • 현재 서로 경쟁을 하고 있는 오픈심(OpenSim), 오픈 원더랜드(Open Wonderland), 오픈 콰크(Open Qwaq) 등 오픈소스 기반 가상 환경 플랫폼이 가상 현실에서도 오픈소스가 중요한 역할을 하고 있습니다.

 

10. 비용

  • 오픈소스가 완전 '공짜' 아닙니다. 오픈소스 업체들은 특정 소프트웨어 버전을 중심으로 소프트웨어와 지원, 맞춤화 개발에 가격을 책정해 요구하고 있습니다. 도입과 통합을 위해 내부 자원에 추가로 투자를 필요가 있을 있습니다.
  • 오픈소스는 이상 비용 때문에 사용하지 않습니다. 왜냐하면 품질과 보안 기능을 입증해 보였고 현재는 대중화와 확산이 가능하고 최신 기술을 선도하고 있기 때문입니다.

Posted by codedragon codedragon

댓글을 달아 주세요