TeamCoook / iOSInterviewQuestions

✅ iOS 개발자 기술 면접 대비
18 stars 0 forks source link

[레벨 0] `6주차` 12. 데이터베이스의 종류와 iOS에서 주로 사용되는 데이터베이스에 대해 설명해주세요. #12

Open longlivedrgn opened 4 months ago

longlivedrgn commented 4 months ago
JasonLee0223 commented 4 months ago
iOS에서 사용되는 SQLite, Core Data, Realm 등의 특징과 사용 사례를 설명해주세요.
SQLite는 RDBMS의 경량화 한 버전으로 볼 수 있으며 서버가 아닌 응용프로그램(혹은 앱)에 넣어 사용하는 비교적 가벼운 DB입니다. 하여 가장 널리 사용되고 Swift에서도 별도의 설치 없이 사용할 수 있다는 장점이 있습니다. 하지만 모바일에 최적화되어 있지 않는 부분이 있다보니 Realm보다 성능 면에서 뒤쳐진다는 평이 있습니다. Realm은 NoSQL(보편적으로 Not Only SQL 이라고 칭함) 일종으로 볼 수 있습니다. 여기서 NoSQL을 잠시 짚고 넘어가자면 단순히 기존 RDBMS가 갖고 있는 특성뿐만 아니라, 다른 특성들을 부가적으로 지원한다는 것을 의미합니다. 예를 들어 웹 쇼핑몰에 접속했을 때, 선호하시는 상품을 실시간으로 추천해 줄 때, 거의 예외 없이 사용되는 기술이 바로 NoSQL DB기술이 적용된다는 아티클을 보았습니다. 기존의 관계형 데이터베이스 시스템의 주요 특성을 보장하는 ACID(Atomic, Consistency, Integrity, Duarabity) 특성을 제공하지 않는, 그렇지만 뛰어난 확장성이나 성능 등의 특성을 갖는 수많은 비관계형, 분산 데이터 베이스들이 등장했고 NoSQL이라는 용어가 보편적으로 사용되었습니다. 소셜네트워크가 활성화 되면서 비정형데이터라는 것을 보다 쉽게 담아서 저장하고 처리할 수 있는 구조를 가진 데이터 베이스들이 관심을 받게 되었고, 해당 기술이 점점 더 발전하게 되면서, NoSQL 데이터베이스가 각광을 받게 되었습니다. 이에 Realm은 오픈 소스 라이브러리로 모바일에 최적화된 데이터베이스 라이브러리로서 복잡한 Entity에 대한 매핑을 처리해야할 문제가 없으므로 Realm은 메모리 상의 객체를 디스크로 빠르게 가져올 수 있으며 데이터 용량에 제한 없이 무료로 사용이 가능하고 대용량의 테이터와 대규모 스토리지에 상관없이 일관된 속도 및 성능을 보장하며 SQLite 및 CoreData 대비 빠른 속도를 자랑합니다. 하지만 외부 라이브러리를 설치해서 사용해야 하기 때문에 비교적 위험이 있습니다. CoreData는 애플 자체 파일시스템 플랫폼으로서 안정성이 있습니다. Object에 더 중심을 가져가며 Obejctive-C에 클래스로 표현되는 객체의 내용을 저장한다는 특징이 있습니다. SQLite보다 더 빠르게 저장된 기록을 가져온다. 최근에는 SwiftData가 발표되면서 차츰차츰 사용 빈도가 줄어들 것으로 예상됩니다.
관계형 데이터베이스의 ACID 특성과 트랜잭션의 개념에 대해 설명해주세요.
ACID를 알기 전에 트랜잭션의 개념에 대해 먼저 설명드리겠습니다. DBMS에서 트랜잭션은 하나의 논리적인 작업 단위를 의미합니다. 트랜잭션은 여러 개의 연산을 묶어서 하나의 작업으로 처리하기 때문입니다. 이러한 트랜잭션 관리는 데이터의 일관성과 무결성을 유지하는 데 필수적인 요소입니다. 따라서 트랜잭션 관리는 데이터베이스 시스템의 성능과 안정성을 결정짓는 중요한 요소 중 하나입니다. ACID는 RDBMS의 주요 특성을 보장하는 4가지의 특성의 영단어 첫문자를 따와 만들었습니다. Atomicity(원자성) - 트랜잭션이 데이터베이스에 모두 반영되거나 전혀 반영되지 않아야 한다는 원칙 Consistency(일관성) - 트랜잭션이 실행되기 전과 후에 데이터베이스가 일관된 상태를 유지해야 한다. Isolation(독립성) - 동시에 실행되는 트랜잭션이 서로 영향을 주지 않아야 한다. Duarabity(지속성) - 성공적으로 완료된 트랜잭션의 결과가 영구적으로 반영되어야 한다.
iOS에서 데이터베이스 스키마 버전 관리와 마이그레이션을 처리하는 방법을 설명해주세요.
스키마 버전 관리는 데이터베이스 스키마(데이터베이스의 구조, 테이블, 열, 인덱스 등)의 변경 사항을 관리하는 프로세스를 의미합니다. 애플리케이션이 발전하고 데이터 요구사항이 변화함에 따라 데이터베이스 스키마가 업데이트될 필요가 있기 때문에 중요한 개념입니다. **스키마 버전 관리를 수행하는 방법** 1. 버전 번호 부여 2. 변경 사항 기록 3. 마이그레이션 스크립트 작성 4. **버전 확인 및 적용** **Core Data에서 마이그레이션 처리** 1. 모델 버전 추가 2. 디폴트 모델 설정 3. 마이그레이션 정책 설정 **SQLite를 사용하는 방법** 1. DB 버전 확인 2. 마이그레이션 실행
ohdair commented 4 months ago

블로그 기재

longlivedrgn commented 4 months ago

iOS에서 사용되는 SQLite, Core Data, Realm 등의 특징과 사용 사례를 설명해주세요.

SQLite

Core Data

Realm

관계형 데이터베이스의 ACID 특성과 트랜잭션의 개념에 대해 설명해주세요.

트랜잭션

ueunli commented 4 months ago

SQLite

특징

 

SunnnySong commented 4 months ago

1️⃣ iOS에서 사용되는 SQLite, Core Data, Realm 등의 특징과 사용 사례를 설명해주세요.

2️⃣ 관계형 데이터베이스의 ACID 특성과 트랜잭션의 개념에 대해 설명해주세요.

관계형 데이터베이스

트랜잭션, Transaction

트랜잭션의 특징, ACID

soo941226 commented 2 months ago

iOS에서 사용되는 SQLite, Core Data, Realm 등의 특징과 사용 사례를 설명해주세요.

일단 모두 DMBS라는 측면으로 사용이 되는 것으로 알고 있는데요.

Realm은 이름은 들어봤으나 실제로 분석하고 사용해본 적은 없어서 잘 모르겠습니다. SQL 문법을 각 플랫폼에서 지원하는 언어들로 비교적 쉽게 사용할 수 있는 것 정도로만 알고 있습니다.

SQLite는 그 이름처럼 SQL을 사용하는 DBMS이면서, 다른 툴에 비해 상대적으로 많이 가벼운 것으로 알고 있습니다.

CoreData는 애플에서 제공하는 프레임워크인데요. DMBS, ORM 등 인스턴스를 관리하기 위한 기능들을 제공합니다. 또 내부적으로 SQLite를 사용하기도 합니다. https://developer.apple.com/documentation/coredata/nspersistentstore/storetype

관계형 데이터베이스의 ACID 특성과 트랜잭션의 개념에 대해 설명해주세요.

먼저 트랜잭션은 함수를 묶어놓은 함수라고 표현할 수 있을 것 같은데요. 이를 묶어놓음으로써 비즈니스 레벨에서 한번에 처리가 되도록 하는 것입니다. 흔히 예시를 드는 게 은행일인데 계좌이체를 한다고 하면 A 계좌에서는 돈을 빼야 하고, B 계좌에는 돈을 넣어야 합니다. 또 이 안에서도 로그를 남기거나 하는 일이 필요할 수 있는데, 이렇듯 작업을 묶어서 하나의 작업으로 단위를 만든 것을 트랜잭션이라 합니다.

이러한 트랜잭션의 특성상 지켜져야하는 성질이 있는데 이들의 앞글자를 따서 부르는 것이 ACID입니다. 각각 Atomic, Consistency, Isolation, Durability인데요. 상세 설명은 다음과 같습니다.

iOS에서 데이터베이스 스키마 버전 관리와 마이그레이션을 처리하는 방법을 설명해주세요.

이게 말이 이상하지만, 제가 읽기로는 운영체제 별 RDMBS의 운영방식을 이야기하라는 것 같은데요. 상당히 서로 동떨어진 이야기를 연관지어 시킨다는 생각이 듭니다. 먼저 같은 RDMBS라도 운영체제 별로 인터페이스가 다를 수는 있겠습니다. 또 RDMBS 인터페이스가 달라 운영방식이 다를 수도 있겠습니다. 그런데 많은 RDMBS들이 있는데 특히 iOS에서, 그 많은 RDBMS가 운영되는 방식을 표현하라는 게... 아는 만큼 나열을 하라는 건지, 공통점이 있다면 표현을 하라는 건지 잘 모르겠네요.

일단 공통점으로 가자면 데이터베이스 스키마라는 것부터가 관계형 데이터베이스에서 사용되는 용어인데, 하나의 데이터 집합을 표현하는 테이블입니다. 스키마의 버전을 이야기 한다는 게 또 기존의 스키마를 두고 새로운 스키마를 만든다는 것인지, 기존의 스키마를 확장한다는 것인지 명확한 정의가 필요한데요. 일단 어느 쪽이던 SQL 중에서도 Database Define Language를 통해 스키마를 재정의하는 과정이 필요합니다. 이후 Database managment language를 통해 확장된 스키마에서 삭제, 추가, 변형이 된 컬럼에 대해 어떤 정책을 가져갈 것인지 결정하는 과정이 필요하며, 새로운 스키마를 만든 경우라면 또 새로운 스키마로 모두 옮겨주는 과정이 필요할 수 있습니다.

질문의 의도가 이게 맞는지 솔직히 잘 모르겠는데요. 별 생각없이 코어데이터를 이야기한 것이라면, 매뉴얼한 방법과 오토매틱한 방법이 있습니다. 보통은 오토매틱으로 충분한데, 새로운 모델이 필요하고 기존 모델이 이로 맵핑이 되어야하는 경우라면 매뉴얼한 방식으로 처리할 필요가 있습니다.