사용자의 컴퓨터에 구조화된 방식으로 데이터를 저장할 수 있는 Web SQL Database API (내부적으로는 SQLite 데이터베이스 엔진을 기반으로 함)는 2009년 4월에 도입되었으며 2010년 11월에 폐기되었습니다. 이 기능은 Safari를 구동하는 WebKit에서 구현되고 Chrome을 구동하는 Blink 엔진에서 계속 활성 상태였지만, Firefox를 구동하는 Gecko는 이 기능을 구현하지 않았으며 2019년에 WebKit에서 이 기능을 삭제했습니다.
W3C (World Wide Web Consortium)는 웹 데이터베이스가 필요한 사용자에게 localStorage
, sessionStorage
또는 IndexedDB와 같은 웹 스토리지 API 기술을 채택하도록 권장합니다.
이러한 기술은 키/값 저장소 및 구조화된 데이터와 관련된 강점을 보여주지만 강력한 쿼리 언어의 부재와 같은 약점도 가지고 있습니다. 사람들이 웹에서 SQL을 사용하려는 데에는 이유가 있습니다.
웹 SQL 지원 중단 및 삭제 단계
- [ 완료] Chromium 97(2022년 1월 4일)에서 웹 SQL이 지원 중단되고 서드 파티 컨텍스트를 위해 삭제되었습니다.
- [ 완료] Chromium 105(2022년 1월 4일)부터 안전하지 않은 컨텍스트의 웹 SQL 액세스가 지원 중단되었으며 Chrome DevTools Issue 패널에 경고 메시지가 표시되었습니다.
- [ 완료] Chromium 110(2022년 1월 4일)부터 안전하지 않은 컨텍스트의 웹 SQL 액세스를 더 이상 사용할 수 없습니다. 이 기능을 계속 사용하기 위한 기업 정책은 Chromium 110(2022년 1월 4일)부터 Chromium 123(2022년 1월 4일)까지 제공됩니다.
- [ 완료] 모든 컨텍스트의 웹 SQL 액세스가 Chromium 115(2022년 1월 4일)부터 지원 중단되며 Chrome DevTools Issue 패널에 경고 메시지가 표시됩니다.
- [지원 중단 기능 트라이얼이 Chromium 117(2022년 1월 4일)부터 Chromium 123(2022년 1월 4일)까지 제공되었습니다. 지원 중단 트라이얼에 대한 자세한 내용은 오리진 트라이얼 시���하기를 참고하세요. 완료] 웹 SQL을 계속 사용할 수 있는
- [ 완료] Chromium 119부터 모든 컨텍스트의 웹 SQL 액세스를 사용�� 수 ���습니다.
다음 단계
소개 부분에서 언급했듯이 localStorage
, sessionStorage
또는 IndexedDB 표준과 같은 웹 스토리지 API 기술은 많은 경우에 좋은 대안이지만 모든 경우에 사용하는 것은 아닙니다.
스토리지를 웹 개발자에게 맡기는 이유
Wasm의 출현과 함께 SQL 또는 NoSQL 솔루션이 웹에 등장할 수 있게 되었습니다. 한 가지 예시는 DuckDB-Wasm이고 다른 하나는 absurd-sql입니다. 이러한 창작물을 토대로 Google에서는 개발자 커뮤니티가 브라우저 공급업체보다 더 빠르고 나은 새 스토리지 솔루션을 반복하고 만들 수 있다고 생각합니다.
웹 SQL만 삭제할 계획은 없습니다. 실제로 Google은 이 도구를 오픈소스 커뮤니티에서 유지관리하고 원하는 대로 업데이트할 수 있는 패키지로 제공되는 내용으로 대체했으며, 수정 사항과 새로운 기능을 브라우저에 직접 도입할 부담 없이 이 도구를 제공했습니다. Google의 목표는 개발자가 자신의 데이터베이스를 웹으로 가져올 수 있도록 하는 것입니다.
또한 이 예시가 오픈소스 데이터베이스의 새로운 생태계가 번성하는 데 도움이 되기를 바랍니다. 파일 시스템 액세스 핸들 출시는 최종적으로 맞춤 저장소 솔루션을 빌드할 수 있는 새로운 기본 요소를 제공합니다.
Web SQL이 지원 중단되는 이유
지속 가능성 및 보안 문제
웹 SQL 사양은 지속 가능하게 구현할 수 없으므로 혁신과 새로운 기능이 ��한됩니다. 표준의 마지막 버전에는 문자 그대로 '사용자 에이전트가 Sqlite 3.6.19에서 지원되는 SQL 언어를 구현해야 합니다'라고 명시되어 있습니다.
SQLite가 악의적인 SQL 문을 실행하도록 설계된 것은 아니지만, Web SQL을 구현하려면 브라우저에서 정확히 이 작업을 실행해야 합니다. 보안 및 안정성 수정사항을 계속 유지해야 하는 경우 Chromium에서 SQLite를 업데이트해야 합니다. 이는 SQLite 3.6.19와 똑같이 동작해야 하는 웹 SQL의 요구사항과 직접적으로 상충됩니다.
API 형태
웹 SQL은 사용 기간을 보여주는 API이기도 합니다. 다음 코드 샘플(Nolan Lawson)에서 보여준 것처럼 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로 생성된 테이블을 검사하면 결과는 다음과 같습니다.
구현자 지원 부족
적어도 오늘날의 관점에서 볼 때 Mozilla는 Arcane API의 형태 외에도 SQLite를 기반으로 빌드되는 웹 SQL에 대해 많은 우려를 가지고 있습니다.
"[SQLite] 가 일반적인 웹 콘텐츠에 노출되는 API의 올바른 기반이라고 생각하지 않습니다. 유용한 방식으로 SQL의 하위 집합을 만드는 신뢰할 수 있고 널리 수용되는 표준이 없기 때문입니다. 또한 SQLite 변경사항이 나중에 웹에 영향을 미치지 않도록 하고 주요 브라우저 버전 (및 웹 표준)을 SQLite에 활용하는 것이 적절하다고 생각하지 않습니다."
Mozilla의 우려사항에 대한 자세한 내용은 이전 Mozillan Vladimir Vukirchevirch의 블로그 게시물을 참조하세요. 자세한 내용은 W3C 웹 애플리케이션 작업 그룹 회의 시간을 확인하세요. 자세히 알아보려면 IRC 로그와 메일링 리스트 자료실을 참조하세요. 또한 Nolan Lawson의 블로그 게시물에도 발생한 상황에 대한 간략한 개요가 나와 있습니다.
의견
이 게시물에서 설명한 지원 중단 단계에 관해 우려되는 점이 있는 경우 blink-dev 메일링 리스트를 통해 알려주세요. 이 그룹의 회원은 누구든지 가입할 수 있으며 누구나 게시물을 올릴 수 있습니다.
관련 링크
- ChromeStatus 항목: 서드 파티 컨텍스트에서 WebSQL 지원 중단 및 삭제
- ChromeStatus 항목: 비보안 컨텍스트의 WebSQL 지원 중단 및 삭제
- 지원 중단 및 삭제 인텐트: 서드 파티 컨텍스트의 WebSQL
- 지원 중단 및 삭제 인텐트: 비보안 컨텍스트의 WebSQL
- Chromium 문제: 서드 파티 컨텍스트에서 WebSQL 지원 중단 및 삭제
- Chromium 문제: 안전하지 않은 컨텍스트의 WebSQL 지원 중단 및 삭제
- Chromium 문제: WebSQL 지원 중단 및 삭제 (Window#openDatabase)
- 원본 비공개 파일 시스템에서 지원하는 브라우저의 SQLite Wasm
감사의 말씀
이 도움말은 Joe Medley, Ben Morss, Joshua Bell이 검토했습니다.