웹 SQL 지원 중단 및 삭제

(내부적으로 SQLite 데이터베이스 엔진을 기반으로) 사용자의 컴퓨터에 구조화된 방식으로 데이터를 저장할 수 있게 해주는 Web SQL Database API2009년 4월에 도입되었으며 2010년 11월에 폐기되었습니다. Safari를 구동하는 WebKit에서 구현되고 Chrome을 지원하는 Blink 엔진에서 활성 상태로 유지되었지만 Firefox를 지원하는 Gecko는 이 기능을 구현하지 않았으며 WebKit은 2019년에 이를 삭제했습니다.

World Wide Web Consortium (W3C)은 웹 데이터베이스가 필요한 사용자에게 localStoragesessionStorage 또는 IndexedDB와 같은 Web Storage API 기술을 채택하도록 권장합니다. 이러한 기술은 키-값 저장소 및 구조화된 데이터와 관련하여 강점을 보여주지만, 강력한 쿼리 언어의 부족과 같은 약점도 인정되었습니다. 사람들은 이유가 있습니다.

웹 SQL 지원 중단 및 삭제 단계

  • [ 완료] Chromium 97(2022년 1월 4일)에서 웹 SQL이 지원 중단되고 서드 파티 컨텍스트에서 삭제되었습니다.
  • [ 완료] 안전하지 않은 컨텍스트에서의 웹 SQL 액세스는 Chromium 105(2022년 1월 4일)부터 Chrome DevTools Issue 패널에 경고 메시지가 표시된 시점에 지원 중단되었습니다.

비보안 컨텍스트에서 웹 SQL이라는 경고가 표시된 Chrome DevTools의 문제 패널이 지원 중단되었습니다.

  • [ 완료] 안전하지 않은 컨텍스트에서의 웹 SQL 액세스는 Chromium 110(2022년 1월 4일)부터 더 이상 사용할 수 없습니다. 이 기능을 계속 사용하기 위한 엔터프라이즈 정책Chromium 110(2022년 1월 4일)부터 Chromium 123(2022년 1월 4일)까지 제공됩니다.
  • [ 완료] 모든 컨텍스트에서 웹 SQL 액세스가 Chromium 115(2022년 1월 4일)부터 지원 중단되며 Chrome DevTools 문제 패널에 경고 메시지가 표시됩니다.
  • [ 도착했습니다.] 웹 SQL을 계속 사용할 수 있는 지원 중단 체험판Chromium 117(2022년 1월 4일)부터 Chromium 123(2022년 1월 4일)까지 제공됩니다. 지원 중단 트라이얼에 대한 자세한 내용은 오리진 트라이얼 시작하기를 참고하세요.

다음 단계

소개에서 언급했듯이 localStoragesessionStorage와 같은 웹 Storage API 기술 또는 IndexedDB 표준은 많은 경우에 좋은 대안이지만, 모든 경우에 좋은 대안이 아닙니다.

스토리지를 웹 개발자에게 맡기는 이유

Wasm의 출현으로 SQL 또는 NoSQL 솔루션이 웹에 도입될 수 있습니다. 한 가지 예는 DuckDB-Wasm이고 다른 예는 absurd-sql입니다. 이러한 창작물을 바탕으로 Google에서는 개발자 커뮤니티가 브라우저 공급업체보다 빠르고 더 나은 새 저장소 솔루션을 반복하고 만들 수 있다고 생각합니다.

웹 SQL만 삭제할 계획은 아닙니다. 실제로 브라우저에 수정사항과 새로운 기능을 도입하는 부담 없이 오픈소스 커뮤니티에서 유지관리할 수 있는 기능으로 대체했습니다. 이러한 패키지는 원하는 대로 업데이트할 수 있습니다. Google의 목표는 개발자가 자신의 데이터베이스를 웹에 가져오는 것입니다.

또한 이 예시가 새로운 오픈소스 데이터베이스 생태계가 번성하는 데 도움이 되기를 바랍니다. 파일 시스템 액세스 핸들이 출시되면서 맞춤 저장소 솔루션을 빌드할 수 있는 새로운 프리미티브가 마침내 제공됩니다.

웹 SQL이 지원 중단되는 이유

지속 가능성 및 보안 문제

웹 SQL 사양은 지속 가능하게 구현할 수 없으므로 혁신과 새로운 기능이 제한됩니다. 최신 버전의 표준은 문자 그대로 상태입니다. '사용자 에이전트는 Sqlite 3.6.19에서 지원하는 SQL 언어를 구현해야 합니다'입니다.

SQLite가 악의적인 SQL 문을 실행하도록 설계된 것은 아니지만, Web SQL을 구현하면 브라우저에서 이와 같은 작업을 수행해야 합니다. 보안 및 안정성 수정을 최신 상태로 유지해야 하므로 Chromium에서 SQLite를 업데이트해야 합니다. 이는 SQLite 3.6.19와 정확히 동일하게 작동해야 한다는 웹 SQL의 요구사항과 직접 충돌합니다.

API 형태

웹 SQL도 그 기간을 보여주는 API입니다. 이 앱은 2000년대 후반부터 시작하여 다음 코드 샘플(놀란 로슨 제공)에서 볼 수 있듯이 '콜백 헬'의 좋은 예입니다. 이와 같이 SQL 문 (SQLite SQL 언어 사용)은 데이터베이스 메서드에 문자열로 전달됩니다.

openDatabase(
  // Name
  'mydatabase',
  // Version
  1,
  // Display name
  'mydatabase',
  // Estimated size
  5000000,
  // Creation callback
  function (db) {
    db.transaction(
      // Transaction callback
      function (tx) {
        // Execute SQL statement
        tx.executeSql(
          // SQL statement
          'create table rainstorms (mood text, severity int)',
          // Arguments
          [],
          // Success callback
          function () {
            // Execute SQL statement
            tx.executeSql(
              // SQL statement
              'insert into rainstorms values (?, ?)',
              // Arguments
              ['somber', 6],
              // Success callback
              function () {
                // Execute SQL statement
                tx.executeSql(
                  // SQL statement
                  'select * from rainstorms where mood = ?',
                  // Arguments
                  ['somber'],
                  // Success callback
                  function (tx, res) {
                    // Do something with the result
                    var row = res.rows.item(0);
                    console.log(
                      'rainstorm severity: ' +
                        row.severity +
                        ',  my mood: ' +
                        row.mood,
                    );
                  },
                );
              },
            );
          },
        );
      },
      // Error callback
      function (err) {
        console.log('Transaction failed!: ' + err);
      },
      // Success callback);
      function () {
        console.log('Transaction succeeded!');
      },
    );
  },
);

이 코드를 실행하고 Chrome DevTools로 생성된 테이블을 검사한 경우 결과는 다음과 같습니다.

Chrome DevTools의 웹 SQL 섹션을 검사하면 mydatabase라는 데이터베이스가 표시됩니다. 이 데이터베이스에는 rainstorms라는 이름의 열이 있고, 무드 (텍스트) 및 심각도 (정수)라는 이름의 테이블이 표시됩니다. 이 테이블에는 침울한 기분과 심각도가 6인 항목이 하나 있습니다.

구현자 지원 부족

Mozilla는 신비로운 API 형태 (적어도 현재의 관점에서) 외에도 SQLite를 기반으로 웹 SQL을 빌드하는 것에 대해 많은 우려를 가지고 있습니다.

"일반적인 웹 콘텐츠에 노출되는 API의 올바른 기반은 [SQLite] 가 아니라고 생각합니다. 무엇보다도 SQL을 유용한 방식으로 서브세팅하는 신뢰할 수 있고 널리 허용되는 표준이 없기 때문입니다. 또한 SQLite 변경사항이 나중에 웹에 영향을 미치는 것을 원치 않으며 주요 브라우저 출시 버전 (및 웹 표준)을 SQLite에 활용하는 것은 현명하지 않습니다."

Mozilla의 우려사항에 관한 내용은 이전 Mozillan Vladimir Vukiçeviich의 블로그 게시물을 참고하세요. 더 많은 기록을 보려면 W3C 웹 애플리케이션 실무 그룹 회의록(자세한 내용을 보려면 IRC 로그 참조) 및 메일링 리스트 아카이브를 확인하세요. 또한 Nolan Lawson의 블로그 게시물에서 이와 관련된 유용한 개요를 확인할 수 있습니다.

의견

이 게시물에서 설명한 지원 중단 단계에 대해 우려사항이 있는 경우 blink-dev 메일링 리스트를 통해 알려주세요. 이 그룹의 회원은 누구에게나 공개되며 누구나 게시할 수 있습니다.

감사의 말

이 문서는 Joe Medley, Ben Morss, Joshua Bell이 검토했습니다.