SQLite & Transaction

SQLite & Transaction 개념 및 특징

Posted by Damin on August 7, 2019

SQLite

SQLite는 MYSQL과 같은 데이터베이스 관리 시스템이지만, 서버가 아니라 응용 프로그램에 넣어 사용하는 비교적 가벼운 데이터베이스이다. API는 단순히 라이브러리를 호출하는 것만 있으며, 데이터를 저장하는데 하나의 파일만 사용하는 것이 특징이다. 데어터를 저장하는 데 하나의 파일만을 사용 (ex. DB 하나당 파일 하나!)

구글 안드로이드 운영체제에 기본 탑재된 데이터베이스

현재 애플, 카카오, 구글, 마이크로소프트 등 쟁쟁한 회사들이 애용을 하고 있다.

  1. SQLite는 독립적인 Library 이다. 서버가 필요 없고, 특별한 설정을 할 필요도 없는, 트랜잭션이 가능한 SQL 데이터베이스 엔진이다.

트랜잭션이란?

  • 데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위.

상태변화란?

  • Select, Insert, Delete, Update 질의어를 이용하여 데이터 베이스에 접근 하는 것을 의미한다.

여기서 잠깐! 작업의 단위는 질의어 한 문장이 아니다. 작업의 단위는 많은 질의어 명령문들을 사람이 정하는 기준에 따라 정하는 것.

예를 들어 회원가입(Insert)을 하면, DB에 정보가 저장되고 로그인(Read)를 하면, DB에 있는 데이터를 읽게 된다.

여기서의 작업의 단위는 Insert, Read를 합친것이 된다.

이러한 작업단위를 하나의 트랜잭션이라고 한다.

관리자나 개발자가 하나의 트랜잭션 설계를 잘하면? -> 데이터를 다루는 것에 많은 이점이 있다.

##트랜잭션의 특징

A. 원자성(Atomicity)

트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 한다. (All or Nothing) 트랜잭션은 사람이 설계한 논리적인 작업 단위로서, 일처리는 작업단위 별로 이루어 져야 무리가 없다.

그니까 예를 들면, 통장에 2만원이 있었습니다. 1만원 송금을 하면, 상대방 통장에 1만원을 더해주고, 내 통장에 1만원을 빼주는 작업을 묶었습니다. 근데, 이 2가지의 query가 각각 놀게 된다면(ex : 자신의 통장 -1만원 상대방 통장은 변화없음) 큰일이 납니다. 따라서 일처리는 작업단위별로 실행되어야 합니다.

트랜잭션 단위로 데이터가 처리되지 않는다면, ->설계한 사람은 데이터 처리 시스템 이해하기 힘들고, 오작동시에 원인 찾기 힘들다. (그렇죠? 각각 놀면 어디서 무엇이 잘못되었는지 헷갈리게 됩니다 ㅠ)

B. 일관성 (Consistency)

트랜잭션이 성공적으로 완료가 되더라도, 일관적인 DB상태를 유지하는 것.

갑자기 문자열(string)이던 ID가
트랜잭션 완료됐다고 정수형(int)로 바뀌어 버리면 안되겠죠?

C. 격리성 (Isolation)

트랜잭션이 수행시 다른 트랜잭션 작업이 끼어들지 못하도록 보장하는 것. A 트랜잭션이 수행중이라면, B 트랜잭션이 A 트랜잭젼의 연산에 끼어들 수 없습니다!!

즉, 트랜잭션끼리는 서로 간섭x

D. 지속성 (Durablitiy)

성공적으로 수행된 트랜잭션은 영원히 반영이 되는 것.

1만원 송금했는데 통장 잔고가 그대로라면, 은행에서 큰일나겠죠!?!

트랜잭션에서 Commit, Rollback 연산이 있는데

Commit -> 성공적으로 끝났다. 데이터베이스도 일관성 있는 상태에 있다. 하나의 트랜잭션이 끝났다는것을 알려주기위해 사용하는 연산

Rollback -> 하나의 트랜잭션 처리가 비정상적으로 종료된 경우, 처음부터 다시 시작 or 트랜잭션의 부분적으로만 연산된 결과 취소.


  1. SQLite는 거의 어디에서나 실행 가능하다. Window, Mac OS, linux, IOS 등등 다양한 플랫폼에 이식되었다고 합니다.

  2. 많은 언어에는 SQLite를 위한 고수준 바인딩이 라이브러리로 존재

  3. SQLite의 소스 코드는 공개되어 있다. 아무런 제약 없이 다른 프로그램에서 재사용 가능.

  4. SQLite는 트랜잭션과 원자성 동작 지원 -> 충돌, 정전 발생하더라도 데이터베이스 손상x

이렇게 SQLite는 내장 가능한 오픈소스 데이터베이스로,

C로 작정됐으며 일반적인 SQL로 query가 가능하다.

SQLite는 킬로바이트를 저장하던, 기가바이트를 저장하던, 빠른 속도와 이식성,안전성을 제공하도록 설계되었다.

이러한 이유들이 있어서, 사람들이 많이 찾는다고 한다.