[iOS - MongoDB Realm] 3-1. Tutorial - Set up the Task Tracker Tutorial Backend
MongoDB Realm Documentaion을 보고 정리한 내용입니다.
이를 바탕으로 MongoDB Realm을 이용한 iOS 앱을 만들 것입니다.
따라서 iOS 개발 관련 부분만 정리할 예정입니다.
MongoDB Realm Documentation 중 현재 포스트의 부분은 아래와 같습니다.
MongoDB Realm - Tutorial - Set Up The Backend
[iOS - MongoDB Realm] 포스트
[iOS - MongoDB Realm] 1. MongoDB Realm
[iOS - MongoDB Realm] 2. Get Started - Introduction to MongoDB Realm for Mobile Developers
[iOS - MongoDB Realm] 3. Tutorial - Create a Task Tracker App - iOS Swift Tutorial
[iOS - MongoDB Realm] 3-1. Tutorial - Set up the Task Tracker Tutorial Backend
[iOS - MongoDB Realm] 3-2. Tutorial - iOS Swift Tutorial
next
Task Tracker 튜토리얼 백엔드 설정
개요
태스크 트래커를 위한 클라이언트 SDK 기능을 구현하기 전에 인증 및 Realm Sync와 같은 SDK 요청을 처리할 백엔드 Realm 앱을 만들어야 합니다.
이 작업을 더 쉽고 빠르게 하기 위해 이미 백엔드 Realm 앱 구성을 준비했으며, 함수, 트리거, 스키마 및 프런트 엔드 튜토리얼 앱 중 하나와 연결하는 데 필요한 Realm 동기화 구성을 완료했습니다.
사전 제작된 백엔드를 사용하려면 다음을 수행해야 합니다.
- 아직 계정이 없다면 Atlas 계정을 만드십시오. (3 분)
- MongoDB 4.4를 실행하는 무료 Atlas 클러스터를 만듭니다. (5 분)
- Realm CLI를 설치합니다. (5 분)
- Atlas 프로젝트에 프로그래밍 방식 API 키를 추가하고, 이를 사용하여 Realm CLI에 로그인합니다. (5 분)
- Realm CLI를 사용하여 미리 만들어진 Task Tracker 백엔드로 새로운 Task Tracker 백엔드 Realm 앱을 만듭니다. (5 분)
이 단계를 마치면 Swift, Kotlin 또는 JavaScript를 사용하여 프런트 엔드를 구현하는 코드 작성을 시작할 수 있습니다.
1. Atlas 계정 생성
소요 시간 : 3 분
시작하려면 MongoDB Atlas 계정이 필요합니다.
이미 기존 MongoDB Atlas 계정이 있는 경우 다음 단계로 진행할 수 있습니다.
Atlas 계정이 없는 경우 아래 단계에 따라 계정을 만드십시오.
MongoDB Atlas 로그인 페이지로 이동합니다.
- 로그인을 클릭합니다.
- 새 사용자 자격 증명을 입력하거나 Google에 가입 버튼을 클릭합니다.
- 가입을 클릭하여 계정을 만드십시오.
- 프롬프트에 따라 Atlas 계정에서 조직 및 프로젝트를 생성합니다. 기본 제안 이름을 사용하거나 직접 입력할 수 있습니다.
조직 및 프로젝트 생성을 마치면 Atlas 클러스터를 생성하라는 화면이 표시됩니다.
계정을 만드는 방법에 대한 자세한 내용은 Atlas 계정 만들기를 참조하십시오.
나는 구글 계정으로 바로 sign up 함
2. 무료 Atlas 클러스터 생성
소요 시간 : 5 분
* MongoDB 버전 4.4 필요
Realm Sync를 사용하려면 Atlas 클러스터가 MongoDB 버전 4.4를 사용해야 합니다.
클러스터를 설정할 때 추가 설정 아래의 드롭 다운 메뉴에서 MongoDB 4.4를 선택합니다.
다음으로 MongoDB 4.4 이상을 실행하는 MongoDB Atlas 클러스터가 필요합니다.
4.4 이외의 MongoDB 버전을 실행하는 Atlas 프로젝트에서 이미 무료 클러스터를 만든 경우 Atlas에서 새 프로젝트를 만든 다음 아래 지침에 따라 해당 프로젝트에서 MongoDB 4.4를 실행하는 새 클러스터를 만들 수 있습니다.
아직 클러스터를 생성하지 않은 경우 아래 지침에 따라 첫 번째 무료 클러스터를 생성하십시오.
1. cloud.mongodb.com에서 MongoDB Atlas 계정에 로그인합니다.
2. 계정에 로그인하면 Atlas는 첫 번째 클러스터를 생성하라는 메시지를 표시합니다.
Shared Clusters 카테고리에서 Create a Cluster를 클릭합니다.
또는 Atlas 계정의 프로젝트 보기에서 Build a Cluster를 클릭할 수 있습니다.
3. Cloud Provider & Region에서 AWS 및 N. Virginia (us-east-1)를 선택합니다.
4. Additional Settings에서 Select a Version 드롭 다운에서 MongoDB 4.4를 선택합니다.
5. Cluster Name에서 Cluster0으로 새 클러스터 이름을 입력합니다.
6. 페이지 하단의 클러스터 생성 버튼을 클릭합니다.
클러스터를 생성한 후 Atlas는 Atlas 계정에 대한 프로젝트 보기를 시작해야 합니다.
이 보기에서는 새 클러스터를 초기화할 때 Atlas의 진행 상황을 볼 수 있습니다.
* 팁 : MongoDB Atlas 클러스터를 생성하는 방법에 대한 자세한 내용은 프리 티어 클러스터 배포를 참조하십시오.
처음 로그인해서 들어가면 Organization을 설정하라고 함.
캡쳐를 못했는데 내가 원하는 이름으로 Organization 만들면 됨.
그 다음 Projects 카테고리에서 New Project를 하나 만들면 그 프로젝트로 자동으로 이동하게 된다.
그럼 그 프로젝트에서 Atlas Cluster를 만들 수 있는 창이 나오고, Bulid a Cluster를 클릭하면 위의 설명과 같은 화면이 나온다.
자세한 예를 보고싶다면 아래 더보기 클릭
3. Realm CLI 설치
소요 시간 : 5 분
Realm 앱의 데이터 소스로 사용할 클러스터를 만들었으므로 이제 앱 자체를 만들 방법이 필요합니다.
대부분의 경우 Atlas UI를 통해 액세스 할 수 있는 Realm UI를 사용합니다.
그러나 이 튜토리얼의 목적을 위해 우리는 Realm Command Line Interface 또는 realm-cli라고도 불리는 것을 사용할 것입니다.
realm-cli를 사용하면 Realm UI 대신 JSON 구성 파일을 사용하여 프로그래밍 방식으로 Realm 앱을 관리할 수 있기 때문에 사용하고 있습니다.
이렇게 하면 미리 준비된 앱 구성을 더 빨리 시작할 수 있습니다.
패키지 관리자 또는 realm-cli바이너리를 사용하여 개발 환경에 Realm CLI를 설치하려면 아래 지침을 따르십시오.
npm / Yarn 설치와 Manual 설치 두 가지 방법이 있는데 npm 설치를 하겠습니다.
자세한 내용은 docs.mongodb.com/realm/tutorial/realm-app 공식 페이지를 확인해주세요.
npm 설치
설치하는 가장 쉬운 방법 realm-cli은 npm 패키지 관리자를 사용하는 것입니다.
Node.js가 설치되어 있는지 확인한 후 shell에서 다음 명령을 실행합니다.
npm install -g mongodb-realm-cli
Yarn을 사용하여 npm에서 CLI를 설치할 수도 있습니다.
yarn global add mongodb-realm-cli
realm-cli 설치 후, 다음 명령을 실행하여 성공적으로 설치되었는지 확인할 수 있습니다.
realm-cli --version
출력으로 나온 버전 넘버가 1.1.0과 같다면 realm-cli설치에 성공한 것입니다.
* 팁 : 설치 방법에 대한 자세한 realm-cli내용 은 Realm CLI 설치 안내서를 참조하십시오.
나는 이미 노트북에 Node.js와 npm이 설치되어 있어서 바로 터미널에서 명령을 수행했다.
하지만 ERROR!!!! 나 처럼 에러나는 사람!!!!
자세한 내용은 알고싶다면 더보기를 클릭해주세요.
-g 를 이용해 전역적으로 설치할려면 권한이 필요하다.
그래서 앞에 sudo를 붙여(어드민 권한) 설치하고자 했다.
그랬더니 또다른 새로운 오류 발생!!
밑으로도 엄청 길게 오류가 있고 암튼 설치가 안된다ㅠㅠ
열심히 구글링을 했다...
결국 답을 찾았고 나와 같은 문제를 겪는 사람들이 꽤 있었다.
stackoverflow.com/questions/46328267/npm-install-error-eacces-permission-denied-mkdir
뒤에 --unsafe --perm 을 붙여주고 나서야 설치가 되었다...
이유는 잘 모르겠다...그냥 잘 설치된걸로 마무리 할련다.
드디어 잘 설치되서 버전도 잘 뜬다...!ㅜㅜ 이것때문에 고작 이 설치 하나때문에 엄청 시간잡아 먹음;;
4. Atlas 프로젝트에 API 키 추가 및 Realm CLI에 로그인
소요 시간 : 5 분
이제 realm-cli개발 환경에 설치되었으므로 realm-cli 사용해 인증하는 방법이 필요합니다.
왜냐하면 보안상의 이유로 realm-cli프로그래밍 방식의 API 키를 사용한 로그인만 허용하기 때문입니다.
따라서 새 Atlas 프로젝트를 관리하는 데 사용할 수 있는 프로그래밍 방식의 API 키를 만드는 것부터 시작하겠습니다.
* 직접 4번의 과정을 수행한 후 아래 더보기에 정리했습니다. 자세한 정보를 알고싶다면 더보기를 눌러주세요!
1. Atlas UI 상단에서 Access Manager를 클릭합니다. 드롭다운에서 Project Access을 선택합니다.
2. API Keys 탭으로 이동합니다.
3. Create API Key 버튼을 클릭합니다.
4. Description 텍스트 박스에 "API Key for the MongoDB Realm CLI"을 입력합니다.
5. Project Permissions 드롭 다운해서 "Project Owner"를 선택하고 "Project Read Only"는 선택 해제합니다.
6. Public API Key를 복사하여 어딘가에 저장합니다.
7. Next를 클릭합니다.
8. Private API Key를 복사하여 어딘가에 저장하십시오. 이 페이지를 떠난 후에는 더 이상 Realm UI를 통해 볼 수 없습니다.
9. Add Access List Entry 버튼을 클립 합니다.
10. Use Current IP Address을 클릭합니다.
11. Save를 클릭합니다.
12. Private API Key를 안전하게 기록했으면 Done을 클릭하여 Project Access Manager 페이지로 돌아갑니다.
13. Realm CLI로 인증하려면 터미널에서 다음 명령을 사용하십시오.
realm-cli login --api-key <public API key> --private-api-key <private API key>
realm-cli 다음과 같은 출력을 나타내면 성공적으로 인증된 것입니다.
you have successfully logged in as <public API key>
* 팁 : MongoDB Atlas에서 프로그래밍 방식 API 키를 만드는 방법에 대한 자세한 내용은 API 액세스 구성 문서를 참조하세요.
프로그램 API 키를 사용하여 인증하는 방법에 대한 자세한 realm-cli내용은 Realm CLI 인증 가이드를 참조하십시오.
4번 과정 자세하게 설명
1, 2, 3 과정
Project 화면에서 상단에 Access Manager가 있다.
Project Access를 클릭한다.
왼쪽 상단의 Create API Key를 클릭한다.
4, 5, 6, 7 과정
8, 9, 10, 11 과정 - 이 과정은 next후에 위에서 시키는 대로 하면 됨!
13 과정 - 터미널로 인증하기 성공!!
5. Realm CLI를 사용하여 새 Task Tracker 백엔드 Realm 앱 만들기
소요 시간 : 5 분
이제 Atlas 계정, MongoDB 4.4를 실행하는 Atlas 클러스터 및 인증된 realm-cli세션이 있으므로 Task Tracker 백엔드 구성을 가져올 준비가 되었습니다.
shell에 아래 git 명령어를 입력해 realm-tutorial-backend github 저장소를 다운로드합니다.
1. 다음 명령을 실행하여 미리 만들어진 Task Tracker 백엔드 구성을 다운로드합니다.
git clone https://github.com/mongodb-university/realm-tutorial-backend.git
다음과 같은 출력이 표시되어야 합니다.
Cloning into 'realm-tutorial-backend'...
remote: Enumerating objects: 39, done.
remote: Counting objects: 100% (39/39), done.
remote: Compressing objects: 100% (31/31), done.
remote: Total 39 (delta 3), reused 39 (delta 3), pack-reused 0
Receiving objects: 100% (39/39), 7.25 KiB | 1.81 MiB/s, done.
Resolving deltas: 100% (3/3), done.
위의 git clone명령을 실행한 후, 디렉터리는 이제 realm-tutorial-backend 디렉터리를 포함해야 합니다.
해당 디렉터리의 내용을 사용하여 Realm CLI로 고유 한 Task Tracker Realm 앱 백엔드를 만들 것입니다.
2. realm-tutorial-backend 프로젝트의 루트 디렉터리로 이동합니다.
cd realm-tutorial-backend
3. realm-cli import 명령어를 통해 앱을 만듭니다.
realm-cli import
4. realm-cli Atlas 프로젝트를 쿼리 하는 데 몇 초가 걸릴 수 있지만 곧 다음 출력이 표시됩니다.
this app does not exist yet: would you like to create a new app? [y/n]:
"y"를 누른 다음 ENTER를 눌러 새 앱을 만들 것인지 확인합니다.
5. 다음 세부 정보를 입력하라는 메시지가 표시됩니다.
App name [tasktracker]:
Available Projects:
Project 0 - <project ID>
Atlas Project Name or ID [Project 0]:
Location [US-VA]:
Deployment Model [GLOBAL]:
앱 구성에 기본값을 사용하려면 각 프롬프트에서 Enter 키를 누릅니다.
(Enter 눌러서 기본값으로 만드는게 나음, 괜히 내 맘대로 커스텀했다가 나는 에러남ㅠㅠ)
만약 새 Realm 앱의 App ID가 포함된 출력이 표시되면 import 명령이 성공적으로 수행되어 새 앱을 만든 것입니다.
Successfully imported 'tasktracker-...'
* 중요 : 이 Realm App ID ( "tasktracker -...")를 기록해 둡니다.
이 Realm App ID를 사용하여 클라이언트 SDK 튜토리얼에서 Realm 앱에 연결합니다.
Atlas UI의 Realm 탭으로 이동하여 앱이 성공적으로 생성되었는지 확인할 수도 있습니다.
tasktracker라는 Realm 앱이 표시됩니다
6. Task Tracker 백엔드가 올바르게 구성되었는지 확인
소요 시간 : 5 분
이제 애플리케이션을 성공적으로 만들었으므로 제공된 구성을 살펴볼 차례입니다.
Atlas UI의 Realm 탭으로 이동하여 앱에 액세스 할 수 있습니다.
tasktracker앱을 나타내는 카드를 클릭하여 Task Tracker 백엔드를 관리하기 위한 Realm UI를 시작합니다.
이제 Realm UI에서의 앱의 구성을 볼 수 있으므로, realm-tutorial-backend에서 JSON으로 업로드한 모든 구성을 살펴볼 수 있습니다.
* 클라이언트 SDK 가이드로 바로 이동하고 싶다면 What 's Next? 에서 링크를 찾을 수 있습니다.
스키마
Realm UI의 스키마 섹션에는 연결된 Atlas 클러스터에 저장된 데이터 구조에 대한 정보가 표시됩니다.
이 섹션에서 mongodb-atlas라 불리는 Task와 User라는 두 컬렉션이 포함된 클러스터를 볼 수 있습니다.
또한 스키마 탭으로 이동하여 각 컬렉션의 데이터 구조를 정의하는 JSON 스키마를 볼 수 있습니다.
MongoDB의 문서 모델을 사용하면 다양한 모양과 크기로 데이터를 저장할 수 있지만 Realm 데이터베이스와 Realm Sync는 데이터가 설정된 스키마를 따르게 해야 합니다.
이 스키마를 따르는 데이터는 MongoDB Atlas 연결된 데이터 소스와 클라이언트 SDK를 통해 Realm 앱에 연결된 장치 간에 동기화됩니다. 이 스키마는 사소한 예외를 제외하고 클라이언트 애플리케이션에 정의된 모델과 일치해야 합니다.
* 팁 : MongoDB Realm의 스키마에 대한 자세한 내용은 Realm Schemas 문서를 참조하세요.
인증
Authentication Providers과 Authentication 탭에서 사용자가 작업 추적기 앱에 로그인할 수있는 다양한 방법에 대한 정보를 찾을 수 있습니다.
제공된 Task Tracker 구성에서 사용자는 "이메일 / 비밀번호"인증을 통해서만 로그인 할 수 있으며, 이를 통해 사용자는 Realm 앱에서 자신의 계정에 액세스 하기 위해 자신에게만 알려진 이메일 사용자 이름과 비밀 비밀번호를 정의할 수 있습니다.
인증 공급자 목록에서 이메일 / 비밀번호 항목을 클릭하면, Task Tracker의 이메일 / 비밀번호 인증 구성에 대한 세부 정보를 볼 수 있습니다.
여기에는 몇 가지 중요한 필드가 있습니다.
- 사용자 확인 방법 : 사용자가 계정을 만든 후 바로 로그인할 수 있도록 "사용자 자동 확인"을 선택했습니다. 프로덕션 애플리케이션에서는 사용자가 이메일 계정의 소유권을 확인할 수 있도록 "확인 이메일 보내기"를 선호할 수 있습니다.
- 비밀번호 재설정 방법 : "비밀번호 재설정 기능 실행"을 선택했지만 resetFunc실제로는 어떤 로직도 구현하지 않습니다. 항상 실패합니다. 프로덕션 애플리케이션의 경우 사용자가 비밀번호를 잊어버린 경우 실제로 재설정하는 기능을 구현하고 싶을 것입니다.
* 팁 : MongoDB Realm의 인증에 대한 자세한 내용은 인증 문서를 참조하십시오.
동기화
Sync 섹션에서, 당신은 클라이언트 장치와 MongoDB Atlas cluster 간의 데이터를 동기화하는 Realm Sync에 대한 정보를 찾을 수 있습니다.
동기화가 가능하도록 다중 realm의 Atlas에서 데이터를 정렬하는 partition key를 정의했습니다.
그리고 이해하기 쉽도록 파티션 키의 이름을 _partitio로 정의했습니다.
또한 Task Tracker는 각 사용자가 액세스 할 수 있는 파티션을 결정하는 Realm Sync에 대한 권한도 정의합니다.
Define Permissions을 클릭해 권한 정의를 확인하십시오.
권한 정의는 canReadPartition 및 canWritePartition 함수를 호출해 사용자가 특정 realm을 읽거나 쓸 수 있는지의 여부를 결정합니다.
* 팁 : Realm Sync에 대한 자세한 내용은 Realm Sync 개요를 참조하십시오.
사용자 지정 데이터 및 권한
MongoDB Realm에서 각 사용자는 custom data object를 가질 수 있습니다.
이 앱은 권한을 결정하는(주어진 realm 또는 데이터 집합을 사용가자 읽거나 쓸 수 있는지) 사용자 정의 데이터를 사용할 수 있도록 설계되었습니다.
그렇기에 Realm을 사용하면 앱 권한을 구성하는 방법에 따라 클라이언트가 데이터를 읽고 쓸 수 있지만 , 백엔드에서 실행되는 시스템 기능만 custom data object(사용자 지정 데이터 객체)를 수정할 수 있도록 앱이 구성되어 있습니다.
이것은 클라이언트가 임의로 권한을 부여하는 것을 방지합니다.
원문 (이 부분에 대한 세세한 글을 읽지 않아서 해석을 해도 맞는 건지 모르겠어서 첨부함;;;;)
In MongoDB Realm, each user can have an associated custom data object. We designed this app to use data stored in the user's custom data to determine permissions -- that is, whether that user can read or write a given realm or set of data, such as a project. While Realm allows clients to read and write data depending on how you configure your app permissions, we configured this app so that only system functions running on the backend can modify a user's custom data object. This prevents clients from arbitrarily granting themselves permissions.
*팁 : custom data object에 대한 자세한 내용은 Enable Custom User Data를 참조하십시오.
함수
Functions 섹션에서는 Task Tracker 앱의 응용 백엔드 로직이 포함되어 있습니다.
아래와 같은 기능이 포함됩니다.
- 사용자의 프로젝트에 팀원 추가
- 사용자가 특정 파티션을 읽을 수 있는지 여부 결정
- 사용자가 특정 파티션에 쓸 수 있는지 여부 결정
- 동기화된 Atlas 클러스터에서 새 사용자 문서 생성
- 사용자 프로젝트의 구성원 가져오기
- 사용자의 프로젝트에서 팀 구성원 제거
- 사용자 암호 재설정 (구현되지 않음)
JavaScript 함수 정의를 보려면 함수를 클릭하십시오. 테스트 입력으로 기능을 실행할 수도 있습니다.
* 팁 : MongoDB Realm의 함수에 대한 자세한 내용은 documentation on functions을 참조하세요.
트리거
Triggers 섹션에서는 트리거에 대한 정보, 즉 트리거 조건이 충족되면 함수를 통해 Task Tracker 백엔드에서 로직을 실행하는 특정 기준에 대한 정보를 찾을 수 있습니다.
Task Tracker에서 onNewUser라는 트리거 하나를 찾을 수 있습니다.
트리거 유형 및 트리거가 활성화하는 기능에 대한 세부 정보를 보려면 트리거를 클릭하십시오.
onNewUser는 새 사용자가 계정을 만들 때 (따라서 "Create"작업 유형 및 "Authentication"트리거 유형) onNewUser는 해당 사용자에 대한 사용자 지정 데이터를 초기화하는 함수인 createNewUserDocument를 호출하는 용도가 있습니다.
이를 통해 해당 사용자의 개인 프로젝트를 생성하는 데 필요한 첫 번째 데이터를 제공하고 작업을 수행하거나 다른 사용자를 프로젝트 구성원으로 추가할 수 있습니다.
* 팁 : MongoDB Realm의 트리거에 대한 자세한 내용은 documentation on triggers를 참조하세요.
그다음은?
MongoDB Realm을 사용하여 기능적인 Task Tracker 애플리케이션 백엔드를 구축했습니다. 잘했어!
Realm 애플리케이션이 작동하고 있으므로 클라이언트 애플리케이션 튜토리얼 중 하나를 따라 Realm 앱에 연결하고 모바일 또는 웹 애플리케이션에서 작업을 관리할 수 있습니다.
iOS(Swift) 부분만 정리할 예정입니다.