Realm Blog

RealmContent - Realm 기반의 오픈 소스 CMS 컴포넌트

 

소개

Realm 모바일 플랫폼으로 만든 RealmContent를 사용하면 Realm 브라우저 앱으로 직접 데이터를 추가해서 새로운 컨텐츠를 iOS 앱에 빠르게 보여줄 수 있습니다.

RealmContent는 Realm 객체를 애플리케이션의 자체 스키마에 자동으로 추가해서 개발자가 미리 구성된 여러 개의 뷰 컨트롤러로 사용 가능한 컨텐츠를 리스팅하고 각 컨텐츠 “페이지”를 렌더링할 수 있습니다.

컴포넌트는 대부분 자동으로 동작하며, 커스터마이제이션도 가능합니다. 따라서 개발자의 시간과 노력을 기울이지 않고도 기본 요소를 구현할 수 있고 인앱 컨텐츠를 변경하기 위해 새로운 버전의 앱을 따로 출시하지 않아도 됩니다.

RealmContent 라이브러리를 사용하면 가장 쉽고 빠른 방법으로 전체 사용자에게 실시간으로 컨텐츠를 보여줄 수 있습니다.

동작 방법 기술 특강

다음과 같은 다섯 가지의 간단한 단계를 거치면 RealmContent로 다이내믹 컨텐츠 관리 시스템을 iOS 앱에 적용할 수 있습니다.

1) Import RealmContent

CocoaPods로 RealmContent 를 추가하거나 프로젝트에 소스 파일을 직접 추가합니다. 그다음 뷰 컨트롤러에 RealmSwiftRealmContent를 추가하세요.

import RealmSwift
import RealmContent

앱에는 일반적으로 Realm 오브젝트 서버에서 동기화하는 객체 목록이 있습니다. RealmContent를 추가하면 Realm이 기본 스키마에 두 개의 새로운 모델인 ContentPageContentElement를 포함합니다.

여러 개의 Realm 파일을 사용하는 경우라면 ContentPageContentElement를 원하는 객체 스키마에 추가하세요.

2) 컨텐츠 리스트 데이터 소스 생성

RealmContent가 제공하는 ContentListDataSource 클래스를 사용해서 컨텐츠를 앱에 표시할 수 있습니다.

let items = ContentListDataSource(style: .sectionsByTag)

일반 리스트에는 .plain을 사용하고 tag 속성으로 페이지가 분리되는 섹션 리스트에는 .sectionsByTag를 사용하세요.

3) 데이터 소스 초기화

loadContent(from:)를 호출해서 컨텐츠 소스로 사용할 Realm 파일을 설정합니다.

items.loadContent(from: try! Realm())

Realm 오브젝트 서버로부터 변경 사항이 들어오는 경우 데이터 소스가 자동으로 테이블 뷰나 컬렉션 뷰에서 데이터를 다시 로드하도록 설정할 수 있습니다. (가장 권장하는 옵션입니다)

items.updating(view: tableView)

4) 일반적인 방법으로 테이블 뷰나 컬렉션 뷰 데이터 소스 메서드를 구현하되, 데이터를 컨텐츠 데이터 소스에서 가져옵니다. 이 클래스는 numberOfSections, numberOfItemsIn(section:), titleForSection(section:), itemAt(indexPath:)와 같은 메서드들을 제공합니다.

이 방법으로 테이블 뷰 또는 컬렉션 뷰 데이터 소스 메서드를 구현하고 필요한 UI나 로직 설정을 할 수 있습니다. (더 자세한 내용은 RealmContent 저장소의 샘플 코드를 참조하세요.)

5) 컨텐츠 “페이지” 표시

ContentViewController 인스턴스를 표시해서 컨텐츠를 보여줄 수 있습니다. 테이블 뷰나 컬렉션 뷰의 탭 델리게이트 메서드나 prepareForSegue(_:) 메서드, 혹은 다른 코드를 사용합니다.

다음 코드에서 테이블 셀을 탭 한 이후의 동작 방법을 볼 수 있습니다.

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  tableView.deselectRow(at: indexPath, animated: true)

  let item = items.itemAt(indexPath: indexPath)
  let vc = ContentViewController(page: item)

  navigationController!.pushViewController(vc, animated: true)
}

표시된 뷰 컨트롤러는 테이블 뷰를 사용해서 ContentPage 요소의 컨텐츠를 동적으로 보여줍니다. 컨텐츠를 원격으로 변경하면 변경 사항이 화면에 실시간으로 반영됩니다.

동적으로 컨텐츠를 추가, 편집, 삭제하기

RealmContent의 가장 큰 장점은 언제든지 표시된 내용을 수정할 수 있다는 것입니다. 모든 변경 사항은 모든 연결된 사용자에게 실시간으로 동기화됩니다. (인터넷에 연결되지 않은 사용자는 연결이 되는 순간 동기화됩니다)

Realm 브라우저 앱으로 새로운 페이지를 추가, 삭제하거나 컨텐츠 블럭을 추가, 재배치, 수정하는 등의 여러 작업을 쉽게 할 수 있습니다. 제목과 링크의 강조 색상을 변경할 수도 있습니다.

Editing content via Realm Browser

지금 바로 RealmContent를 사용해 보세요!

오픈 소스인 RealmContent의 소스 코드와 데모 앱을 다음 링크에서 볼 수 있습니다. https://github.com/realm-demos/RealmContent

RealmContent를 앱에 설정하는 가장 빠른 방법은 CocoaPods입니다. Podfile에 pod 'RealmContent'를 추가하세요.

기능에 대한 아이디어나 버그 리포팅, 피드백을 주시려면 Twitter로 연락하거나 GitHub에 이슈를 만들어 주세요.

앞으로 이 컴포넌트로 얼마나 멋진 다이내믹 앱이 만들어질지 정말 기대가 됩니다!


Marin Todorov

Marin Todorov는 iOS 컨설턴트이자 퍼블리셔입니다. “iOS Animations by Tutorials”의 저자이며 iOS Animations by Emails” 뉴스레터를 운행하고 있습니다. 20년 넘게 Apple 관련 개발을 했으며 Monster Technologies와 Native Instruments 등의 회사에서 일하면서 4개 이상의 나라에서 거주했습니다. 또한 raywenderlich.com 튜토리얼 팀의 설립 멤버이기도 하죠. 코드 개발 이외에는 블로그 게재와 책 저술, 교육과 강연에 관심이 많으며, 코드를 오픈 소스화 하기도 합니다. Santiago 순례 경험도 있습니다.

이런 개발 뉴스를 더 만나보세요