Quickstarters
Feature Overview
How to Build a Backend for Elixir?
39 분
소개 이 튜토리얼에서는 elixir의 백엔드를 구축하는 방법 을 배우게 됩니다 우리는 데이터베이스 관리, 클라우드 코드 함수, rest 및 graphql api, 사용자 인증, 실시간 쿼리(라이브 쿼리)와 같은 필수 back4app 기능을 통합하여 안전하고 확장 가능하며 강력한 백엔드를 만드는 방법을 안내할 것입니다 erlang vm(beam)에서 실행되고 otp(erlang otp)를 활용하는 elixir는 결함 허용 및 동시성 환경으로 잘 알려져 있으며, 이는 back4app과 잘 결합되어 현대적이고 고성능의 인프라를 형성합니다 back4app의 빠른 설정과 직관적인 환경이 서버와 데이터베이스를 수동으로 구성하는 것에 비해 시간과 노력을 크게 줄일 수 있는 방법을 보게 될 것입니다 여기에는 패턴 매칭을 활용하고 elixir의 선택한 웹 프레임워크에 연결하는 것이 포함됩니다 이 튜토리얼이 끝나면, 프로덕션 준비가 완료된 애플리케이션으로 확장하거나 사용자 정의 논리 및 타사 api로 향상시킬 수 있는 견고한 기반을 갖게 될 것입니다 전제 조건 이 튜토리얼을 완료하려면 다음이 필요합니다 back4app 계정과 새로운 back4app 프로젝트 back4app 시작하기 https //www back4app com/docs/get started/new parse app 계정이 없으면 무료로 만들 수 있습니다 위의 가이드를 따라 프로젝트를 준비하세요 기본 elixir 개발 환경 머신에 elixir가 설치되어 있는지 확인하세요 phoenix와 같은 웹 프레임워크를 사용할 계획이라면 phoenix 설치 가이드 https //hexdocs pm/phoenix/installation html 를 참조하세요 elixir 개념에 대한 이해 elixir 공식 문서 https //elixir lang org/docs html elixir가 처음이라면 시작하기 전에 이러한 자료나 초보자 튜토리얼을 검토하세요 시작하기 전에 모든 필수 조건이 준비되어 있는지 확인하세요 back4app 프로젝트가 설정되고 로컬 elixir 환경이 준비되어 있으면 더 원활하게 따라갈 수 있습니다 1단계 – back4app에서 새 프로젝트 만들기 및 연결 새 프로젝트 만들기 back4app에서 elixir용 백엔드를 구축하는 방법 의 첫 번째 단계는 새 프로젝트를 만드는 것입니다 아직 만들지 않았다면 다음 단계를 따르세요 back4app 계정에 로그인하세요 back4app 대시보드에서 “새 앱” 버튼을 클릭하세요 앱에 이름을 지정하세요 (예 “elixir backend tutorial”) 프로젝트가 생성되면 back4app 대시보드에 나열된 것을 볼 수 있습니다 이 프로젝트는 이 튜토리얼에서 논의된 모든 백엔드 구성의 기초가 될 것입니다 rest 또는 graphql을 통한 연결 back4app은 parse 플랫폼을 기초로 사용합니다 elixir의 경우 현재 공식 parse sdk가 없습니다 대신 rest 또는 graphql api를 사용하여 back4app에 쉽게 연결할 수 있습니다 elixir 프로젝트에서 다음을 수행합니다 다음에서 애플리케이션 id 와 rest 또는 graphql 키 를 가져옵니다 back4app 대시보드의 “앱 설정” 또는 “보안 및 키” 섹션 다음과 같은 elixir 라이브러리를 사용하여 http 요청을 구성합니다 httpoison https //hex pm/packages/httpoison 또는 tesla https //hex pm/packages/tesla 예를 들어, 자격 증명을 구성 파일에 저장하려면 ( config/dev exs 또는 유사한 파일) config \ my app, \ b4a, app id "your application id", rest key "your rest api key", server url "https //parseapi back4app com" 그런 다음 코드에서 이러한 자격 증명을 참조하여 rest 호출을 수행할 수 있습니다 이 가이드 전반에 걸쳐 back4app 데이터베이스, 사용자 시스템 및 기타 기능과 상호 작용하는 방법을 표준 http 또는 graphql 요청을 사용하여 보여드리겠습니다 2단계 – 데이터베이스 설정 데이터 모델 만들기 back4app에서는 데이터가 클래스 에 저장됩니다 back4app 대시보드에서 새 클래스를 만들 수 있습니다 “데이터베이스” 섹션으로 이동 하여 back4app 대시보드에서 새 클래스 만들기 (예 “todo”) 및 제목(string)과 완료 여부(boolean)와 같은 관련 열을 추가합니다 ai 에이전트를 사용한 데이터 모델 만들기 back4app는 데이터 모델을 설명하고 만드는 데 도움을 주기 위해 ai 에이전트를 제공합니다 ai 에이전트 열기 앱 대시보드 또는 메뉴에서 데이터 모델 설명하기 일반 언어로 (예 “새 todo 앱을 완전한 클래스 스키마로 만들어 주세요 ”) ai 에이전트가 스키마를 자동으로 생성하게 하세요 sdk를 사용한 데이터 읽기 및 쓰기 (해당되는 경우) elixir에는 공식 parse sdk가 없기 때문에, 직접 sdk 사용은 건너뛰겠습니다 대신, 아래에서 rest , graphql , 및 live queries 접근 방식을 보여드리겠습니다 rest api를 사용한 데이터 읽기 및 쓰기 http 클라이언트인 httpoison 을(를) mix exs 에 설치하세요 defp deps do \[ {\ httpoison, " > 1 8"} ] end 그런 다음 mix deps get 을(를) 실행하세요 elixir 애플리케이션에서 todo 객체를 생성(저장)하려면 defmodule myapp todo do @moduledoc false require logger alias myapp config def create todo(title, is completed) do url = config server url() <> "/classes/todo" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()}, {"content type", "application/json"} ] body = jason encode!(%{"title" => title, "iscompleted" => is completed}) case httpoison post(url, body, headers) do {\ ok, %httpoison response{status code 201, body resp body}} > logger info("todo created #{resp body}") {\ ok, resp body} {\ ok, %httpoison response{status code status, body error body}} > logger error("error creating todo (#{status}) #{error body}") {\ error, error body} {\ error, error} > logger error("http error #{inspect(error)}") {\ error, error} end end end 그리고 todo 객체를 쿼리하려면 def fetch todos() do url = config server url() <> "/classes/todo" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()} ] httpoison get(url, headers) end graphql api를 사용한 데이터 읽기 및 쓰기 graphql을 통해서도 상호작용할 수 있습니다 예를 들어, todo를 생성하는 경우 mutation { createtodo(input { fields { title "clean the house" iscompleted false } }) { todo { objectid title iscompleted } } } elixir에서는 http 클라이언트를 사용하여 이것을 보낼 수도 있습니다 graph query = """ mutation { createtodo(input { fields { title "new from graphql", iscompleted false } }) { todo { objectid title } } } """ url = config server url() <> "/graphql" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()}, {"content type", "application/json"} ] httpoison post(url, jason encode!(%{"query" => graph query}), headers) 라이브 쿼리 작업하기 (선택 사항) 실시간 업데이트를 위해 back4app은 라이브 쿼리 앱의 서버 설정 에서 라이브 쿼리를 활성화할 수 있습니다 현재 네이티브 elixir parse 클라이언트 라이브러리가 없기 때문에, 일반적으로 제공된 wss\ //your subdomain here b4a io 엔드포인트에 phoenix 채널이나 사용자 정의 websocket 클라이언트를 통해 연결합니다 이는 구독, 메시지 등을 처리하기 위해 사용자 정의 코딩이 필요할 수 있습니다 3단계 – acl 및 clp로 보안 적용하기 간략한 개요 back4app은 액세스 제어 목록 (acl) 및 클래스 수준 권한 (clp) 을 제공하여 데이터 접근을 보호하고 관리합니다 acl은 개별 객체에 적용되고, clp는 전체 클래스에 적용됩니다 단계별 클래스 수준 권한 (clps) back4app 대시보드에서 데이터베이스 , 클래스를 선택하고 (예 “todo”) 클래스 수준 권한 탭을 엽니다 설정을 조정합니다 (예 “인증 필요” 또는 “공용 접근 불가”) acl 구성 객체를 생성하거나 업데이트할 때, rest 또는 graphql 요청에 acl 데이터를 보낼 수 있습니다 예를 들어, 세부적인 객체별 제어가 필요하면 json에서 acl 필드를 지정합니다 자세한 정보는 앱 보안 가이드라인 https //www back4app com/docs/security/parse security 을 방문하세요 4단계 – 클라우드 코드 함수 작성 클라우드 코드의 필요성 클라우드 코드는 자체 서버를 관리하지 않고도 서버 측 로직을 실행할 수 있게 해줍니다 elixir를 사용할 때는 일반적으로 otp에 의존하여 동시성을 처리하지만, 여기서는 back4app에서 javascript 클라우드 코드를 간단히 생성하여 검증, 트리거 또는 사용자 정의 비즈니스 로직을 처리할 수 있습니다 이 코드는 parse server에서 실행되므로, elixir 코드를 클라이언트 또는 마이크로서비스 작업에 집중할 수 있으며, 무거운 작업은 클라우드 코드에서 처리됩니다 예제 함수 당신의 main js 에서 back4app 대시보드 또는 cli를 사용하여 // 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 https //www back4app com/docs/local development/parse cli 또는 대시보드의 cloud code > functions 아래에 붙여넣고 배포 를 클릭하십시오 클라우드 코드 호출 elixir에서 다음과 같이 사용할 수 있습니다 defmodule myapp cloudfunctions do alias myapp config def calculate text length(text) do url = config server url() <> "/functions/calculatetextlength" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()}, {"content type", "application/json"} ] body = jason encode!(%{text text}) httpoison post(url, body, headers) end end 5단계 – 인증 구성 인증 활성화 또는 설정 back4app은 인증을 위해 parse user 클래스를 사용합니다 회원가입, 로그인 및 비밀번호 재설정을 쉽게 관리할 수 있습니다 elixir에서는 일반적으로 rest 호출을 사용합니다 defmodule myapp auth do alias myapp config def sign up user(username, password, email) do url = config server url() <> "/users" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()}, {"content type", "application/json"} ] body = jason encode!(%{ username username, password password, email email }) httpoison post(url, body, headers) end def log in user(username, password) do url = config server url() <> "/login?username=#{username}\&password=#{password}" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()} ] httpoison get(url, headers) end end 소셜 로그인 back4app은 google, apple, facebook 등과의 통합을 지원합니다 대부분의 경우, 사용자를 oauth 흐름으로 안내한 다음, 이러한 제공자가 반환한 토큰을 사용하여 parse 로그인을 완료합니다 자세한 내용은 소셜 로그인 문서 https //www back4app com/docs/platform/sign in with apple 를 참조하세요 6단계 – 파일 저장 처리 파일 저장소 설정 back4app은 파일을 안전하게 저장합니다 elixir에서 rest를 통해 파일을 업로드할 수 있습니다 defmodule myapp filestorage do alias myapp config require logger def upload file(file path) do file name = path basename(file path) url = config server url() <> "/files/#{file name}" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()}, {"content type", "application/octet stream"} ] body = file read!(file path) case httpoison post(url, body, headers) do {\ ok, %httpoison response{status code 201, body resp body}} > logger info("file uploaded #{resp body}") {\ ok, resp body} error > logger error("error uploading file #{inspect(error)}") error end end end 파일 url이 포함된 json 응답을 받게 되며, 이를 클래스(예 사진 )에 저장할 수 있습니다 보안 고려사항 파일 업로드를 허용할 사용자를 fileupload 설정에서 구성할 수 있으며, 원할 경우 인증된 사용자로 업로드를 제한할 수 있습니다 7단계 – 이메일 인증 및 비밀번호 재설정 개요 이메일 인증은 사용자가 가입 시 사용한 이메일 주소를 소유하고 있음을 보장합니다 비밀번호 재설정은 사용자가 안전하게 계정을 복구할 수 있도록 합니다 두 기능 모두 back4app에 내장되어 있습니다 back4app 대시보드 구성 이메일 인증 활성화 귀하의 앱의 “앱 설정” 또는 “인증”에서 “ 보낸 사람 주소 ” 및 이메일 템플릿을 구성합니다 비밀번호 재설정 활성화 사용자가 이메일로 전송된 링크를 통해 재설정할 수 있도록 합니다 코드/구현 대시보드에서 활성화되면 비밀번호 재설정을 트리거할 수 있습니다 defmodule myapp auth do def request password reset(email) do url = config server url() <> "/requestpasswordreset" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()}, {"content type", "application/json"} ] body = jason encode!(%{email email}) httpoison post(url, body, headers) end end 8단계 – 클라우드 작업으로 작업 예약하기 클라우드 작업이란 클라우드 작업을 사용하면 오래된 데이터를 정리하거나 주기적인 이메일을 보내는 것과 같은 일상적인 작업을 자동화할 수 있습니다 이를 위해 cloud code 를 작성합니다 예시 // 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); 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 대시보드로 이동합니다 > 앱 설정 > 서버 설정 > 백그라운드 작업 작업을 일정 에 따라 매일 또는 선택한 빈도로 실행되도록 설정합니다 9단계 – 웹훅 통합 정의 웹후크를 사용하면 back4app 애플리케이션이 특정 이벤트가 발생할 때 외부 서비스(예 slack 채널 또는 stripe)에 http 요청을 보낼 수 있습니다 구성 웹후크 구성으로 이동 하여 back4app 대시보드 > 더보기 > 웹후크 엔드포인트 설정 (예 https //your service com/webhook endpoint ) 트리거 구성 예 “todo 클래스에 새 레코드 ” 예시 todo가 생성될 때마다 slack에 데이터를 보내고 싶다면, slack 수신 웹후크 url을 가리키는 새로운 웹후크를 추가할 수 있습니다 또한 aftersave 와 같은 트리거에서 사용자 정의 http 요청을 보내어 클라우드 코드에서 웹후크를 정의할 수 있습니다 10단계 – back4app 관리 패널 탐색 어디서 찾을 수 있나요 “ back4app admin app ”은 데이터를 관리하기 위한 사용자 친화적인 인터페이스입니다 다음 경로에서 활성화할 수 있습니다 앱 대시보드 > 더보기 > 관리 앱 기능 첫 번째 관리자 사용자 생성 , b4aadminuser 역할 및 추가 클래스를 설정합니다 서브도메인 할당 하여 관리 인터페이스에 접근합니다 로그인 하여 간단한 인터페이스에서 데이터를 보고 관리합니다 결론 이 튜토리얼을 따라 elixir로 back4app의 백엔드를 구축하면 다음과 같은 작업을 수행할 수 있습니다 안전한 백엔드 구조를 back4app 플랫폼에서 elixir를 사용하여 통합했습니다 데이터베이스를 설정했습니다 클래스, 데이터 유형 및 관계를 포함하여 rest/graphql을 사용했습니다 elixir에서 데이터를 상호작용하기 위해 보안을 적용했습니다 acl 및 clp를 사용하여 사용자 정의 논리를 추가했습니다 cloud code 기능을 사용하여 사용자 인증을 구성했습니다 이메일 확인 및 비밀번호 재설정을 통해 파일 저장 및 검색을 처리했습니다 자동화를 위한 백그라운드 작업을 예약했습니다 웹훅을 통해 외부 서비스를 통합했습니다 데이터 관리를 쉽게 하기 위해 back4app 관리 패널을 탐색했습니다 elixir의 동시성 모델(에를랑 vm 기반)과 otp, back4app의 확장 가능하고 유연한 서비스를 결합하면 매우 강력한 백엔드를 구축할 수 있습니다 더 많은 고급 기능을 탐색하고 비즈니스 논리를 통합하며 back4app이 무거운 작업을 처리하도록 하세요 다음 단계 생산 준비가 완료된 elixir 앱을 선호하는 elixir/phoenix 웹 프레임워크와 함께 구축하세요 고급 기능 통합하기 역할 기반 접근 제어 또는 제3자 api(결제 게이트웨이, 메시징 서비스)와 같은 back4app의 공식 문서 탐색하기 고급 보안, 로그, 성능 조정 등을 위해 다른 튜토리얼 확인하기 실시간 앱, iot 대시보드 또는 위치 기반 서비스에 대해 패턴 매칭과 otp 동시성을 활용하여 다양한 애플리케이션을 처리할 수 있습니다!