Quickstarters
Feature Overview
How to Build a Backend for MacOS?
44 분
소개 이 튜토리얼에서는 macos용 백엔드를 구축하는 방법 을 배우게 됩니다 우리는 데이터베이스 관리, 클라우드 코드 함수, rest 및 graphql api, 사용자 인증, 실시간 쿼리(라이브 쿼리)와 같은 필수 back4app 기능을 통합하여 macos 애플리케이션과 원활하게 통신하는 안전하고 확장 가능하며 강력한 백엔드를 만드는 과정을 안내할 것입니다 또한 back4app의 빠른 설정과 직관적인 환경이 서버와 데이터베이스를 수동으로 구성하는 것에 비해 시간과 노력을 크게 줄일 수 있는 방법을 보게 될 것입니다 그 과정에서 고급 보안 기능, 클라우드 작업을 통한 작업 예약, 외부 통합을 위한 웹훅 설정 등 주요 기능에 대한 실습 경험을 쌓게 될 것입니다 이 튜토리얼이 끝날 무렵, 여러분은 이 기본 설정을 프로덕션 준비가 완료된 macos 애플리케이션으로 향상시키거나 필요에 따라 사용자 정의 논리 및 타사 api를 쉽게 통합할 수 있는 준비가 잘 되어 있을 것입니다 이 접근 방식을 마스터하면 워크플로를 간소화할 수 있으며 macos용 백엔드를 구축하는 방법을 배우게 될 것입니다 빠르고 효율적으로 필수 조건 이 튜토리얼을 완료하려면 다음이 필요합니다 back4app 계정 및 새로운 back4app 프로젝트 back4app 시작하기 https //www back4app com/docs/get started/new parse app 계정이 없으신 경우 무료로 생성할 수 있습니다 위의 가이드를 따라 프로젝트를 준비하세요 macos 개발 환경 (xcode) xcode는 mac app store https //apps apple com/us/app/xcode/id497799835 에서 설치할 수 있습니다 swift package manager 또는 cocoapods parse swift sdk를 설치하기 위해 parse swift 문서 https //github com/netreconlab/parse swift swift 및 macos 애플리케이션 개발에 대한 기본 지식 apple의 공식 문서 https //developer apple com/documentation/swift swiftui 또는 appkit에 대한 친숙함이 도움이 됩니다 시작하기 전에 이러한 필수 조건이 모두 갖추어져 있는지 확인하세요 back4app 프로젝트를 설정하고 로컬 macos 개발 환경을 준비하면 더 쉽게 따라갈 수 있습니다 1단계 – back4app 프로젝트 설정 새 프로젝트 만들기 back4app에서 macos 백엔드를 구축하는 첫 번째 단계는 새 프로젝트를 만드는 것입니다 아직 만들지 않았다면, 다음 단계를 따르세요 back4app 계정에 로그인하세요 back4app 대시보드에서 “새 앱” 버튼을 클릭하세요 앱에 이름을 지정하세요 (예 “macos backend tutorial”) 프로젝트가 생성되면 back4app 대시보드에 나열된 것을 볼 수 있습니다 이 프로젝트는 이 튜토리얼에서 논의된 모든 백엔드 구성의 기초가 될 것입니다 parse swift sdk 연결하기 back4app은 데이터를 관리하고, 실시간 기능을 제공하며, 사용자 인증을 처리하는 등 parse 플랫폼에 의존합니다 macos 애플리케이션을 back4app에 연결하려면 parse swift sdk를 설치하고 back4app 대시보드의 자격 증명으로 초기화해야 합니다 parse 키 가져오기 back4app 대시보드에서 앱의 “앱 설정” 또는 “보안 및 키” 섹션으로 이동하여 애플리케이션 id 와 클라이언트 키 (또는 clientkey )를 찾으세요 또한 parse 서버 url (종종 https //parseapi back4app com ) 형식으로 찾을 수 있습니다 macos 프로젝트에 parse swift sdk를 설치하세요 사용하는 경우 swift package manager dependencies \[ package(url "https //github com/netreconlab/parse swift git", from "5 0 0") ] 사용하는 경우 cocoapods , 다음을 podfile pod 'parseswiftog' macos 애플리케이션에서 parse를 초기화하세요 (예를 들어, appkit을 사용하는 경우 appdelegate swift 에서, 또는 swiftui 앱을 빌드하는 경우 @main 구조체에서) import parseswift import swiftui @main struct mymacosapp app { init() { task { do { try await parseswift initialize( applicationid "your application id", clientkey "your client key", serverurl url(string "https //parseapi back4app com")! ) } catch { print("error initializing parse \\(error)") } } } var body some scene { windowgroup { contentview() } } } 이 단계를 완료하면 macos 프론트엔드(ui)와 back4app 백엔드 간의 안전한 연결이 설정됩니다 모든 요청 및 데이터 거래는 이 sdk를 통해 안전하게 라우팅되어 수동 rest 또는 graphql 호출의 복잡성을 줄입니다(필요한 경우 여전히 사용할 수 있습니다) 2단계 – 데이터베이스 설정 데이터 저장 및 쿼리 back4app 프로젝트가 설정되고 parse swift sdk가 macos 앱에 통합되면 이제 데이터를 저장하고 검색할 수 있습니다 객체를 생성하는 가장 간단한 방법은 parseobject 를 준수하는 구조체를 정의한 다음 save() 를 호출하는 것입니다 struct todo parseobject { // parseobject required properties var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? // custom properties var title string? var iscompleted bool? } func createtodoitem(title string, iscompleted bool) async { var todo = todo() todo title = title todo iscompleted = iscompleted do { try await todo save() print("todo saved successfully ") } catch { print("error saving todo \\(error)") } } func fetchtodos() async > \[todo] { let query = todo query() do { return try await query find() } catch { print("error fetching todos \\(error)") return \[] } } 또는 back4app의 rest 또는 graphql api를 사용할 수 있습니다 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 back4app은 graphql 인터페이스도 제공합니다 mutation { createtodo(input { fields { title "clean the house" iscompleted false } }) { todo { objectid title iscompleted } } } 이 다양한 옵션을 통해 parse swift sdk, rest 또는 graphql을 통해 개발 프로세스에 가장 적합한 방식으로 데이터 작업을 통합할 수 있습니다 스키마 설계 및 데이터 유형 기본적으로 parse는 실시간 스키마 생성 , 하지만 더 많은 제어를 위해 back4app 대시보드에서 클래스와 데이터 유형을 정의할 수도 있습니다 back4app 대시보드에서 “데이터베이스” 섹션으로 이동합니다 새 클래스를 생성합니다 (예 “todo”) 및 제목(string)과 iscompleted(boolean)과 같은 관련 열을 추가합니다 back4app은 다양한 데이터 유형을 지원합니다 문자열 , 숫자 , 부울 , 객체 , 날짜 , 파일 , 포인터 , 배열 , 관계 , 지리적 지점 , 및 다각형 각 필드에 적합한 유형을 선택하거나, macos 앱에서 객체를 처음 저장할 때 parse가 자동으로 이러한 열을 생성하도록 할 수 있습니다 back4app은 데이터 모델 설계를 도와줄 수 있는 ai 에이전트 를 제공합니다 앱 대시보드 또는 메뉴에서 ai 에이전트 를 엽니다 간단한 언어로 데이터 모델을 설명합니다 (예 “새 todo 앱을 back4app에서 완전한 클래스 스키마로 생성해 주세요 ”) ai 에이전트가 스키마를 생성하도록 합니다 관계형 데이터 관계형 데이터가 있는 경우—예를 들어, 여러 개의 category 객체가 여러 개의 todo 항목을 가리키는 경우— pointers 또는 relations 를 parse swift에서 사용할 수 있습니다 struct category parseobject { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? // custom fields 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 createtaskforcategory(categoryobjectid string, title string) async { let pointer = pointer\<category>(objectid categoryobjectid) var todo = todo() todo title = title todo category = pointer do { try await todo save() print("todo linked to category") } catch { print("error creating task with category relationship \\(error)") } } func fetchtodoswithcategory() async { let query = todo query() include("category") do { let todos = try await query find() print("fetched todo items with category \\(todos)") } catch { print("error fetching todos \\(error)") } } 실시간 쿼리 실시간 업데이트를 위해 back4app은 live queries back4app 대시보드에서 live queries를 활성화하면 macos 앱에서 특정 클래스의 변경 사항을 구독할 수 있습니다 back4app 대시보드에서 live queries 를 활성화하세요 코드에서 live queries 를 초기화하세요 (swift live query 클라이언트는 아직 변동 중이지만, 커뮤니티 주도의 접근 방식을 사용하거나 공식 parse swift 업데이트를 주시할 수 있습니다) src/parseconfig swift // example (subject to support in parse swift) // live query’s subdomain // parseswift configuration livequeryserverurl = url(string "wss\ //your subdomain here b4a io")! 구독하면 새로운 todo 가 생성, 업데이트 또는 삭제될 때마다 알림을 받게 됩니다 이는 여러 사용자 또는 프로세스가 최신 데이터를 즉시 볼 수 있어야 하는 협업 또는 매우 상호작용적인 데스크탑 앱에 특히 유용합니다 3단계 – acl 및 clp로 보안 적용하기 back4app 보안 메커니즘 back4app은 access control lists (acls) 및 class level permissions (clps) 을 제공하여 보안을 중요하게 생각합니다 이러한 기능을 통해 객체별 또는 클래스별로 데이터를 읽거나 쓸 수 있는 사용자를 제한할 수 있으며, 승인된 사용자만 데이터 수정이 가능합니다 access control lists (acls) “ acl ”은 개별 객체에 적용되어 어떤 사용자, 역할 또는 공공이 읽기/쓰기 작업을 수행할 수 있는지를 결정합니다 예를 들어, macos 앱에 현재 로그인한 사용자를 위한 “개인 작업” 개념이 있는 경우 import parseswift func createprivatetodo(title string) async { guard let currentuser = user current else { return } var todo = todo() todo title = title // create an acl granting read/write access only to the owner var acl = parseacl() acl setreadaccess(currentuser, value true) acl setwriteaccess(currentuser, value true) todo acl = acl do { try await todo save() print("private todo saved") } catch { print("error saving private todo \\(error)") } } 객체를 저장하면, 지정된 사용자 외에는 누구도 읽거나 수정할 수 없는 acl이 적용됩니다 class level permissions (clps) clps 는 클래스 전체의 기본 권한을 관리하며, 클래스가 공개적으로 읽거나 쓸 수 있는지, 또는 특정 역할만 접근할 수 있는지를 결정합니다 back4app 대시보드로 이동 , 앱을 선택하고 데이터베이스 섹션을 엽니다 클래스 선택 (예 “todo”) 클래스 수준 권한 탭을 엽니다 읽기 또는 쓰기를 위한 “인증 필요” 또는 공개를 위한 “접근 불가”와 같은 기본값을 구성합니다 4단계 – 클라우드 함수 작성 및 배포 클라우드 코드는 parse server 환경의 기능으로, 서버 측에서 사용자 정의 javascript 코드를 실행할 수 있게 해줍니다 이를 통해 자체 서버나 인프라를 관리할 필요 없이 클라우드 코드를 작성하여 back4app 백엔드를 추가 비즈니스 로직, 검증, 트리거 및 통합으로 확장할 수 있으며, 이는 parse server에서 안전하고 효율적으로 실행됩니다 작동 방식 클라우드 코드를 작성할 때 일반적으로 javascript 함수, 트리거 및 필요한 npm 모듈을 main js 파일에 배치합니다 그런 다음 이 파일을 back4app 프로젝트에 배포하면 parse server 환경에서 실행됩니다 이를 통해 민감한 로직을 서버 측에 유지할 수 있습니다 일반적인 사용 사례 비즈니스 로직 데이터를 저장하기 전의 계산 또는 변환 데이터 검증 특정 필드가 기준을 충족하는지 확인 트리거 데이터가 변경될 때 작업 수행 통합 외부 api와 연결 (예 결제, 알림) 예제 함수 // main js parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); back4app cli를 통한 배포 cli 설치 curl https //raw\ githubusercontent com/back4app/parse cli/back4app/installer sh | sudo /bin/bash 계정 키 구성 b4a configure accountkey 클라우드 코드 배포 b4a deploy 함수 호출하기 macos에서 swift를 사용하여 import parseswift func gettextlength(text string) async { do { let result = try await parsecloud callfunction("calculatetextlength", with \["text" text]) if let resultdict = result as? \[string any], let length = resultdict\["length"] as? int { print("text length \\(length)") } } catch { print("error calling cloud function \\(error)") } } 다른 프레임워크와 마찬가지로 rest 또는 graphql을 통해 호출할 수도 있습니다 5단계 – 사용자 인증 구성 back4app의 사용자 인증 back4app은 parseuser 클래스를 인증의 기초로 활용합니다 기본적으로 parse는 비밀번호 해싱, 세션 토큰 및 안전한 저장을 처리하므로 복잡한 보안 흐름을 수동으로 설정할 필요가 없습니다 사용자 인증 설정 macos 애플리케이션에서 새 사용자를 생성할 수 있습니다 struct user parseuser { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? // default properties 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 { newuser = 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)") } } rest를 통해 로그인은 다음과 같이 보일 수 있습니다 curl x get \\ h "x parse application id your app id" \\ h "x parse rest api key your rest api key" \\ g \\ \ data urlencode 'username=alice' \\ \ data urlencode 'password=secret123' \\ https //parseapi back4app com/login 세션 관리 로그인에 성공하면, parse는 세션 토큰 현재 로그인한 사용자에 접근할 수 있습니다 if let currentuser = user current { print("currently logged in user \\(currentuser username ?? "no username")") } else { print("no user is logged in") } 로그아웃 do { try await user logout() } catch { print("error logging out \\(error)") } 소셜 로그인 통합 google, apple 또는 facebook과 같은 인기 제공자를 통합할 수 있습니다 authdata 를 구성하여 가능합니다 자세한 지침은 다를 수 있으므로 소셜 로그인 문서 https //www back4app com/docs/platform/sign in with apple 이메일 인증 및 비밀번호 재설정 이메일 확인 및 비밀번호 재설정을 활성화하려면 이메일 설정으로 이동 하여 back4app 대시보드에서 이메일 확인 활성화 보내는 주소 구성 , 이메일 템플릿 및 원하는 경우 사용자 정의 도메인 이는 사용자 이메일을 검증하고 비밀번호 복구 방법을 제공하여 계정 보안을 향상시킵니다 6단계 – 파일 저장 처리 파일 업로드 및 검색 parse는 파일 업로드를 처리하기 위한 parsefile 클래스를 포함하고 있으며, back4app은 이를 안전하게 저장합니다 func uploadfile(data data) async > parsefile? { let file = parsefile(name "doc txt", data data) do { let savedfile = try await file save() print("file saved ", savedfile url ?? "no url") return savedfile } catch { print("error uploading file ", error) return nil } } 객체에 첨부하세요 struct photo parseobject { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? var imagefile parsefile? } func createphotoobject(file parsefile) async { var photo = photo() photo imagefile = file do { try await photo save() print("photo object saved!") } catch { print("error saving photo ", error) } } 파일 보안 parse server 설정에서 파일 업로드 보안을 구성할 수 있습니다 예를 들어, 어떤 사용자가 파일을 업로드하거나 삭제할 수 있는지를 제어할 수 있습니다 파일의 url을 공유하면, 더 엄격한 서버 측 규칙을 설정하지 않는 한 해당 url을 가진 누구나 접근할 수 있다는 점을 명심하세요 7단계 – 이메일 확인 및 비밀번호 재설정 개요 이메일 확인 및 비밀번호 재설정은 안전한 사용자 관리를 위해 중요합니다 우리는 이미 5단계 , 아래에서 언급했습니다 하지만 다시 한 번 말씀드리자면 back4app 대시보드에서 이러한 기능을 활성화하세요 (이메일 설정) “이메일 확인 활성화” 및 “비밀번호 재설정” 이메일 템플릿을 구성하세요 macos 앱에서 흐름을 테스트하세요 8단계 – 클라우드 작업으로 작업 예약하기 클라우드 작업 클라우드 작업 을 사용하면 백엔드에서 정기적인 작업을 예약하고 실행할 수 있습니다 예를 들어, 주기적인 이메일을 보내거나 데이터를 정리하는 작업입니다 예를 들어 // main js 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); const oldtodos = await query find({ usemasterkey true }); await parse object destroyall(oldtodos, { usemasterkey true }); return `deleted ${oldtodos length} old todos `; }); 클라우드 코드를 배포하세요 새로운 작업과 함께 back4app 대시보드로 이동하세요 > 앱 설정 > 서버 설정 > 백그라운드 작업 작업을 예약하세요 (예 매일) 9단계 – 웹훅 통합 웹훅 은 특정 이벤트가 발생할 때마다 back4app 앱이 외부 서비스에 http 요청을 보낼 수 있게 해줍니다 이는 결제 게이트웨이, 이메일 마케팅 도구 또는 분석 플랫폼과 같은 제3자 시스템과 통합하는 데 강력합니다 웹훅 구성으로 이동하세요 back4app 대시보드에서 > 더보기 > 웹훅 엔드포인트를 설정하세요 (예 https //your external service com/webhook endpoint ) 트리거를 구성하세요 back4app 클래스 또는 클라우드 코드 함수에서 어떤 이벤트가 웹훅을 발사할지를 지정합니다 예를 들어, 새로운 할 일이 생성될 때마다 slack에 알림을 보내고 싶다면 수신 웹훅을 수용하는 slack 앱을 만드세요 slack 웹훅 url을 복사하세요 back4app 대시보드에서 “todo 클래스의 새 레코드” 이벤트에 대해 해당 slack url로 엔드포인트를 설정하세요 10단계 – back4app 관리 패널 탐색 이 back4app admin app 은 비기술 사용자가 crud 작업을 수행하고 코드를 작성하지 않고도 일상적인 데이터 작업을 처리할 수 있도록 설계된 웹 기반 관리 인터페이스입니다 이 앱은 모델 중심의 , 사용자 친화적인 인터페이스를 제공하여 데이터베이스 관리, 맞춤형 데이터 관리 및 기업 수준의 운영을 간소화합니다 관리 앱 활성화 활성화 하려면 앱 대시보드 > 더보기 > 관리 앱 로 이동하여 “관리 앱 활성화”를 클릭하세요 첫 번째 관리자 사용자 생성 , 이는 자동으로 새로운 역할 ( b4aadminuser )과 관련 클래스를 앱의 스키마에 생성합니다 서브 도메인 선택 을 통해 관리 인터페이스에 접근하고 설정을 완료하세요 로그인 하여 생성한 관리자 자격 증명을 사용하여 새로운 관리자 앱 대시보드에 접근하세요 활성화되면 back4app 관리 앱을 사용하여 parse 대시보드나 백엔드 코드를 직접 사용하지 않고도 데이터베이스의 레코드를 쉽게 보고, 편집하거나 제거할 수 있습니다 결론 이 포괄적인 튜토리얼을 따라 하면서 다음을 수행했습니다 안전한 백엔드 를 macos 앱을 위해 back4app에서 생성했습니다 데이터베이스를 구성했습니다 클래스 스키마, 데이터 유형 및 관계를 사용하여 실시간 쿼리를 통합했습니다 (라이브 쿼리)로 즉각적인 데이터 업데이트 보안 조치를 적용했습니다 acl 및 clp를 사용하여 데이터 접근을 보호하고 관리 클라우드 코드 기능을 구현하여 서버 측에서 사용자 정의 비즈니스 로직을 실행 사용자 인증을 설정했습니다 이메일 확인 및 비밀번호 재설정을 지원합니다 파일 업로드 및 검색을 관리했습니다 선택적 파일 보안 제어와 함께 클라우드 작업을 예약했습니다 자동화된 백그라운드 작업을 위해 웹훅을 사용했습니다 외부 서비스와 통합하기 위해 back4app 관리 패널을 탐색했습니다 데이터 관리를 위해 견고한 macos 프론트엔드와 강력한 back4app 백엔드를 갖춘 지금, 기능이 풍부하고 확장 가능하며 안전한 데스크탑 애플리케이션을 개발할 준비가 되었습니다 더 고급 기능을 탐색하고, 비즈니스 로직을 통합하며, 서버 및 데이터베이스 관리에서 수많은 시간을 절약할 수 있도록 back4app의 힘을 활용하세요 다음 단계 생산 준비가 완료된 macos 앱을 구축하세요 이 백엔드를 확장하여 더 복잡한 데이터 모델, 캐싱 전략 및 성능 최적화를 처리하도록 합니다 고급 기능 통합 전문 인증 흐름, 역할 기반 접근 제어 또는 외부 api(결제 게이트웨이와 같은)를 포함합니다 back4app의 공식 문서 확인 고급 보안, 성능 조정 및 로그 분석에 대한 심층적인 내용을 위해 다른 튜토리얼 탐색 실시간 통신, iot 대시보드 또는 위치 기반 서비스에 대해 여기서 배운 기술을 서드파티 api와 결합하여 복잡한 실제 애플리케이션을 만드세요