로컬 SQL 데이터베이스

Adobe AIR 1.0 이상

SQL 데이터베이스 사용에 대한 간략한 설명과 코드 예제를 보려면 Adobe Developer Connection의 다음 퀵 스타트 문서를 참조하십시오.

Adobe AIR에는 런타임에서 실행되는 SQL 기반 관계형 데이터베이스 엔진과 AIR 응용 프로그램이 실행되는 컴퓨터(예: 컴퓨터의 하드 드라이브)의 데이터베이스 파일에 로컬로 저장된 데이터가 포함되어 있습니다. 데이터베이스가 실행되고 데이터 파일이 로컬로 저장되어 있으므로 네트워크 연결을 사용할 수 있는지 여부와 관계없이 AIR 응용 프로그램에서 데이터베이스를 사용할 수 있습니다. 따라서 런타임의 로컬 SQL 데이터베이스 엔진은 특히 SQL과 관계형 데이터베이스에 익숙한 사용자에게 로컬 영구 응용 프로그램 데이터를 저장할 수 있는 간편한 메커니즘을 제공합니다.

로컬 SQL 데이터베이스의 용도

사용자의 로컬 컴퓨터에 응용 프로그램 데이터를 저장하려는 모든 용도에 AIR 로컬 SQL 데이터베이스 기능을 사용할 수 있습니다. Adobe AIR에는 데이터를 로컬로 저장할 수 있는 몇 가지 메커니즘이 포함되어 있는데 각 메커니즘에는 서로 다른 장점이 있습니다. AIR 응용 프로그램에서 가능한 몇 가지 로컬 SQL 데이터베이스의 용도는 다음과 같습니다.

  • 데이터 지향 응용 프로그램(예: 주소록)의 경우 데이터베이스를 사용하여 기본 응용 프로그램 데이터를 저장할 수 있습니다.

  • 사용자가 저장하고 공유할 문서를 만드는 문서 지향 응용 프로그램의 경우 각 문서를 사용자가 지정한 위치에 데이터베이스 파일로 저장할 수 있습니다. 그러나 데이터베이스가 암호화되지 않은 경우에는 모든 AIR 응용 프로그램에서 데이터베이스 파일을 열 수 있습니다. 중요할 수 있는 문서에는 암호화를 사용하는 것이 좋습니다.

  • 네트워크 인식 응용 프로그램의 경우 데이터베이스를 사용하여 응용 프로그램 데이터의 로컬 캐시를 저장하거나 네트워크 연결을 사용할 수 없을 때 일시적으로 데이터를 저장할 수 있습니다. 로컬 데이터베이스를 네트워크 데이터 저장소와 동기화할 수 있는 메커니즘을 만들 수도 있습니다.

  • 모든 응용 프로그램의 경우 데이터베이스를 사용하여 윈도우 크기 및 위치 등의 응용 프로그램 정보나 사용자 옵션과 같은 개별 사용자의 응용 프로그램 설정을 저장할 수 있습니다.

AIR 데이터베이스 및 데이터베이스 파일

개별 Adobe AIR 로컬 SQL 데이터베이스는 컴퓨터의 파일 시스템에 단일 파일로 저장됩니다. 런타임에는 데이터베이스 파일을 만들고 구성하는 작업과 데이터베이스 파일에서 데이터를 조작하고 검색하는 작업을 관리하는 SQL 데이터베이스 엔진이 포함되어 있습니다. 런타임은 데이터베이스 데이터가 파일 시스템에 저장되는 방식이나 위치를 지정하지 않습니다. 각 데이터베이스는 한 파일 안에 완전히 저장됩니다. 사용자가 파일 시스템에서 데이터베이스 파일이 저장되는 위치를 지정합니다. 한 AIR 응용 프로그램이 하나 이상의 개별 데이터베이스(즉, 개별 데이터베이스 파일)에 액세스할 수 있습니다. 런타임은 각 데이터베이스를 파일 시스템에서 한 파일로 저장하기 때문에 응용 프로그램의 설계와 운영 체제의 파일 액세스 제한에 따라 필요한 경우 데이터베이스를 찾을 수 있습니다. 각 사용자가 특정 데이터에 대한 별도의 데이터베이스 파일을 사용하거나, 한 컴퓨터의 모든 응용 프로그램 사용자가 공유 데이터를 사용하기 위해 단일 데이터베이스 파일에 액세스할 수 있습니다. 데이터는 한 컴퓨터에 로컬이기 때문에 여러 컴퓨터의 사용자에게 자동으로 공유되지 않습니다. 로컬 SQL 데이터베이스 엔진은 원격 또는 서버측 데이터베이스에 대해 SQL 문을 실행하는 기능을 제공하지 않습니다.

관계형 데이터베이스

관계형 데이터베이스는 컴퓨터에서 데이터를 저장하고 검색할 수 있는 메커니즘입니다. 데이터는 테이블로 구성되어 있습니다. 행은 레코드나 항목을 나타내고 열(“필드”라고도 함)은 각 레코드를 개별 값으로 나눕니다. 예를 들어, 주소록 응용 프로그램에는 “friends” 테이블이 포함될 수 있습니다. 테이블의 각 행은 데이터베이스에 저장된 한 친구를 나타냅니다. 테이블의 열은 성, 이름, 생일 등의 데이터를 나타냅니다. 데이터베이스는 테이블의 친구 행마다 각 열에 별도의 값을 저장합니다.

관계형 데이터베이스는 한 항목이 다른 유형의 항목과 연결되어 있거나 관련되어 있는 복잡한 데이터를 저장하도록 설계되었습니다. 관계형 데이터베이스에서 일대다 관계(한 레코드가 다른 유형의 여러 레코드와 관련될 수 있는 관계)인 모든 데이터는 여러 테이블에 나뉘어 있어야 합니다. 예를 들어, 주소록 응용 프로그램에 각 친구의 여러 전화 번호를 저장하려는 경우를 일대다 관계라고 할 수 있습니다. “friends” 테이블에는 각 친구의 모든 개인 정보가 포함됩니다. 별도의 “phone numbers” 테이블에는 모든 친구의 모든 전화 번호가 포함됩니다.

각 테이블에서는 친구와 전화 번호에 대한 데이터를 저장하는 것 외에도 개별 친구 레코드와 전화 번호를 일치시키기 위해 두 테이블의 관계를 추적하는 데이터가 필요합니다. 이 데이터를 기본 키라고 합니다. 기본 키는 테이블의 각 행을 해당 테이블의 다른 행과 구별하는 고유한 식별자입니다. 기본 키는 테이블의 각 레코드를 자연적으로 구분하는 데이터 항목 중 하나를 의미하는 “자연 키”일 수 있습니다. “friends” 테이블에서 친구 중에 생일이 같은 사람이 없다는 사실을 아는 경우 생일 열을 “friends” 테이블의 기본 키(자연 키)로 사용할 수 있습니다. 자연 키가 없으면 응용 프로그램에서 행을 구분하는 데 사용하는 인공 값인 “friend ID”와 같은 별도의 기본 키 열을 만듭니다.

기본 키를 사용하여 여러 테이블 간의 관계를 설정할 수 있습니다. 예를 들어, “friends” 테이블에 각 행(각 친구)에 대한 고유 숫자가 포함된 “friend ID”가 있는 경우 관련된 “phone numbers” 테이블을 두 열로 구성하여 한 열에는 전화 번호에 해당하는 친구의 “friend ID”를 넣고 다른 열에는 실제 전화 번호를 넣을 수 있습니다. 이런 식으로 한 친구가 사용하는 전화 번호가 몇 개이든 간에 모든 전화 번호를 “phone numbers” 테이블에 저장하고 “friend ID” 기본 키를 사용하여 관련된 친구와 연결할 수 있습니다. 한 테이블의 기본 키가 관련된 테이블에서 레코드 간의 연결을 지정하는 데 사용되는 경우 관련된 테이블의 값을 외래 키라고 합니다. 많은 데이터베이스와 달리 AIR 로컬 데이터베이스 엔진에서는 삽입되거나 업데이트된 외래 키 값에 해당하는 행이 기본 키 테이블에 있는지 자동으로 확인하는 제약 조건인 FOREIGN KEY 제약 조건을 만들 수 없습니다. 그렇지만 외래 키 관계는 관계형 데이터베이스 구조의 중요한 부분이며 데이터베이스에서 테이블 간의 관계를 만들 때 외래 키를 사용해야 합니다.

SQL 정보

SQL(구조적 쿼리 언어)은 관계형 데이터베이스에서 데이터를 조작하고 검색하는 데 사용됩니다. SQL은 절차적 언어가 아니라 설명적 언어입니다. SQL문은 컴퓨터에 데이터를 검색하는 방법에 대한 명령을 제공하는 대신 원하는 데이터 집합을 설명합니다. 데이터베이스 엔진은 해당 데이터를 검색하는 방법을 결정합니다.

SQL 언어는 ANSI(American National Standards Institute)에서 표준화하고 있습니다. Adobe AIR 로컬 SQL 데이터베이스는 SQL-92 표준을 대부분 지원합니다.

Adobe AIR에서 지원되는 SQL 언어에 대한 구체적인 설명은 로컬 데이터베이스의 SQL 지원 을 참조하십시오.

SQL 데이터베이스 클래스

ActionScript 3.0에서 로컬 SQL 데이터베이스로 작업하려면 flash.data 패키지에서 이러한 클래스의 인스턴스를 사용합니다.

클래스

설명

flash.data.SQLConnection

데이터베이스(데이터베이스 파일)를 만들고 열 수 있도록 하며 데이터베이스 수준 작업을 수행하고 데이터베이스 트랜잭션을 제어하는 메서드를 제공합니다.

flash.data.SQLStatement

문 텍스트 정의와 매개 변수 값 설정을 비롯하여 데이터베이스에서 실행되는 단일 SQL 문(단일 쿼리 또는 명령)을 나타냅니다.

flash.data.SQLResult

SELECT 문의 결과 행, UPDATE 또는 DELETE 문의 영향을 받는 행의 수를 비롯한 문 실행 결과에 대한 정보를 가져올 수 있도록 합니다.

데이터베이스 구조를 설명하는 스키마 정보를 얻으려면 flash.data 패키지에서 다음 클래스를 사용합니다.

클래스

설명

flash.data.SQLSchemaResult

SQLConnection.loadSchema() 메서드를 호출하여 생성된 데이터베이스 스키마 결과에 대한 컨테이너 역할을 합니다.

flash.data.SQLTableSchema

데이터베이스의 단일 테이블을 설명하는 정보를 제공합니다.

flash.data.SQLViewSchema

데이터베이스의 단일 뷰를 설명하는 정보를 제공합니다.

flash.data.SQLIndexSchema

데이터베이스에 있는 뷰나 테이블의 단일 열을 설명하는 정보를 제공합니다.

flash.data.SQLTriggerSchema

데이터베이스의 단일 트리거를 설명하는 정보를 제공합니다.

flash.data 패키지의 다른 클래스는 SQLConnection 클래스 및 SQLColumnSchema 클래스와 함께 사용되는 상수를 제공합니다.

클래스

설명

flash.data.SQLMode

SQLConnection.open() SQLConnection.openAsync() 메서드의 openMode 매개 변수에 사용할 수 있는 값을 나타내는 상수의 집합을 정의합니다.

flash.data.SQLColumnNameStyle

SQLConnection.columnNameStyle 속성에 사용할 수 있는 값을 나타내는 상수의 집합을 정의합니다.

flash.data.SQLTransactionLockType

SQLConnection.begin() 메서드의 option 매개 변수에 사용할 수 있는 값을 나타내는 상수의 집합을 정의합니다.

flash.data.SQLCollationType

SQLColumnSchema() 생성자의 defaultCollationType 매개 변수와 SQLColumnSchema.defaultCollationType 속성에 사용할 수 있는 값을 나타내는 상수의 집합을 정의합니다.

또한 flash.events 패키지의 다음 클래스는 사용하는 이벤트와 지원하는 상수를 나타냅니다.

클래스

설명

flash.events.SQLEvent

작업이 성공적으로 실행되는 경우 SQLConnection 또는 SQLStatement 인스턴스가 전달하는 이벤트를 정의합니다. 각 작업에는 SQLEvent 클래스에 정의된 이벤트 유형 상수가 연결되어 있습니다.

flash.events.SQLErrorEvent

작업에서 오류가 발생하는 경우 SQLConnection 또는 SQLStatement 인스턴스가 전달하는 이벤트를 정의합니다.

flash.events.SQLUpdateEvent

연결된 데이터베이스 중 하나의 테이블 데이터가 INSERT , UPDATE 또는 DELETE SQL 문을 실행한 결과로 변경되는 경우 SQLConnection 인스턴스가 전달하는 이벤트를 정의합니다.

마지막으로 flash.errors 패키지의 다음 클래스는 데이터베이스 작업 오류에 대한 정보를 제공합니다.

클래스

설명

flash.errors.SQLError

시도된 작업과 실패의 원인을 비롯하여 데이터베이스 작업 오류에 대한 정보를 제공합니다.

flash.errors.SQLErrorOperation

오류가 발생한 데이터베이스 작업을 나타내는 SQLError 클래스의 operation 속성에 사용할 수 있는 값을 나타내는 상수의 집합을 정의합니다.

동기 및 비동기 실행 모드

로컬 SQL 데이터베이스로 작업하는 코드를 작성하는 경우 비동기 실행 모드나 동기 실행 모드 중 하나에서 해당 데이터베이스 작업 실행을 지정합니다. 일반적으로 코드 예제에서는 두 방법으로 각 작업을 수행하는 방법을 보여 주므로 사용자의 요구에 가장 적합한 예제를 사용할 수 있습니다.

비동기 실행 모드에서는 사용자가 런타임에 명령을 제공하고 런타임은 요청된 작업이 완료되거나 실패할 때 이벤트를 전달합니다. 먼저 사용자가 데이터베이스 엔진에 작업을 수행하도록 지시합니다. 데이터베이스 엔진은 응용 프로그램이 실행되는 동안 백그라운드에서 작업을 수행합니다. 마지막으로 작업이 완료되거나 작업이 실패하면 데이터베이스 엔진은 이벤트를 전달합니다. 이벤트에 의해 트리거된 코드에서 이후 작업을 수행합니다. 이 방법에는 상당한 이점이 있습니다. 런타임은 기본 응용 프로그램 코드가 실행되는 동안 백그라운드에서 데이터베이스 작업을 수행하므로 데이터베이스 작업이 많은 시간을 차지하는 경우 응용 프로그램이 계속 실행됩니다. 가장 중요한 점은 화면이 정지하는 일 없이 사용자가 응용 프로그램과 계속 상호 작용할 수 있다는 것입니다. 그렇지만 비동기 작업 코드는 다른 코드보다 작성하기가 복잡할 수 있습니다. 이러한 현상은 여러 종속 작업을 다양한 이벤트 리스너 메서드에 분할해야 하는 경우에 나타납니다.

개념적으로 작업을 여러 단계로 이루어진 단일 시퀀스(동기 작업의 집합)로 코딩하는 것이 작업 집합을 몇 가지 이벤트 리스너 메서드로 분할하는 것보다 간단합니다. Adobe AIR에서는 비동기 데이터베이스 작업 외에도 데이터베이스 작업을 동기적으로 실행할 수도 있습니다. 동기 실행 모드에서는 작업이 백그라운드에서 실행되지 않고 다른 모든 응용 프로그램 코드와 동일한 실행 시퀀스에서 실행됩니다. 사용자가 데이터베이스 엔진에 작업을 수행하도록 지시합니다. 그러면 코드가 데이터베이스 엔진이 작업하는 시점에 일시 중지됩니다. 작업이 완료되면 코드의 다음 줄에서 실행이 계속됩니다.

작업이 비동기적으로 실행되는지, 아니면 동기적으로 실행되는지는 SQLConnection 수준에서 설정됩니다. 단일 데이터베이스 연결을 사용하는 경우 일부 작업이나 문을 동기적으로 실행하고 다른 작업이나 문을 비동기적으로 실행할 수 없습니다. SQLConnection 메서드를 호출하여 데이터베이스를 여는 방법으로 SQLConnection이 동기 실행 모드에서 작동하는지, 아니면 비동기 실행 모드에서 작동하는지를 지정합니다. SQLConnection.open() 을 호출하면 연결이 동기 실행 모드에서 작동하고, SQLConnection.openAsync() 를 호출하면 연결이 비동기 실행 모드에서 작동합니다. SQLConnection 인스턴스가 open() 또는 openAsync() 를 사용하여 데이터베이스에 연결되면 데이터베이스 연결을 닫고 다시 열지 않는 한 동기 실행 모드나 비동기 실행 모드로 고정됩니다.

각 실행 모드에는 장점이 있습니다. 각 모드의 측면이 대부분 유사하지만 각 모드에서 작업할 때 명심해야 할 차이점이 있습니다. 이러한 항목에 대한 자세한 내용과 각 모드에서의 작업에 대한 제안은 동기 및 비동기 데이터베이스 작업 사용 을 참조하십시오.