반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

카테고리


반응형

이번주 코로나 Blog Tutorial 은 데이터베이스 입니다.

모바일기기에서는 SQLite을 사용하는데요.

이번엔 내용이 좀 기네요.

이번주 튜토리얼을 2회나 3회로 나눠서 소개해 드리겠습니다.

======= o ======= o ======== o ======== o =======

Database Access in Corona with SQLite   

프로그래밍 세계에서 특히 웹 프로그래머한테 데이터베이스 기술은 아주 큰 부분을 차지합니다. 데이터베이스는 아주 많은 데이터를 저장할 수 있는 훌륭한 기술입니다. 그것만이 아니라 그 저장한 데이터를 나중에 찾아서 사용할 수도 있습니다. 이것이 가장 중요한 역할이죠.

예를 들어 note 앱을 만든다면 유저 개개인이 만든 note들을 데이터베이스에 저장해야 할 겁니다. 물론 각각의 note를 텍스트 파일로도 저장할 수 있을 겁니다. 하지만 그러면 아마 수많은 파일을 관리해야 될겁니다. (데이터베이스를 사용하면 그냥 한게의 .db 파일만 있으면 되겠죠.) 그리고 데이터를 저장하고 찾고 하는 방법도 데이터베이스 이용과 다른 방법을 사용해야 합니다.




데이터베이스 파일은 SQL 테이블에 데이터가 저장이 됩니다.

그런데 이렇게 데이터를 저장하고 다시 나중에 검색하고 하는 일을 이전에 우리가 다루지 않았었나요?

이전에 JSON tutorial에서 제가 JSON은 같은 형태의 정보를 쉽게 저장할 수 있는 좋은 도구라고 말했었습니다. 코로나에서 디코드된 JSON 스트링이 루아 테이블로 컨트롤 하는 겁니다.


그래서 데이터베이스와 연관되서 JSON을 사용할 때 아미면 데이터베이스의 내용을 JSON으로 보낼 때 두 부분 모두 아주 파워풀하게 사용될 수 있습니다. 이런 방법들은 그 나름대로의 특징이 있습니다. 앱을 만들 때 필요에 따라 이러한 데이터를 다루는 기술을 이용하시면 됩니다.

이러한 방법들 중 어떤 방법을 사용할까를 정하는 기본적인 룰은 아주 큰 용량의 데이터를 다루게 되면 (특히 그 데이터를 search하고 앱 내에 저장되어야 한다면) 데이터베이스 기술을 사용하는것이 좋을 겁니다. 작은 용량의 데이터라면 예를 들어 configuration data나 case 들 같은 경우는 단순하게 Lua table에 저장해서 파일로 저장하고 나중에 이 파일을 이용해야 합니다. 이 경우에는 JSON으로 간단하게 처리하면 됩니다.

사실 많은 경우 큰 용량의 데이터를 저장해야할 앱을 다룰 때 SQLite와 JSON을 함께 사용하게 됩니다. JSON 객체가 단지 string일 경우 JSON blobs 를 데이터베이스에 저장할 수 있습니다. 그리고 그것을 나중에 Lua 변수로 로드하고 JSON 라이브러리를 사용해서 그 string을 table로 convert 하게 됩니다. JSON은 좀 더 작은 data chunk를 관리 합니다. 그리고 데이터베이스는 이 JSON blobs들의 모임인 큰 data structure를  organize 하게 되는 겁니다.

JSON과 함께 사용하면 데이터베이스를 사용하는데 훨씬 간편하게 사용할 수 있는 부분이 있습니다. 이와 관련해서는 나중에 다루겠습니다.

이 튜토리얼에서는 database를 create하고 파일로 저장을 하고 정보를 저장하고 데이터를 검색하는 기능을 코로나 앱에서 어떻게 해야 하는지에 대해 다루겠습니다.

Creating a database

데이터베이스를 생성하는 방법에는 두가지가 있습니다. 첫번째는 메모리에 데이타베이스를 만드는 방법으로 이 경우에는 앱이 사용중일 때만 만들어지고 사용되고 이 앱이 꺼지면 없어지게 됩니다. 그리고 두번째 방법은 데이터베이스 파일에 생성하는 겁니다. 이렇게 되면 언제든지 로드될 수 있겠죠. 이 튜토리얼에서는 메모리에서 데이터베이스를 다루는 방버은 커버하지 않을 겁니다.

데이터베이스를 사용하는 예제가 아래에 있습니다. 데이터베이스를 생성하고 save된 데이터베이스를 오픈하기 위해서 아래 작업들을 해야 합니다.

require "sqlite3"

local path = system.pathForFile( "data.db", system.DocumentsDirectory )
local db = sqlite3.open( path )


NOTE : 데이터베이스를 만드는 장소는 system.DocumentsDiretory를 사용할것을 추천합니다. 프로젝트 리소스 디렉토리는 writable 하지 않고 temp/cache 디렉토리는 OS에 의해서 순식간에 정리될 수도 있습니다. 그러므로 system.DocumentsDirectory 가 가장 안전한 곳입니다.

다시 예제로 돌아가서요. 첫번째 줄은 sqlite3 namespace를 통해서 SQLite 함수를 만드는 겁니다. 마지막줄은 특정 위치에 있는 데이터베이스 파일을 로드하기 위해 (혹은 그 위치에 데이터베이스가 없으면 생성하기 위한) sqlite3.open()을 하는 겁니다.

Creating a Table

테이블 (루아 테이블이 아닌 SQL 테이블), 컬럼, row 등과 같이 SQLite 데이터베이스를 사용하게 되면 일상에서 사용하는 용어들을 접하게 됩니다. 테이블은 데이터의 카테고리를 연상하실 수 있을 겁니다. 저 위에 note 앱을 예로 들을 때 얘기 한건데요. 앱 세팅, 유저 세팅 그리고 유저가 생성한 노트를 보관하기 위해서 각각 다른 테이블들을 가질 수 있습니다.

각각의 SQL 테이블은 복수의 컬럼들을 가질 수 있습니다. 예를 들어 id, name, description, website 등등. 프로퍼티라고 생각할 수 있겠죠. 테이블에 insert 된 각각의 아이템들은 row라고 합니다. Row는 실제로 다루게 되는 데이터들이 됩니다. 이 row들을 만들기 위해서 먼저 컬럼들을 만들어야 하는 것이죠.

local tablesetup = [[CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY autoincrement, name, description, website);]]
db:exec( tablesetup )


위의 예제에 있는 tablesetup 변수에는 SQL Query 가 string으로 저장돼 있습니다. 이 쿼리는 데이터베이스가 무엇을 해야 하는지 정리해 놓은 겁니다. 그 다음에 우리는 이 쿼리를 실행하게 되죠. db.exec로 실행을 합니다. 그러면 이 쿼리가 데이터베이스에 전달 되서 데이터베이스가 그 쿼리대로 일을 합니다. 위 예제에서는 text 라는 테이블이 만들어 지고 그 테이블에는 4개의 컬럼들이 있게 됩니다.

    id (primary key that will auto-increment upon inserting new rows)
    name
    description
    website


NOTE 1 : 대개 테이블의 첫번째 컬럼은 id 입니다. 이것은 primary key로 세팅 됩니다. (모든 테이블은 한개의 primary key 가 있어야 됩니다.) auto-increment flag는 row가 추가 될 때마다 이 컬럼의 값이 자동적으로 그 다음 id number로 설정 된다는 겁니다. (1,2,3,4 이렇게 순서가 매겨 지겠죠.) 그러니까 개발자는 이 컬럼의 row 값들을 따로 입력할 필요가 없습니다.

NOTE 2 : 위 예제에서 query string이 따옴표 대신  double brackets ([[ 와 ]]) 로 싸여져 있는 것을 보실 수 있을 겁니다. 왜냐하면 SQL query 를 만들 때 그 안에 큰 따옴표나 작은 따옴표가 사용되어야 하기 때문에 [[와 ]] 를 사용해서 좀 더 안전하게 코딩할 수 있도록 한 겁니다.

이제 새롭게 만든 test라는 SQL 테이블에 각각의 row들을 insert 할 수 있습니다. 모든 row들은 id,name,description, website 프로퍼티들이 있습니다. 그리고 각 row들은 이에 대해 각각 다른 값들을 가지고 있을 수 있습니다. 조금 전에 얘기했듯이 컬럼은 테이블에서 row에 대한 프로퍼티들로 생각할 수 있습니다.

반응형


반응형

모바일 애플리케이션으로 수익을 올리는 것을 보면 단연 애플의 앱스토어가 구글의 구글 플레이 (옛날 구글 마켓) 보다 훨씬 유리합니다.

다운수도 더 많고 유료 앱 구매자도 더 많고 심지어는 광고 클릭율도 더 높습니다.

아마존 앱스토어는 어떨까요?

아마존 앱스토어가 구글 플레이보다 훨씬 더 앱으로 수익을 올릴 수 있다는 분석 결과가 나왔네요.

아래 그 글 소개해 드릴께요.



Hey devs, Amazon apps can make almost as much as iOS apps




현재 모바일 시장에서 iOS와 안드로이드는 Top에 있는 애들입니다. 그리고 그 다음 순위는 누가차지하느냐에 대해서는 치열합니다. 예전에 BlackBerry에 대해 썼었습니다. 그리고 그 글을 뒷받침하는 글이 그 주 목요일에 있었죠. 윈도우즈 폰은 내 의견으로는 넘버 3가 되기 위해 훨씬 좋은 위치에 있는 것 같습니다. 하지만 전문 분석기관인 Flurry는 좀 다른 시각을 보이기도 하지요. 수많은 데이터를 근거로 Flurry 는 아마존이 주의 깊게 살펴 보아야 한다고 말합니다. 아마존이 안드로이드 플랫폼을 사용하고 있음에도 말이죠.

Flurry의 연구 결과의 키 포인트는 앱스토어와 구글 플레이(구글 마켓) 그리고 아마존 앱스토어에서 모두 가능한 앱을 대상으로 합니다. 똑같은 앱의 수입에 대해 IOS 를 100으로 하고 구글 플레이와 아마존 앱스토어를 비교했을 때 아마존은 89% 인데 반해 구글은 23%에 불과 합니다.




 Flurry 는 이렇게 말합니다.

    이 결과를 다른 말로 설명하면 앱 스토어에서 앱이 1달러를 벌 때마다 아마존에서는 0.89달러 그리고 구글 플레이에서는 0.23달러를 벌어들인다는 겁니다.


이 결과는 두가지 중요한 의미를 포함하고 있습니다. 첫번째로 안드로이드 개발자가 앱을 개발할 때 아마존 앱스토어를 먼저 고려할지 말지를 고민해야 합니다. 두번째로는 안드로이드 앱으로도 돈을 벌 수 있다는 것이죠. 아마존과 구글 플레이를 합하면 ios의 앱스토어와 거의 같아지게 됩니다. 그리고 긴 관점으로 봤을 때 아마존에서 지속적으로 promotion을 펴는것이 더 전망이 있을 수도 있지 않을까요?

제 생각엔 이 부분은 아마존 앱의 성공요소 중 일 부분일 뿐이라고 생각합니다. 구글은 첫번째로 검색엔진 회사라는 이미지가 강합니다. 그리고 나머지는 second 입니다. 구글인 디지털 미디어나 앱이라는 브랜드로 알려져 있지 않습니다.

아마존과 비교하면 아마존은 세계 최고의 retail 브랜드 입니다. 지난해 아마존의 브랜드 가치는 최고의 retail 브랜드 였던 월마트를 앞질렀습니다. 또한 아마존은 digital content - e-book, music and video 등- 을 가장 안전하게 구매할 수 있는 장소입니다. 똑같은 것들을 구글 플레이에서도 판매하지만 아마존의 브랜드 이미지가 훨씬 더 안전한 거래라는 이미지를 줍니다.
또한 결론적으로 소비자들은 애플 브랜드와 앱스토어를 가장 선호하고 있습니다.
그러므로 모바일 앱 개발자들은 iOS에 포커스를 맞추고 그 다음에 아마존에 맞추는 것이 좋을 겁니다.

~~~~~~
반응형


반응형

오늘 오랜만에 맨하튼 나갔습니다.

투표하러요.

재외 국민선거 제도가 올해부터 시행 되서 외국에서도 투표할 수 있게되서 너무 좋네요.


투표 장소는 뉴욕 UN 본부 건너편에 있는 건물에서 있었습니다.

미국에서는 투표소가 몇군에 있는지는 모르겠지만.. 뉴욕 뿐만이 아니라 뉴저지, 팬실배니아, 메사추세츠 뭐 이런데서도 다 여기 뉴욕으로 와서 투표해야 할 겁니다.

왠만한 주가 우리나라보다 커서 일부러 투표하러 오기 어려운 사람들도 많을 겁니다.

저는 뉴저지에 살아서 버스타고 20분 가고 걸어서 20분 가서 도착했어요. 사람들이 많이 없지 않을까 하는 생각을 했는데 의외로 건물 주변부터 투표하러 오는 한국분들이 많더라구요. 특히 보시듯이 아이들 손 잡고 온 젊은 개념 부모들이 많아서 기분 좋았어요.


여긴 3월 28일부터 투표가 시작 됐어요. 4월 2일까지 하는데요.

바로 길 건너가 UN 본부니가 반기문 사무총장님도 여기서 하루 전에 투표 하셨다고 하더라구요.


저 중에 하나가 저예요.

한국에서는 청와대가 민간인 사찰을 했다느니 김재동 비리를 캤다느니 뭐 이런 기사들이 많이 보이던데요.

모든 선거는 이전 선거부터 지금까지 한 일들에 대한 평가를 하는 성격이 있다고 봐요.

이번 선거도 국민이 지난 일들에 대해 심판을 해야 한다고 보구요.

저는 어렵게 만든 그리고 많은 분들이 목숨까지 바친 민주주의가 다시 후퇴하지는 않았으면 좋겠어요.

오늘 미얀마에서도 아웅산 수지 여사가 선거에서 이겼다고 하던데요.
미얀마에도 민주주의가 꽃피길 바라겠고 우리나라도 후퇴하는 민주주의가 다시 바로 잡혔으면 좋겠습니다.

그 마음 갖고 투표했습니다.

여러 분들도 투표 꼭 하세요~~~~~~~

추신)

투표장소 옆에 두분이 나와서 제주도 해군기지 건설 반대 피케팅을 하고 계시더라구요.

반응형