Quickstarters
Feature Overview
How to Build a Backend for Golang?
34 분
소개 이 튜토리얼에서는 back4app을 사용하여 golang의 완전한 백엔드를 구축하고 테스트하는 방법을 배웁니다 데이터베이스 관리, 보안 설정, 사용자 인증, 파일 저장소 및 클라우드 코드와 같은 필수 back4app 기능을 통합하여 go http 서버와 잘 작동하는 안전하고 유연하며 확장 가능한 백엔드를 만드는 방법을 안내합니다 우리는 전용 parse sdk 대신 back4app의 restful api를 사용하여 golang http 클라이언트에서 데이터베이스에 연결하는 방법에 중점을 두어 새로운 백엔드를 위한 유지 관리가 쉬운 핸들러 함수를 구축하는 방법을 설명할 것입니다 이 접근 방식이 처음부터 자신의 서버를 설정하는 것에 비해 개발 복잡성을 어떻게 줄이는지 알 수 있습니다 back4app의 실시간 쿼리, 파일 저장소 및 사용자 인증 시스템에 의존함으로써 백엔드 생성 프로세스를 가속화할 수 있습니다 마지막에는 안전한 golang 백엔드를 구축하고, 자동화된 작업을 예약하며, 외부 웹훅을 통합하는 방법을 알게 될 것입니다 이 기반을 생산 준비가 된 애플리케이션으로 확장하거나 필요에 따라 사용자 정의 논리를 추가할 준비가 잘 되어 있습니다 전제 조건 back4app 계정 무료로 가입하기 여기 https //www back4app com/ 새로운 back4app 프로젝트 back4app 시작하기 https //www back4app com/docs/get started/new parse app go (golang) 개발 환경 기계에 go가 설치되어 있는지 확인하세요 go 공식 문서 https //go dev/ 에서 설치 방법을 찾을 수 있습니다 go의 http 패키지 및 restful api에 대한 기본 지식 함수 핸들러를 작성하고, 오류 메시지를 구문 분석하고, 메서드 post 요청을 처리하고, http 로컬호스트 서버를 설정하는 방법에 대한 친숙함이 도움이 될 것입니다 진행하기 전에 이러한 전제 조건이 준비되어 있는지 확인하세요 이 설정은 back4app을 사용하여 golang의 백엔드를 구축하는 방법을 발견하는 동안 경험을 간소화할 것입니다 1단계 – back4app에서 새 프로젝트 만들기 및 연결하기 새 프로젝트가 필요한 이유? 새로운 back4app 프로젝트를 만드는 것이 첫 번째 단계입니다 여기에서 데이터를 저장하고, 파일 저장소를 구성하고, 클라우드 기능을 예약하고, 백그라운드 작업을 추가합니다 이 백엔드 프로젝트는 모든 후속 단계의 기초가 될 것입니다 back4app 계정에 로그인하세요 “새 앱” 클릭 back4app 대시보드에서 앱 이름 지정하기 (예 “golang backend tutorial”) 생성되면 대시보드에 나타납니다 이 애플리케이션은 이제 back4app 기반의 백엔드입니다 rest api를 통한 연결 back4app은 데이터를 생성, 업데이트 및 삭제하기 위한 restful api를 제공합니다 golang에서는 go의 표준 라이브러리에서 http 클라이언트를 사용하여 이러한 엔드포인트와 통신할 것입니다 “ 애플리케이션 id ”와 “ rest api 키 ”를 찾으려면 back4app 앱의 “ 설정 ” 또는 “ 보안 및 키 ” 섹션으로 가세요 각 요청 헤더에 이러한 자격 증명이 필요합니다 다음 단계에서 post, get 및 기타 http 요청을 사용하여 데이터베이스에 연결할 때 이를 설명하겠습니다 2단계 – 데이터베이스 설정 데이터 모델 만들기 back4app에 데이터를 저장하려면 클래스(테이블)와 열(필드)을 정의해야 합니다 예를 들어, todo 클래스를 만들고 싶다고 가정해 보겠습니다 back4app 대시보드에서 수동으로 만들 수 있습니다 앱 대시보드의 데이터베이스 섹션으로 이동합니다 “todo”라는 새 클래스를 만듭니다 title (string) 및 iscompleted (boolean)과 같은 열을 추가합니다 golang 애플리케이션에서 새 필드가 있는 객체를 전송하여 시스템이 열을 자동으로 생성하도록 할 수도 있습니다 ai 에이전트를 사용하여 데이터 모델 만들기 ai 에이전트 열기 앱 대시보드에서 원하는 데이터 모델 설명하기 (예 “제목 필드와 iscompleted 필드가 있는 새로운 todo 클래스를 만들어 주세요 ”) 제안된 스키마 수락하기 이 유용한 기능은 데이터베이스 스키마 설계에 소요되는 시간을 절약해 줍니다 rest api를 사용한 데이터 읽기 및 쓰기 (golang 예제) 아래는 go의 http 패키지를 사용하여 데이터를 생성(post 메서드)하고 가져오는 방법에 대한 기본 예제입니다 application id 및 rest api key 를 환경 변수로 설정했다고 가정합니다 package main import ( "bytes" "encoding/json" "fmt" "io/ioutil" "log" "net/http" ) type todo struct { objectid string `json "objectid,omitempty"` title string `json "title,omitempty"` iscompleted bool `json "iscompleted,omitempty"` } func main() { // example create todo newtodo = todo{ title "buy groceries", iscompleted false, } created, err = createtodo(newtodo) if err != nil { log println("error creating todo ", err) } else { log println("created todo with id ", created objectid) } // example fetch todos todos, err = fetchalltodos() if err != nil { log println("error fetching todos ", err) } else { for , t = range todos { log println("fetched todo ", t title, t iscompleted) } } } // createtodo sends a post request to save a new record in the "todo" class func createtodo(todo todo) (todo, error) { // convert struct to json body, = json marshal(todo) // create http request req, err = http newrequest("post", "https //parseapi back4app com/classes/todo", bytes newbuffer(body)) if err != nil { return todo{}, err } // set necessary headers req header set("x parse application id", "your application id") req header set("x parse rest api key", "your rest api key") req header set("content type", "application/json") // execute the request client = \&http client{} resp, err = client do(req) if err != nil { return todo{}, err } defer resp body close() if resp statuscode != http statuscreated && resp statuscode != http statusok { bodybytes, = ioutil readall(resp body) return todo{}, fmt errorf("api error %s", string(bodybytes)) } // parse response var createdtodo todo if err = json newdecoder(resp body) decode(\&createdtodo); err != nil { return todo{}, err } return createdtodo, nil } // fetchalltodos retrieves all todo objects from back4app using get func fetchalltodos() (\[]todo, error) { req, err = http newrequest("get", "https //parseapi back4app com/classes/todo", nil) if err != nil { return nil, err } req header set("x parse application id", "your application id") req header set("x parse rest api key", "your rest api key") client = \&http client{} resp, err = client do(req) if err != nil { return nil, err } defer resp body close() if resp statuscode != http statusok { bodybytes, = ioutil readall(resp body) return nil, fmt errorf("api error %s", string(bodybytes)) } // parse response for "results" key var result struct { results \[]todo `json "results"` } if err = json newdecoder(resp body) decode(\&result); err != nil { return nil, err } return result results, nil } 이 예제에서는 http 클라이언트를 생성하고, 필요한 헤더를 추가하며, 응답 코드와 오류 메시지를 처리합니다 your application id 및 your rest api key 를 back4app 프로젝트의 실제 키로 교체하는 것을 잊지 마세요 graphql api를 사용한 데이터 읽기 및 쓰기 back4app는 또한 https //parseapi back4app com/graphql 에 graphql 엔드포인트를 제공합니다 인기 있는 go graphql 클라이언트 라이브러리(예 machine box graphql https //github com/machinebox/graphql )를 사용하여 쿼리 또는 변형을 수행할 수 있습니다 이는 원시 rest 호출보다 더 구조화된 접근 방식이 될 수 있습니다 실시간 쿼리 작업하기 (선택 사항) 앱에서 실시간 업데이트를 보고 싶다면 back4app 대시보드에서 실시간 쿼리를 활성화할 수 있습니다 golang에는 공식 parse 실시간 쿼리 라이브러리가 없습니다 그러나 wss\ //your subdomain b4a io 에서 실시간 쿼리 업데이트를 수신하기 위해 자체 웹소켓 연결을 구현할 수 있습니다 이 기능은 즉각적인 데이터 동기화가 필요한 협업 앱에 유용합니다 3단계 – acl 및 clp로 보안 적용하기 개요 back4app은 데이터 보호를 위해 접근 제어 목록(acl)과 클래스 수준 권한(clp)을 제공합니다 acl은 각 객체에 정의되며, clp는 전체 클래스에 대한 포괄적인 규칙을 정의합니다 클래스 수준 권한 back4app에서 앱의 데이터베이스 뷰로 이동합니다 클래스를 선택합니다 (예 todo ) 클래스 수준 권한을 클릭하고 다양한 사용자 역할 또는 공개 액세스를 위한 읽기/쓰기 액세스를 설정합니다 acl rest 호출을 통해 객체를 생성하거나 업데이트할 때 acl을 전달할 수 있습니다 이를 통해 특정 사용자 또는 역할만 데이터에 대한 읽기/쓰기를 할 수 있습니다 자세한 내용은 앱 보안 가이드라인 https //www back4app com/docs/security/parse security 을 방문하세요 4단계 – 클라우드 코드 함수 작성 클라우드 코드의 장점 클라우드 코드는 서버를 관리하지 않고도 서버 측 함수, 트리거 또는 유효성 검사를 실행할 수 있게 해줍니다 서버 측에서 고급 비즈니스 로직을 추가하거나 외부 api를 통합할 수 있습니다 예제 클라우드 함수 간단한 예는 텍스트 길이를 계산하는 함수입니다 back4app 대시보드의 main js 파일에서 parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); 배포 다음 방법 중 하나로 cloud code를 배포합니다 back4app cli back4app 대시보드 에서 cloud code > functions 코드를 main js 편집기에 붙여넣고 배포 를 클릭합니다 golang에서 cloud functions 호출하기 http 클라이언트를 통해 rest를 통해 cloud function을 호출할 수 있습니다 func callcalculatetextlength(txt string) (int, error) { body, = json marshal(map\[string]string{"text" txt}) req, err = http newrequest("post", "https //parseapi back4app com/functions/calculatetextlength", bytes newbuffer(body)) if err != nil { return 0, err } // headers req header set("x parse application id", "your application id") req header set("x parse rest api key", "your rest api key") req header set("content type", "application/json") client = \&http client{} resp, err = client do(req) if err != nil { return 0, err } defer resp body close() if resp statuscode != http statusok { bodybytes, = ioutil readall(resp body) return 0, fmt errorf("api error %s", string(bodybytes)) } var result struct { result map\[string]int `json "result"` } if err = json newdecoder(resp body) decode(\&result); err != nil { return 0, err } return result result\["length"], nil } 5단계 – 인증 구성 사용자 인증 활성화 back4app은 인증을 위해 user 클래스를 사용합니다 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 '{"username" "alice", "password" "secret123", "email" "alice\@example com"}' \\ https //parseapi back4app com/users 반환된 세션 토큰을 사용하여 사용자 권한이 필요한 후속 요청을 수행하십시오 go에서는 앞서 설명한 대로 http 클라이언트에서 동일한 유형의 http 요청을 보낼 수 있습니다 소셜 로그인 google이나 facebook과 같은 소셜 로그인을 위해서는 back4app에서 oauth 설정을 구성해야 합니다 이러한 흐름은 종종 토큰 교환을 포함합니다 자세한 내용은 apple로 로그인 / 소셜 로그인 문서 https //www back4app com/docs/platform/sign in with apple 를 참조하십시오 6단계 – 파일 저장 처리 설정 및 업로드 파일을 base64 인코딩된 데이터 또는 multipart/form data로 back4app에 저장할 수 있습니다 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 '{ "file" { "name" "myimage png", " type" "file", "base64" "ivborw0kggoaaaansuheugaa " } }' \\ https //parseapi back4app com/files/myimage png 업로드 후, 반환된 파일 url 또는 파일 포인터를 저장하여 객체에 파일을 첨부할 수 있습니다 go에서는 같은 방식으로 http 요청을 생성하세요—파일 내용을 올바르게 인코딩하는 것을 잊지 마세요 7단계 – 이메일 인증 및 비밀번호 재설정 중요성 이메일 인증은 사용자가 제공한 이메일을 제어할 수 있도록 보장하며, 비밀번호 재설정은 계정을 복구하는 데 도움을 줍니다 두 기능 모두 보안과 신뢰를 높입니다 이메일 인증 활성화 당신의 back4app 대시보드 로 가세요 이메일 설정 아래에서 이메일 인증 을 활성화하세요 필요한 경우 이메일 템플릿을 사용자 정의하세요 사용자가 가입하면 인증 이메일이 자동으로 전송됩니다 비밀번호 재설정 비밀번호 재설정을 시작하려면 requestpasswordreset rest 엔드포인트 https //docs parseplatform org/rest/guide/#r passwordreset 를 사용하세요 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 '{"email" "alice\@example com"}' \\ https //parseapi back4app com/requestpasswordreset 8단계 – 클라우드 작업으로 작업 예약하기 클라우드 작업의 기능 클라우드 작업은 일정에 따라 실행되어 오래된 데이터를 정리하거나 주간 뉴스레터를 보내는 등의 작업을 자동화합니다 parse cloud job('cleanupoldtodos', async (request) => { const todo = parse object extend('todo'); const query = new parse query(todo); // remove records older than 30 days // }); 이 작업을 배포하고 다음에서 예약하세요 back4app 대시보드 > 앱 설정 > 서버 설정 > 백그라운드 작업 9단계 – 웹훅 통합하기 웹훅의 필요성 웹훅을 사용하면 특정 이벤트가 발생할 때 외부 서비스에 알릴 수 있습니다 예를 들어, 새로운 todo 항목이 생성될 때 slack 알림을 보낼 수 있습니다 웹훅으로 가기 back4app 대시보드의 섹션 엔드포인트 구성하기 (예 https //your external service com/webhook ) 트리거 할당하기 (예 todo )의 aftersave 이벤트에 대한 직접적인 제어를 원할 경우 클라우드 코드에서 http 클라이언트 요청을 작성하여 외부 api를 트리거할 수도 있습니다 10단계 – back4app 관리 패널 탐색하기 개요 back4app 관리 앱은 비기술 팀원과 공유할 수 있는 포인트 앤 클릭 인터페이스로, 데이터를 관리할 수 있습니다 관리 앱 활성화 back4app 대시보드에서 더보기 > 관리 앱 로 이동합니다 활성화 하고 관리 사용자를 생성합니다 선택한 서브도메인을 사용하여 데이터 조작을 위한 간단한 ui에 로그인합니다 이렇게 하면 기본 작업을 수행하기 위해 직접 쿼리나 사용자 정의 코드를 작성할 필요가 없습니다 결론 이 가이드에서는 back4app을 사용하여 golang의 백엔드를 구축하는 방법을 배웠습니다 restful api를 통해 데이터베이스에 연결하고, acl 및 clp로 보안 조치를 적용하며, cloud jobs로 예약 작업을 실행하고, webhooks를 사용하여 외부 서비스와 통합하고, 사용자 인증 및 파일 저장을 설정하는 방법을 탐색했습니다 go의 http 패키지와 back4app의 강력한 기능을 활용하여 시간을 절약하고 쉽게 확장할 수 있는 강력한 백엔드를 만들 수 있습니다 기본 사항을 마스터했으므로 golang 핸들러 함수 로직을 확장하고, 새로운 api 엔드포인트에 연결하며, 필요에 맞는 풍부한 애플리케이션을 구축할 수 있습니다 다음 단계 golang 앱 개선 역할 기반 접근과 같은 고급 기능을 추가하거나, 프로덕션을 위해 http 서버를 최적화합니다 실시간 쿼리에 대해 더 알아보기 협업 앱을 위한 라이브 쿼리를 통합합니다 고급 back4app 문서 탐색 acl, 로그 및 분석을 세밀하게 조정합니다 타사 api 통합 cloud code 또는 직접 웹훅을 사용하여 백엔드 기능을 확장합니다