RDBMS 중 하나로, 독립적으로 작동하는 디비 엔진
장점?
로컬 환경에서 간단하게 DB 구축 및 조작 가능
어플리케이션에서 SQLite3 라이브러리를 가지고 DB 파일에 접근 및 READ/WRITE
어플리케이션의 배포와 관리를 단순화하며, 서버/클라이언트 간 통신 오버헤드 제거
단점?
동시에 여러 클라이언트의 접근을 제한할 수 있음
여러 프로세스 or 스레드 간 동시성 문제를 해결해야함
> File level locking 매커니즘 사용
※ 참고 : 현지'sVelog - 병행 제어
※ DB Browser for SQLite
※ 서버 기반 DBMS
: 클라이언트는 서버에 쿼리를 보내고, 서버는 해당 쿼리를 처리하고 결과를 클라이언트에 반환하는 구조
-> 클라이언트와 서버간의 네트워크 통신이 필요 & 서버의 자원과 성능에 영향을 받음
e.g.) MySQL, PostgreSQL
Python으로 DB구축 및 테이블 생성에 대해 다루는 대신 c#을 사용하도록 한다. (실제 C++, C# 프로젝트를 진행할 때 DBManager 프로젝트를 따로 생성해 초기 구축을 수행하도록 한다.)
① Nuget 관리자를 통해 SQLite3 라이브러리 추가
③ 활용 예시
using System.Data.SQLite;
// SQLite 클래스 생성
class SQLite
{
string DBPath = Application.StartupPath + @"\mydatabase.sqlite"
string dataSource = $@"Data Source = {DBPath}";
SQLiteDataAdapter adpt;
public DataSet SelectAll(string table)
{
try
{
DataSet ds = new DataSet();
string sql = $"SELECT * FROM {table}";
adpt = new SQLiteDataAdapter(sql, dataSource);
adpt.Fill(ds, table);
if (ds.Tables.Count > 0) return ds;
else return null;
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
throw;
}
}
public void Insert(string table, string value)
{
try
{
using (SQLiteConnection conn = new SQLiteConnection(dataSource))
{
conn.Open();
string sql = $"INSERT INTO {table} VALUES ({value})";
SQLiteCommand cmd = new SQLiteCommand(sql, conn);
cmd.ExecuteNonQuery();
}
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
throw;
}
}
}
※ DB Query는 필수적으로 에러 캐치 구문을 작성 할 것. (에러 메시지 포함)
① command line tool?
대부분의 개발자라면 'command line'을 보면 cmd 혹은 terminal, powershell, (git)bash, WSL 등의 command line "인터페이스"(CLI)를 떠올릴 것이다. 그렇다면 command line tool이란 무엇인가? CLI와 상호 보완적인 요소로, CLI는 명령어 입출력 기능을 제공하고 command line tool은 실제 작업을 수행하는 데 사용된다.
※ command line
운영체제, 컴퓨터에 명령을 내리고 프로그램을 실행하도록 하는 텍스트 기만 환경. 대부분 일반 유저들에게 친화적이지 않으므로 다양한 GUI를 통해 접근하도록 함
② SQLite3 command line tool
- sqlite3 <database_fileAUD>
- .sqlite
- SELECT * FROM table_name
① 테이블 생성
sqlite> CREATE TABLE <table_name> (column1 datatype, column2 datatype, ...);
② 데이터 삽입
sqlite> INSERT INTO <table_name> (column1, column2, ...) VALUES (value1, value2, ...);
③ 데이터베이스 백업
sqlite> .backup <backup_file>