'Tools'에 해당되는 글 4건

  1. 2011.05.11 Toad의 강력한 기능을 eclipse 안에서 - Toad Extension for eclipse
  2. 2010.08.27 [강좌A08] 안드로이드 실전 개발 - SQLite (3)
  3. 2010.08.26 SQLite User Guide for Android, iPhone - 소개, GUI Tools 등 (5)
  4. 2010.08.10 [강좌A04]안드로이드 실전 개발 - 아이콘 제작 편 (6)
2011.05.11 16:01

Toad의 강력한 기능을 eclipse 안에서 - Toad Extension for eclipse




Toad의 강력한 기능을 Toad를 실행하지 않고 eclipse내에서 이용할 수 있다면 개발자들에게는 유용할 것이다. Quest사의 Toad Extension(freeware)를 이용하면 eclipse 뿐만 아니라, Visual Studio에서도 툴 환경 내에서 Toad의 강력함을 이용할 수 있다.

Toad Extension for eclipse를 설치해보자.

1. Eclipse 실행 – Help > Install New Software 메뉴 선택

2. Install 대화상자의 Work with 부분에 다음의 주소를 입력

http://toaddownload.quest.com/toadextensions/eclipse/freeware/
다음, 다음 눌러서 설치하시고 re-start 하면 설치가 끝납니다.

Toad Extension은 Toad 없이도 구동 가능합니다. 다만, 기존에 Toad가 설치되어 있다면 toad User Files 디렉토리를 읽어서 현재 설정된 Connection정보를 Connection window에 자동으로 설정해 줍니다. 다만, 저장된 패스워드 정보를 읽어오지 못해서 패스워드는 다시 설정해 줘야 합니다.

Toad Extension 실행해 보자.

Eclipse 실행 후 window > Open Perspective > Other 선택 후 Toad Extension을 선택하면 됩니다.


Toad Extension Overview

Connections View

Toad Connections View에서는 신규 접속을 만들거나 기존 Connection 정보를 이용하여 Oracle에 접속할 수 있습니다. Oracle 접속은 Direct TCP/IP를 이용해서 접속할 수도 있으며 Oracle Tnsname 정보를 이용하여 접속할 수도 있습니다.

Schema Browser & Detail Browser

좌측의 Schema Browser에서 Database Object 항목들을 선택하면 우측에 상세정보가 나타납니다.
기본적인 Object만 나오는군요. Freeware라 그런지 dba들이 사용하기에는 좀 기능이 약해 보입니다. 그렇지만 왠만한 프로젝트에서는 이 툴 하나만 있어도 무방할 듯 보입니다.

좌측 Schema browser에서는 기본적으로 트리구조로 보이지만 Tree/Multi Tab/Category 방식의 UI를 지원합니다. (스키마 브라우저의 트리 아이콘을 클릭해 보시면 레이아웃이 바뀐답니다.)

스키마 브라우저에서 각각의 Object를 클릭하면 Detail View에 선택한 Object에 대한 상세한 내용이 나옵니다. 나름 필요한 정보는 모두 잘 나오는 것 같습니다.

SQL Editor


SQL Editor에서는 SQL을 실행하고 결과 및 실행계획 등을 볼 수 있습니다. 단축키가 eclipse 기준으로 설정되어 있어서 토드 사용자에게는 약간 헷갈릴 수 있습니다. 익숙한 키를 사용하려면 eclipse 설정에서 단축키 매핑 정보를 변경하시면 됩니다.

SQL Editor에서는 무엇보다 Code Intelligence 기능이 토드보다 빠릅니다. .(dot)을 입력하면 바로 바로 Object 목록이 나타나는 군요.  무척 맘에 듭니다.

PL/SQL Editor


 PL/SQL 뷰어에서 Edit를 누르면 수정화면으로 넘어갑니다.
제가 사용하는 쪽의 DB는 Character Set이 UTF-8 환경인데.. PL/SQL 뷰어에서는 주석문이 안깨지고 잘 보이는데.. 수정화면에서는 스크립트의 주석 부분이 깨지는 군요. Eclipse의 character set을 UTF-8로 변경해도 여전히 깨지는 군요. 이 부분은 약간 이슈가 있는 듯 합니다.
한글 환경의 DB를 사용하는 곳은 별 문제가 없을것보입없을 것, 테스트를 못해봐서.. 장담은 못하겠습니다.

SQL Monitor


하단의 SQL Monitor View에서 Enable Output 아이콘을 클릭하신 후 detail view나 Schema Browser를 클릭하면 Toad Extension이 해당 데이터를 화면에 뿌리기 위해서 오라클에 보내는 SQL을 모니터 할 수 있습니다. Toad의 spool 기능과 동일한 기능이라고 보면 될 것 같습니다.

Session Browser


개발용 Toad Extension임에도 불구하고 Session Browser가 있다니 놀랍습니다. 해당 세션을 선택하고 세션을 Kill 시킬 수도 있군요.

Oracle Parameter View


오라클 파라미터를 조회할 수 있는 뷰도 제공 됩니다.


Toad Extension은 자바 개발시에 Toad와 Eclipse를 번갈아 가면서 개발하지 않고 eclipse 환경 내에서 왠만한 개발을 할 수 있다는 점은 매우 매력적인 요소입니다. 다만, Toad와 같이 많은 기능을 담고 있지 않아서 DBA가 사용하기에는 조금 무리가 따릅니다.
Eclipse 환경이라서 토드에 익숙하지 않은 개발자들에게 매우 유용할 듯 보이며, 특히 프리웨어라는 점은 ㅋㅋ 무지 좋습니다.
프로젝트에서 DBA만 정품 Toad를 구매하고, 나머지 개발자들은 Toad Extension을 사용한다면 비용이 많이 절감되겠네요.

데이터를 조회하고 핸들링 할 수 있는 다른 eclipse plug-in 들과 비교해 보더라도 개인적으로는Toad Extension이 가장 맘에 드는 툴입니다. 물론 아직은 버그도 있고 기능도 부족하지만 점점 더 좋아지리라 막연한 기대를 해봅니다.

제 글을 읽고 맘에 드신다면… 한번 사용해 보세요.^^

Trackback 2 Comment 0
2010.08.27 12:48

[강좌A08] 안드로이드 실전 개발 - SQLite



안녕하십니까? 8번째 강좌가 시작되었습니다. 이번 강좌에서부터 데이터베이스 관련한 강좌를 다룰 예정입니다. 본격적인 데이터베이스 개발에 앞서서 SQLite DB에 대해서 먼저 알아보도록 하겠습니다.

여담이지만, 제 강좌에 대한 호응도를 보니 일반 안드로이드 소스 개발 보다는 개발에 관련된 주변 정보(아이콘, 도서 소개, 리소스 해킹 등)에 대한 강좌가 더 인기가 있는 것 같습니다. 소스 부분이야 다른 곳에도 많이 있고 그래서 그런가요? 그래도 별 실력도 없는 제 강좌를 좋아해 주시는 분들이 계시니 맘은 뿌듯합니다.

각설하고.. SQLite 다들 잘 아시는지요? 저는 안드로이드 하면서 처음 만졌습니다. 맨날 오라클만 만지다가(하하 제가 얘기했던가요? 저는 모바일 개발자도 아니고, 자바 개발자도 아니고 Oracle SQL, PL/SQL, 모델링만 주로 만지고 있습니다.) 가벼운 SQLite를 다루려고 보니, DDL 문법도 다른 점도 많고, SQL도 그렇고.. 그렇다고 자료도 별로 없고..

SQLite에 대해서 강좌를 쓰다보니, 내용이 너무 많아져서.. SQLite User Guide란 글들을 별도로 작성해서 제 블로그에 올려두었습니다. 본 강좌는 SQLite User Guide 제글의 일부분을 요약한 내용과 일부 Android 관련된 정보를 추가한 문서입니다. 강좌를 보시고 보다 SQLite에 대해서 상세히 알고싶으시면 다음의 링크나 제 블로그의 데이터베이스/SQLite 디렉토리를 클릭하셔서 살펴보시기 바랍니다.
(http://overoid.tistory.com/category/데이터베이스/SQLite)

전체 강좌 목차

[강좌A01] Moteodev Studio를 이용한 안드로이드 개발 환경 구축 가이드
[강좌A02] 안드로이드 개발 참고 서적 소개
[강좌A03] Android 실전 개발 - 아이디어 / 기획 / Wireframe
[강좌A04] 안드로이드 실전 개발 - 아이콘 제작
[강좌A05] 안드로이드 실전 개발 - 레이아웃 및 리소스 : Part1
[강좌A06] 안드로이드 실전 개발 - 레이아웃 및 리소스 : Part2
[강좌A07] 안드로이드 실전 개발 - 리소스 해킹
[강좌A08] 안드로이드 실전 개발 - SQLite


1. SQLite 소개

SQLite는 아시다시피 iphone이나 android에서 사용하는 파일 베이스 RDB입니다. 주요 특징으로는 Zero Configuration, Portabiliy, Compactness, Simplicity, Flexibility, Liberal Licensing, Reliability 라고 www.sqlite.org 사이트에 나와 있습니다. 좋은 말은 다 있는것 같습니다.

저희가 알아야 될 세부 특징은 다음과 같습니다. 중요합니다.

SQLite는 ANSI92의 기능을 대부분 지원하지만, 아래의 사항은 지원하지 않습니다.

1. RIGHT and FULL OUTER JOIN : LEFT OUTER JOIN만 지원합니다.
2. Complete ALTER TABLE Support : RENAME TABLE과 ADD COLUMN만 지원합니다. DROP COLUMN, ALTER COLUMN, ADD CONSTRAINT 등 다른 기능은 지원하지 않습니다.
3. Writing to VIEWs : SQLite에서 View는 read-only입니다.
4, GRANT and REVOKE : Sqlite에서 읽기/쓰기 권한은 OS 파일 시스템 권한을 사용합니다. 별도로 권한 부여 기능이 없습니다.

2. GUI Tools

SQLite 개발을 효과적으로 하기 위해서는 좋은 툴은 필수겠죠?

SQLite를 지원하는 GUI Tools 리스트는 아래 링크에 나와있습니다.
http://sb2.info/commercial-and-freeware-sqlite-tools-list-2/

무지 많습니다. 그 중 몇개를 골라서 사용해 봤는데.. 제가 추천해 드리고 싶은 툴은 다음과 같습니다.

SQLite Expert (http://www.sqliteexpert.com/)



여러 제품 중에서 가장 무난하게 사용할 수 있는 제품인 것 같습니다. 필요한 기능은 다 있고, UI도 그럭저럭 쓸만합니다. Personal Edition과 Professional Edition으로 나누어지며, Personal Edition은 무료입니다.
(향후 SQLite관련 포스트에서 저는 이 제품으로 테스트 하겠습니다.) Pro Edition의 Crack도 그리 어렵지 않게 구할 수 있습니다.

SQLite Maestro (http://www.sqlmaestro.com/products/sqlite/maestro/)


아마도 제가 본 Sqlite 관련 툴 중에서 가장 강력한 제품인 것 같습니다. 다른 기능은 몰라도 Reverse로 ERD를 만들어 주는 기능은 이 제품만이 가능합니다.

여담이지만 제가 Touch Call(터치콜) App 개발할 당시 Android SDK2.0 기준의 전화번호부 DB를 이용해야 하는데, 구글의 document만으로는 이해하기가 상당히 어려웠습니다. 출판되어 있는 책들도 다 이전 데이터베이스를 기준으로 작성된 책들이고.. 그때 이 제품을 평가판으로 설치해서 애뮬레이터에 있는 contact2 데이터베이스를 가지고 ERD를 만들어 보니… 훨씬 빠르게 이해를 할 수 있었습니다. 

다음 그림은 그 당시 사용했던 contact2 db의 ERD입니다.



좋은 제품이긴 하지만 애석하게도 free 버전은 없습니다. 모두 상용버전 밖에 없으며, 한달 Trial 버전만 사용할 수 있습니다. 현재 버전의 crack은 거의 구하기 힘들며, 이전 버전은 구하실 수는 있을 겁니다.

DeZign (http://www.datanamic.com/dezign/index.html)
현재 SQLite를 Forward/Backward Engineering를 완벽하게 지원하는 모델링 툴은 datanamic의 dezign이란 모델링 툴 밖에 없습니다. 근데, 막상 평가판 설치해보니..저희 정서와 맞지 않는 툴이더군요. 저희는 한글로 논리모델을 만들고 영문으로 물리모델을 만드는데, 이 툴은 그런 개념없이 논리/물리가 함께 처리되는 툴이라 바로 지워 버렸습니다. 조금 불편하더라도 DA#이나 ERWin으로 모델링을 하고, Forward Generation한 스크립트를 수정해서 사용하는 게 더 편리할 듯 합니다.

끝으로 SQLite 강좌에서 사용할 demo db에 대해서 소개를 하겠습니다. 위에서 얘기했듯이 저는 SQLlite Expert Personal 버전을 이용해서 테스트를 하도록 하겠습니다.

SQLite Expert Personal를 실행한 후 File > Open Demo Database를 실행합니다.
Dbdemos란 데이터베이스가 스키마브라우저에 나타납니다.


좌측 스키마 브라우저에 많은 테이블 리스트가 나옵니다. 저는 그중에서 아래 ERD에 나오는 몇 개의 테이블을 주로 사용해서 DML 테스트 등을 진행하도록 하겠습니다.


고객, 직원, 주문, 주문내역 등 간단한 ERD 구조입니다.
참고로 이 ERD는 Dbdemos SQLlite 데이터베이스를 SQLite Maestro를 이용하여 일부 테이블만 designer에 띄운 모습입니다.)

3. System Catalog

시스템 카탈로그를 조회할 수 있는 방법은
sqlite_master 테이블을 직접 조회하시면 됩니다. SQLITE_MASTER 테이블은 READ-ONLY 테이블입니다.

SELECT * FROM SQLITE_MASTER;

SQLITE_MASTER 테이블을 조회하시면 테이블, 인덱스, 트리거등 모든 정보와 DDL문까지 알 수가 있습니다.

SQLITE_MASTER 테이블 조회 외에 PRAGMA 명령어를 통해서도 필요한 정보를 알 수 있습니다.

PRAGMA table_info(table-name);
테이블 정보를 조회하는 명령어입니다.

PRAGMA table_info(COUNTRY);

cid name type notnull dflt_value pk
0 Name CHAR(24) 0  1
1 Capital CHAR(24) 0  0
2 Continent CHAR(24) 0  0
3 Area FLOAT 0  0
4 Population FLOAT 0  0


PRAGMA index_list(table-name); 인덱스 리스트를 볼 수 있습니다.
PRAGMA index_info(index-name); 인덱스 정보를 조회할 수 있습니다.
PRAGMA foreign_key_list(table-name); fk 리스틀 볼 수 있습니다.

4. DATATYPE

Sqlite가 지원하는 데이터 타입은 다음과 같습니다.

1. Null
2. Integer – 부호있는 정수, 실제 값에 따라 1byte에서 8byte까지 가변적으로 저장됨.
3. Real – 실수
4. Text – 문자열
5. BLOB – blob 데이터

실제적으로 저희가 테이블 생성시 DDL상에 VARCHAR(10)이라고 컬럼 사이즈를 정의해도 SQLITE는 TEXT 타입으로 만들어집니다. 그렇기 때문에 10자 이상의 데이터도 삽입이 가능합니다. 그러니, DDL 문 만들 때 구지 다른 데이터 타입을 외울 필요없이 위 타입만 알고 있으면 될 것 같습니다.

재미있는 것은 Data and Time 즉, 날짜 관련 데이터 타입이 따로 없다는 것입니다. DATETIME은 입력되는 값에 따라서 TEXT, REAL, INTEGER 타입으로 저장됩니다. http://www.sqlite.org/datatype3.html 보시면 어떤 데이터 타입이 어떤 식으로 변경되는지 알수가 있습니다.

5. CREATE TABLE


예제1)
CREATE TABLE TEST2 (
     _ID INTEGER NOT NULL,    
     CLASS TEXT NOT NULL,    
     VALUE TEXT,
     CONSTRAINT TEST2_PK PRIMARY KEY (_ID, CLASS)
);

SQLite에서는 ALTER TABLE 문에서 ADD CONSTRAINT 구문이 지원되지 않기 때문에 PRIMARY KEY, UNIQUE, CHECK등의 TABLE LEVEL의 CONSTRAINT는 위 문장처럼 CREATE TABLE 문 제일 하단에 기술해야 합니다.


예제2)
CREATE TABLE TEST1 (
     _ID  INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
     TYPE TEXT NOT NULL DEFAULT 'HIGH',
     NAME TEX);

일련번호 채번은 위와 같이 AUTOINCREMENT 구문을 CRATE TABLE 의 해당 컬럼에 기술하면 자동 증가되는 일련번호를 사용할 수 있습니다.
AUTOINCREMENT 문을 가진 DDL이 최초 실행되면 SQLITE는 내부적으로 SQLITE_SEQUENCE 테이블을 생성합니다. 이 테이블은 NAME, SEQ 컬럼을 가진 테이블로 테이블마다 자동 증가되는 최종값을 가집니다. 재미있게도 SQLITE_SEQUENCE 테이블값을 직접 핸들링도 가능합니다.

6. SELECT

SELECT 는 워낙 잘 들 아시는 부분이라  한 두가지만 테스트 해 보도록 하겠습니다.
먼저, 오라클의 dual 테이블 같이 처리되는 구문은 MS-SQL 처럼 FROM 절 없이 사용하면 될 것 같습니다.

예)
SELECT 'A' a


페이징 처리 (ROWNUM, TOP과 유사한 기능)

페이징 처리시 오라클에서는 ROWNUM을 사용하고 MS-SQL에서는 TOP을 주로 사용들 합니다. 물론 요즘은 ROW_NUMBER() 함수를 더 많이 사용하신다구요?
SQLITE에서는 페이징 처리하기가 더 편리합니다. LIMIT와 OFFSET이 그것입니다.

SELECT CUSTNO, COMPANY, CITY
  FROM CUSTOMER 
 ORDER BY CUSTNO
 LIMIT 5 OFFSET 5;


ORDER BY와 상관없이 사용이 가능합니다. LIMIT에 값을 지정하면 화면에 출력할 레코드 개수를 지정할 수 있습니다. OFFSET은 건너뛸 레코드 수를 나타냅니다. 즉, 위의 쿼리는 CUSTNO로 정렬해서 나온 순서에서 6번째부터 5개의 레코드를 가져오는 SELECT문입니다. OFFSET은 생략도 가능합니다.

페이징은 편리하나 오라클의 ROWNUM 처럼 결과에 수치값을 나타낼 방법이 있다면 여러모로 편리한데 그런 기능은 아쉽습니다. 필요시에는 별도의 NUMBER를 가진 테이블을 하나 만들어서 조인해서 사용해야 할 듯 합니다.

7. UPDATE (JOIN)

UPDATE 구문도 워낙 잘 아시니 여기서는 JOIN UPDATE에 대해서만 확인해 보도록 하겠습니다.
테스트를 위해 CUSTOMER 테이블에 컬럼을 2개 추가했습니다.

/* JOIN UPDATE TEST */
-- ALTER TABLE에서 한번여 여러 컬럼 추가도 안됩니다.

ALTER TABLE CUSTOMER
ADD CAPITAL TEXT;

ALTER TABLE CUSTOMER
ADD COLUMN CONTINENT TEXT;

-- 오라클 스타일 JOIN UPDATE TEST => ERROR
UPDATE CUSTOMER C
   SET (CAPITAL, CONTINENT) = (SELECT CAPTIAL, CONTINENT  
                                WHERE COUNTRY K                               
                                  AND K.[Name] = C.COUNTRY)                                 
 WHERE COUNTRY IN (SELECT NAME FROM COUNTRY);

-- MS-SQL 스타일 JOIN UPDATE => ERROR
UPDATE CUSTOMER
   SET CAPITAL = K.CAPITAL,  
       CONTINENT = K.CONTINENT      
FROM CUSTOMER C JOIN COUNTRY K ON C.Country = K.NAME;


찾아보니 JOIN UPDATE 자체를 지원하지 않는답니다. 에구, 이게 안되는 건 좀 치명적인듯. 업데이트시에 어플에서 처리하는 방식밖에 안될 것 같습니다.

8. DELETE

DELETE시에도 LIMIT와 OFFSET 구문을 함께 사용할 수 있습니다. 이 부분은 편리한 듯~ , 참 UPDATE 구문에도 LIMIT와 OFFSET 구문을 함께 사용할 수 있습니다.

DELETE문도 단순 스타일은 워낙 잘 들 아시니 중복 레코드 제거 쿼리 테스트만 해보도록 하겠습니다.


/* 중복 제거 DELETE 문 테스트 */

-- 임시 테이블 생성.
create table t1 (
id integer,
name varchar(10)
);

-- 테스트 데이터 삽입.
insert into t1 values(1,'a');
insert into t1 values(2,'a');
insert into t1 values(2,'b');
insert into t1 values(1,'b');
insert into t1 values(1,'C');

-- 오라클에서 주로 사용하는 방식으로 테스트.
-- ANY 키워드를 지원하지 않아서 에러가 발생함.
DELETE FROM t1 A
WHERE ROWID > ANY (SELECT ROWID
                                     FROM t1 B
                                    WHERE A.id = B.id);

-- DELETE문에서 서브쿼리로 조인을 지원안해서 이것도 에러가 발생함.
DELETE FROM t1 A
WHERE ROWID > (SELECT MIN(ROWID)
                              FROM    t1 B
                             WHERE A.id = B.id);

-- 조금은 부하가 있지만, GROUP BY절을 이용한 NOT IN 서브쿼리로 중복 제거 가능.
DELETE FROM t1
WHERE ROWID NOT IN (SELECT MIN(ROWID)
                      FROM T1                     
                     GROUP BY ID);

9.Core Function

 coalesce(X,Y,...) coalesce() 함수는 Argument 중에서 첫번째로 Not Null인 Argument값을 리턴하는 함수입니다. 만일 모든 인자가 null이면 null을 리턴합니다.
 ifnull(X,Y) ifnull() 함수는 두 인자중에서 첫번째로 Not Null인 인자값을 리턴합니다. 만일, 둘다 null이면 null을 리턴합니다. Ifnull() 함수는 인자가 두개인 coalesce() 함수와 동일합니다.
 length(X) 길이값을 리턴하는 함수입니다. 만일 X 인자가 null이면 null을 리턴합니다.
 like(X,Y)
 like(X,Y,Z)
Like 함수는 “Y LIKE X [ESCAPE Z]”구문과 동일합니다.
 lower(x) 소문자로 변환 합니다.
 upper(X) 대문자로 변환 합니다.
 ltrimX)
 ltrim(X,Y)
ltrim(X)는 X 값 중 왼쪽편의 공백을 제거하는 함수입니다.
ltrim(X,Y)는 X 문자열중에서 Y에 나타난 값을 제일 좌측부터 제거하는 함수입니다.
 
select ltrim(" ZZZZabcZZ ", " aZ")
=> 좌측문자열에서 부터 공백,a,Z 문자열이 있으면 제거하고, 처음으로 공백,a,Z가 아닌 문자열부터 출력합니다. 즉, “bcZZ”가 출력됩니다.
ltrim(" ZZZZabcZZ ", " ") 는 ltrim(" ZZZZabcZZ ")과 동일합니다.
 rtrim(X)
 rtrim(X,Y)
rtrim(X)는 우측편 공백 제거
rtrim(X,Y)는 ltrim(X,Y)와 동일한 방식이지만 우측편부터 매칭되는 글자를 제거합니다. 예를들어 select rtrim(" ZZZZabcZZ ", " Z") 문장은 우측편부터 공백과 Z를 빼고 처음으로 공백과 Z가 아닌 글자, 즉 c 까지 글자가 나타납니다. 결과값: “ ZZZZabc”
 trim(X)
 trim(X,Y)
trim(X)는 양쪽 공백 제거
trim(X,Y) 는 Y에 해당되는 글자를 양쪽 끝에서 부터 제거하고 나머지 글자만 리턴함. 예) trim(" ZZZZabcZZ ", " Z") => “abc” trim은 ltrim과 rtrim을 각각 적용한것과 동일한 결과가 나타납니다.
 max(X,Y,..) 인자값들 중 최대값을 리턴합니다.

create table t1 (coll integer, col2 integer, col3 integer);

insert into t1 values(1,2,3);
insert into t1 values(5,3,1);

select max(col1, col2, col3) from t1;
 min(X,Y,...) 인자값들 중 최소값을 리턴합니다.
 nullif(X,Y) 두 인자가 서로 같으면 null을 리턴, 서로 다르면 X값을 리턴합니다.
nullif('x','y') => ‘x’ , nullif('x','x') => null 리턴
 quote(X) Quote()함수는 single quotation을 escape 해줍니다. ‘값을 ‘’ 로 변경합니다.
Insert나 update 시에 사용하면 유용할 듯 합니다.
select quote("girl's mouse") => 'girl''s mouse'
 random(*) -9223372036854775808 부터 +9223372036854775807 숫자 사이의 임의의 수를 리턴합니다.
 randomblob(N) N으로 지정된 bytes의 랜덤 바이너리 데이터를 생성합니다.
 hex(X) 바이너리 값을 hex 값으로 변경합니다.
select hex(randomblob(16))
 replace(X,Y,Z) X 문자열 중에서 Y문자열을 Z로 변경합니다.
select replace('1/12/2009','1','x') => "x/x2/2009"
 round(X)
 round(X,Y)
반올림 함수. Y는 소수점 자리. Y가 없으면 0으로 처리합니다.
Round(3.5) => 4, round(2.555, 2) => 2.56
 substr(X,Y)
 substr(X,Y,Z)
substr()함수는 X문자열 중에서 Y번째부터 시작해서 Z개수만큼 문자열을 가져오는 함수입니다. Z가 생략되면 Y번째 문자열부터 문자열 끝까지 리턴합니다. Y의 최소값은 1입니다. 자바에서는 0으로 시작하지만 SQLite에서는 1부터 인덱스가 시작합니다. 만일 Y가 –(마이너스)값이면 문자열 우측끝부터 카운팅을 시작합니다.
select substr("string", 1, 3) => str
select substr("string", 0, 3) => st
select substr("string", -1, 3) => g
select substr("string", -3, 3) => ing
select substr("string", 2) => tring
 typeof(X)  X 표현식에 대한 데이터 타입을 리턴합니다. 리턴값은 “null”, “integer”, “real”, “text”, “blob” 중의 하나입니다.

10. Aggregation Function (집합 함수)

avg(X) 그룹내의 Not Null값의 평균값을 리턴합니다. X 컬럼값이 문자열이나 BLOB이면 0으로 간주하고 처리합니다.
count(*)
count(X)
count(X)는 X가 Not Null값을 가진 레코드의 개수 리턴합니다.
count(*)는 그룹내의 모든 rows의 수를 리턴합니다.
group_concat(X)
group_concat(X,Y)
X가 not null인 경우 그룹내의 모든 문자열을 콤마(,)를 구분자로 해서 문자열을 합쳐서 리턴합니다. Y가 주어지면 Y값이 구분자로 처리됩니다.
max(X) 그룹내의 값들중 최대값을 리턴합니다.
min(X) 그룹내의 값들중 최소값을 리턴합니다. 모든값이 Null이면 Null을 리턴합니다.
sum(X)
total(X)
Sum과 total은 그룹내의 Not Null값의 합계를 리턴합니다. X의 모든 값이 Null인 경우 Sum()은 Null을 리턴하고 Total()은 0.0을 리턴합니다.

11. DateTime 관련 Keyword

먼저 SQLite에서는 DateTime관련해서 다음과 같은 세가지 키워드가 있습니다.
CURRENT_TIME : 현재 시간 (형식: 03:22:56) 다만, UTC 기준입니다.
CURRENT_DATE: 현재 날짜 (형식: 2010-08-25) UTC 기준.
CURRENT_DATETIME : 현재 날자 및 시간 (형식: 2010-08-25 03:23:37) UTC 기준.

UTC 기준 날짜 및 시간이라서 사용할때는 로컬시간으로 다시 변환작업이 필요할 듯 보입니다. DATETIME 관련 함수들이 있어 크게 유용해 보이지는 않습니다.

12. DateTime 관련 함수.

DateTime 관련 함수는 다음의 5가지가 있습니다.

date(timestring, modifier, modifier, ...)  : 날짜 함수
time(timestring, modifier, modifier, ...)  : 시간 함수
datetime(timestring, modifier, modifier, ...)  :날짜/시간 함수
julianday(timestring, modifier, modifier, ...)  : 율리우스력 함수
strftime(format, timestring, modifier, modifier, ...)  : 날짜 포맷팅 함수


위 다섯개의 함수 인자 중 timestring 파라미터에로 들어갈 수 있는 날짜 형식은 아래와 같습니다.

1. YYYY-MM-DD
2. YYYY-MM-DD HH:MM
3. YYYY-MM-DD HH:MM:SS
4. YYYY-MM-DD HH:MM:SS.SSS
5. YYYY-MM-DDTHH:MM
6. YYYY-MM-DDTHH:MM:SS
7. YYYY-MM-DDTHH:MM:SS.SSS
8. HH:MM
9. HH:MM:SS
10. HH:MM:SS.SSS
11. now
12. DDDDDDDDDD

strftime 함수에 사용되는 format에 사용할 수 있는 값들은 다음과 같습니다.

%d    day of month: 00
%f     fractional seconds: SS.SSS
%H    hour: 00-24
%j     day of year: 001-366
%J     Julian day number
%m    month: 01-12
%M    minute: 00-59
%s     seconds since 1970-01-01
%S     seconds: 00-59
%w     day of week 0-6 with sunday==0
%W     week of year: 00-53
%Y     year: 0000-9999
%%    %

함수의 modifer에 들어갈 수 있는 값들은 다음과 같습니다.

1. NNN days
2. NNN hours
3. NNN minutes
4. NNN.NNNN seconds
5. NNN months
6. NNN years
7. start of month
8. start of year
9. start of day
10. weekday N
11. unixepoch
12. localtime
13. utc


잘 안 와 닿는듯 합니다. 아래 샘플 코드를 보면 이해가 가실 겁니다.

--UTC 기준의 현재 날짜/시간
select datetime('now');
2010-08-25 04:01:46

-- 로컬 기준의 현재 날짜/시간
select datetime('now','localtime');
2010-08-25 13:02:30

--현재 로컬 기준 시간에서 10분 3.5초를 더한 시간.
select datetime('now','localtime','+3.5 seconds','+10 minutes');
2010-08-25 13:14:15

--현재 로컬 시간에 3.5초를 더하고 날짜는 돌아오는 화요일 (weekday == 0 이 일요일입니다.)
select datetime('now','localtime','+3.5 seconds','weekday 2');
2010-08-31 13:05:39

--현재 달의 마지막 날짜
SELECT date('now','start of month','+1 month','-1 day','localtime');
2010-08-31

--2004-01-01 02:34:56초부터 현재까지의 총 초
SELECT strftime('%s','now') - strftime('%s','2004-01-01 02:34:56');
209785028

--현재날짜/시간 기준에서 올해 9번째달의 첫번째 화요일
SELECT date('now','start of year','+9 months','weekday 2');
2010-10-05

-- 날짜 포맷 스타일 변경
select strftime("%Y/%m/%d %H:%M:%S",'now','localtime');
2010/08/27 09:17:22



이것으로서 간략하게 나마 SQLite에 대해서 알아보았습니다.
보다 상세히 SQLite의 기능에 대해서 알고싶으시면 제 블로그의 SQLite User Guide를 참고하시기 바랍니다.

SQLite User Guide 블로그 포스트

1. SQLite User Guide - 소개. GUI Tools 등
2. SQLite User Guide - PRAGMA, 시스템 카탈로그, DATA TYPE
3. SQLite User Guide - DDL(CREATE, DROP 등)
4. SQLite User Guide - DML (SELECT, INSERT, UPDATE, DELETE 등)
5. SQLite User Guide - Function (내장함수, Aggregation 함수)
6. SQLite User Guide - DateTime 함수, DateTime Formatting
7. SQLite User Guide - Trigger

Trackback 4 Comment 3
  1. 이유식 2010.08.30 14:20 신고 address edit & del reply

    안드로이드 2.1버전에서 foreign key가 적용되나요?

    • 보고픈 2010.08.30 17:23 신고 address edit & del

      제가 알기로 현재 SQLite 버전은 3.7.0.1. 입니다.
      Android 1.5, 1.6, 2.1에는 SQLite 3.5.9 버전이 탑재되어 있습니다.
      Android 2.2에는 SQLite 3.6.22가 탑재되어 있구요.
      FK는 SQLite 3.6.19에 추가되었습니다.

      그러니 Android 2.1에는 FK가 지원되지 않을겁니다.

  2. 2012.12.10 14:37 address edit & del reply

    비밀댓글입니다

2010.08.26 13:54

SQLite User Guide for Android, iPhone - 소개, GUI Tools 등




SQLite는 Android 및 iPhone에 탑재되면서 많이들 사용하고 있는 파일베이스 RDB입니다. 공부를 하는데, 생각보다 많은 자료가 없더군요. 공부하면서 정리한 자료인데.. 많은 도움 되시면 좋겠습니다.

앞으로 제가 포스트할 User Guide의 목차는 다음과 같습니다.

SQLite User Guide 포스트 목차
1. SQLite User Guide - 소개. GUI Tools 등
2. SQLite User Guide - PRAGMA, DATA TYPE
3. SQLite User Guide - DDL(CREATE, DROP 등)
4. SQLite User Guide - DML (SELECT, INSERT, UPDATE, DELETE 등)
5. SQLite User Guide - Function (내장함수, Aggregation 함수)
6. SQLite User Guide - DateTime 함수, DateTime Formatting
7. SQLite User Guide - Trigger
8. SQLIte User Guide - Tranaction, Lock
9. SQLite User Guide - Performance, Optimizer
10. SQLite User Guide - VDBE(Virtual Database Engine)

SQLite의 특징.

Sqlite의 특징을 먼저 살펴보도록 하겠습니다.
1. Zero Configuration – sqlite는 별도의 설치 및 설정이 필요 없습니다. 파일 하나만 있으면 모든걸 할 수 있습니다.

2. Portabiliy – 이식성. 거의 모든 OS에서 다 돌아갑니다. 최대 2 terabytes까지 지원하며, 기본 encoding으로 UTF-8과 UTF-16을 지원합니다.

3. Compactness – 아주 가볍고 작습니다. Header file, library, 관계형 데이터를 다 포함해도 사이즈가 얼마 안됩니다.

4. Simplicity – sqlite는 아주 단순하고 사용하기 편리한 programming library를 제공하고 있으면서도 다양한 언어로 확장이 가능하도록 만들어졌습니다.

그밖에 Flexibility , Liberal Licensing(공짜죠), Reliability, Convenience 등이 나와 있습니다.
에구 좋은 말은 다 있는 것 같습니다.

위 내용은 일반적인 내용인것 같고, 보다 중요한 몇 가지를 짚고 넘어가겠습니다.

SQLite는 ANSI92의 기능을 대부분 지원하지만, 아래의 사항은 지원하지 않습니다.

1. RIGHT and FULL OUTER JOIN : LEFT OUTER JOIN만 지원합니다.

2. Complete ALTER TABLE Support : RENAME TABLE과 ADD COLUMN만 지원합니다.
DROP COLUMN, ALTER COLUMN, ADD CONSTRAINT 등 다른 기능은 지원하지 않습니다.

3. Writing to VIEWs : SQLite에서 View는 read-only입니다.

4, GRANT and REVOKE : Sqlite에서 읽기/쓰기 권한은 OS 파일 시스템 권한을 사용합니다. 
별도로 권한 부여 기능이 없습니다.


SQLite 아키텍처


SQLite의 내부 아키텍처는 위 그림과 같습니다.  코어, SQL 컴파일러, 백앤드가 주요 핵심요소이고, 이외에 액세서리 역할을 하는 유틸리티와 테스트 코드로 이뤄져 있습니다.

GUI Tools for SQLite

SQLite를 지원하는 GUI Tools 리스트는 아래 링크에 나와있습니다.
http://sb2.info/commercial-and-freeware-sqlite-tools-list-2/

무지 많습니다. 그 중 몇개를 골라서 사용해 봤는데.. 제가 추천해 드리고 싶은 툴은 다음과 같습니다.

SQLite Expert (http://www.sqliteexpert.com/)


  
여러 제품 중에서 가장 무난하게 사용할 수 있는 제품인 것 같습니다. 필요한 기능은 다 있고, UI도 그럭저럭 쓸만합니다. Personal Edition과 Professional Edition으로 나누어지며, Personal Edition은 무료입니다.
(향후 SQLite관련 포스트에서 저는 이 제품으로 테스트 하겠습니다.) Pro Edition의 Crack도 그리 어렵지 않게 구할 수 있습니다.

SQLite Maestro (http://www.sqlmaestro.com/products/sqlite/maestro/)


아마도 제가 본 Sqlite 관련 툴 중에서 가장 강력한 제품인 것 같습니다. 다른 기능은 몰라도 Reverse로 ERD를 만들어 주는 기능은 이 제품만이 가능합니다.

여담이지만 제가 Touch Call(터치콜) App 개발할 당시 Android SDK2.0 기준의 전화번호부 DB를 이용해야 하는데, 구글의 document만으로는 이해하기가 상당히 어려웠습니다. 출판되어 있는 책들도 다 이전 데이터베이스를 기준으로 작성된 책들이고.. 그때 이 제품을 평가판으로 설치해서 애뮬레이터에 있는 contact2 데이터베이스를 가지고 ERD를 만들어 보니… 훨씬 빠르게 이해를 할 수 있었습니다. 

좋은 제품이긴 하지만 애석하게도 free 버전은 없습니다. 모두 상용버전 밖에 없으며, 한달 Trial 버전만 사용할 수 있습니다. 현재 버전의 crack은 거의 구하기 힘들며, 이전 버전은 구하실 수는 있을 겁니다.

DeZign (http://www.datanamic.com/dezign/index.html)
현재 SQLite를 Forward/Backward Engineering를 완벽하게 지원하는 모델링 툴은 datanamic의 dezign이란 모델링 툴 밖에 없습니다. 근데, 막상 평가판 설치해보니..저희 정서와 맞지 않는 툴이더군요. 저희는 한글로 논리모델을 만들고 영문으로 물리모델을 만드는데, 이 툴은 그런 개념없이 논리/물리가 함께 처리되는 툴이라 바로 지워 버렸습니다. 조금 불편하더라도 DA#이나 ERWin으로 모델링을 하고, Forward Generation한 스크립트를 수정해서 사용하는 게 더 편리할 듯 합니다.

끝으로 앞으로 저의 SQLite 관련 포스트에서 사용할 demo db에 대해서 소개를 하겠습니다. 위에서 얘기했듯이 저는 SQLlite Expert Personal 버전을 이용해서 테스트를 하도록 하겠습니다.

SQLite Expert Personal를 실행한 후 File > Open Demo Database를 실행합니다.
Dbdemos란 데이터베이스가 스키마브라우저에 나타납니다.


좌측 스키마 브라우저에 많은 테이블 리스트가 나옵니다. 저는 그중에서 아래 ERD에 나오는 몇 개의 테이블을 주로 사용해서 DML 테스트 등을 진행하도록 하겠습니다.


고객, 직원, 주문, 주문내역 등 간단한 ERD 구조입니다.
참고로 이 ERD는 Dbdemos SQLlite 데이터베이스를 SQLite Maestro를 이용하여 일부 테이블만 designer에 띄운 모습입니다.)

SQLIte User Guide 첫번째 포스트를 이만 마치며, 다음 포스트에서는 SQLite 의 PRAGMA 명령어 및 시스템 카탈로그 등에 대해서 알아보도록 하겠습니다.

 

Trackback 2 Comment 5
  1. BEOM 2010.09.09 11:40 신고 address edit & del reply

    좋은 정보 감사합니다~

  2. 고냉지채소 2010.11.10 17:52 신고 address edit & del reply

    좋은 글 감사합니다. 덕분에.. SQLite에 대해서 궁금했던 부분들 많이 해소 했습니다.
    복 받으실꺼에요..^^

  3. 안승진 2011.03.23 11:43 신고 address edit & del reply

    정말. 잘 배우고 갑니다.^^ 이런 글이 있다니!! 이해도 쉽고, 읽기도 편하고!! 너무 좋아요!

  4. 김병훈 2011.11.22 00:16 신고 address edit & del reply

    감사드립니다

  5. Miyo 2012.01.13 11:50 신고 address edit & del reply

    좋은정보 감사합니다~~

2010.08.10 03:51

[강좌A04]안드로이드 실전 개발 - 아이콘 제작 편




전편에 이어 오늘의 강좌는 아이콘 제작 및 아이콘 관련 자료들에 대해서 좀 알아보도록 하겠습니다.

전체 강좌 목차
[강좌A01] Moteodev Studio를 이용한 안드로이드 개발 환경 구축 가이드
[강좌A02] 안드로이드 개발 참고 서적 소개
[강좌A03] Android 실전 개발 - 아이디어 / 기획 / Wireframe
[강좌A04] 안드로이드 실전 개발 - 아이콘 제작

왠 개발 강좌에서 아이콘 제작이냐? 라고 의아해 하시는 분도 많으시겠지만,
이런 분들은 곁에 훌륭한 디자이너 분들이 계시거나, 본인이 이미 상당한 디자인 감각 및 스킬을 갖추신 분들일겁니다.
 
제가 처음으로 안드로이드 개발을 할 때...
혼자서 코딩 뿐만 아니라 아이콘 제작 등 이것저것 모든 작업을 다 해야 했었습니다. 작업하다 보니 가장 시간이 많이 걸리는 작업이 코딩이 아니라 아이콘이나 디자인 요소 제작이었습니다. 그렇게 시간을 투자한다고 해도 뛰어난 퀄리티의 작품이 나오지도 않는게 더 환장할 노릇이죠.

하여간 오늘은 곁에 뛰어나신 디자이너 분들과 협업할 형편이 못되는 저같은 개발자들을 위해.. 아이콘 관련 툴과 관련 자료들에 대해서 알아보도록 하겠습니다.

1. 만들지 말고 무료 아이콘 중에서 적합한 아이콘을 찾아서 사용하자.

앱에 필요한 아이콘 제작과 관련하여 가장 좋은 방안은 당연히 전문 디자이너가 크리에이티브한 아이콘을 제작해주는 것일 겁니다.  그럴 상황이 안되신다면.. 이미 만들어진 뛰어난 퀄리티의 아이콘을 무료로 사용할 수 있다면 더 좋을겁니다.

아래 사이트들은 대표적인 아이콘 사이트들입니다.
유료도 있으며, 무료 아이콘도 있고  무료 중에서도 상용으로 사용가능한 것도 있고, 비상용인 경우에만 무료인 것도 있습니다. 자신에게 적합한 아이콘이 있다면 라이센스 잘 확인하시고 사용하시면 됩니다.

무료 아이콘 사이트 들

A. http://www.iconarchive.com/


30,000 여개 이상의 최대 icon 사이트 입니다. 웹용 데스크탑용등 다양한 포맷으로 파일등을 제공하고, 유료도 많지만 무료 아이콘으로 상당한 퀄리티를 가진 것도 많습니다. 카테고리별로 정리되어 있으니.. 한 두시간만 투자하면  대충 다 볼 수 있을것 같습니다.
안드로이드에서는 png를 주로 사용합니다. 사이트에서 맘에 드는 아이콘이 ico 파일이라면.. 주저말고 다운 받으시기 바랍니다. 대분분의 아이콘 편집툴에서 원하는 포맷으로 변환이 가능합니다.

B. http://www.freeiconsdownload.com


iconarchive 사이트와 겹치는 아이콘도 많지만 그렇지 않는 것도 상당히 많습니다. 역시, 라이센스를 잘 읽어보시고   다운 받아 사용하시면 됩니다. 위 첨부 이미지에 표기된 라이센스를 보면 Creative Commons Attribute 3.0 LIcense로 되어 있군요. 상세한 라이센스 내용은 웹사이트 찾아 보시면 상당히 많은 내용이 나옵니다. 여기서 간략하게 소개한다면.. 대부분 비상업적 용도에 사용하시는 것은 저작자 표기(사이트 링크 등)만 하시면 그냥 사용하시면 됩니다. CCL 중에서도 상업적 용도에 사용하는 것도 허락이 되어 있다면 저작자 표시만 하시고 상업적으로 사용하셔도 좋습니다. 상업적 이용을 허락하지 않는 것들도 저작자의 허락을 득하면 되기도 하므로 꼭 필요하시면 직접 연락해보시는 것도 괜챦을 것 같습니다.

아래 사이트들은 추가적인 아이콘 사이트 들입니다. 위와 비슷한 것들이 많습니다. 워낙 내용들이 많고 겹치는 아이콘들이 많아..그렇지 않는것 찾기도 힘이 들지만, 의외로 좋은 자료를 찾을 수도 있습니다.

- http://downloadpedia.org/Free_Icons_and_Buttons

- http://www.freeiconsweb.com/

2. 마땅한게 없으면 만들어 보자.

적당한 무료 아이콘이 없거나 독창적인 아이콘을 저작해야 한다면 어쩔수 없이 만들어야 합니다. 물론 Adobe의 포토샵이나 일러스트를 잘 사용하신다면 훨씬 퀄리트 높은 아이콘을 저작하실 수 있습니다.

포토샵이나 일러스트를 이용하신다면 아래 사이트 자료들을 참고하시기 바랍니다.

iPhone icon 제작 가이드

아이폰용으로 만든 아이콘도 안드로이드에서 사용해도 좋은것 같습니다. 삼성에서 만든 갤럭시 핸드폰을 보면 메뉴화면은 꼭 아이폰처럼 구현을 했습니다. 아이폰에서 사용하는 입체감 있는 둥근 사각형 버튼을 배경으로 각 앱 아이콘 하단에 깔았더군요. 상당히 괜챦아 보입니다.

http://www.photoshopvids.com/photshop-tutorials/photoshop-tutorial-how-to-make-iphone-icons/
아이폰용 아이콘을 만드는 방법을 동영상으로 알려주네요.

http://blog.cocoia.com/2010/iphone-ipad-icon-psd-template/
아이폰용 아이콘을 제작을 위한 PSD 템플릿 파일을 제공합니다.

http://www.storm-consultancy.com/blog/design/design-tutorials/how-to-mke-iphone-application-icon-photoshop/
포토샵으로 iphone용 아이콘을 만들 수 있는 방법을 자세히 설명하고 있습니다.

Android icon 관련 자료

http://androgeek.com/android-icon-packs-basics-and-a-list-of-free-icon-sets.html
안드로이드용 아이콘 팩과 무료 아이콘 세트 자료입니다. Android SDK를 설치하셨다면..  SDK 폴더 하위에 data\res\ 폴더에 있는 아이콘 자료들이 대부분 이긴 합니다.

http://developer.android.com/guide/practices/ui_guidelines/icon_design.html
이 사이트는 안드로이드 개발자가 가장 많이 참고해야 되는 사이트죠. 위 링크는 안드로이드용 아이콘 제작 가이드입니다. 에구.. 영어라서 그렇긴 하지만.... 암튼, 참고하시기 바랍니다.

아이콘 저작 툴

Axialis IconWorkshop 6 (http://www.axialis.com/)

최고의 아이콘 편집툴입니다. 가격은 49.95$나 하는군요. 저희같은 가난한 개발자들에게는 무척이나 비싸군요.
무료로 된 아이콘 편집툴들도 많긴 하지만, 이거 못 따라 옵니다. 기능이 많지 않아서 사용하기 어렵지 않고, 그럼에도 샘플이나 꼭 필요한 기능들은 다 있어서 무지 편합니다. 그냥 30일 평가판을 다운받아서 사용하시기 바랍니다. 노력하신다면 시리얼도 구하실 수 있을겁니다.

자.. 이제 부터는 디자이너도 없고, 무료로 적합한 아이콘도 없고, 저처럼 포토샵이나 일러도 잘 사용못하시는 분들은 저화 함께 IconWorkshop 으로 저희 프로젝트에서 사용될 메인 아이콘을 제작하도록 하겠습니다.

먼저 완성된 아이콘 부터 보도록 하겠습니다. 안드로이드용 어플의 High Density에서 사용되는 72*72 사이즈의 아이콘입니다.

네. 저희 프로젝트 Hangul To English 프로그램에서 사용될 메인 아이콘입니다.
한글인 "카"를 영문인 "zk"로 변환해 준다는 퀄리티가 높진 않지만, 어플을 내용을 어느정도는 잘 나타내 준다고
저는 생각하고 있습니다. 하하^^ 물론 제가 만들었으니깐요.

Step 1. 둥근 모서리 사각형 버튼 형태의 배경 작업

먼저 둥근 사각형의 버튼 형태의 배경부터 제작해야 합니다. iconWorkshop을 실행하시면 좌측 패널에 Librarian이란 패널이 보입니다. 일종의 아이콘 관련 라이브러리를 관리하는 기능이라고 생각하시면 될 것 같습니다. Librarian 창이 안 보이신다면 View 메뉴에서 선택하시면 됩니다. iconWorkshop의 Librarian에는 상당히 많은 샘플들이 있습니다. 참고로 Help 파일을 보면 이 샘플들을 가지고 아이콘을 제작하는 방법들을 잘 설명하고 있습니다.

Librarian > Objects > Pack 2 - Realistic Buttons > Rounded Square 를 눌러보시면 둥근 사각형 및 사각형에 이펙트를 줄 수 있는 여러가지 요소들이 나옵니다. 이 이미지들을 합치고 색상을 변형시켜서 여러가지 형태의 모서리가 둥근 사각형을 만들 수 있습니다.

물론 다른 도형들을 가지고 버튼을 제작할 수도 있습니다.

근데, 저희가 제작할 아이콘은.. iconWorkshop의 Librarian > Objects > Pack 5 - Web Illustrations > Background Bases > Glossy > Glossy Blue Rounded.png 에 이미 맘에 드는게 있군요. 앗싸.. 그냥 가져가다 쓰면 되겠습니다. 좌측 패널에서 더블클릭하면 메인 창에 띄워 둡니다. 이것으로 배경작업은 완료되었습니다.

유의하실 점은 iconWorkShop은 Photoshop처럼 Layer를 지원하지 않습니다. 그러므로 일반적으로 작업할때는 여러개의 Project (이미지)를 만들어서 최종 원하는 파일에 복사 - 붙여넣기로 작업을 합니다. 붙여넣기를 하고나면 마지막 붙여넣기 이미지는 컨트롤할 수 있는 핸들이 생기며, 크기 변환이나 색상 변환, 효과 주기 등 다양한 작업을 할 수 있습니다.

Step 2. 텍스트 구현

텍스트 "카", "zk"를 입력하기 위해서 각각의 iconWorkshop에서 New > Bitmap Image, Unix Icon..을 클릭합니다.


새 프로젝트화면에서 Project명은 아무거나 입력하시고(예:카) Color는 RGB Alpha Channel(RGB/A-32 bits)를 선택하시고 사이즈는 배경 버튼이 128 * 128 이었으므로 동일한 사이즈로 생성합니다.

그리고 우측 팔레트에서 먼저 흰색을 클릭((바탕색으로 설정) - 팔레트 하단의 HTML용 색상표에서 #FFFFFF를 입력하셔도 됨) 한 후  팔레트 위의 A 아이콘(텍스트 입력)을 눌러서 글자를 입력합니다.



이쁜 폰트를 찾아서 적당한 크기를 입력하고 확인하면 프로젝트에 해당 글자가 흰색으로 입력됩니다. 사각형의 핸들을 조정하여 적당한 크기 및 위치를 조정합니다.


텍스트가 선택된 상태에서 메인 작업창 상단의 Image Transformation 툴바를 선택하고 Drop Shadow를 선택합니다. 디폴트 옵션으로 OK 버튼 클릭. 그림자 효과를 주어 입체적으로 글자가 보입니다.
이제 팔레트에서 진한 푸른색을 선택한 후 팔레트 위쪽의 상단 Flood Fill (페인트 통)을 선택한 후 텍스트의 흰색부분에 클릭합니다.  텍스트가 테두리는 흰색을 가지면서 가운데는 짙은 푸른색으로 카 텍스트가 완성되었습니다.

zk 텍스트도 동일한 방식으로 작업합니다. zk를 위한 128 * 128 새로운 프로젝트를 만든 후 카 텍스트와 동일하게 작업하시면 됩니다. 다만, zk는 흰색으로 텍스트를 만든 후 노란색으로 입히는 게 아니라 처음부터 노란색 계열로 텍스트를 생성한 후 Drop Shodow에서 디폴트값인 검은색으로 그림자가 지도록 만들겠습니다.

Step 3. 화살표 심볼 만들기.

이제 화살표 심볼을 만들어야 합니다. 이걸 아무것도 없이 그려서 만드려면 저 같이 디자인 꽝인 사람들은 절대 못 만듭니다. 하하.. 그러나 iconWorkshop에서 저같은 사람들을 위해서 상당히 많은 무료 심볼들을 제공합니다.


Librarian > Icons > Free > Basic.icl 을 선택하시면 상당히 많은 아이콘용 심볼들이 있습니다. 저희는 그 중에서 첫번째인 Action redo 심볼을 사용하도록 하겠습니다.

Action redo을 더블클릭하시면 작업창에 32 * 32 아이콘이 나옵니다. 128 * 128 새 프로젝트를 만드시고
Action redo 아이콘을 전체선택(Ctrl + A), 복사 (Ctrl + C) 하신 후 새 프로젝트 창에 붙여넣기(Ctrl + V)
하시고 붙여넣기 옵션 중에 두번째 항목인 Resize Image to fit the editor area 항목을 선택하시면 32*32 아이콘이 128*128 사이즈에 맞게 붙여넣어 집니다. 이 아이콘의 크기 조절 핸들을 드래그 하셔서 적당한 사이즈로 줄여줍니다.



이번에는 색상을 변경하기 위해서 팔레트에서 선택한 색상으로 칠하지 않고, HSB 값을 조정하도록 하겠습니다. 메인 에디터 상단의 상단의 Image Color 툴바 하위의 Hue/Saturation.. 메뉴를 선택하면 위의 그림과 같이 나타납니다. 각각의 값을 조정하여 원하는 색상으로 화살표를 변경합니다.

색상 변경 후 역시 텍스트와 마찬가지고 그림자 옵션을 주어 입체효과를 줍니다.
 

그리고 화살표를 우측으로 회전시켜서 화살표가 카 와 zk 글자가 변환되는 느낌을 줍니다. 이제 각각의 요소가 모두 완성 되었습니다.

Step 4. 각각의 요소를 합쳐서 Icon 완성하기.

이제 지금껏 만든 4개의 프로젝트(일종의 4개의 레이어 효과)를 하나의 새 프로젝트로 합쳐야 합니다. 128 * 128 사이즈의 프로젝트를 만든 후 이전에 만들었던 각각의 프로젝트 화면에서 전체선택(Ctrl + A), 복사(Ctrl + C) 후 합쳐야 될 프로젝트에 붙여넣기(Ctrl + V) 합니다. 붙여넣기 할때는 이전의 작업에서 처럼 Resize 가능한 옵션으로 붙여 넣습니다. 붙여넣으신 후 제일 마지막에 붙여 넣기 한 항목에는 사각형 모서리 부분에 핸들이 나타납니다. 핸들을 조정하여 위치나 크기를 조정하여 작업을 마무리 하시면 됩니다. 잘못 작업하시면 언제든지 취소(Ctrl + Z)를 눌러 취소할 수 있으니 맘 놓고 작업하시면 됩니다.

이제 저희가 계획한 icon이 128 * 128 사이즈로 만들어졌습니다.
안드로이드용 어플에서는 기본적으로 72*72, 48*48, 36*36  사이즈의 아이콘 3개가 필요합니다.
그리고 TStore에 등록하기 위해서는 추가적으로 76*76, 212*212 사이즈의 아이콘이 필요합니다
메인으로 만든 128 * 128 사이즈로 각각 Resize (Image 메뉴 > Image Size .. 클릭 후 값 조정 혹은 신규 프로젝트를 원하는 사이즈로 만든 후 복사/붙여넣기로 생성) 하신 후 Save As.. 하시면 필요한 모든 아이콘 제작이 끝이 납니다.

끝으로 아이콘 제작시 도움이 되는 사이트를 하나 더 소개하겠습니다.

http://msdn.microsoft.com/en-us/library/ms997636.aspx

MS의 MSDN 사이트 컨텐츠인데, Windows XP용 아이콘 제작 가이드 및 Primary Color 등 아이콘 제작에 관해 아주 상세하고 유용한 정보들이 나와 있습니다. 

이것으로 네번째 강좌를 마칩니다. 다음번에는 순서를 바꿔서 UI 레이아웃을 먼저 만들고 (드디어 Motodev 실행하는 군요) 그 히후에 안드로이드 앱에서 이미지, XML 리스소 훔쳐보는 방법에 대해서 알려드리도록 하겠습니다.


Trackback 0 Comment 6
  1. MCo더머 2010.08.10 08:18 신고 address edit & del reply

    오우 작게 써주는 프로그램도 있군여 포토샾으로하면 진짜 힘든데 ㅜㅜ

  2. 남시언 2010.08.11 23:35 신고 address edit & del reply

    긴글 잘보고 갑니다~ 정말 도움되는 글 계속 얻어가고있어요 RSS 에서요~~ㅎ

    많은 도움 될것 같습니다...
    포스팅에서 정성이 묻어나네요 ㅎㅎ

  3. fireman 2010.08.17 15:57 신고 address edit & del reply

    ㅋ 일반 프로그래머가 다루기 힘든 부분을 잘 설명해 주셨네요.

    많은 도움이 될 것 같습니다.
    이제 프로그래머도 아이콘 제작 직접 할 수 있을 것 같습니다.

  4. 궁금 2011.07.05 17:59 신고 address edit & del reply

    내장 되어있는 여러 아이콘 소스는 그냥 상업적으로 사용을 해도 상관이 없는지요 ??
    재판매는 아니고 빌더에 들어갈 아이콘인데 괜찮을까요 ??

    • 보고픈 2011.07.15 15:43 신고 address edit & del

      툴을 정품을 구매했다면 써도 상관없겠죠? 그렇지 않다면 공개되는 제품에는 사용이 좀 어렵지 않을까요?

  5. 예슬 2014.10.13 13:03 신고 address edit & del reply

    덕분에 일주일간 헤메던 글자깨짐 문제 잘 해결했습니다. 포토샵보다 일러스트레이터보다 글자가 덜 깨지네요.. 진짜 63x63사이즈로 만들었을때 글자깨지는 현상때문에 엄청 고생했거든요.. 좋은 포스팅 감사합니다 ^^ 근데 그래도 63사이즈는 글자가 완전히 선명하기는 어려운 걸까요.. 실제로 앱을 적용하면 여전히 흐린감은 있기에.. 좀 속상하네요 ㅠㅠ