BOID

[iOS]DBMS에서 SQLite3란 - HoonIOS 본문

IOS 시작기

[iOS]DBMS에서 SQLite3란 - HoonIOS

HoonIOS 2021. 6. 4. 10:09

안녕하세요, HoonIOS입니다.

iOS에서 값을 저장하기 위해서 UserDefaults, 프로퍼티 리스트, 코어 데이터, SQLite3을 사용하는데요 거기서 DBMS인 SQLite3에 대해서 포스팅을 하려고 합니다.

 

 SQLite3란?

 

SQLite3는 엄청 가볍고 크기가 작은 데이터 베이스입니다.

특히 iOS의 개발 툴인 Xcode에서 별도의 관련 라이브러리를 제공하고 있어서 iOS에서 많이 쓰이는 DBMS입니다.

 

유명한 라이브러리 중에 FMDB라는 라이브러리가 있는데요, 이 라이브러리의 모토가 SQLite인 만큼 다양한 SQLite에 관한 내용들이 있습니다.

 

 iOS에서 SQLite 사용하는 간단한 방법

iOS에서 SQLite를 사용하기 위해서 libsqlite3 라이브러리가 필요합니다.

 

해당 앱에서 libsqlite3 라이브러리를 추가하려면 앱의 설정에서 Build Phases탭에서 libsqlite3 라이브러리를 찾을 수 있습니다. 해당 라이브러리 가서 확인을 해보시면. tbd확장자를 가지고 있습니다.

 

libsqlite3는 swift로 구현된 것이 아니라 오브젝티브 - C로 구현된 라이브러리이기 때문에 이 라이브러리를 사용하려면 브릿징 헤더 파일에 #import <sqlite3.h>을 무조건 반입시켜줘야 합니다.

 

참고, 브릿징 헤더 파일은 오브젝티브 - C와 swift를 연결하는 다리 역할을 하는 것으로 라이브러리를 사용할 때 해당 파일이 오브젝티브 - C로 되어 있으면 브릿징 헤더 파일을 구현해주어야 합니다.

* libsqlite3라이브러의 핵심 구조체 2개가 있습니다.

  1. sqlite3
  2. sqlite3_stmt

- sqlite3 구조체데이터베이스 연결 정보를 저장(DB 연결된 상태 값)을 하고 sqlite3_stmt 구조체데이터베이스에 전송할 SQL 구문을 컴파일하는 역할을 합니다.

 

그렇지만, 이 구조체들은 오브젝티브 - C로 되어 있어 안에 코드를 보면은 C문법으로 정의가 되어 있습니다.

 

그래서 swift에서는 OpaquePointer구조체를 제공합니다.

즉, 스위프트에서 데이터베이스 연결 정보나 컴파일된 SQL 구문 모두 OpaquePointer구조체 타입으로 정의가 되어야 합니다.

 

sqlite3 객체에 사용하는 메서드는 sqlite_open(), sqlite3_closed()가 있습니다. 이 객체가 하는 것은 연결 정보라고 했으니 데이터베이스를 연결할 때 sqlite3_open() 함수가 호출이 되고, 연결을 종료를 할 때 sqlite3_closed() 함수가 호출되어야 합니다.

 

sqlite3_stmt객체에 사용하는 메서드는 sqlite3_prepare(), sqlite3_step(), sqlite3_finalize()가 있습니다. 이 객체는 전송할 SQL 구문을 컴파일 하는것이라고 했습니다.

sqlite3_prepare()는 SQL 구문을 컴파일 할 때 사용하는 객체이고 sqlite3_step()은 컴파일된 SQL구문을 데이터 베이스에서 실행을 시키고 sqlite3_finalize()는 메모리에서 해제를 할때 사용을 합니다.

 

※ DB 연결을 하고 구문을 컴파일 시키고 해제하는 과정을 한번 살펴보겠습니다.

 

  1. sqlite3객체의 sqlite3_open()를 통해 데이터 베이스와 연결을 해줍니다.
  2. sqlite3_stmt객체의 sqlite3_prepare()를 통해 SQL 구문을 컴파일 해줍니다.
  3. sqlite3_stmt객체의 sqlite3_step()을 통해 컴파일 했던 SQL구문을 실행해줍니다.
  4. sqlite3_stmt객체의 sqlite3_finalize()을 통해 sqlite3_stmt를 메모리에서 해제 합니다.
  5. sqlite3객체의 sqlite3_closed()를 통해 데이텁 베이스와 연결을 해제해 소멸을 해줍니다.

 

간단하게 DB연결을 해주고 SQL구문을 컴파일해 실행시켜주고 메모리 해제랑 DB 연결만 해제해주면 끝이네요 ㅎㅎ

말은 쉽지....ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

그럼 이제 다음 포스팅에 간단하게 sqlite를 생성하는 프로젝트를 한번 진행해보겠습니다. :)

반응형
Comments