본문 바로가기
학습 내용/Back-End

[freeCodeCamp] Django로 쇼핑몰 만들기 실습 - 6. SQLite

by yein 2024. 12. 10.
강의 링크: Learn Django by Building an Online Marketplace – Python Tutorial for Beginners

 

# db.sqlite3 파일

migrate 명령어(python manage.py migrate)를 실행하면 프로젝트 폴더에 db.sqlite3 파일이 생성된다.

 

이 파일은 SQLite DB 파일로, 프로젝트에서 생성되는 데이터들이 여기에 저장된다. 즉 DB 서버가 따로 존재하는 게 아니라, 데이터베이스가 장고 프로젝트 내부에 파일 형태로 존재하게 되는 것이다.

장고 프로젝트를 생성하고 DB 설정을 따로 건드리지 않으면 SQLite가 기본 데이터베이스로 사용된다. DB 설정은 settings.py에서 확인 및 변경할 수 있다.

# settings.py

# Database
# https://docs.djangoproject.com/en/4.2/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

 

SQLite이 아닌 다른 DBMS와 연동하려면 이 설정 값을 수정하면 된다. (공식 문서 참고)

 

# SQLite 데이터베이스

SQLite는 경량 데이터베이스로, 서버를 따로 설치할 필요 없이 db.sqlite3 파일에 데이터를 저장한다. 이 파일에는 모든 DB 테이블과 데이터가 포함되어있으며, 모델의 변경사항, 사용자 계정, 설정값 등도 저장된다. 장고의 ORM(Object-Relational Mapping)을 통해 이 파일에 쿼리를 보내고 데이터를 읽거나 쓸 수 있다.

빠르고 설정이 간단하기 때문에 소규모 프로젝트나 테스트용으로 적합하지만, 다음과 같은 한계로 인해 운영 환경에서는 서버 기반 데이터베이스(예: MySQL, PostgreSQL)를 사용하는 것이 좋다. :

1) 동시 접근에 제약이 있다.

2) 대규모 데이터 처리에 적합하지 않다.

3) 파일 기반 데이터베이스로 db.sqlite3 파일 하나에 모든 데이터가 저장되므로, 파일이 손상되면 데이터가 유실될 수 있다. 그래서 백업이 필수다.

 

# 1) 동시 접근에 제약이 있다.  - SQLite의 동시성 모델

SQLite는 하나의 연결만 쓰기 작업을 수행할 수 있도록 DB 단에서 lock을 걸어둔다. 즉 하나의 프로세스(또는 스레드)가 데이터를 수정(INSERT, UPDATE, DELETE)하는 동안 다른 프로세스는 읽기 작업(SELECT)만 할 수 있다. 만약 동시에 여러 연결이 쓰기를 시도하게 되면 대기 상태가 발생하게 되므로 쓰기 작업이 빈번한 애플리케이션의 경우에는 병목 현상이 발생할 수 있다.

 

*참고

- https://www.sqlite.org/lockingv3.html

- https://news.hada.io/topic?id=17739

 

SQLite는 싱글 커넥션 DB가 아님 | GeekNews

SQLite에 대해 사람들이 자주 오해하는 점 중 하나는 “SQLite는 단일 연결만 허용하는 데이터베이스” 라고 생각해서 사람들이 사용하지 않게 되는 것이는 혼란스럽기도 하고(여기서 "연결"의 의

news.hada.io

 

# 2) 대규모 데이터 처리에 적합하지 않다. - SQLite의 한계

SQLite는 모든 데이터를 단일 파일에 저장하다보니, 데이터가 수십GB를 넘어가게 될 경우 파일 시스템의 입출력 속도가 크게 저하되고, 쿼리 처리 속도도 느려지게 된다. 또한 기본적으로 DB 스케일링을 지원하지 않기 때문에(여러 서버에 데이터를 분산 저장한다거나 클러스터링을 구성할 수 없다.) 확장성이 부족하다. 그리고 PostgreSQL이나 MySQL 등 다른 DBMS에 비하면 쿼리 최적화 기능이 부족하기 때문에 대규모 데이터에서 JOIN 연산 등을 사용할 경우 성능이 크게 저하된다.

 

*참고

- https://www.quora.com/Is-it-possible-to-scale-an-SQLite-database

 

Is it possible to scale an SQLite database?

Answer (1 of 3): SQLite per se isn’t designed to scale at all. It can handle individual databases up to around 140TB each, and have multiple individual processes access the same database simultaneously, but it would almost certainly fall far behind the t

www.quora.com

- https://www.mongodb.com/resources/basics/horizontal-vs-vertical-scaling

 

A Guide To Horizontal Vs Vertical Scaling

Read our guide explaining horizontal vs vertical scaling, the differences between them, and key considerations when choosing the right scaling approach.

www.mongodb.com