정보

꼭 필요한 경우가 아니라면 SQLite 사용을 자제하자

SQLite는 단일 파일 구성의 데이터베이스 파일이다. Microsoft Office Access 파일과 비슷하다고 볼 수도 있지만 이 파일은 엔드 유저(End User)가 사용하는 파일이고, SQLite 파일은 개발자가 사용하는 파일이라고 볼 수 있다. 즉, 개발자가 개발한 앱에서 사용하는 파일이다. 문제는 SQLite는 파일의 수정을 위해서 트랜잭션을 위해 저널링 파일 생성을 수행한다는 점에 있다.

요즘 사용되는 거의 대부분의 파티션 포맷은 저널링 파일 시스템이다. Microsoft Windows 계열(Windows, Windows Phone, Xbox 360/One)에서 사용하는 NTFS, Apple OS X 및 Apple iOS에서 사용하는 Mac OS Extended(HFSX), Linux에서 사용하는 ext(ext3, ext4) 등이 전부 저널링 파일 시스템인데, 거의 대부분의 파일 시스템이 저널링 파일 시스템인 이유는 오류가 발생했을 때 데이터를 복구하기 용이하기 때문이다.

SQLite에서는 자신의 저널링을 위해 저널링 파일 시스템에 두어번의 저널링을 더 시킨다는 점에 있다. 저널링 파일을 생성하고 삭제하기 때문인데, HDD를 사용하던 시절에는 이런 방법을 사용해도 저널링 파일 시스템에서는 약간 느리다는 단점 외에는 큰 문제가 없었다. 하지만 최근 많이 사용되는 SSD나 USB 메모리, 스마트폰과 같은 플래시메모리 사용 장치에서 문제가 발생한다. 쓰기 작업이 많아지면 플래시메모리의 셀 수명이 단축되기 때문이다.

스마트폰 앱 중에서 데이터를 기록하는 앱은 대부분 SQLite를 사용하고 있다. 특히 CoreData를 사용하고 있는 iOS 앱이라면 대부분 사용하고 있다(최근에는 Realm으로 백엔드를 대체하기도 하는 모양이기에 ‘대부분’. 다만 Realm도 같은 문제를 가지고 있을 수 있으니 자세히 알아봐야 할 듯). Android도 많은 입문서적에서 SQLite를 사용하는 방법을 기록하고 있는 것으로 보아 알게 모르게 많은 앱들이 SQLite를 사용하고 있을 것이다.

PC야 SSD 수명이 다 하거나 USB 플래시메모리 수명이 다 하면 쉽게 교체하면 되니 미리 데이터만 백업한다면 큰 금전적 손실 없이 이용할 수 있다지만 스마트폰이나 태블릿, 그리고 SSD 일체형 노트북(맥북 에어나 맥북 프로 레티나같은 랩탑 컴퓨터)은 좀 다르다. 메모리 수명이 다 해버리면 A/S를 하는 방법밖에 없는데, 보통은 그정도가 되면 A/S 기간이 끝난 상태라 유상 A/S 또는 A/S 거절이고, 유상 A/S도 해당 플래시메모리만 뜯어서 교체하는 방법이 없으므로 리퍼나 재구입밖에 방법이 없다.

단순 데이터 저장 정도만 하는 앱이라면 SQLite 사용을 자제하자. 저장한 데이터를 쉽게 활용하는 방법은 SQLite가 아니더라도 방법은 많다.

SQLite의 Journaling of Journal anomaly에 대해서 더 자세하게 설명한 학술 자료가 있다. 해결법도 제시되어 있으니 꼭 SQLite를 사용해야겠다면 SQLite의 소스 수정을 좀 하는 방법도 좋을 것이다.

광고

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중

This site uses Akismet to reduce spam. Learn how your comment data is processed.