Quickstarters
Feature Overview
How to build a backend for SwiftUI?
41 분
소개 이 튜토리얼에서는 back4app을 사용하여 swiftui ios 앱의 완전한 백엔드를 구축하는 방법을 배웁니다 parse swift sdk를 swiftui 프로젝트에 통합하고 데이터베이스 관리, 클라우드 코드 기능, rest 및 graphql api, 사용자 인증, 실시간 쿼리와 같은 주요 back4app 기능을 활용하여 안전하고 확장 가능한 백엔드를 만드는 방법을 보여드립니다 이 접근 방식은 데이터를 안전하게 저장하고, 서버 측 작업을 설정할 필요 없이 수행하며, 필요에 따라 ios 앱 또는 웹 앱 을 쉽게 확장할 수 있도록 도와줍니다 back4app의 빠른 설정과 직관적인 환경이 수동으로 서버와 데이터베이스를 구성하는 것에 비해 시간과 노력을 크게 줄일 수 있는 방법도 보여드릴 것입니다 마지막에는 swiftui를 위한 백엔드 구축 방법 을 이해하게 되어 프로덕션 환경으로 확장하거나 사용자 정의 논리 및 api와 통합할 수 있습니다 최소한의 오버헤드로 강력하고 확장 가능한 백엔드 를 만드는 작업을 시작해 봅시다! 전제 조건 back4app 계정과 새로운 back4app 프로젝트 back4app 시작하기 https //www back4app com/docs/get started/new parse app 계정이 없으신 경우 무료로 생성할 수 있습니다 위 가이드를 따라 프로젝트를 준비하세요 기본 swiftui 개발 환경 기계에 xcode 가 설치되어 있어야 하며 기본 swiftui 또는 ios 앱 프로젝트가 설정되어 있어야 합니다 swift package manager 또는 cocoapods parse swift sdk를 추가하기 위해 필요합니다 parse swift sdk 문서 https //github com/netreconlab/parse swift swift 및 swiftui에 대한 친숙함 swiftui가 처음이라면 apple의 swiftui 문서 https //developer apple com/documentation/swiftui 를 검토한 후 시작하세요 시작하기 전에 모든 것이 준비되어 있는지 확인하세요 back4app 프로젝트가 설정되어 있고 로컬 swiftui 환경이 준비되어 있으면 더 쉽게 따라할 수 있습니다 1단계 – back4app 프로젝트 설정 새 프로젝트 만들기 back4app에서 swiftui 백엔드를 구축하는 첫 번째 단계는 새 프로젝트를 만드는 것입니다 아직 만들지 않았다면, 다음 단계를 따르세요 back4app 계정에 로그인하세요 back4app 대시보드에서 “새 앱” 버튼을 클릭하세요 앱에 이름을 지정하세요 (예 “swiftui backend tutorial”) 프로젝트가 생성되면 back4app 대시보드에 나열된 것을 볼 수 있습니다 이 프로젝트는 이 튜토리얼에서 논의된 모든 백엔드 구성의 기초가 될 것입니다 parse swift sdk 연결 back4app은 데이터 관리, 실시간 기능 제공, 사용자 인증 처리 등을 위해 parse 플랫폼에 의존합니다 swiftui 애플리케이션을 back4app에 연결하려면 parse swift sdk를 설치하고 back4app 대시보드의 자격 증명으로 초기화해야 합니다 파스 키 가져오기 back4app 대시보드에서 앱의 “앱 설정” 또는 “보안 및 키” 섹션으로 이동하여 애플리케이션 id 와 클라이언트 키 (또는 자바스크립트 키)를 찾으세요 또한 파스 서버 url (종종 https //parseapi back4app com )를 찾을 수 있습니다 파스 스위프트 sdk 설치 만약 스위프트 패키지 관리자 를 사용하고 있다면, xcode 에서 프로젝트를 열고 다음과 같이 하세요 파일 → 패키지 추가 → url 입력 https //github com/netreconlab/parse swift git 버전 규칙에서 “다음 주요 버전까지”를 선택하고 확인하세요 만약 코코아팟 pod 'parseswiftog' 앱에서 파스 초기화 하세요 예를 들어, 앱 구조체에서 @main struct myapp app { init() { do { try await parseswift initialize( applicationid "your app id", clientkey "your client key", serverurl url(string "https //parseapi back4app com")! ) } catch { print("error initializing parse \\(error)") } } var body some scene { windowgroup { contentview() } } } 이 단계를 완료함으로써, swiftui 프론트엔드와 back4app 백엔드 간의 안전한 연결을 설정했습니다 모든 요청 및 데이터 거래는 parse swift sdk에 의해 처리되며, 수동 rest 또는 graphql 호출의 복잡성을 줄여줍니다(필요할 때 여전히 사용할 수 있습니다) 2단계 – 데이터베이스 설정 데이터 저장 및 쿼리 back4app 프로젝트가 설정되고 parse swift sdk가 통합되었으므로, 이제 데이터를 저장하고 검색할 수 있습니다 아래는 간단한 parseobject 예제입니다 우리가 todo 구조체를 가지고 있다고 가정해 보겠습니다 import parseswift struct todo parseobject { // parseobject conformance var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? // custom properties var title string? var iscompleted bool? } 새 todo 저장하기 func createtodoitem(title string, iscompleted bool) async { var todo = todo() todo title = title todo iscompleted = iscompleted do { let savedtodo = try await todo save() print("todo saved successfully \\(savedtodo)") } catch { print("error saving todo \\(error)") } } 모든 todo 쿼리하기 func fetchtodos() async { do { let todos = try await todo query() find() print("fetched todos \\(todos)") } catch { print("error fetching todos \\(error)") } } 대안으로, back4app의 rest api 엔드포인트를 사용하거나 graphql curl x post \\ h "x parse application id your application id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{"title" "buy groceries", "iscompleted" false}' \\ https //parseapi back4app com/classes/todo graphql mutation { createtodo(input { fields { title "clean the house" iscompleted false } }) { todo { objectid title iscompleted } } } 여러 가지 옵션(parse swift sdk, rest, graphql)이 있으면 작업 흐름에 가장 적합한 접근 방식을 선택할 수 있습니다 스키마 설계 및 데이터 유형 기본적으로 parse는 스키마를 즉석에서 생성 , 하지만 더 많은 제어를 위해 back4app 대시보드에서 클래스를 정의할 수도 있습니다 “데이터베이스” 섹션으로 이동 하여 back4app 대시보드에서 새 클래스를 생성 (예 “todo”)하고 title (문자열) 및 iscompleted (부울)과 같은 관련 열을 추가합니다 back4app은 다양한 데이터 유형을 지원합니다 문자열 , 숫자 , 부울 , 객체 , 날짜 , 파일 , 포인터 , 배열 , 관계 , 지리적 포인트 , 및 다각형 각 필드에 적합한 유형을 선택할 수 있습니다 back4app은 데이터 모델을 설계하는 데 도움을 줄 수 있는 ai 에이전트 를 제공합니다 앱 대시보드에서 ai 에이전트 를 엽니다 간단한 언어로 데이터 모델을 설명합니다 (예 “새 todo 클래스 스키마를 만들어 주세요 ”) ai 에이전트가 스키마를 생성하도록 합니다 관계형 데이터 관계형 데이터가 있는 경우—예를 들어, 여러 개의 category 객체가 여러 개의 todo 항목을 가리키는 경우—parse에서 pointers 또는 relations 를 사용할 수 있습니다 예를 들어 struct category parseobject { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? var name string? } struct todo parseobject { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? var title string? var category pointer\<category>? } func createtodowithcategory(categoryid string, title string) async { var todo = todo() todo title = title // construct pointer let categorypointer = pointer\<category>(objectid categoryid) todo category = categorypointer do { try await todo save() } catch { print("error creating todo with category relationship \\(error)") } } 쿼리할 때, include 포인터 데이터를 포함할 수 있습니다 let query = todo query() include("category") do { let todoswithcategory = try await query find() print("todos with category \\(todoswithcategory)") } catch { print("error fetching todos \\(error)") } 실시간 쿼리 실시간 업데이트를 위해, back4app은 live queries swiftui 앱에서 특정 클래스의 변경 사항을 구독할 수 있습니다 live queries 활성화 를 back4app 대시보드의 서버 설정 에서 설정하세요 코드에서 구독하기 // example snippet using the parse swift subscription system task { let subscription = try todo query() subscribecallback() // react to events for await event in subscription { switch event { case entered(let todo) print("new todo entered \\(todo)") case updated(let todo) print("todo updated \\(todo)") case left(let todo) print("todo deleted or left subscription \\(todo)") default break } } } 서버에서 todo 가 생성되거나 업데이트되거나 삭제될 때마다, 귀하의 앱은 실시간으로 알림을 받습니다 이 기능은 즉각적인 데이터 동기화가 필요한 협업 또는 동적 앱에 매우 유용합니다 3단계 – acl 및 clp로 보안 적용하기 back4app 보안 메커니즘 back4app은 access control lists (acls) 및 class level permissions (clps) 를 제공하여 강력한 데이터 보안을 제공합니다 이를 통해 객체별 또는 클래스별로 데이터를 읽거나 쓸 수 있는 사용자를 제한할 수 있으며, 승인된 사용자만 데이터 수정이 가능합니다 access control lists (acls) acl은 acl 이 개별 객체에 적용됩니다 예를 들어, 특정 사용자만 todo를 읽거나 쓸 수 있도록 하려면 func createprivatetodo(title string, user user) async { var todo = todo() todo title = title var acl = parseacl() // grant read/write to the owner only acl setreadaccess(true, for user) acl setwriteaccess(true, for user) todo acl = acl do { let saved = try await todo save() print("private todo saved \\(saved)") } catch { print("error saving private todo \\(error)") } } class level permissions (clps) clps 는 전체 클래스의 기본값을 관리합니다 예를 들어, 클래스가 공개적으로 읽거나 쓸 수 있는지, 또는 특정 역할만 접근할 수 있는지를 설정합니다 back4app 대시보드로 이동하여 앱을 선택합니다 database 섹션을 열고, 클래스를 선택합니다 (예 todo ) class level permissions 탭을 엽니다 “인증 필요” 또는 “접근 불가”와 같은 기본값을 설정합니다 이 권한은 광범위한 기준을 설정하며, acl은 객체 수준에서 보안을 세밀하게 조정할 수 있게 해줍니다 두 가지를 결합하면 강력한 보안 모델을 보장합니다 자세한 내용은 앱 보안 가이드라인 https //www back4app com/docs/security/parse security 4단계 – 클라우드 함수 작성 및 배포 클라우드 코드 는 서버를 관리하지 않고도 사용자 정의 서버 측 swift(또는 javascript) 코드를 실행할 수 있게 해줍니다 클라이언트에서 실행되어서는 안 되는 비즈니스 로직, 데이터 검증, 트리거 또는 백엔드 통합을 추가하는 데 이상적입니다 작동 방식 작성 클라우드 코드를 main js (javascript)와 같은 파일에 작성하거나 swift 기반 클라우드 코드 환경을 활용하세요 배포 back4app 프로젝트에 배포합니다 코드는 parse server의 환경에서 실행되므로 자체 서버를 유지 관리할 필요가 없습니다 호출 클라이언트에서 swift sdk, rest 또는 graphql을 통해 클라우드 코드를 호출합니다 일반적인 사용 사례 비즈니스 로직 복잡한 데이터 검증, 필드 계산 또는 외부 통합 데이터 트리거 객체가 저장, 업데이트 또는 삭제될 때 로직을 실행합니다 보안 클라이언트에서 민감한 작업을 보호하기 위해 서버 측에서 실행합니다 예제 함수 아래는 javascript 클라우드 코드(클라우드 코드는 주로 back4app에서 js를 사용함)로, 텍스트 길이를 계산하는 코드입니다 main js parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); cli를 통한 배포 설치 back4app cli https //www back4app com/docs/local development/parse cli 계정 키를 설정하세요 b4a configure accountkey 배포 클라우드 코드 b4a deploy 함수 호출하기 swift에서 struct cloudfunction { static func calculatetextlength(text string) async throws > int { do { if let result = try await parsecloud callfunction("calculatetextlength", with \["text" text]) as? \[string any], let length = result\["length"] as? int { return length } } catch { throw error } return 0 } } task { do { let len = try await cloudfunction calculatetextlength(text "hello back4app") print("text length \\(len)") } catch { print("error calling cloud function \\(error)") } } rest를 통해 curl x post \\ h "x parse application id your app id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{"text" "hello back4app"}' \\ https //parseapi back4app com/functions/calculatetextlength 5단계 – 사용자 인증 구성하기 back4app에서의 사용자 인증 back4app은 parseuser 클래스를 사용하여 안전한 인증을 처리합니다 비밀번호 해싱, 세션 토큰 및 데이터는 자동으로 처리되어 앱의 논리에 집중할 수 있습니다 사용자 인증 설정하기 새 사용자 등록하기 struct user parseuser { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? // required fields var username string? var email string? var emailverified bool? var password string? var authdata \[string \[string string]?]? } func signupuser(username string, password string, email string) async { var newuser = user() newuser username = username newuser password = password newuser email = email do { try await newuser signup() print("user signed up successfully!") } catch { print("error signing up user \\(error)") } } 기존 사용자 로그인 func loginuser(username string, password string) async { do { let user = try await user login(username username, password password) print("user logged in \\(user)") } catch { print("error logging in user \\(error)") } } 세션 토큰 은 parse에 의해 자동으로 처리됩니다 로그아웃할 수 있습니다 func logout() async { do { try await user logout() print("user logged out ") } catch { print("error logging out \\(error)") } } 소셜 로그인 통합 다음과 통합 가능 google , apple , facebook , 등은 추가 설정을 통해 가능합니다 더 많은 세부정보는 소셜 로그인 문서 https //www back4app com/docs/platform/sign in with apple 를 확인하세요 이메일 인증 및 비밀번호 재설정 back4app 대시보드에서 이메일 인증을 활성화하고, 사용자가 안전하게 계정을 복구할 수 있도록 비밀번호 재설정 이메일을 구성하세요 비밀번호 재설정 try await user passwordreset(email "user\@example com") 6단계 – 파일 저장 처리 파일 업로드 및 검색 parse는 파일 업로드 처리를 위해 parsefile 을 포함합니다 func uploadimage(filedata data) async { let parsefile = parsefile(name "photo jpg", data filedata) do { let savedfile = try await parsefile save() print("file saved at \\(savedfile url ?? "no url")") } catch { print("error uploading file \\(error)") } } 이를 parseobject 에 첨부하십시오 struct photo parseobject { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? var imagefile parsefile? } func createphotoobject(filedata data) async { var photo = photo() photo imagefile = parsefile(name "image jpg", data filedata) do { = try await photo save() } catch { print("error saving photo object \\(error)") } } 파일 보안 기본적으로 파일은 공개 url을 통해 접근할 수 있습니다 parse server 설정 https //www back4app com/docs/platform/file storage 을 사용하여 파일 보안을 구성할 수 있습니다 더 엄격한 파일 제어를 위해 인증된 사용자 또는 지정된 역할만 파일을 업로드하거나 검색할 수 있도록 하십시오 7단계 – 클라우드 작업으로 작업 예약하기 클라우드 작업 을 사용하면 데이터 정리 또는 이메일 전송과 같은 반복 작업을 예약하고 실행할 수 있습니다 // main js (javascript cloud code) parse cloud job('cleanupoldtodos', async (request) => { const todo = parse object extend('todo'); const query = new parse query(todo); const now = new date(); const thirty days = 30 24 60 60 1000; const cutoff = new date(now thirty days); query lessthan('createdat', cutoff); try { const oldtodos = await query find({ usemasterkey true }); await parse object destroyall(oldtodos, { usemasterkey true }); return `deleted ${oldtodos length} old todos `; } catch (err) { throw new error('error during cleanup ' + err message); } }); 배포 후, 예약 을 통해 back4app 대시보드의 서버 설정 > 백그라운드 작업 에서 설정하세요 8단계 – 웹훅 통합하기 웹훅 은 특정 이벤트가 발생할 때마다 back4app 앱이 외부 서비스(예 stripe)에 http 요청을 보낼 수 있게 해줍니다 이는 서드파티 도구나 다른 서버 측 통합에 연결하는 데 유용합니다 back4app 대시보드에서 웹훅 으로 이동하세요 > 더보기 > 웹훅 엔드포인트 추가 (예 https //your service com/webhook ) 어떤 이벤트(예 todo 클래스의 새 레코드)가 웹훅을 트리거할지 설정하세요 예를 들어, 사용자가 새로운 todo를 생성할 때마다 slack 메시지를 보낼 수 있습니다 이는 외부 서비스와 back4app 데이터를 동기화하는 데 도움이 됩니다 9단계 – back4app 관리 패널 탐색하기 back4app 관리 앱 ”은 비기술 사용자가 데이터에 대한 crud 작업을 수행할 수 있는 웹 기반 관리 인터페이스입니다 이는 parse 대시보드와 분리된 사용자 친화적인 ui를 제공하여 프로덕션에서 데이터를 관리하기 쉽게 만듭니다 관리 앱 활성화하기 “ 앱 대시보드 > 더보기 > 관리 앱 ”으로 이동하여 “관리 앱 활성화”를 클릭하세요 관리 사용자 생성하기 , 이는 자동으로 관리 역할과 관련 클래스를 생성합니다 관리 인터페이스를 위한 하위 도메인을 선택한 후, 간단한 포인트 앤 클릭 ui를 통해 데이터를 관리하기 위해 로그인하세요 결론 이 포괄적인 가이드를 따라함으로써, 당신은 다음을 배웠습니다 swiftui를 위한 백엔드를 구축하는 방법 back4app과 parse swift sdk를 사용하여 데이터를 저장하는 방법 사용자 정의 클래스 스키마와 관계를 통해 안전하게 실시간 쿼리를 통합하는 방법 (라이브 쿼리) 즉각적인 데이터 업데이트를 위해 보안 조치를 적용하는 방법 acl과 clp를 사용하여 데이터 접근을 보호하고 관리하기 비즈니스 로직을 실행하는 방법 클라우드 코드를 통해 파일 저장소를 처리하는 방법 , 인증 및 클라우드 작업으로 백그라운드 작업 예약 외부 서비스와 통합하는 방법 웹훅을 사용하여 이 기술을 통해, 당신은 관리하기 쉽고, 안전하며, 확장할 준비가 된 ios 앱 또는 웹 앱 을 구축할 수 있습니다 역할 기반 권한, 푸시 알림 또는 고급 캐싱과 같은 더 많은 고급 기능을 탐색하십시오 다른 api를 통합하거나 특정 사용 사례에 맞게 클라우드 코드를 조정할 수도 있습니다 행복한 코딩 , 그리고 back4app에서 멋진 앱을 만드는 것을 즐기세요! 다음 단계 프로덕션 준비 완료 swiftui 앱 이 백엔드를 확장하여 더 복잡한 데이터 모델, 캐싱 및 성능 향상을 처리하세요 고급 기능 전문 인증, 역할 기반 접근 또는 서드파티 api 통합(예 stripe)에 대해 더 깊이 파고드세요 back4app의 공식 문서 탐색 서버 측 보안, 로그 분석 및 고급 데이터베이스 조정에 대한 심층적인 내용을 위해 추가 튜토리얼 확인 실시간 채팅, 위치 기반 서비스 또는 다중 테넌트 애플리케이션—여기서 배운 방법을 외부 api와 결합하여 정교한 실제 솔루션을 만드세요