맨위로가기

SQLite

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

SQLite는 D. 리처드 히프가 설계한, 서버가 필요 없는 관계형 데이터베이스 관리 시스템이다. 2000년에 처음 출시되었으며, 이후 여러 버전의 개선을 거쳤다. SQLite는 프로그램에 직접 링크되거나 공유 라이브러리 형태로 사용 가능하며, SQL-92 표준의 대부분을 구현한다. 작고 가벼운 특징으로 인해 다양한 운영 체제, 웹 브라우저, 그리고 심포니, 라라벨, 장고 등 여러 응용 프로그램에서 널리 사용된다. 또한, 다양한 관리 도구와 ODBC 드라이버를 제공하여 데이터베이스 관리를 용이하게 한다.

더 읽어볼만한 페이지

  • 임베디드 데이터베이스 - DBM (컴퓨팅)
    DBM은 1979년 켄 톰프슨이 개발한 데이터베이스 엔진으로, 기본 키를 사용하여 데이터를 저장하고 해시 함수를 통해 빠른 검색을 지원하며, 다양한 후속 구현체가 존재한다.
  • 임베디드 데이터베이스 - H2 (DBMS)
    H2는 2004년에 개발되어 2005년에 출시된 자바 기반의 오픈 소스 관계형 데이터베이스 관리 시스템으로, SQL 표준을 지원하며 다양한 인터페이스를 통해 접근 가능하고, 내장 및 클라이언트-서버 모드를 지원하며, 클러스터링 등 다양한 기능을 제공한다.
  • 관계형 데이터베이스 관리 시스템 - IBM 시스템 R
  • 관계형 데이터베이스 관리 시스템 - 마이크로소프트 액세스
    마이크로소프트 액세스는 1992년 출시된 데이터베이스 관리 시스템으로, 테이블, 쿼리, 폼 등을 생성하고 VBA를 통해 솔루션을 개발하며, 윈도우에서 사용 가능하고 다양한 데이터 형식과 통합된다.
  • 자유 데이터베이스 관리 시스템 - PostgreSQL
    PostgreSQL은 캘리포니아 대학교 버클리 분교의 Ingres 프로젝트에서 시작되어 전 세계 개발자들의 협력을 통해 발전해온 객체 관계형 데이터베이스 관리 시스템(ORDBMS)이다.
  • 자유 데이터베이스 관리 시스템 - MySQL
    MySQL은 1994년 스웨덴에서 개발을 시작하여 현재 오라클에 인수된 관계형 데이터베이스 관리 시스템으로, 오픈 소스 및 상업용 에디션을 제공하며 ANSI SQL 99 표준을 지원하고 다양한 스토리지 엔진과 프로그래밍 언어 API를 지원한다.
SQLite - [IT 관련 정보]에 관한 문서
기본 정보
SQLite370 로고
SQLite370 로고
sqlite3 명령 셸 스크린샷
sqlite3 명령 셸 스크린샷
개발자리처드 힙
최초 릴리스2000년 8월 17일
프로그래밍 언어C
운영체제크로스 플랫폼
종류RDBMS (embedded)
라이선스퍼블릭 도메인
공식 웹사이트SQLite 공식 웹사이트
파일 포맷 정보
이름SQLite 데이터베이스 파일 포맷
확장자.sqlite, .sqlite3, .db, .db3, .s3db, .sl3
MIME 형식application/vnd.sqlite3
매직 넘버53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00 (제로 종료 ASCII "SQLite format 3")
출시일2004년 6월 18일
공개 여부예 (퍼블릭 도메인)
URLSQLite 파일 포맷 정보

2. 역사

D. 리처드 히프는 2000년 제너럴 다이내믹스에서 미국 해군과의 계약을 통해 SQLite를 설계했다. SQLite는 데이터 세트의 장기 보존을 위해 권장되는 네 가지 형식 중 하나이며, 미국 의회 도서관에서 사용을 승인했다.[12][13][14] SQLite 코드는 분산 버전 관리 시스템인 Fossil에 호스팅되어 있는데, Fossil은 SQLite를 비관계형 데이터베이스 형식의 로컬 캐시로 사용하고, SQLite의 SQL을 구현 언어로 사용한다.[35][36]

SQLite는 퍼블릭 도메인이지만 "오픈 컨트리뷰션"은 아니며, 웹사이트에는 "프로젝트는 기여를 퍼블릭 도메인으로 헌납하는 선서를 제출하지 않은 사람의 패치를 받지 않습니다."라고 명시되어 있다.[37] 설립자들은 행동 강령 대신 성 베네딕토 규칙을 기반으로 한 윤리 강령을 채택했다.[38]

SQLite 배포판에는 ''sqlite3''[39]라는 독립형 명령줄 셸 프로그램이 제공된다. 이 프로그램은 데이터베이스를 생성, 정의, 수정하고 쿼리를 실행하여 SQLite 데이터베이스 파일을 관리하는 데 사용된다. 또한 SQLite 라이브러리를 사용하는 응용 프로그램을 작성하는 예제로도 사용된다.

SQLite는 각 릴리스 전에 자동 회귀 테스트를 사용하며, 릴리스 검증의 일환으로 2백만 개가 넘는 테스트[40]가 실행된다. 2009년 8월 10일 SQLite 3.6.17부터는 100% 브랜치 테스트 커버리지를 가지고 있으며, 이는 코드 커버리지의 구성 요소 중 하나이다. 테스트 및 테스트 하네스는 부분적으로 퍼블릭 도메인이고 부분적으로는 독점이다.[40]

2. 1. 개발

D. 리처드 히프는 2000년 봄, 제너럴 다이내믹스에서 미국 해군과의 계약을 통해 일하면서 SQLite를 설계했다.[9] 히프는 유도 미사일 구축함에 탑재되는 손상 통제 시스템에 사용되는 소프트웨어를 설계하고 있었으며, 이 시스템은 원래 HP-UX와 IBM Informix 데이터베이스 백엔드를 사용했다. SQLite는 Tcl 확장으로 시작되었다.[51]

2000년 8월, SQLite 버전 1.0이 출시되었으며, 저장소는 gdbm (GNU 데이터베이스 관리자)을 기반으로 했다. 2001년 9월, SQLite 2.0은 gdbm을 사용자 지정 B-tree 구현으로 대체하여 트랜잭션 기능을 추가했다. 2004년 6월, SQLite 3.0은 국제화, 매니페스트 타이핑 및 기타 주요 개선 사항을 추가했으며, 이는 아메리카 온라인의 부분적인 자금 지원을 받았다. 2011년, 히프는 SQLite에 NoSQL 인터페이스를 추가할 계획과 문서 지향 데이터베이스를 위해 설계된 SQL의 기능적 상위 집합인 UnQL을 발표했다.[10] 2018년, SQLite는 성 베네딕투스 규칙을 기반으로 한 행동 강령을 채택했으나, 일부 논란을 일으켰고, 이후 윤리 강령으로 이름이 변경되었다.[11]

SQLite는 데이터 세트의 장기 보존을 위해 권장되는 네 가지 형식 중 하나이며, 미국 의회 도서관에서 사용을 승인했다.[12][13][14] SQLite 코드는 분산 버전 관리 시스템인 Fossil에 호스팅되어 있는데, Fossil은 SQLite를 비관계형 데이터베이스 형식의 로컬 캐시로 사용하고, SQLite의 SQL을 구현 언어로 사용한다.[35][36]

SQLite는 퍼블릭 도메인이지만 "오픈 컨트리뷰션"은 아니며, 웹사이트에는 "프로젝트는 기여를 퍼블릭 도메인으로 헌납하는 선서를 제출하지 않은 사람의 패치를 받지 않습니다."라고 명시되어 있다.[37] 행동 강령 대신, 설립자들은 성 베네딕토 규칙을 기반으로 한 윤리 강령을 채택했다.[38]

SQLite 배포판에는 ''sqlite3''[39]라는 독립형 명령줄 셸 프로그램이 제공된다. 이 프로그램은 데이터베이스를 생성하고, 테이블을 정의하고, 행을 삽입 및 변경하고, 쿼리를 실행하고, SQLite 데이터베이스 파일을 관리하는 데 사용할 수 있다. 또한 SQLite 라이브러리를 사용하는 응용 프로그램을 작성하는 예제로도 사용된다.

SQLite는 각 릴리스 전에 자동 회귀 테스트를 사용한다. 릴리스 검증의 일환으로 2백만 개가 넘는 테스트[40]가 실행된다. 2009년 8월 10일에 릴리스된 SQLite 3.6.17부터 SQLite 릴리스는 100% 브랜치 테스트 커버리지를 가지고 있으며, 이는 코드 커버리지의 구성 요소 중 하나이다. 테스트 및 테스트 하네스는 부분적으로 퍼블릭 도메인이고 부분적으로는 독점이다.[40]

2. 2. 버전 발전

D. 리처드 히프는 2000년 봄, 제너럴 다이내믹스에서 미국 해군과의 계약을 통해 일하면서 SQLite를 설계했다.[9] 히프는 유도 미사일 구축함에 탑재되는 손상 통제 시스템에 사용되는 소프트웨어를 설계하고 있었으며, 이 시스템은 원래 HP-UX와 IBM Informix 데이터베이스 백엔드를 사용했다. SQLite는 Tcl 확장으로 시작되었다.[51]

2000년 8월, SQLite 버전 1.0이 출시되었으며, 저장소는 gdbm (GNU 데이터베이스 관리자)을 기반으로 했다. 2001년 9월, SQLite 2.0은 gdbm을 사용자 지정 B-tree 구현으로 대체하여 트랜잭션 기능을 추가했다. 2004년 6월, SQLite 3.0은 국제화, 매니페스트 타이핑 및 기타 주요 개선 사항을 추가했으며, 이는 아메리카 온라인의 부분적인 자금 지원을 받았다. 2011년, 히프는 SQLite에 NoSQL 인터페이스를 추가할 계획과 문서 지향 데이터베이스를 위해 설계된 SQL의 기능적 상위 집합인 UnQL을 발표했다.[10] 2018년, SQLite는 성 베네딕투스 규칙을 기반으로 한 행동 강령을 채택했으나, 일부 논란을 일으켰고, 이후 윤리 강령으로 이름이 변경되었다.[11]

SQLite는 데이터 세트의 장기 보존을 위해 권장되는 네 가지 형식 중 하나이며, 미국 의회 도서관에서 사용을 승인했다.[12][13][14]

3. 설계

SQLite는 데이터베이스 관리 시스템 설치나 데이터베이스 관리자 없이도 프로그램을 운영할 수 있도록 설계되었다. 클라이언트-서버 모델 데이터베이스 관리 시스템과 달리, SQLite 엔진은 응용 프로그램과 통신하는 독립적인 프로세스가 없다. 대신 링커를 통해 SQLite 라이브러리가 응용 프로그램에 통합(정적으로 또는 동적으로)되어 간단한 함수 호출을 통해 SQLite의 기능을 사용한다. 따라서 데이터베이스 작업의 지연 시간을 줄인다. 동시성이 적은 간단한 쿼리의 경우 SQLite의 컴퓨터 성능프로세스 간 통신의 오버헤드를 피함으로써 이점을 얻는다.

서버가 없는 설계로 SQLite 응용 프로그램은 클라이언트-서버 데이터베이스보다 구성이 덜 필요하다. SQLite는 서비스 관리(예: 시작 스크립트) 또는 데이터 제어 언어 및 암호 기반의 액세스 제어가 필요하지 않기 때문에 "제로-설정"[15]이라고 불린다. 접근 제어 목록은 데이터베이스 파일 자체에 제공된 파일 시스템 권한을 통해 처리된다. 클라이언트-서버 시스템의 데이터베이스는 파일 시스템 권한을 사용하여 데이터베이스 파일에 대한 액세스를 데몬 프로세스에만 제공하며, 데몬 프로세스는 내부적으로 잠금을 처리하여 여러 프로세스에서 동시 쓰기를 허용한다.

SQLite는 전체 데이터베이스(정의, 테이블, 인덱스 및 데이터 자체)를 호스트 시스템의 단일 크로스 플랫폼 파일로 저장하여 여러 프로세스 또는 스레드가 동일한 데이터베이스에 동시에 액세스할 수 있도록 한다. 이것은 쓰기 중에 데이터베이스 파일을 잠금함으로써 이 간단한 설계를 구현한다. 쓰기 액세스는 오류 코드로 실패할 수 있으며, 구성 가능한 시간 초과가 만료될 때까지 다시 시도할 수 있다. SQLite 읽기 작업은 컴퓨터 멀티태스킹될 수 있지만, 서버가 없는 설계로 인해 쓰기는 순차적으로만 수행할 수 있다. 이 동시 액세스 제한은 임시 테이블에는 적용되지 않으며, 선행 쓰기 로깅 (WAL)이 동시 읽기 및 쓰기를 활성화함에 따라 버전 3.7에서 완화되었다.[16] SQLite는 파일 시스템 잠금에 의존해야 하므로 쓰기 집약적인 배포에는 선호되는 선택이 아니다.[17]

SQLite는 PostgreSQL을 참조 플랫폼으로 사용한다. "PostgreSQL은 무엇을 할까"는 SQL 표준을 이해하는 데 사용된다.[18][19] 주요 차이점 중 하나는 기본 키를 제외하고 SQLite는 타입 검사를 적용하지 않는다는 것이다. 값의 유형은 동적이며 스키마에 의해 엄격하게 제한되지 않는다(스키마는 잠재적으로 가역적인 변환인 경우 저장할 때 변환을 트리거하지만). SQLite는 견고성 원칙을 따르려고 노력한다.[21]

표준으로 탑재하고 있는 데이터 세트 형식은 정수형(INTEGER), 문자열형(TEXT), 무제한 스칼라형(BLOB)의 3종류이다.

CUI 기반 관리 도구를 표준으로 갖추고 있으며, 여러 GUI 기반 관리 소프트웨어가 존재한다. 스토리지 사양이 아키텍처에 의존하지 않기 때문에, 관리 도구의 직접 실행이 어려운 시스템(임베디드 소프트웨어 개발 등)에서도 스토리지를 꺼내 Windows 머신 등에서 데이터를 확인하거나 SQL 구문을 실행할 수 있다.

3. 1. 특징

SQLite는 별도의 데이터베이스 관리 시스템 설치나 데이터베이스 관리자 없이도 프로그램을 운영할 수 있도록 설계된 내장형 데이터베이스 엔진이다. 클라이언트-서버 모델 데이터베이스 관리 시스템과 달리, SQLite 엔진은 응용 프로그램과 통신하는 독립적인 프로세스가 없다. 대신, 링커를 통해 SQLite 라이브러리가 응용 프로그램에 통합 (정적으로 또는 동적으로)되어, 간단한 함수 호출만으로 SQLite 기능을 사용할 수 있다. 이로 인해 데이터베이스 작업 지연 시간이 줄어들고, 동시성이 적은 쿼리의 경우 컴퓨터 성능 상 이점을 얻는다.

서버가 없는 설계 덕분에 SQLite 응용 프로그램은 구성이 덜 필요하다. SQLite는 서비스 관리(예: 시작 스크립트)나 데이터 제어 언어 및 암호 기반 액세스 제어가 필요 없어 "제로-설정"[15]이라고 불린다. 접근 제어 목록은 데이터베이스 파일 자체에 제공된 파일 시스템 권한으로 처리된다. 클라이언트-서버 시스템의 데이터베이스는 파일 시스템 권한을 사용하여 데이터베이스 파일 접근을 데몬 프로세스에만 제공하고, 데몬 프로세스는 내부 잠금을 통해 여러 프로세스에서의 동시 쓰기를 허용한다.

SQLite는 전체 데이터베이스(정의, 테이블, 인덱스, 데이터)를 호스트 시스템의 단일 크로스 플랫폼 파일로 저장하여 여러 프로세스나 스레드가 동시에 접근할 수 있게 한다. 쓰기 중에는 데이터베이스 파일을 잠금하여 이 설계를 구현하며, 쓰기 접근은 오류 코드로 실패할 수 있고, 구성 가능한 시간 초과가 만료될 때까지 다시 시도할 수 있다. SQLite 읽기 작업은 컴퓨터 멀티태스킹될 수 있지만, 서버가 없는 설계로 인해 쓰기는 순차적으로만 가능하다. 이 동시 접근 제한은 임시 테이블에는 적용되지 않으며, 선행 쓰기 로깅(WAL)이 동시 읽기 및 쓰기를 활성화함에 따라 버전 3.7에서 완화되었다.[16] SQLite는 파일 시스템 잠금에 의존해야 하므로 쓰기 집약적인 배포에는 선호되지 않는다.[17]

SQLite는 PostgreSQL을 참조 플랫폼으로 사용하며, "PostgreSQL은 무엇을 할까"는 SQL 표준을 이해하는 데 사용된다.[18][19] 주요 차이점 중 하나는 기본 키를 제외하고 SQLite는 타입 검사를 적용하지 않는다는 것이다. 값의 유형은 동적이며 스키마에 의해 엄격하게 제한되지 않는다(스키마는 잠재적으로 가역적인 변환인 경우 저장 시 변환을 트리거할 수 있다). SQLite는 견고성 원칙을 따른다.[21]

SQLite는 SQL-92 표준의 대부분을 구현하지만, 일부 기능이 부족하다. 예를 들어, 트리거를 부분적으로만 제공하고 뷰에 쓸 수 없다(INSTEAD OF 트리거는 이 기능 제공). ALTER TABLE 문 지원은 제한적이다.[20]

SQLite는 SQL 호환 DBMS에 대해 특이한 타입 시스템을 사용한다. 대부분의 SQL 데이터베이스 시스템처럼 열에 유형을 할당하는 대신, 유형이 개별 값에 할당된다. 언어 측면에서 '동적 타입'이며, Perl과 유사하게 '약하게 타입화'되어 문자열을 정수 열에 삽입할 수 있다(SQLite는 열의 선호 유형이 정수인 경우 먼저 문자열을 정수로 변환 시도). 이는 동적으로 타입화된 스크립팅 언어에 바인딩될 때 유연성을 더한다. 그러나 이 기술은 다른 SQL 제품으로 이식할 수 없다. 일반적인 비판은 SQLite의 타입 시스템에 제약 조건으로 에뮬레이션할 수 있지만, 정적으로 타입화된 열에서 제공하는 데이터 무결성 메커니즘이 부족하다는 것이다.[9] 엄격한 테이블은 버전 3.37.1에 추가되었다.[21]

테이블에는 일반적으로 더 빠른 접근을 제공하는 숨겨진 'rowid' 인덱스 열이 포함되어 있다.[22] 데이터베이스에 정수 기본 키 열이 포함된 경우 SQLite는 이를 'rowid'의 별칭으로 처리하여 최적화하고, 내용이 엄격하게 타입화된 64비트 부호 있는 정수로 저장되도록 하며, 동작을 자동 증가 열과 비슷하게 변경한다. 향후 SQLite 버전에는 이러한 열을 약하게 타입화되고 자동 증가하지 않는 정수 기본 키와 구별하기 위해 열이 'rowid'와 같은 동작을 하는지 검사하는 명령이 포함될 수 있다.[23]

2009년 10월 14일 출시된 버전 3.6.19는 외래 키 제약 조건 지원을 추가했다.[24][25]

저장 프로시저는 지원되지 않는데, 이는 SQLite의 일반적인 사용 사례가 데이터베이스 주변에 자체 프로시저를 정의할 수 있는 호스트 응용 프로그램 내부에 포함되는 것이기 때문에 개발자가 단순성을 선호하기 때문이다.[26]

유니코드 대소문자 변환에 대한 전체 지원은 선택적 확장을 통해 활성화할 수 있다.[27]

SQLite 버전 3.7.4는 이전 FTS3 모듈에 비해 향상된 기능을 갖춘 FTS4 (전체 텍스트 검색) 모듈을 처음 추가했다.[28] FTS4를 사용하면 검색 엔진이 웹페이지를 검색하는 방식과 유사하게 문서에 대한 전체 텍스트 검색을 수행할 수 있다.[29] 버전 3.8.2는 rowid 없이 테이블을 생성하는 것에 대한 지원을 추가했으며,[30] 이는 공간 및 성능 향상을 제공할 수 있다.[31] 공통 테이블 표현식 지원은 버전 3.8.3에서 추가되었다.[32] 3.8.11은 FTS4에 비해 더 급진적인 변화로 버전 증가가 필요한 FTS5라는 새로운 검색 모듈을 추가했다.

2015년에는 'json1 확장'[33] 및 새로운 서브타입 인터페이스를 통해 SQLite 버전 3.9가 JSON 콘텐츠 관리를 도입했다.

버전 3.33.0 현재 지원되는 최대 데이터베이스 크기는 281 TB이다.[34]

SQLite는 서버가 아닌 애플리케이션에 내장되어 사용되는 데이터베이스이다.[62] 일반적인 RDBMS와 달리, API라이브러리 호출만으로 작동하며, 데이터 저장을 위해 단일 파일을 사용한다. 버전 3.3.8부터 전체 텍스트 검색의 FTS1 모듈을 지원했고, 이후 FTS2, FTS3로 강화되었으며, 버전 3.7.4부터 FTS4 모듈을 지원한다.

SQLite의 주요 특징은 다음과 같다.

  • SQL92의 많은 기능 구현
  • 저작권을 포기하여 퍼블릭 도메인으로 귀속
  • 서버가 아닌 라이브러리
  • 수백 KB 정도의 작은 공간 차지
  • C 런타임 이외의 별도 라이브러리 필요 없음
  • 관리 도구를 이용한 설정이나 유지 보수 필요 없음
  • 명령줄 도구도 사용 가능
  • 바이트 순서에 의존하지 않음 (2.6.3 이후), 이식성 있는 단일 파일
  • 최대 128TiB까지
  • 파일을 사용하지 않는 휘발성 인 메모리 데이터베이스로도 이용 가능
  • 데이터 형식을 지정할 필요 없음
  • 지원 형식: Null, Integer, Real, Text, BLOB
  • 유니코드 지원
  • BLOB는 메모리 허용 한도 내에서
  • ROWID를 가짐 (단, 3.6.18 이전에는 외부 제약 키 구조 없음)
  • 트랜잭션 지원
  • 스레드 세이프 (바이너리 배포에서는 재컴파일 필요 가능)
  • 뷰 지원
  • 트리거 지원
  • C 언어를 사용하여 함수 추가 가능
  • Tcl 바인딩을 배포 키트에 표준 첨부
  • PHP 5, 파이썬 2.5, 어도비 에어에서 표준 지원
  • C, C++, D, Curl, , 루비, 델파이 등 다수 프로그래밍 언어용 바인딩
  • 전체 텍스트 검색 FTS1 모듈 지원, SQL 문으로 전체 텍스트 검색 인덱스 검색 가능
  • 안드로이드 단말기 표준 라이브러리로 채용


SQLite는 프로그램에 직접 링크된 라이브러리 또는 공유 라이브러리나 동적 링크 라이브러리 형태로 사용 가능한 내장형 데이터베이스 엔진이다. 약 600KB 전후의 풋프린트로 풀 세트의 SQL 구문과 형식 제약이 없는 데이터 세트를 사용할 수 있다. 데이터베이스 스토리지 접근도 내장하고 있으며, 파일 및 인 메모리 스토리지를 지원한다. 파일을 공유함으로써 여러 애플리케이션이 데이터베이스 인스턴스를 공유하는 것도 가능하며, 서버-클라이언트 모델이 아닌 애플리케이션 로컬에서 사용하는 데이터베이스 엔진으로서 합리적인 설계이다.

SQLite의 또 다른 특징은 바이트 순서에 의존하지 않는, 아키텍처 독립적인 스토리지를 채용하고 있다는 것이다. 이 때문에 데이터베이스 인스턴스를 저장한 스토리지가 된 파일은 재사용성이 높다. 스토리지 버전에만 주의를 기울인다면, 애플리케이션에서 스토리지를 꺼내 다른 OS나 아키텍처에서 동작하는 다른 애플리케이션으로 데이터를 변환하지 않고 옮길 수 있다.

스토리지까지 네이티브 코드로 직접 실행하고, 그 사이에 어떤 프로토콜이나 프로세스 간 통신을 수반하지 않음으로써, 단일 트랜잭션 내에서의 지연 시간을 어느 정도 줄이는 데 성공했다. 일단 트랜잭션을 시작하면 스토리지가 잠기고, 트랜잭션 중의 세션은 캐시를 유효하게 활용하여 동작하기 때문에, 고속으로 데이터베이스에 접근할 수 있다. 이는 응답성이 중요하고, 다수의 트랜잭션이 병행하지 않는 규모의 애플리케이션에서는 중요한 요소가 되며, SQLite를 서버와의 중간에 캐시로 채용하는 사례나, 애플리케이션 내장 데이터베이스 엔진으로서의 채용을 촉진하는 이유가 되고 있다.

표준으로 탑재하고 있는 데이터 세트 형식은 정수형(INTEGER), 문자열형(TEXT), 무제한 스칼라형(BLOB)의 3종류이다.

CUI 기반 관리 도구를 표준으로 갖추고 있으며, 여러 GUI 기반 관리 소프트웨어가 존재한다. 스토리지 사양이 아키텍처에 의존하지 않기 때문에, 관리 도구의 직접 실행이 어려운 시스템(임베디드 소프트웨어 개발 등)에서도 스토리지를 꺼내 Windows 머신 등에서 데이터를 확인하거나 SQL 구문을 실행할 수 있다.

3. 2. 타입 시스템

SQLite는 SQL 호환 DBMS에 대해 특이한 타입 시스템을 사용한다. 대부분의 SQL 데이터베이스 시스템에서와 같이 열에 유형을 할당하는 대신, 유형이 개별 값에 할당된다. 언어 측면에서 '동적 타입'이다. 더욱이, Perl과 유사한 방식으로 '약하게 타입화'되어 있다. 문자열을 정수 열에 삽입할 수 있다(SQLite는 열의 선호 유형이 정수인 경우 먼저 문자열을 정수로 변환하려고 시도한다). 이는 특히 동적으로 타입화된 스크립팅 언어에 바인딩될 때 열에 유연성을 추가한다. 그러나 이 기술은 다른 SQL 제품으로 이식할 수 없다. 일반적인 비판은 SQLite의 타입 시스템에 제약 조건으로 에뮬레이션할 수 있지만, 정적으로 타입화된 열에서 제공하는 데이터 무결성 메커니즘이 부족하다는 것이다.[9] 엄격한 테이블은 버전 3.37.1에 추가되었다.[21]

테이블에는 일반적으로 더 빠른 액세스를 제공하는 숨겨진 'rowid' 인덱스 열이 포함되어 있다.[22] 데이터베이스에 정수 기본 키 열이 포함된 경우 SQLite는 일반적으로 'rowid'의 별칭으로 처리하여 최적화하고, 내용이 엄격하게 타입화된 64비트 부호 있는 정수로 저장되도록 하며, 동작을 자동 증가 열과 약간 비슷하게 변경한다. 향후 SQLite 버전에는 이러한 열을 약하게 타입화되고 자동 증가하지 않는 정수 기본 키와 구별하기 위해 열이 'rowid'와 같은 동작을 하는지 검사하는 명령이 포함될 수 있다.[23]

데이터 형식을 지정할 필요가 없으며[34] 지원하는 형식은 Null, Integer, Real, Text, BLOB뿐이다. 유니코드를 지원하며, BLOB는 메모리가 허용하는 한도 내에서 가능하다. ROWID를 가지고 있다 (단, 3.6.18 이전에는 외부 제약 키의 구조가 없다).

4. 기능

SQLite는 SQL-92 표준의 대부분을 구현하지만 몇 가지 부족한 기능이 있다. 예를 들어, 트리거는 부분적으로만 제공하고 뷰에는 쓸 수 없다. (하지만 INSTEAD OF 트리거를 통해 이 기능을 제공한다.) ALTER TABLE 문에 대한 지원은 제한적이다.[20]

SQLite는 독특한 타입 시스템을 사용한다. 대부분의 SQL 데이터베이스 시스템처럼 열에 유형을 할당하는 대신, 유형을 개별 값에 할당한다. 이는 언어 측면에서 '동적 타입'이며, Perl과 유사하게 '약하게 타입화'되어 있다. 문자열을 정수 열에 삽입할 수 있는데, SQLite는 열의 선호 유형이 정수인 경우 먼저 문자열을 정수로 변환하려고 시도한다. 이는 특히 동적으로 타입화된 스크립팅 언어에 바인딩될 때 열에 유연성을 추가한다. 그러나 이 기술은 다른 SQL 제품으로 이식할 수 없다. 일반적인 비판은 SQLite의 타입 시스템에 `CHECK(typeof(x)='integer')`와 같은 제약 조건으로 에뮬레이션할 수 있지만, 정적으로 타입화된 열에서 제공하는 데이터 무결성 메커니즘이 부족하다는 것이다.[9] 엄격한 테이블은 버전 3.37.1에 추가되었다.[21]

테이블에는 일반적으로 더 빠른 액세스를 제공하는 숨겨진 'rowid' 인덱스 열이 포함되어 있다.[22] 데이터베이스에 정수 기본 키 열이 포함된 경우 SQLite는 일반적으로 'rowid'의 별칭으로 처리하여 최적화하고, 내용을 엄격하게 타입화된 64비트 부호 있는 정수로 저장되도록 하며, 동작을 자동 증가 열과 약간 비슷하게 변경한다. 향후 SQLite 버전에는 이러한 열을 약하게 타입화되고 자동 증가하지 않는 정수 기본 키와 구별하기 위해 열이 'rowid'와 같은 동작을 하는지 검사하는 명령이 포함될 수 있다.[23]

2009년 10월 14일에 출시된 버전 3.6.19는 외래 키 제약 조건에 대한 지원을 추가했다.[24][25]

저장 프로시저는 지원되지 않는다. 이는 SQLite의 일반적인 사용 사례가 데이터베이스 주변에 자체 프로시저를 정의할 수 있는 호스트 응용 프로그램 내부에 포함되는 것이기 때문에 개발자가 단순성을 선호하기 위한 명시적인 선택이다.[26]

유니코드 대소문자 변환에 대한 전체 지원은 선택적 확장을 통해 활성화할 수 있다.[27]

SQLite 버전 3.7.4는 이전 FTS3 모듈에 비해 향상된 기능을 갖춘 FTS4 (전체 텍스트 검색) 모듈이 처음 추가되었다.[28] FTS4를 사용하면 사용자가 검색 엔진이 웹페이지를 검색하는 방식과 유사하게 문서에 대한 전체 텍스트 검색을 수행할 수 있다.[29] 버전 3.8.2는 rowid 없이 테이블을 생성하는 것에 대한 지원을 추가했으며,[30] 이는 공간 및 성능 향상을 제공할 수 있다.[31] 공통 테이블 표현식 지원은 버전 3.8.3에서 SQLite에 추가되었다.[32] 3.8.11은 FTS4에 비해 더 급진적인 변화로 버전 증가가 필요한 FTS5라는 새로운 검색 모듈을 추가했다.

2015년에는 'json1 확장'[33] 및 새로운 서브타입 인터페이스를 통해 SQLite 버전 3.9가 JSON 콘텐츠 관리를 도입했다.

버전 3.33.0 현재 지원되는 최대 데이터베이스 크기는 281 TB이다.[34]

SQLite의 주요 기능은 다음과 같다.


  • SQL92의 많은 기능을 구현
  • 저작권을 포기하여 퍼블릭 도메인으로 귀속
  • 서버가 아닌 라이브러리
  • 라이브러리는 수백 KB 정도의 작은 공간 차지
  • C 런타임 이외의 별도 라이브러리가 필요 없음
  • 관리 도구를 이용한 설정이나 유지 보수가 필요 없음
  • 명령줄 도구도 사용 가능
  • 바이트 순서에 의존하지 않음 (2.6.3 이후), 이식성 있는 단일 파일
  • 최대 128TiB까지
  • 파일을 사용하지 않는 휘발성 인 메모리 데이터베이스로도 이용 가능
  • 데이터 형식을 지정할 필요가 없음
  • 지원하는 형식은 Null/Integer/Real/Text/BLOB뿐
  • 유니코드 지원
  • BLOB는 메모리가 허용하는 한도 내에서
  • ROWID를 가지고 있음 (단, 3.6.18 이전에는 외부 제약 키의 구조가 없음)
  • 트랜잭션 지원
  • 스레드 세이프 (바이너리 배포에서는 재컴파일이 필요한 경우도 있음)
  • 뷰 지원
  • 트리거 지원
  • C 언어를 사용하여 함수를 추가 가능
  • Tcl 바인딩을 배포 키트에 표준으로 첨부
  • PHP 5, 파이썬 2.5, 어도비 에어에서 표준 지원
  • 그 외, C, C++, D, Curl, , 루비, 델파이 등 다수의 프로그래밍 언어용 바인딩
  • 전체 텍스트 검색의 FTS1 모듈이 지원되며, SQL 문으로 전체 텍스트 검색 인덱스에 대해 검색 가능
  • 안드로이드 단말기의 표준 라이브러리로 채용

5. 활용

SQLite는 서버가 아닌 애플리케이션에 내장되어 사용되는 데이터베이스이다.[62] 일반적인 RDBMS와 달리, API는 단순히 라이브러리를 호출하는 것만으로 작동하며, 데이터 저장을 위해 단일 파일만을 사용하는 것이 특징이다. 프로그램에 직접 링크된 라이브러리 또는 공유 라이브러리나 동적 링크 라이브러리 형태로 사용 가능하다.

SQLite는 다음과 같은 다양한 프로그래밍 언어 및 환경에서 널리 사용되고 있다.


  • '''데이터베이스 어댑터 및 래퍼:'''
  • ADO.NET 어댑터: 로버트 심슨이 처음 개발했으며, 2010년 4월부터 SQLite 개발자들과 공동으로 유지 관리하고 있다.[42]
  • ODBC 드라이버: 크리스찬 베르너가 개발하여 별도로 유지 관리하고 있다.[43] OpenOffice.org에서 SQLite에 접근하기 위한 권장 연결 방법이다.[44]
  • COM (ActiveX) 래퍼: JScript 및 VBScript와 같은 스크립트 언어에서 Windows에서 SQLite에 접근할 수 있도록 하며, HTML 응용 프로그램 (HTA)에 SQLite 데이터베이스 기능을 추가한다.[45]
  • '''프로그래밍 언어 지원:'''
  • PHP 5, 파이썬 2.5, 어도비 에어에서 표준 지원
  • C, C++, D, Curl, , 루비, 델파이 등 다수의 프로그래밍 언어용 바인딩
  • '''기타:'''
  • 어도비 시스템즈는 어도비 포토샵 라이트룸에서 파일 형식으로, 어도비 에어의 표준 데이터베이스로, 어도비 리더 내에서 내부적으로 SQLite를 사용한다.[51]
  • 스카이프[54]


대략 600KB 전후의 풋프린트로 풀 세트의 SQL 구문과 형식 제약이 없는 데이터 세트를 사용할 수 있으며, 파일 및 인 메모리 스토리지를 지원한다. 파일을 공유함으로써 여러 애플리케이션이 데이터베이스 인스턴스를 공유하는 것도 가능하다.

표준으로 탑재하고 있는 데이터 세트의 형식은 정수형(INTEGER), 문자열형(TEXT), 무제한 스칼라형(BLOB)의 3종류이다. CUI 기반의 관리 도구를 표준으로 갖추고 있으며, 여러 GUI 기반 관리 소프트웨어가 존재한다.

SQLite는 바이트 순서에 의존하지 않는, 아키텍처 독립적인 스토리지를 채용하고 있어, 데이터베이스 인스턴스를 저장한 파일은 재사용성이 높다. 스토리지 버전에만 주의를 기울인다면, 애플리케이션에서 스토리지를 꺼내 다른 OS나 아키텍처에서 동작하는 다른 애플리케이션으로 데이터를 변환하지 않고 옮길 수 있다.

5. 1. 운영 체제

5. 2. 웹 브라우저


  • 구글 크롬, 오페라, 사파리, 안드로이드 브라우저는 모두 공식 SQLite Wasm (WebAssembly) 빌드를 사용하여 브라우저 내에서 SQLite 데이터베이스에 정보를 저장하고 검색할 수 있으며,[46] Web SQL 데이터베이스 기술을 사용할 수도 있다. 후자는 더 이상 사용되지 않는다(즉, SQLite Wasm 또는 IndexedDB로 대체됨). 내부적으로 이러한 크로미움 기반 브라우저는 사이트 방문 기록, 쿠키, 다운로드 기록 등과 같은 구성 데이터를 저장하기 위해 SQLite 데이터베이스를 사용한다.[47]
  • 모질라 파이어폭스 및 모질라 썬더버드는 다양한 구성 데이터(북마크, 쿠키, 연락처 등)를 내부적으로 관리되는 SQLite 데이터베이스에 저장한다. 파이어폭스 버전 57 ("파이어폭스 퀀텀")까지 이 기능을 지원하는 API를 사용하여 임의의 SQLite 데이터베이스를 관리하기 위한 사용자 인터페이스를 제공하는 타사 추가 기능이 있었다.[48]
  • 여러 타사 추가 기능은 자바스크립트 API를 사용하여 SQLite 데이터베이스를 관리할 수 있다.[49][50]

5. 3. 응용 프로그램

SQLite는 다양한 프로그래밍 언어 및 환경에서 널리 사용되고 있다. 다음은 SQLite를 사용하는 주요 응용 프로그램 및 환경이다.

  • 데이터베이스 어댑터 및 래퍼:
  • ADO.NET 어댑터: 로버트 심슨이 처음 개발했으며, 2010년 4월부터 SQLite 개발자들과 공동으로 유지 관리하고 있다.[42]
  • ODBC 드라이버: 크리스찬 베르너가 개발하여 별도로 유지 관리하고 있다.[43] OpenOffice.org에서 SQLite에 접근하기 위한 권장 연결 방법이다.[44]
  • COM (ActiveX) 래퍼: JScript 및 VBScript와 같은 스크립트 언어에서 Windows에서 SQLite에 접근할 수 있도록 하며, HTML 응용 프로그램 (HTA)에 SQLite 데이터베이스 기능을 추가한다.[45]

  • 웹 프레임워크:
  • 심포니(Symfony)
  • 라라벨(Laravel)
  • 장고(Django) (기본 데이터베이스 관리 시스템)
  • 드루팔(Drupal)
  • 루비 온 레일스(Ruby on Rails) (기본 데이터베이스 관리 시스템)
  • 웹투파이(web2py)
  • 잼.파이(Jam.py)

5. 4. 기타

어도비 시스템즈는 어도비 포토샵 라이트룸에서 파일 형식으로, 어도비 에어의 표준 데이터베이스로, 어도비 리더 내에서 내부적으로 SQLite를 사용한다.[51] 사진 등 많은 애플 소프트웨어도 내부적으로 SQLite를 사용한다.[52] 오다시티는 버전 3.0.0부터 파일 형식으로 SQLite를 사용한다.[53] 에버노트는 윈도우에서 로컬 데이터베이스 저장소로 SQLite를 사용한다.

SQLite의 다른 사용 예는 다음과 같다.

  • 스카이프[54]
  • 솔라리스 및 오픈솔라리스 운영 체제 내 서비스 관리에 사용되는 서비스 관리 기능
  • 플레임 (악성코드)
  • BMW iDrive 위성 항법 시스템
  • 톰톰 GPS 시스템, 내비게이션 데이터 표준 지도 데이터
  • 프록시모스 가상 환경 - ''Proxmox Cluster File System''


SQLite는 서버가 아닌 애플리케이션에 내장되어 사용되는 데이터베이스이다.[62] 일반적인 RDBMS와 달리, API는 단순히 라이브러리를 호출하는 것만으로 작동하며, 데이터 저장을 위해 단일 파일만을 사용하는 것이 특징이다. 프로그램에 직접 링크된 라이브러리 또는 공유 라이브러리나 동적 링크 라이브러리 형태로 사용 가능하다. 대략 600KB 전후의 풋프린트로 풀 세트의 SQL 구문과 형식 제약이 없는 데이터 세트를 사용할 수 있으며, 파일 및 인 메모리 스토리지를 지원한다. 파일을 공유함으로써 여러 애플리케이션이 데이터베이스 인스턴스를 공유하는 것도 가능하다.

SQLite는 바이트 순서에 의존하지 않는, 아키텍처 독립적인 스토리지를 채용하고 있어, 데이터베이스 인스턴스를 저장한 파일은 재사용성이 높다. 스토리지 버전에만 주의를 기울인다면, 애플리케이션에서 스토리지를 꺼내 다른 OS나 아키텍처에서 동작하는 다른 애플리케이션으로 데이터를 변환하지 않고 옮길 수 있다.

표준으로 탑재하고 있는 데이터 세트의 형식은 정수형(INTEGER), 문자열형(TEXT), 무제한 스칼라형(BLOB)의 3종류이다. CUI 기반의 관리 도구를 표준으로 갖추고 있으며, 여러 GUI 기반 관리 소프트웨어가 존재한다. 스토리지 사양이 아키텍처에 의존하지 않기 때문에, 관리 도구의 직접 실행이 어려운 시스템(임베디드 소프트웨어 개발 등)에서도 스토리지를 꺼내 Windows 머신 등에서 데이터를 확인하거나 SQL 구문을 실행할 수 있다.

6. 관리 도구

SQLite는 `sqlite` 또는 `sqlite3`라는 명령 줄 유틸리티를 제공하며, 이를 통해 CUI 환경에서 SQLite 데이터를 조작할 수 있다.[1]

[https://jp.navicat.com/products/navicat-for-sqlite Navicat for SQLite]는 데이터 편집, SQL 쿼리, 데이터 모델링 도구를 갖추고 있으며, 데이터 전송, 가져오기/내보내기, 데이터 동기화, 보고서 등의 기능을 제공한다.[2]

[http://sqlitebrowser.org DB Browser for SQLite]는 Windows, Mac OS, Linux, FreeBSD를 지원하는 GUI 관리 도구이다.[3] 라이선스는 Mozilla Public License Version 2이다.[3]

7. ODBC

SQLite의 ODBC 드라이버서드 파티에서 제공된다. SQLite 2와 SQLite 3 버전이 있으며, SQLite 2용 UTF-8 지원 버전도 있다.

참조

[1] 웹사이트 SQLite Copyright https://www.sqlite.o[...] sqlite.org 2010-05-17
[2] 웹사이트 SQLite database file format media type at IANA https://www.iana.org[...] IANA 2019-03-08
[3] 에피소드 Why SQLite succeeded as a database — Richard Hipp, creator of SQLite https://changelog.co[...] 2019-08-06
[4] 비디오 An Introduction to SQLite https://www.youtube.[...] Google Inc. 2010-03-23
[5] 비디오 An Introduction to SQLite https://www.youtube.[...] Google Inc. 2010-03-23
[6] 웹사이트 Most Widely Deployed SQL Database Estimates https://sqlite.org/m[...] SQLite.org 2011-05-11
[7] 서적 The Definitive Guide to SQLite Apress 2014-12-30
[8] 웹사이트 STRICT Tables https://www.sqlite.o[...] 2022-08-11
[9] 서적 The Definitive Guide to SQLite Apress
[10] 웹사이트 Interview: Richard Hipp on UnQL, a New Query Language for Document Databases http://www.infoq.com[...] InfoQ 2011-08-04
[11] 웹사이트 SQLite creator crucified after code of conduct warns devs to love God, and not kill, commit adultery, steal, curse... https://www.theregis[...] 2022-11-17
[12] 웹사이트 LoC Recommended Storage Format https://www.sqlite.o[...] 2020-04-09
[13] 웹사이트 SQLite, Version 3 https://www.loc.gov/[...] 2020-04-09
[14] 웹사이트 Recommended Formats Statement – datasets/databases https://www.loc.gov/[...] Library of Congress 2020-04-09
[15] 웹사이트 SQLite Is A Zero-Configuration Database https://sqlite.org/z[...] SQLite.org 2015-08-03
[16] 웹사이트 Write Ahead Logging in SQLite 3.7 https://sqlite.org/w[...] SQLite.org 2011-09-03
[17] 웹사이트 Appropriate Uses For SQLite https://sqlite.org/w[...] SQLite.org 2015-09-03
[18] 웹사이트 PGCon 2014: Clustering and VODKA https://lwn.net/Arti[...] 2017-01-06
[19] 웹사이트 PGCon2014: SQLite: Protégé of PostgreSQL https://www.pgcon.or[...] 2017-01-06
[20] 웹사이트 Release History of SQLite https://www.sqlite.o[...] 2021-03-22
[21] 웹사이트 SQLite: StrictMode https://sqlite.org/s[...] 2015-09-03
[22] 웹사이트 SQL As Understood By SQLite https://www.sqlite.o[...] 2018-05-21
[23] 웹사이트 SQLite: Check-in [2494132a] https://www.sqlite.o[...] 2018-05-21
[24] 서적 SQL Antipatterns: Avoiding the Pitfalls of Database Programming The Pragmatic Bookshelf 2010-05-01
[25] 웹사이트 SQLite Release 3.6.19 On 2009-10-14 https://sqlite.org/r[...] 2020-10-15
[26] 웹아카이브 developers' comments on SQLite forum https://sqlite.org/f[...] 2023-04-01
[27] 웹사이트 Case-insensitive matching of Unicode characters does not work https://sqlite.org/f[...] 2015-09-03
[28] 웹사이트 SQLite Release 3.7.4 On 2010-12-08 https://sqlite.org/r[...] SQLite.org 2010-12-08
[29] 웹사이트 SQLite FTS3 and FTS4 Extensions https://sqlite.org/f[...] SQLite.org 2015-09-03
[30] 웹사이트 SQLite Release 3.8.2 On 2013-12-06 https://sqlite.org/r[...] SQLite.org 2013-12-06
[31] 웹사이트 The WITHOUT ROWID Optimization https://sqlite.org/w[...] SQLite.org 2015-09-03
[32] 웹사이트 SQLite Release 3.8.3 On 2014-02-03 https://sqlite.org/r[...] SQLite.org 2014-02-03
[33] 웹사이트 The JSON1 Extension https://sqlite.org/j[...] 2017-09-14
[34] 웹사이트 Limits In SQLite https://www.sqlite.o[...] 2022-09-19
[35] 웹사이트 Thoughts On The Design Of The Fossil DVCS https://www.fossil-s[...] Fossil-scm.org 2022-10-14
[36] 웹사이트 Fossil: Fossil Performance https://www.fossil-s[...] Fossil-scm.org 2009-08-23
[37] 웹사이트 SQLite Copyright https://sqlite.org/c[...]
[38] 웹사이트 Code Of Ethics https://sqlite.org/c[...]
[39] 웹사이트 Command Line Shell For SQLite https://www.sqlite.o[...] Sqlite.org
[40] 웹사이트 How SQLite Is Tested https://sqlite.org/t[...] SQLite.org
[41] 웹사이트 To use the version of SQLite that is installed with Windows https://docs.microso[...] 2022-10-20
[42] 웹사이트 Home http://system.data.s[...] 2016-12-30
[43] 웹사이트 SQLite ODBC Driver http://www.ch-werner[...] 2016-12-01
[44] 웹사이트 Using SQLite Database with OpenOffice.org : Version 2.0 http://documentation[...]
[45] 웹사이트 sqlite — Sqlite Wrappers https://sqlite.org/c[...] SQLite.org 2009-02-07
[46] 웹사이트 sqlite3 WebAssembly & JavaScript Documentation Index https://sqlite.org/w[...]
[47] 웹사이트 Location of Google Chrome history https://www.foxtonfo[...] 2020-10-06
[48] 웹사이트 SQLite Manager :: Add-ons for Firefox https://addons.mozil[...] 2015-02-28
[49] 웹사이트 SQLite Manager – Get this Extension for 🦊 Firefox (en-US) https://addons.mozil[...] 2018-07-24
[50] 웹사이트 SQLite Reader – Get this Extension for 🦊 Firefox (en-US) https://addons.mozil[...] 2018-09-01
[51] 웹사이트 Well-Known Users Of SQLite https://sqlite.org/f[...] SQLite
[52] 웹사이트 Using SQL to find my best photo of a pelican according to Apple Photo https://simonwilliso[...]
[53] 웹사이트 Audacity 3.0.0 Released https://www.audacity[...] 2021-03-17
[54] 메일링리스트 Skype client using SQLite? https://www.mail-arc[...] 2007-08-28
[55] 웹사이트 SQLiteとは エスキューライト: - IT用語辞典バイナリ http://www.sophia-it[...]
[56] 웹사이트 SQLite http://www.kddi.com/[...]
[57] Youtube An Introduction to SQLite https://www.youtube.[...]
[58] 웹사이트 Ruby on Rails チュートリアル http://railstutorial[...]
[59] 웹사이트 Why SQLite succeeded as a database with Richard Hipp, creator of SQLite (The Changelog #201) https://changelog.co[...]
[60] Youtube An Introduction to SQLite https://www.youtube.[...]
[61] 웹사이트 The Untold Story of SQLite https://corecursive.[...]
[62] 서적 입문Python3 株式会社オライリー・ジャパン, オーム社 2017-02-03
[63] 웹인용 SQLite Copyright http://www.sqlite.or[...] sqlite.org
[64] 웹인용 SQLite database file format media type at IANA https://www.iana.org[...] IANA
[65] 영상인용 https://www.youtube.[...] 2010-03-23
[66] 영상인용 https://www.youtube.[...] 2010-03-23



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com