SQL 데이터베이스 작업을 위한 전략

Adobe AIR 1.0 이상

응용 프로그램에서 로컬 SQL 데이터베이스에 액세스하고 데이터베이스 작업을 수행할 수 있는 다양한 방법이 있습니다. 응용 프로그램 설계는 응용 프로그램 코드가 구성된 방식, 작업이 수행되는 순서와 시기 등의 측면에서 달라질 수 있습니다. 선택하는 방법은 응용 프로그램 개발의 용이성과 이후 업데이트에서 응용 프로그램을 수정하는 용이성에도 영향을 미칠 수 있습니다. 또한 사용자의 관점에서 응용 프로그램의 성능에도 영향을 미칠 수 있습니다.

미리 채워진 데이터베이스 배포

AIR 로컬 SQL 데이터베이스를 응용 프로그램에서 사용하는 경우 응용 프로그램은 특정 구조의 테이블, 열 등이 포함된 데이터베이스를 기대합니다. 일부 응용 프로그램은 데이터베이스 파일에서 특정 데이터가 미리 채워져 있는 것을 기대하기도 합니다. 적합한 데이터베이스 구조를 확보하는 한 가지 방법은 응용 프로그램 코드에서 데이터베이스를 만드는 것입니다. 응용 프로그램은 로드되면 특정 위치에 데이터베이스 파일이 있는지 확인합니다. 데이터베이스 파일이 없으면 응용 프로그램은 일련의 명령을 실행하여 데이터베이스 파일을 만들고 데이터베이스 구조를 만든 다음 초기 데이터로 테이블을 채웁니다.

데이터베이스와 테이블을 만드는 코드는 복잡한 경우가 많습니다. 흔히 이 코드는 응용 프로그램이 설치되어 있는 동안 한 번만 사용되지만 이 코드로 인해 응용 프로그램의 크기와 복잡성이 커집니다. 데이터베이스, 구조 및 데이터를 프로그래밍 방식으로 만드는 대신 미리 채워진 데이터베이스를 응용 프로그램과 함께 배포할 수 있습니다. 미리 정의된 데이터베이스를 배포하려면 응용 프로그램의 AIR 패키지에 데이터베이스 파일을 포함합니다.

AIR 패키지에 포함된 모든 파일과 마찬가지로, 번들된 데이터베이스 파일은 응용 프로그램 디렉토리( File.applicationDirectory 속성이 나타내는 디렉토리)에 설치됩니다. 그러나 이 디렉토리의 파일은 읽기 전용입니다. AIR 패키지의 파일을 "템플릿" 데이터베이스로 사용합니다. 사용자가 처음 응용 프로그램을 실행할 때 원래 데이터베이스 파일을 사용자의 응용 프로그램 저장소 디렉토리 가리키기 (또는 다른 위치)에 복사하고 이 데이터베이스를 응용 프로그램에서 사용합니다.

로컬 SQL 데이터베이스 작업을 위한 최상의 방법

다음 목록은 로컬 SQL 데이터베이스로 작업할 때 응용 프로그램의 성능, 보안 및 유지 관리 용이성을 향상시키는 데 사용할 수 있는 방법을 제안한 것입니다.

데이터베이스 연결 미리 만들기

응용 프로그램이 처음 로드될 때 문을 실행하지 않는 경우에도 SQLConnection 객체를 인스턴스화하고 open() 또는 openAsync() 메서드를 미리 호출하여(처음에 응용 프로그램이 시작된 후 등에) 문이 실행될 때 지연을 방지합니다. 자세한 내용은 데이터베이스 연결 을 참조하십시오.

데이터베이스 연결 다시 사용

응용 프로그램이 실행되는 동안 내내 특정 데이터베이스에 액세스하는 경우 SQLConnection 인스턴스에 대한 참조를 유지하고, 연결을 닫았다가 다시 여는 대신 응용 프로그램이 실행되는 동안 해당 인스턴스를 다시 사용합니다. 자세한 내용은 데이터베이스 연결 을 참조하십시오.

비동기 실행 모드 우선 사용

데이터 액세스 코드를 작성할 때 동기 작업을 사용하면 코드가 짧아지고 단순해지는 경우가 많기 때문에 작업을 비동기적보다는 동기적으로 실행하려고 할 수 있습니다. 그러나 동기 및 비동기 데이터베이스 작업 사용 에서 설명했듯이 동기 작업은 사용자가 응용 프로그램을 사용할 때 느낄 수 있을 정도로 성능에 나쁜 영향을 미칠 수 있습니다. 한 작업을 수행하는 시간은 작업 및 관련된 데이터의 양에 따라 달라집니다. 예를 들어, 한 행만 데이터베이스에 추가하는 SQL INSERT 문은 수천 개의 데이터 행을 검색하는 SELECT 문보다 시간이 적게 걸립니다. 그러나 동기 실행을 사용하여 여러 작업을 수행하는 경우 작업이 대개 함께 연결됩니다. 한 작업을 수행하는 시간이 매우 짧다고 해도 모든 동기 작업이 완료될 때까지 응용 프로그램이 고정됩니다. 따라서 서로 연결된 여러 작업의 누적 시간이 응용 프로그램을 정지시킬 정도가 될 수 있습니다.

특히 많은 수의 행이 포함된 작업에서는 비동기 작업을 표준 방법으로 사용합니다. SELECT 결과 중 일부 검색 에서 설명한 것처럼 많은 SELECT 문 결과 집합의 처리를 분할하는 방법이 있습니다. 그러나 이 방법은 비동기 실행 모드에서만 사용할 수 있습니다. 비동기 프로그래밍을 사용하여 특정 기능을 수행할 수 없는 경우, 응용 프로그램의 사용자가 경험할 성능 영향을 고려한 경우, 응용 프로그램을 테스트하여 응용 프로그램의 성능이 받는 영향을 파악한 경우에만 동기 작업을 사용합니다. 비동기 실행을 사용하면 코딩이 복잡해질 수 있습니다. 그러나 코드는 한 번만 작성하지만 응용 프로그램의 사용자는 빠르거나 느리게 코드를 반복적으로 사용해야 함을 명심하십시오.

많은 경우에 실행될 각 SQL 문에 대해 별도의 SQLStatement 인스턴스를 사용하면 여러 SQL 작업이 한 번에 큐에 저장될 수 있으므로 코드가 작성된 방식의 측면에서 비동기 코드가 동기 코드와 유사해집니다. 자세한 내용은 비동기 실행 모드 이해 를 참조하십시오.

별도의 SQL 문을 사용하고 SQLStatement의 text 속성을 변경하지 않기

응용 프로그램에서 두 번 이상 실행되는 SQL 문의 경우 SQL 문마다 별도의 SQLStatement 인스턴스를 만듭니다. SQL 명령이 실행될 때마다 해당 SQLStatement 인스턴스를 사용합니다. 예를 들어, 여러 번 수행되는 네 가지 SQL 작업이 포함된 응용 프로그램을 빌드하는 경우 SQLStatement 인스턴스를 네 개 만들고 각 문의 execute() 메서드를 호출하여 인스턴스를 실행합니다. 모든 SQL 문에 하나의 SQLStatement 인스턴스를 사용하고 SQL 문을 실행하기 전에 매번 text 속성을 다시 정의하는 방법은 사용하지 마십시오.

문 매개 변수 사용

SQLStatement 매개 변수를 사용하고 사용자 입력을 문 텍스트로 연결하지 않습니다. 매개 변수를 사용하면 SQL 삽입 공격의 가능성이 방지되기 때문에 응용 프로그램의 보안이 강화되고 쿼리에서 SQL 리터럴 값만 사용하는 대신 객체를 사용할 수 있습니다. 또한 문이 실행될 때마다 문을 다시 컴파일할 필요 없이 다시 사용할 수 있기 때문에 문이 더 효율적으로 실행됩니다. 자세한 내용은 문에서 매개 변수 사용 을 참조하십시오.