iOS_Swift 앱개발👍

[iOS_Swift] Realm Studio를 이용한 DB 관리하기_ 23

개발하는윤기사 2022. 8. 28. 17:24
728x90
반응형

안녕하세요!! 개발하는 윤기사입니다!

 

오늘은 엄청 알찬 내용을 가지고 왔는데요, Swift를 이용한 앱 개발을 하다 보면 데이터를 관리해야 할 일이 많이 생기실 텐데요.

 

우리는 CoreData나, UserDefault 등을 이용하여 값을 저장했었습니다. 더욱 효율적으로 DB를 관리하려면 Realm이 필수입니다!

 

Realm이 무엇인지 먼저 알아보시죠!

 

- Realm Studio -

 

🔥 RDBMS(관계형 데이터베이스 관리 시스템) : 관계형 데이터베이스를 생성, 수정, 관리할 수 있는 소프트웨어

 

  • 명확한 데이터 구조 : 테이블-컬럼 형태로 데이터가 저장이 됩니다!
  • 비용과 시스템 복잡성 : 시스템이 복잡해질수록 쿼리문이 복잡해지고 성능 저하가 일어날 수 있습니다.
  • 수직적 확장 가능 : 수평적 확장이 어려워, 수직적 확장을 하지만, 한계에 직면할 가능성이 있다.

 

🍎 여기서, 테이블이 뭐고, 컬럼이 무엇인가요? 한다면!

 

  • 테이블(Table) : Row와 Colum으로 이루어진 데이터의 집합이고 엑셀의 표를 생각하시면 됩니다!
  • 컬럼(Column) : 테이블을 구성하는 정보 중 세로의 데이터이며 데이터 타입 지정이 가능하고, 특정한 레코드의 내용을 찾기 위해서 컬럼 기준으로 찾습니다!
  • 레코드(Record) : 가로로 묶은 데이터이고, 한 객체에 대한 정보를 가지고 있으며, Primary Key로 구별이 가능합니다!

 

🍎Primary Key란? 

- 테이블에 대한 고유 식별 값이며 테이블에 오직 한 개만 생성이 가능하고 중복될 수 없고 비어있을 수 없습니다!

 

🔥 ACID 준수

Realm 데이터베이스는 트랜잭션이 ACID를 준수. 즉, 커밋된 모든 쓰기 작업이 유효함을 보장하고 시스템 충돌 시 클라이언트가 일시적인 상태를 볼 수 없습니다. Realm 데이터베이스는 다음 디자인 선택으로 ACID를 준수합니다.

  • 원자성(Atomicity) : 트랜잭션의 작업을 그룹화하고 하나라도 실패하면 트랜잭션의 모든 작업을 롤백합니다.
  • 일관성(Consistency) : 스키마에 대한 변경 사항의 유효성을 검사하여 데이터 손상을 방지합니다. 쓰기 작업의 결과가 유효하지 않으면 Realm은 전체 트랜잭션을 취소하고 롤백합니다.
  • 격리(Isolation) : 한 번에 하나의 작성자만 허용합니다. 이것은 트랜잭션 간의 스레드 안전성을 보장합니다.
  • 내구성(Durability) : 트랜잭션이 커밋되면 즉시 디스크에 씁니다. 예를 들어 앱이 충돌하는 경우 변경 사항이 손실되거나 손상되지 않습니다.

 

이제 Realm을 다루어 보러 가볼까요~?

 

Create, Read, Update, and Delete Objects (CRUD)

 

 

1) UserDiary를 예시로 들어보겠습니다. RealmModel이라는 class 파일을 하나 만들어주고, 일기에 넣어줄 내용들을 선언해 줍니다. class로 선언해주었기 때문에 init구문이 필수로 필요합니다! 

 

🔥 테이블과 컬럼 구조 설계를 하는 과정입니다. Scheme에 맞게 Model을 정의해주는 것입니다.

UserDiary 만들기

 

🍎 UserDiaryRepositoryType을 protocol로 선언해서 훨씬 더 일관성 있게 따로 파일을 만들어서 써보도록 하겠습니다!

 

2) 1번에서 만든 UserDiary를 이용해보겠습니다! 사용하실 VC에 import를 해줍니다!

import 하기

 

3) 로컬 전용 Realm 데이터베이스에서 영역을 여는 가장 간단한 옵션인 localRealm = try! Realm()을 선언해줍니다. 

DB에 접근하기

 

4) 변수 tasks를 Results<UserDiary>로 선언을 해줍니다. Realm의 데이터 중 원하는 내용을 가져와서 보관할 공간으로 사용할 것이기 때문이고, 데이터가 들어있는 테이블을 직접 수정하지 않고, 데이터만 가져와서 화면에 사용하기 위해서 선언해주는 것입니다! tasks에 didSet 구문을 이용하여 tableView의 reloadData()를 선언해주면 따로 Realm에 접근해서 데이터를 가져올 때 굳이 reloadData를 또 해줄 필요가 없어집니다!

꿀팁 ^^

 

 

🍎 데이터를 저장하려면? 가장 기본적인 형태입니다!

 

 

5) 데이터 저장하기

데이터 저장하기

tasks = repository.fetch() 를 이용해 데이터를 정렬해서 tasks에 담는 것입니다!

 

 

 

6) 데이터 정렬하기 

-sorted(byKeyPath: 정렬할 기준, ascending: 오름차순으로 할지, 내림차순으로 할지)

데이터 정렬하기
registDate를 기준으로 정렬하겠다.

 

 

7) 데이터 필터링하기

- diaryTitle CONTAINS[c] '6' :  '6'이라는 문자를 (대소문자 무상관) 포함하고 있으면 필터링해서 가져온다. 

- diaryTitle = '6' : '6'이라는 제목을 가지고 있으면 가져온다.

데이터 필터링하기

 

 

8) 데이터 값 업데이트 하기

- 하나의 레코드에서 특정 컬럼 하나만 변경 

- 하나의 테이블에 특정 컬럼 전체 값을 변경

- 하나의 레코드에서 여러 컬럼들이 변경

데이터 업데이트

 

 

9) 데이터 삭제하기

데이터 삭제하기

 

 

이상 Realm을 이용한 DB 관리에 대해 알아보았습니다!

 

생각보다 간단한 것 같으면서도 어려우실 텐데, 한 번 직접 따라 해 보시면서 익혀가셨으면 좋겠습니다!

 

그리고 밑에 Realm의 Document 링크를 하나 남겨드릴 테니, 공식 문서에 더 많은 정보가 있으니 꼭 확인해보시길 바랍니다!

 

그럼 개발하는 윤기사는 오늘도 빡코딩 하겠습니다 ^^

 

모두들 고생 많으셨습니다~

 

 

 

 

 

참고 : Realm Swift에서 사용하기 공식문서

 

Realm Swift SDK — Realm

Docs Home → Realm The Realm Database Swift SDK enables mobile applications to access data stored in local realms. Optionally, interact with App Services features such as Functions, MongoDB Data Access, and authentication. The Realm Swift SDK supports Swi

www.mongodb.com

 

728x90
반응형