Quickstarters
Feature Overview
Flask용 백엔드 구축 방법?
40 분
소개 이 튜토리얼에서는 flask의 백엔드를 구축하는 방법 을 배웁니다 flask는 http 요청을 쉽게 처리하는 경량 백엔드 프레임워크 로, 개발 중에는 디버그 모드 에서 효율적으로 작동합니다 우리는 데이터베이스 관리, 클라우드 코드 함수, rest 및 graphql api, 사용자 인증, 실시간 쿼리(라이브 쿼리)와 같은 필수 back4app 기능을 통합하여 flask 애플리케이션 을 위한 안전하고 확장 가능하며 강력한 백엔드를 만드는 방법을 안내할 것입니다 또한 back4app의 빠른 설정과 직관적인 환경이 서버와 데이터베이스를 수동으로 구성하는 것에 비해 시간과 노력을 크게 줄일 수 있는 방법을 확인할 수 있습니다 우리는 python 코드를 사용하여 flask를 back4app parse 서버에 연결할 것입니다 이 과정에서 고급 보안 기능, 클라우드 작업으로 작업 예약, 외부 통합을 위한 웹훅 설정 등 주요 기능에 대한 실습 경험을 쌓게 됩니다 이 튜토리얼이 끝나면, 이 기본 설정을 프로덕션 준비 애플리케이션으로 향상시키거나 필요에 따라 사용자 정의 논리 및 타사 api를 쉽게 통합할 수 있는 준비가 잘 되어 있을 것입니다 전제 조건 이 튜토리얼을 완료하려면 다음이 필요합니다 back4app 계정과 새로운 back4app 프로젝트 back4app 시작하기 https //www back4app com/docs/get started/new parse app 계정이 없으면 무료로 만들 수 있습니다 위의 가이드를 따라 프로젝트를 준비하세요 기본 flask 개발 환경 flask는 pip install flask 를 통해 설치할 수 있습니다 머신에 python 3 7+가 설치되어 있는지 확인하세요 pip install parse 이 python 패키지는 flask 앱이 back4app의 parse server와 상호작용할 수 있게 해줍니다 python 및 flask 개념에 대한 이해 flask 공식 문서 https //flask palletsprojects com/en/2 2 x/ flask가 처음이라면 시작하기 전에 공식 문서나 초보자 튜토리얼을 검토하세요 시작하기 전에 이러한 모든 전제 조건이 준비되어 있는지 확인하세요 back4app 프로젝트가 설정되고 로컬 flask 환경이 준비되면 더 쉽게 따라갈 수 있습니다 1단계 – back4app에서 새 프로젝트 만들기 및 연결하기 새 프로젝트 만들기 back4app에서 flask 백엔드를 구축하는 첫 번째 단계는 새 프로젝트를 만드는 것입니다 아직 만들지 않았다면 다음 단계를 따르세요 back4app 계정에 로그인하기 back4app 대시보드에서 “새 앱” 버튼 클릭하기 앱 이름 지정하기 (예 “flask backend tutorial”) 프로젝트가 생성되면 back4app 대시보드에 나열된 것을 볼 수 있습니다 이 프로젝트는 모든 백엔드 구성의 기초입니다 flask에 parse sdk 연결하기 back4app은 데이터 관리, 실시간 기능 제공, 사용자 인증 처리 등을 위해 parse 플랫폼에 의존합니다 flask 애플리케이션을 back4app에 연결하려면 parse python 패키지를 설치하고 back4app 대시보드의 자격 증명으로 초기화해야 합니다 parse 키 가져오기 back4app 대시보드에서 앱의 “앱 설정” 또는 “보안 및 키” 섹션으로 이동하여 애플리케이션 id 와 클라이언트 키 (필요한 경우 rest api 키 도 포함됨)을 찾으세요 또한 parse 서버 url (종종 https //parseapi back4app com ) 형식으로 제공됩니다 flask 환경에 parse python sdk 설치하기 를 위해 다음 명령어를 실행하세요 pip install parse flask 애플리케이션에서 parse 초기화하기 파일을 생성하세요 (예 parse config py ) app 이라는 디렉토리 또는 백엔드 모듈을 저장하는 위치에 parse config py import parse \# replace the placeholders with your back4app credentials parse application id = "your application id" parse client key = "your client key" parse server url = "https //parseapi back4app com" 그런 다음, 주요 flask 앱 파일(예 app py )에서 import flask app flask 모듈과 함께 parse 구성을 가져올 수 있습니다 from flask import flask, request, jsonify import parse config # this ensures parse is already set up app = flask( name ) @app route('/') def index() return "hello, flask + back4app!" if name == ' main ' app run(debug=true) # the debug mode helps in local development server 이 단계를 완료함으로써 flask 프론트엔드 경로와 back4app 백엔드 간의 안전한 연결을 설정했습니다 모든 요청 및 데이터 거래는 parse python 코드를 통해 안전하게 라우팅되어 수동 rest 또는 graphql 호출의 복잡성을 줄입니다(필요할 때 여전히 사용할 수 있습니다) 2단계 – 데이터베이스 설정 데이터 모델 만들기 시작하기 전에 데이터베이스 설정에 대해 이야기해 보겠습니다 back4app 대시보드에서 데이터 스키마를 설계하거나 parse가 즉석에서 생성하도록 할 수 있습니다 예를 들어, title 및 iscompleted 과 같은 필드를 가진 “todo”라는 클래스를 만들 수 있습니다 back4app 대시보드에서 “데이터베이스” 섹션으로 이동합니다 새 클래스를 만듭니다 (예 “todo”) 및 제목(string) 및 iscompleted(boolean)과 같은 관련 열을 추가합니다 back4app은 string , number , boolean , object , date , file , pointer , array , relation , geopoint , 및 polygon 각 필드에 적합한 유형을 선택할 수 있습니다 ai 에이전트를 사용하여 데이터 모델 만들기 자동화된 접근 방식을 선호하는 경우 back4app의 ai 에이전트를 사용할 수도 있습니다 앱 대시보드에서 ai 에이전트 를 엽니다 데이터 모델을 간단한 언어로 설명합니다 (예 “back4app에서 제목 및 iscompleted 필드를 가진 todo 클래스를 만듭니다 ”) ai 에이전트가 스키마를 생성하도록 합니다 sdk를 사용하여 데이터 읽기 및 쓰기 flask에서 parse 를 가져와서 parse config py 초기화하여 데이터를 생성하고 가져올 수 있습니다 from flask import flask, request, jsonify import parse import parse config app = flask( name ) @app route('/create todo', methods=\['post']) def create todo() data = request get json() # import json to parse the payload title = data get('title') is completed = data get('iscompleted', false) todo = parse object factory('todo') todo item = todo() todo item title = title todo item iscompleted = is completed try saved todo = todo item save() return jsonify({"success" true, "objectid" saved todo objectid}), 200 except exception as e return jsonify({"error" str(e)}), 400 @app route('/fetch todos', methods=\['get']) def fetch todos() todo = parse object factory('todo') query = todo query try todos = query find() \# convert to json compatible response results = \[{"objectid" t objectid, "title" t title, "iscompleted" t iscompleted} for t in todos] return jsonify(results), 200 except exception as e return jsonify({"error" str(e)}), 400 if name == ' main ' app run(debug=true) 이 flask 앱 파일 http 요청을 처리합니다 todo 항목을 생성하고 읽기 위해 back4app 데이터베이스에서 rest api를 사용한 데이터 읽기 및 쓰기 직접 rest 호출을 선호하는 경우 curl 로 테스트할 수 있습니다 명령줄에서 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 api를 사용한 데이터 읽기 및 쓰기 마찬가지로, back4app은 graphql 엔드포인트를 제공합니다 예를 들어 mutation { createtodo(input { fields { title "clean the house" iscompleted false } }) { todo { objectid title iscompleted } } } 라이브 쿼리 작업하기 (선택 사항) 필요한 경우 실시간 업데이트 , back4app은 라이브 쿼리 flask 시나리오에서는 일반적으로 back4app의 라이브 쿼리 서버에 웹소켓 연결을 유지할 수 있는 별도의 클라이언트 측 또는 서버 측 구독 라이브러리를 사용합니다 라이브 쿼리 활성화 를 위해 back4app 대시보드에서 앱의 서버 설정 을 선택하세요 parse 라이브 쿼리 클라이언트 사용 를 통해 wss\ //your subdomain here b4a io 에 연결하고 생성/업데이트/삭제 이벤트를 수신합니다 3단계 – acl 및 clp로 보안 적용하기 간략한 개요 back4app은 액세스 제어 목록 (acls) 및 클래스 수준 권한 (clps) 을 제공하여 데이터를 잠급니다 acl은 개별 객체에 적용되고, clp는 전체 클래스에 적용됩니다 이를 통해 사용자, 역할 또는 공개에 따라 읽기/쓰기 작업을 제한하거나 허용할 수 있습니다 클래스 수준 권한 설정하기 back4app 대시보드로 이동 , 앱을 선택하고 데이터베이스 섹션을 엽니다 클래스 선택 (예 “todo”) 클래스 수준 권한 탭을 엽니다 “인증 필요” 또는 “접근 불가”와 같은 기본값을 구성합니다 코드에서 acl 구성하기 python 코드에서 acl을 적용할 수 있습니다 @app route('/create private todo', methods=\['post']) def create private todo() data = request get json() user id = data get('userid') title = data get('title') \# assume you have a pointer to the user or a way to get user from id parseuser = parse user user query = parseuser query user obj = user query get(user id) todo = parse object factory('todo') todo item = todo() todo item title = title acl = parse acl() acl setreadaccess(user obj, true) acl setwriteaccess(user obj, true) acl setpublicreadaccess(false) acl setpublicwriteaccess(false) todo item acl = acl saved todo = todo item save() return jsonify({"success" true, "objectid" saved todo objectid}), 200 4단계 – 클라우드 코드 함수 작성하기 클라우드 코드의 장점 클라우드 코드는 python 코드 (또는 다른 시나리오에서 javascript) 서버 측에서 실행하기에 완벽하여, 자체 인프라를 호스팅할 필요가 없습니다 데이터 유효성 검사, 복잡한 계산 수행 또는 parse 서버에서 외부 서비스와 직접 통합하는 작업을 실행할 수 있습니다 예제 함수 back4app의 기본 cloud code 환경이 node js를 사용하기 때문에 cloud code를 javascript로 작성합니다 그러나 flask 앱에서 이러한 서버 측 스크립트를 여전히 트리거할 수 있습니다 예를 들어, node js cloud function은 다음과 같을 수 있습니다 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를 배포합니다 \# step 1 install the cli curl https //raw\ githubusercontent com/back4app/parse cli/back4app/installer sh | sudo /bin/bash \# step 2 configure your account key b4a configure accountkey \# step 3 deploy your code b4a deploy 또는 back4app 대시보드를 통해 js 코드를 cloud code > functions 에 붙여넣고 “배포”를 클릭하여 배포할 수 있습니다 함수 호출 flask에서는 rest를 사용하여 해당 클라우드 함수를 호출할 수 있습니다 import requests @app route('/text length', methods=\['post']) def get text length() data = request get json() text = data get('text') url = "https //parseapi back4app com/functions/calculatetextlength" headers = { "x parse application id" "your app id", "x parse rest api key" "your rest api key", "content type" "application/json" } payload = {"text" text} response = requests post(url, json=payload, headers=headers) return jsonify(response json()), response status code 5단계 – 인증 구성 back4app 대시보드에서 사용자 인증을 활성화하거나 설정합니다 back4app은 기본적으로 user 클래스를 활용합니다 parse는 비밀번호 해싱, 세션 토큰 및 안전한 저장을 처리합니다 이러한 기능은 app settings 에서 관리할 수 있습니다 코드 샘플 @app route('/signup', methods=\['post']) def sign up user() data = request get json() username = data get('username') password = data get('password') email = data get('email') user = parse user() user username = username user password = password user email = email try user sign up() return jsonify({"success" true}), 200 except exception as e return jsonify({"error" str(e)}), 400 @app route('/login', methods=\['post']) def log in user() data = request get json() username = data get('username') password = data get('password') try parse user login(username, password) return jsonify({"success" true}), 200 except exception as e return jsonify({"error" str(e)}), 400 소셜 로그인 back4app과 parse는 google, apple 또는 facebook과 같은 소셜 제공업체와 통합할 수 있습니다 설정 세부정보는 다르므로 공식 문서를 참조하십시오 parse 소셜 로그인 문서 https //www back4app com/docs/platform/sign in with apple 6단계 – 파일 저장 처리 파일 저장 설정 flask에서 parse 데이터베이스에 파일을 업로드하려면 parse file() 객체를 node 기반 환경에서 생성하거나 python에서 직접 rest 호출을 사용할 수 있습니다 이러한 파일에 대한 참조를 클래스에 저장하면 쉽게 검색할 수 있습니다 @app route('/upload file', methods=\['post']) def upload file() file = request files\['file'] # from an html form or an api call file name = file filename url = "https //parseapi back4app com/files/" + file name headers = { "x parse application id" "your app id", "x parse rest api key" "your rest api key", "content type" file content type } response = requests post(url, data=file read(), headers=headers) return jsonify(response json()), response status code 예시 파일을 업로드한 후, 데이터베이스에 저장할 수 있는 파일 url을 받게 됩니다 그런 다음 필요에 따라 html 템플릿 에서 해당 파일을 렌더링하거나 참조할 수 있습니다 7단계 – 이메일 인증 및 비밀번호 재설정 개요 이메일 인증은 유효한 이메일 주소를 보장하고, 비밀번호 재설정은 사용자가 안전하게 계정에 접근할 수 있도록 돕습니다 back4app 대시보드 구성 back4app 대시보드에서 이메일 설정 으로 이동하십시오 이메일 인증 을 활성화하고 이메일 템플릿 을 구성하십시오 비밀번호 재설정 을 활성화하여 사용자 이메일로 비밀번호 복구 링크를 전송하십시오 코드/구현 활성화되면 이메일로 가입하는 모든 신규 사용자는 인증 링크를 받게 됩니다 비밀번호 재설정의 경우, rest를 통해 또는 flask 경로에서 parse의 내장 메서드를 호출할 수 있습니다 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); 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 앱이 외부 서비스에 데이터를 전송할 수 있게 해줍니다 이는 결제 게이트웨이, 슬랙, 분석 또는 기타 제3자 서비스와의 통합에 유용합니다 구성 웹훅 구성으로 이동 하여 back4app 대시보드 > 더보기 > 웹훅 새 웹훅 추가 엔드포인트 설정 (예 https //your external service com/webhook endpoint https //your external service com/webhook endpoint ) 트리거 선택 웹훅이 작동할 트리거 예시 “todo”에 새 레코드가 생성될 때마다 슬랙 채널에 알림을 보내고 싶다면, 슬랙 웹훅 url을 설정하세요 그런 다음 새 todo가 저장될 때마다 슬랙은 해당 세부 정보를 포함한 post 요청을 받게 됩니다 10단계 – back4app 관리 패널 탐색 back4app 관리 앱 은 팀의 비기술적 구성원들을 위한 사용자 친화적인 인터페이스를 제공합니다 이는 crud 작업 및 기업 수준의 작업을 위한 모델 중심 인터페이스입니다 어디서 찾을 수 있나요 앱 대시보드로 이동하세요 선택하세요 더보기 > 관리자 앱 을 활성화하세요 관리자 사용자를 생성하고 패널을 호스팅할 하위 도메인을 선택하세요 활성화되면, 관리자 자격 증명으로 로그인하여 데이터를 더 편리하게 관리할 수 있습니다—python 코드에서 사용자 정의 엔드포인트나 쿼리를 작성하지 않고도 결론 이 포괄적인 튜토리얼을 따라함으로써, 당신은 안전한 백엔드 를 back4app에서 flask 앱을 위해 생성했습니다 데이터베이스를 구성했습니다 클래스 스키마, 데이터 유형 및 관계를 사용하여 실시간 쿼리를 통합했습니다 (라이브 쿼리)로 즉각적인 데이터 업데이트를 위해 보안 조치를 적용했습니다 acl 및 clp를 사용하여 데이터 접근을 보호하고 관리하기 위해 클라우드 코드 기능을 구현하여 서버 측에서 사용자 정의 비즈니스 로직을 실행했습니다 사용자 인증을 설정했습니다 이메일 확인 및 비밀번호 재설정을 지원합니다 파일 업로드 및 검색을 관리했습니다 선택적 파일 보안 제어와 함께 클라우드 작업을 예약했습니다 자동화된 백그라운드 작업을 위해 웹훅을 사용했습니다 외부 서비스와 통합하기 위해 back4app 관리 패널을 탐색했습니다 데이터 관리를 위해 튼튼한 flask 백엔드 프레임워크 가 있어 렌더 템플릿 파일을 반환할 수 있으며(원하는 경우) 강력한 back4app 설정으로, 이제 기능이 풍부하고 확장 가능하며 안전한 애플리케이션을 개발할 준비가 되었습니다 당신은 flask run 명령을 실행하여 개발 서버 를 시작하고 코딩을 계속할 수 있습니다 명령줄 작업은 메서드 정의 후 json 페이로드를 수락하는 경로로 간단해집니다 다음 단계 생산 준비가 완료된 flask 앱 구축 이 백엔드를 확장하여 더 복잡한 데이터 모델, 캐싱 전략 및 성능 최적화를 처리합니다 고급 기능 통합 전문 인증 흐름, 역할 기반 접근 제어 또는 외부 api(결제 게이트웨이와 같은)를 포함합니다 back4app의 공식 문서 확인 고급 보안, 성능 조정 및 로그 분석에 대한 심층적인 내용을 위해 다른 튜토리얼 탐색 실시간 채팅 애플리케이션, iot 대시보드 또는 위치 기반 서비스에 대해 여기서 배운 기술을 서드파티 api와 결합하여 복잡한 실제 애플리케이션을 만들 수 있습니다