Quickstarters
Feature Overview
How to Build a Backend for Kotlin?
37 분
소개 이 튜토리얼에서는 back4app을 사용하여 android 애플리케이션(코틀린으로 작성된)의 완전한 백엔드를 구축하는 방법을 배웁니다 우리는 데이터베이스 관리, 클라우드 코드 기능, rest 및 graphql api, 사용자 인증, 실시간 쿼리(라이브 쿼리) 등 필수 back4app 기능을 통합하여 android 앱과 원활하게 통신하는 안전하고 확장 가능하며 강력한 백엔드를 만드는 과정을 안내할 것입니다 또한 back4app의 빠른 설정과 직관적인 환경이 서버와 데이터베이스를 수동으로 구성하는 것에 비해 시간과 노력을 크게 줄일 수 있는 방법을 보게 될 것입니다 이 과정에서 고급 보안 기능, 클라우드 작업을 통한 작업 예약, 외부 통합을 위한 웹훅 설정 등 주요 기능에 대한 실습 경험을 쌓게 될 것입니다 이 튜토리얼이 끝나면 이 기본 설정을 프로덕션 준비 애플리케이션으로 향상시키거나 필요에 따라 사용자 정의 논리 및 타사 api를 쉽게 통합할 수 있는 준비가 잘 되어 있을 것입니다 전제 조건 이 튜토리얼을 완료하려면 다음이 필요합니다 back4app 계정과 새로운 back4app 프로젝트 back4app 시작하기 https //www back4app com/docs/get started/new parse app 계정이 없으면 무료로 만들 수 있습니다 위의 가이드를 따라 프로젝트를 준비하세요 기본 android/kotlin 개발 환경 머신에 android studio가 설치되어 있는지 확인하세요 아직 설정하지 않았다면 android studio 공식 설정 문서 https //developer android com/studio 를 따라 설정할 수 있습니다 앱의 gradle 구성에서 android 4 0 이상 일반적으로 이 설정은 모듈의 minsdkversion 에 설정합니다 build gradle 파일에서 kotlin 및 기본 android 개념에 대한 이해 android 개발자 문서 https //developer android com/docs android 또는 kotlin이 처음이라면 시작하기 전에 공식 문서나 초보자 튜토리얼을 검토하세요 시작하기 전에 이러한 모든 전제 조건이 준비되어 있는지 확인하세요 back4app 프로젝트를 설정하고 로컬 android 환경을 준비하면 더 쉽게 따라할 수 있습니다 1단계 – back4app 프로젝트 설정하기 새 프로젝트 만들기 back4app에서 android 백엔드를 구축하는 첫 번째 단계는 새 프로젝트를 만드는 것입니다 아직 만들지 않았다면, 다음 단계를 따르세요 back4app 계정에 로그인하세요 back4app 대시보드에서 “새 앱” 버튼을 클릭하세요 앱에 이름을 지정하세요 (예 “android kotlin backend tutorial”) 프로젝트가 생성되면 back4app 대시보드에 나열된 것을 볼 수 있습니다 이 프로젝트는 이 튜토리얼에서 논의된 모든 백엔드 구성의 기초가 될 것입니다 parse sdk 연결하기 back4app은 parse 플랫폼을 사용하여 데이터를 관리하고, 실시간 기능을 제공하며, 사용자 인증 등을 처리합니다 android 앱을 back4app과 통합하려면 gradle 파일에 parse android sdk 종속성을 추가하고 back4app 대시보드의 자격 증명으로 초기화해야 합니다 parse 키 가져오기 back4app 대시보드에서 앱의 “앱 설정” 또는 “보안 및 키” 섹션으로 이동하여 애플리케이션 id 와 클라이언트 키 , parse 서버 url (종종 https //parseapi back4app com )를 찾을 수 있습니다 parse sdk 추가하기 를 build gradle 파일에 추가하세요 루트 build gradle (프로젝트 수준)에서 allprojects { repositories { maven { url "https //jitpack io" } } } 모듈 수준 build gradle (보통 app/build gradle )에서 dependencies { implementation "com github parse community parse sdk android\ parse\ latest version here" } 안드로이드 애플리케이션에서 parse 초기화하기 커스텀 application 클래스를 생성하세요 (예 app kt ) 이미 없는 경우 package com example app import android app application import com parse parse import com parse parseinstallation class app application() { override fun oncreate() { super oncreate() // initialize parse parse initialize( parse configuration builder(this) applicationid("your app id") // from back4app dashboard clientkey("your client key") // from back4app dashboard server("https //parseapi back4app com/") build() ) // (optional) track statistics around app opens parseinstallation getcurrentinstallation() saveinbackground() } } 다음으로, androidmanifest xml 을 열고 커스텀 application 클래스를 등록하세요 \<?xml version="1 0" encoding="utf 8"?> \<manifest xmlns\ android="http //schemas android com/apk/res/android" package="com example app"> \<application android\ name=" app" android\ icon="@mipmap/ic launcher" android\ label="@string/app name" android\ usescleartexttraffic="true" > \</application> \</manifest> 이 단계를 완료함으로써, 안드로이드 (kotlin) 프론트 엔드와 back4app 백엔드 간의 안전한 연결이 설정되었습니다 모든 요청 및 데이터 거래는 이 sdk를 통해 안전하게 라우팅되어 수동 rest 또는 graphql 호출의 복잡성을 줄여줍니다 (필요할 경우 여전히 사용할 수 있습니다) 2단계 – 데이터베이스 설정 데이터 저장 및 쿼리하기 back4app 프로젝트가 설정되고 parse sdk가 android 앱에 통합되면 이제 데이터를 저장하고 검색할 수 있습니다 아래는 kotlin을 사용하여 데이터를 생성하고 가져오는 예제입니다 import com parse parseobject import com parse parsequery import com parse savecallback import com parse parseexception // example create a todo item fun createtodoitem(title string, iscompleted boolean) { val todo = parseobject("todo") todo put("title", title) todo put("iscompleted", iscompleted) todo saveinbackground { e parseexception? > if (e == null) { println("todo saved successfully") } else { println("error saving todo ${e localizedmessage}") } } } // example query all todo items fun fetchtodos() { val query = parsequery\<parseobject>("todo") query findinbackground { results, e > if (e == null) { println("fetched todo items ${results size}") } else { println("error fetching todos ${e localizedmessage}") } } } 또한, back4app의 rest 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 sdk, rest 또는 graphql을 통해 개발 프로세스에 가장 적합한 방식으로 데이터 작업을 통합할 수 있게 해줍니다 스키마 설계 및 데이터 유형 기본적으로 parse는 스키마를 즉석에서 생성 할 수 있지만, 더 많은 제어를 위해 back4app 대시보드에서 클래스와 데이터 유형을 정의할 수도 있습니다 back4app 대시보드에서 “데이터베이스” 섹션으로 이동 하세요 새 클래스 생성 (예 “todo”) 및 제목 (string)과 iscompleted (boolean)과 같은 관련 열을 추가하세요 back4app은 데이터 모델 설계를 도와줄 수 있는 ai 에이전트를 제공합니다 ai 에이전트 열기 앱 대시보드 또는 메뉴에서 데이터 모델 설명하기 간단한 언어로 (예 “back4app에서 완전한 클래스 스키마로 새로운 todo 앱을 만들어 주세요 ”) ai 에이전트에게 스키마를 생성하게 하세요 ai 에이전트를 사용하면 데이터 아키텍처를 설정할 때 시간을 절약하고 애플리케이션 전반에 걸쳐 일관성을 보장할 수 있습니다 관계형 데이터 관계형 데이터가 있는 경우—예를 들어, 여러 개의 category 객체가 여러 개의 todo 항목을 가리키는 경우—parse에서 pointers 또는 relations 를 사용할 수 있습니다 예를 들어, category 에 대한 포인터를 추가하는 것입니다 // linking a todo to a category with a pointer fun createtaskforcategory(categoryobjectid string, title string) { val todo = parseobject("todo") val categorypointer = parseobject("category") categorypointer objectid = categoryobjectid todo put("title", title) todo put("category", categorypointer) todo saveinbackground { e > if (e == null) { println("created task with category relationship") } else { println("error creating task ${e localizedmessage}") } } } 쿼리할 때 포인터 데이터도 포함할 수 있습니다 val query = parsequery getquery\<parseobject>("todo") query include("category") query findinbackground { todos, e > if (e == null) { println("fetched ${todos size} todos with category data") } } 이 include("category") 호출은 각 todo와 함께 카테고리 세부정보를 가져와 관계형 데이터를 원활하게 접근할 수 있게 합니다 실시간 쿼리 실시간 업데이트를 위해 back4app은 live queries 를 제공합니다 android 앱에서 특정 클래스의 변경 사항을 구독할 수 있습니다 back4app 대시보드에서 live queries 를 활성화하세요 앱의 server settings 코드에서 live query subscription 을 초기화하세요 import com parse parselivequeryclient import com parse parsequery import com parse subscriptionhandling val parselivequeryclient = parselivequeryclient factory getclient() val parsequery = parsequery\<parseobject>("todo") val subscriptionhandling subscriptionhandling\<parseobject> = parselivequeryclient subscribe(parsequery) subscriptionhandling handleevent(subscriptionhandling event create) { querytodo, todo > println("new todo created ${todo getstring("title")}") } subscriptionhandling handleevent(subscriptionhandling event update) { querytodo, todo > println("todo updated ${todo getstring("title")}") } subscriptionhandling handleevent(subscriptionhandling event delete) { querytodo, todo > println("todo deleted ${todo getstring("title")}") } 새로운 todo가 생성되거나 업데이트되거나 삭제될 때마다 클라이언트는 실시간으로 콜백을 받습니다 이는 협업 또는 동적 앱에 완벽합니다 3단계 – acl 및 clp로 보안 적용하기 back4app 보안 메커니즘 back4app은 access control lists (acls) 및 class level permissions (clps) 이러한 기능은 개별 객체 또는 클래스 단위로 데이터를 읽거나 쓸 수 있는 사용자를 제한할 수 있게 하여, 권한이 있는 사용자만 데이터 수정이 가능하도록 보장합니다 access control lists (acls) “ acl ”은 개별 객체에 적용되어 어떤 사용자, 역할 또는 공개가 읽기/쓰기 작업을 수행할 수 있는지를 결정합니다 예를 들어 fun createprivatetodo(title string, owneruser parseobject) { val todo = parseobject("todo") todo put("title", title) // create an acl granting read/write access only to the owner val acl = com parse parseacl(owneruser) acl publicreadaccess = false acl publicwriteaccess = false todo acl = acl todo saveinbackground { e > if (e == null) { println("saved private todo") } else { println("error ${e localizedmessage}") } } } 클래스 수준 권한 (clps) clps는 클래스의 기본 권한을 관리하며, 클래스가 공개적으로 읽거나 쓸 수 있는지 여부를 결정합니다 back4app 대시보드로 이동 , 앱을 선택하고 데이터베이스 섹션을 엽니다 클래스를 선택 (예 “todo”) 클래스 수준 권한 탭을 엽니다 읽기 또는 쓰기를 위한 “인증 필요” 또는 공개를 위한 “접근 불가”와 같은 기본값을 구성합니다 4단계 – 클라우드 코드 함수 작성 클라우드 코드는 parse server에서 사용자 정의 kotlin 유사 javascript 코드를 실행할 수 있게 해줍니다 ( js 파일로 업로드됨), 서버 인프라를 관리할 필요 없이 이는 비즈니스 로직, 검증, 트리거 및 외부 api 호출에 이상적입니다 작동 방식 일반적으로 javascript 함수, 트리거 및 필요한 npm 모듈을 main js 파일에 배치합니다 이 파일은 back4app 프로젝트에 배포되며 parse server 환경에서 실행됩니다 일반적인 사용 사례 비즈니스 로직 데이터 검증 트리거 (예 beforesave , aftersave ) 보안 집행 통합 서드파티 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 }; }); 다음과 같이 배포합니다 https //www back4app com/docs/local development/parse cli \# for linux/mac curl https //raw\ githubusercontent com/back4app/parse cli/back4app/installer sh | sudo /bin/bash \# for windows, download the exe from the releases page 그런 다음 구성하고 배포하십시오 b4a configure accountkey b4a deploy 함수 호출하기 parse sdk를 통해 android (kotlin) 코드에서 호출 import com parse parsecloud import com parse functioncallback import com parse parseexception fun calltextlengthfunction(sometext string) { val params = hashmapof("text" to sometext) parsecloud callfunctioninbackground\<map\<string, any>>("calculatetextlength", params) { result, e > if (e == null) { val length = result\["length"] as int println("text length $length") } else { println("error calling cloud code ${e localizedmessage}") } } } 유사한 방식으로 rest 또는 graphql을 통해서도 호출할 수 있습니다 5단계 – 인증 구성 back4app에서 사용자 인증 back4app은 parse user 클래스를 사용하여 인증을 처리합니다 parse는 안전한 비밀번호 해싱, 세션 토큰 등을 기본적으로 처리합니다 사용자 인증 설정하기 kotlin에서 새 사용자를 생성할 수 있습니다 import com parse parseuser fun signupuser(username string, password string, email string) { val user = parseuser() user username = username user setpassword(password) user email = email user signupinbackground { e > if (e == null) { println("user signed up successfully!") } else { println("error signing up user ${e localizedmessage}") } } } 기존 사용자 로그인 fun loginuser(username string, password string) { parseuser logininbackground(username, password) { user, e > if (user != null && e == null) { println("user logged in ${user username}") } else { println("error logging in ${e? localizedmessage}") } } } google, facebook 및 apple과 같은 소셜 로그인을 통합할 수도 있습니다 자세한 내용은 소셜 로그인 문서 https //www back4app com/docs/platform/sign in with apple 를 확인하십시오 세션 관리 parse는 세션 토큰을 자동으로 관리합니다 현재 사용자에 접근할 수 있습니다 val currentuser = parseuser getcurrentuser() if (currentuser != null) { println("currently logged in user ${currentuser username}") } else { println("no user is logged in") } 그리고 로그아웃 parseuser logout() 6단계 – 파일 저장 처리 파일 업로드 및 검색 parse는 파일 업로드를 처리하기 위한 parsefile 클래스를 포함합니다 import com parse parsefile import com parse parseexception fun uploadimage(file java io file) { val bytes = file readbytes() val parsefile = parsefile(file name, bytes) parsefile saveinbackground { e parseexception? > if (e == null) { println("file saved ${parsefile url}") } else { println("error uploading file ${e localizedmessage}") } } } parse는 파일 업로드를 처리하기 위한 parsefile 클래스를 포함합니다 파일 보안 acl 및 clp를 조정하거나 parse server 구성에서 파일별 설정을 사용하여 파일을 업로드하거나 다운로드할 수 있는 사람을 제어할 수 있습니다 7단계 – 이메일 확인 및 비밀번호 재설정 이메일 확인 활성화 back4app 대시보드 설정에서 보내는 주소, 이메일 템플릿 또는 원하는 경우 사용자 지정 도메인을 구성하십시오 사용하십시오 parseuser requestpasswordresetinbackground(email, callback) 를 사용하여 앱에서 비밀번호 재설정 흐름을 트리거합니다 8단계 – 클라우드 작업으로 작업 예약 클라우드 작업 을 사용하면 데이터 정리 또는 주기적인 알림 전송과 같은 일상적인 작업을 자동화할 수 있습니다 parse cloud job('cleanupoldtodos', async (request) => { const todo = parse object extend('todo') const query = new parse query(todo) // e g , remove todos older than 30 days const cutoff = new date(date now() 30 24 60 60 1000) query lessthan('createdat', cutoff) const oldtodos = await query find({ usemasterkey true }) await parse object destroyall(oldtodos, { usemasterkey true }) return `deleted ${oldtodos length} old todos ` }) 대시보드의 서버 설정 > 백그라운드 작업 에서 작업을 예약하십시오 9단계 – 웹훅 통합하기 웹훅 은 특정 이벤트가 발생할 때마다 back4app 앱이 외부 서비스에 http 요청을 보낼 수 있도록 합니다 웹훅 추가하기 는 더보기 > 웹훅 에서 back4app 대시보드에 있습니다 트리거 구성하기 (예 새 객체 저장 후) url 엔드포인트 추가하기 (슬랙 또는 스트라이프 웹훅과 같은) 10단계 – back4app 관리 패널 탐색하기 back4app 관리 앱은 비기술 사용자가 데이터를 관리할 수 있는 친숙한 웹 기반 인터페이스입니다 활성화하기 는 앱 대시보드 > 더보기 > 관리 앱 에서 가능합니다 첫 번째 관리자 사용자 만들기 관리 패널에 접근할 서브도메인 선택하기 로그인하기 하여 데이터베이스의 레코드를 쉽게 보고, 편집하거나 삭제할 수 있습니다 결론 이 포괄적인 튜토리얼을 따라함으로써, 당신은 안전한 백엔드 를 back4app에서 android 앱을 위해 만들었습니다 데이터베이스를 구성했습니다 클래스 스키마, 데이터 유형 및 관계를 사용하여 실시간 쿼리를 통합했습니다 (live queries) 즉각적인 데이터 업데이트를 위해 보안 조치를 적용했습니다 acl 및 clp를 사용하여 데이터 접근을 보호하고 관리합니다 cloud code를 구현했습니다 서버 측에서 사용자 정의 비즈니스 로직을 실행하는 기능 사용자 인증을 설정했습니다 이메일 확인 및 비밀번호 재설정을 지원합니다 파일 업로드를 관리했습니다 선택적 파일 보안 제어와 함께 cloud jobs를 예약했습니다 자동화된 백그라운드 작업을 위해 webhooks를 사용했습니다 외부 서비스와 통합하기 위해 back4app 관리 패널을 탐색했습니다 데이터 관리를 위해 견고한 android (kotlin) 프론트 엔드와 강력한 back4app 백엔드를 갖춘 당신은 이제 기능이 풍부하고 확장 가능하며 안전한 애플리케이션을 개발할 준비가 되어 있습니다 더 고급 기능을 탐색하고 비즈니스 로직을 통합하며 back4app의 힘을 활용하여 서버 및 데이터베이스 관리에서 수많은 시간을 절약하세요 행복한 코딩 되세요! 다음 단계 생산 준비가 완료된 android 앱을 구축하세요 이 백엔드를 확장하여 더 복잡한 데이터 모델, 캐싱 전략 및 성능 최적화를 처리합니다 고급 기능 통합 전문 인증 흐름, 역할 기반 접근 제어 또는 외부 api(결제 게이트웨이와 같은)를 포함합니다 back4app의 공식 문서 확인 고급 보안, 성능 조정 및 로그 분석에 대한 심층적인 내용을 위해 다른 튜토리얼 탐색 실시간 채팅 애플리케이션, iot 대시보드 또는 위치 기반 서비스에 대해 여기서 배운 기술을 서드파티 api와 결합하여 복잡한 실제 애플리케이션을 만들 수 있습니다