강의 링크: 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
# 2) 대규모 데이터 처리에 적합하지 않다. - SQLite의 한계
SQLite는 모든 데이터를 단일 파일에 저장하다보니, 데이터가 수십GB를 넘어가게 될 경우 파일 시스템의 입출력 속도가 크게 저하되고, 쿼리 처리 속도도 느려지게 된다. 또한 기본적으로 DB 스케일링을 지원하지 않기 때문에(여러 서버에 데이터를 분산 저장한다거나 클러스터링을 구성할 수 없다.) 확장성이 부족하다. 그리고 PostgreSQL이나 MySQL 등 다른 DBMS에 비하면 쿼리 최적화 기능이 부족하기 때문에 대규모 데이터에서 JOIN 연산 등을 사용할 경우 성능이 크게 저하된다.
*참고
- https://www.quora.com/Is-it-possible-to-scale-an-SQLite-database
- https://www.mongodb.com/resources/basics/horizontal-vs-vertical-scaling
'학습 내용 > Back-End' 카테고리의 다른 글
[freeCodeCamp] Django로 쇼핑몰 만들기 실습 - 5. 로그인 기능 (0) | 2024.12.04 |
---|---|
[freeCodeCamp] Django로 쇼핑몰 만들기 실습 - 4. 회원가입 기능 (0) | 2024.12.04 |
[freeCodeCamp] Django로 쇼핑몰 만들기 실습 - 3. 어드민 페이지 (1) | 2024.11.25 |
[freeCodeCamp] Django로 쇼핑몰 만들기 실습 - 2. 뷰(view) 만들기 (0) | 2024.11.24 |
[freeCodeCamp] Django로 쇼핑몰 만들기 실습 - 1. 프로젝트 생성하기 (0) | 2024.11.22 |