SQLite는 서버리스(Serverless)예요
SQLite는 서버리스(Serverless)예요
대부분의 SQL 데이터베이스 엔진은 별도의 서버 프로세스로 구현돼요. 데이터베이스에 접근하려는 프로그램은 어떤 종류의 프로세스 간 통신(주로 TCP/IP)을 통해 서버에 요청을 보내고 결과를 받아와요. 하지만 SQLite는 이렇게 동작하지 않아요. SQLite에서는 데이터베이스에 접근하려는 프로세스가 디스크의 데이터베이스 파일에서 직접 읽고 써요. 중간에 개입하는 서버 프로세스가 없어요.
출처: 문서
본문
서버리스 방식에는 장점과 단점이 있어요. 가장 큰 장점은 설치·설정·구성·초기화·관리·문제 해결을 해야 할 별도의 서버 프로세스가 없다는 점이에요. 이것이 SQLite가 "제로 구성"(zero-configuration) 데이터베이스 엔진인 이유 중 하나예요. SQLite를 사용하는 프로그램은 실행 전에 데이터베이스 엔진을 설정하기 위한 관리적 지원이 필요 없어요. 디스크에 접근할 수 있는 어떤 프로그램이든 SQLite 데이터베이스를 사용할 수 있어요.
반면에, 서버를 사용하는 데이터베이스 엔진은 클라이언트 애플리케이션의 버그로부터 더 잘 보호할 수 있어요. 클라이언트의 잘못된 포인터는 서버의 메모리를 손상시킬 수 없기 때문이에요. 그리고 서버는 하나의 지속적인 프로세스이므로 데이터베이스 접근을 더 정밀하게 제어할 수 있어서, 더 세밀한 잠금과 더 나은 동시성을 제공할 수 있어요.
대부분의 SQL 데이터베이스 엔진은 클라이언트/서버 기반이에요. 그중 서버리스인 것들에서, 이 문서의 저자가 아는 한 SQLite가 여러 애플리케이션이 동시에 같은 데이터베이스에 접근할 수 있게 하는 유일한 엔진이에요.
2. 고전적 서버리스(Classic Serverless) 대 네오 서버리스(Neo-Serverless)
(이 절은 2018-04-02에 추가되었어요.)
최근에 사람들은 "서버리스"라는 단어를 이 문서에서 의도한 의미와는 미묘하게 다른 의미로 쓰기 시작했어요. "서버리스"에는 두 가지 가능한 정의가 있어요.
-
고전적 서버리스(Classic Serverless): 데이터베이스 엔진이 애플리케이션과 같은 프로세스, 스레드, 주소 공간 안에서 실행돼요. 메시지 전달이나 네트워크 활동이 없어요.
-
네오 서버리스(Neo-Serverless): 데이터베이스 엔진이 애플리케이션과 별도의 네임스페이스에서, 아마도 별도의 머신에서 실행되지만, 데이터베이스는 호스팅 제공자가 턴키(turn-key) 서비스로 제공하고, 애플리케이션 소유자의 관리나 운영이 필요 없으며, 개발자가 데이터베이스를 실제로는 서버를 사용해도 서버리스라고 생각할 만큼 사용하기 쉬운 방식이에요.
SQLite는 고전적 서버리스 데이터베이스 엔진의 예시예요. SQLite에는 데이터베이스 서비스나 구현을 제공하기 위한 다른 프로세스, 스레드, 머신, 또는 (호스트 컴퓨터의 OS와 파일시스템을 제외한) 다른 메커니즘이 없어요. 정말로 서버가 없어요.
Microsoft Azure Cosmos DB와 Amazon S3는 네오 서버리스 데이터베이스의 예시예요. 이 데이터베이스들은 클라우드에서 별도로 실행되는 서버 프로세스로 구현돼요. 하지만 그 서버들은 애플리케이션 개발자가 아니라 ISP가 유지·관리해요. 애플리케이션 개발자는 그저 서비스를 사용할 뿐이에요. 개발자는 데이터베이스 서버 인스턴스를 프로비저닝하거나 설정하거나 관리할 필요가 없어요. 그 모든 작업은 서비스 제공자가 자동으로 처리하기 때문이에요. 데이터베이스 서버는 실제로 존재하지만, 개발자에게는 숨겨져 있을 뿐이에요.
"서버리스"라는 두 가지 정의를 이해하는 것이 중요해요. 데이터베이스가 "서버리스"라고 주장할 때는 그들이 "고전적 서버리스"를 뜻하는지 "네오 서버리스"를 뜻하는지 반드시 구분해야 해요.