Firebase 서버리스 활용 – 모바일 및 웹 애플리케이션이 쉬워짐

게시 됨: 2022-03-11

모바일 및 웹 애플리케이션에는 일반적으로 백엔드 서버가 필요합니다. 웹 애플리케이션은 콘텐츠를 전달하기 위해 웹 서버가 필요합니다. 응용 프로그램은 또한 이미지 및 비디오와 같은 미디어와 사용자 프로필을 저장해야 합니다. 애플리케이션과 서버 간의 통신은 대개 REST인 API를 사용하여 수행됩니다.

응용 프로그램은 다양한 언어로 코딩됩니다. iOS 애플리케이션은 Swift 또는 Objective-C로 작성됩니다. Android 애플리케이션은 Java 또는 Kotlin으로 작성됩니다. 웹 애플리케이션은 HTML, CSS, JavaScript 및 종종 Angular 또는 React와 같은 복잡한 프레임워크로 작성됩니다. 프론트엔드 개발자는 관련 언어 및 관련 개발 도구를 알아야 합니다.

백엔드 서버는 Go, Java, PHP 및 Python을 포함한 다양한 언어로 작성됩니다. 이러한 각 언어에는 복잡한 응용 프로그램 작성을 용이하게 하는 자체 라이브러리 제품군이 있습니다.

대부분의 개발자는 스스로를 프론트엔드 또는 백엔드 개발자라고 생각합니다. 두 역할에 모두 능숙한 풀스택 개발자는 상대적으로 드뭅니다.

백엔드 서버를 실행하고 유지 관리하는 데는 고유한 문제가 있습니다. 서버를 구축, 업데이트 및 백업해야 합니다. 서버는 또한 우발적이거나 악의적인 데이터 손실이나 민감한 데이터에 대한 액세스를 방지하기 위해 보안을 유지해야 합니다. 또한 서버에 연결할 수 있도록 호스트 이름과 IP 주소가 할당되어 있어야 합니다.

Firebase란 무엇입니까?

Firebase는 Google이 인수한 모바일 메시징 아키텍처로 시작되었습니다. 이후 Google Cloud Platform과 상호 운용되는 25개 이상의 구성 요소 모음으로 발전했습니다.

Firebase는 모바일 및 웹 개발자가 클라우드 기능에 간단하고 안전하며 안정적으로 액세스할 수 있는 SDK(소프트웨어 개발 키트)로 구성되어 있습니다. 네트워크 연결 불량을 자동으로 보상합니다. 구성 요소를 활성화, 관리 및 보호하기 위한 Firebase 웹 콘솔이 있습니다. 보다 심층적인 사용을 위한 명령줄 도구와 REST API도 있습니다.

일부 Firebase 구성 요소는 다른 구성 요소보다 더 잘 알려져 있습니다. 구성 요소 간에 종속성이 거의 없으므로 기능을 점진적으로 채택할 수 있습니다. Firebase 인증 및 분석이 가장 널리 사용됩니다.

Firebase는 모바일 및 웹 프론트엔드 개발자가 백엔드 서버 없이 완전한 애플리케이션을 개발할 수 있는 플랫폼으로 발전했습니다. 최근 개선 사항은 Cloud Virtual Machine 서버 솔루션에 대한 실행 가능하고 확장 가능하며 비용 효율적인 대안을 제공하는 서버리스 솔루션을 크게 촉진했습니다.

Firebase 가격 및 결제 요금제

Spark라는 기본 Firebase 요금제는 무료입니다. 클라우드 리소스 사용에는 제한이 있지만 상당히 관대합니다. 비용을 들이지 않고 적당한 크기의 애플리케이션을 실행할 수 있습니다.

최대 1GB 콘텐츠와 10GB/월 미만 전송이 포함된 웹사이트는 Spark 요금제로 호스팅할 수 있습니다. Firestore는 최대 1GB의 데이터와 최대 10GB/월의 네트워크 트래픽을 허용합니다. 클라우드 스토리지 한도는 최대 5GB의 데이터와 최대 1GB/일 다운로드입니다.

애플리케이션에 더 많은 리소스가 필요한 경우 종량제와 같은 유료 요금제가 필요합니다. Spark 플랜 무료 한도는 여전히 적용됩니다. 청구 가능한 요금은 상당히 낮습니다. 가격은 Firebase 가격 페이지에서 확인할 수 있습니다.

클라우드에서 실행되는 가상 머신은 실행 중이 아니더라도 요금이 부과됩니다. Firebase 서버리스 솔루션은 0으로 확장됩니다. 즉, 리소스는 사용 중일 때만 효과적으로 실행되고 사용하지 않을 때는 요금이 발생하지 않습니다. 이는 휴가 렌탈과 같은 계절적 비즈니스 또는 콘서트와 같은 정기 이벤트에 이상적입니다. 많은 활동이 있었고 몇 달 동안 활동이 없었습니다.

Firebase 설정 방법

인증을 위해 이메일 계정이 필요합니다. Google 메일 계정이 선호됩니다. https://mail.google.com에서 만들 수 있습니다.

Google Cloud Platform(GCP) 계정도 필요합니다. 여기에서 무료 평가판을 사용할 수 있습니다. 이렇게 하면 1년 동안 사용할 수 있는 $300의 크레딧이 제공됩니다. 신분증으로 신용카드가 필요합니다. Google에서 1달러를 청구한 다음 환불할 수 있습니다. 청구가 활성화되고 청구 가능한 리소스가 사용되는 경우 신용 카드에서 매월 인출됩니다. 청구를 위한 중개자 역할을 하는 Google 공급자 회사도 있습니다. 클라우드 사용에 대해 공급자에게 비용을 지불하면 공급자가 Google에 비용을 지불합니다. 자체 청구 계획이 있으며 무료 평가판을 제공할 수 있습니다.

사용량을 모니터링하려면 클라우드 콘솔의 청구 섹션을 자주 모니터링하는 것이 중요합니다. 필요하지 않을 때 스토리지와 같은 리소스를 활성 상태로 유지하기가 쉽기 때문에 시간이 지남에 따라 상당한 비용이 발생할 수 있습니다.

Firebase 프로젝트도 GCP 프로젝트입니다. GCP 프로젝트를 만들어 Firebase로 가져오거나 Firebase 프로젝트를 만들어 GCP 프로젝트도 만들 수 있습니다. Firebase 콘솔이 여기에 있습니다.

다른 유형의 응용 프로그램에는 다른 설정이 필요합니다. 주요 기능은 Android, iOS 및 웹 애플리케이션입니다. 설정 지침은 공식 Firebase 가이드에서 찾을 수 있습니다.

일부 작업에는 Firebase CLI(명령줄 인터페이스) 도구가 필요합니다. 이를 위해서는 Node.jsnpm 도구가 설치되어 있어야 합니다. macOS 또는 Linux에서 실행 중인 경우 npm 명령을 sudo 와 함께 실행해야 합니다.

sudo npm install -g firebase-tools

인증 및 권한 부여

Firebase 인증은 아마도 가장 널리 사용되는 Firebase 구성 요소일 것입니다. 사용자는 여러 인증 메커니즘 중 하나 이상을 선택할 수 있습니다. 이메일 주소와 비밀번호, 전화번호, 연합 ID 제공업체인 Google, Facebook, Twitter 및 GitHub가 있습니다. 인증 메커니즘의 수에는 제한이 없습니다.

Firebase UI는 사용자에게 사용할 메커니즘을 묻는 메시지를 표시합니다.

Firebase 인증

Firebase는 클라이언트 측에서 몇 줄의 코드에서 호출할 수 있는 인증을 위한 사용자 인터페이스를 제공합니다. 인증을 수동으로 수행하기 위한 API도 있습니다. 인증에 성공하면 백엔드 유효성 검사에 사용할 수 있는 ID 토큰이 생성됩니다.

API를 사용하면 관리 사용자가 프로그래밍 방식으로 사용자를 관리할 수 있습니다. 작업에는 다음이 포함됩니다.

  • 사용자 생성, 업데이트 및 삭제
  • 이메일 주소 또는 전화번호와 같은 검색 기준으로 사용자 조회
  • 계정 생성 날짜 및 마지막 로그인 날짜 및 시간과 같은 액세스 정보
  • 기존 워크플로를 사용하지 않고도 이메일 주소 및 전화번호 확인

대부분의 모바일 및 웹 응용 프로그램은 많은 수의 사용자가 응용 프로그램에 로그인하기를 원합니다. 예를 들어, Google Mail 계정이 있는 사람은 누구나 Google 인증을 허용하는 모든 애플리케이션에 대해 자신을 인증할 수 있습니다. 애플리케이션에 대한 액세스를 특정 사용자로 제한하려면 승인 형식이 필요합니다. 이는 이메일 주소와 액세스 역할 간의 연결을 데이터 저장소에 저장하여 쉽게 수행할 수 있습니다. 인증에 성공하면 데이터 저장소에서 이메일 주소를 조회합니다. 사용자가 올바른 역할을 갖고 있으면 액세스 권한이 부여됩니다. 그렇지 않으면 사용자가 강제로 로그아웃됩니다.

Firebase 호스팅

Firebase 호스팅을 사용하면 JavaScript가 포함된 정적 웹 콘텐츠를 웹 서버 없이 클라우드에서 호스팅할 수 있습니다. 콘텐츠는 글로벌 CDN(콘텐츠 전송 네트워크)의 가장자리에 캐시됩니다. 이를 통해 전 세계 어디에서나 콘텐츠에 빠르게 액세스할 수 있습니다.

Firebase 콘솔에서 Firebase 프로젝트의 호스팅 섹션에 추가하여 하나 이상의 웹사이트를 호스팅할 수 있습니다. 콘텐츠는 SSL을 통해 전달되며 [https://site-name.web.app] 및 https://site-name.firebaseapp.com 형식의 두 가지 URL이 제공됩니다. 여기서 site-name 은 프로젝트 이름 또는 사용자 지정 사이트 이름.

도메인의 DNS 레코드를 변경할 수만 있다면 자신의 도메인 이름에서 사이트를 호스팅하는 것은 매우 쉽습니다. Firebase 콘솔에서 사이트에 도메인 이름을 추가합니다. 그런 다음 DNS TXT 레코드를 받게 되며, 이 레코드를 도메인의 DNS에 추가하여 귀하가 도메인을 소유하고 있음을 Google에 증명해야 합니다. TXT 레코드가 표시되면 사이트에 대한 DNS A 레코드를 얻을 수 있습니다. SSL 인증서는 사이트에 대해 자동으로 프로비저닝됩니다. 인증서가 프로비저닝되면 사이트를 전 세계적으로 사용할 수 있습니다. 원칙적으로 DNS 업데이트 및 인증서 프로비저닝에 몇 시간이 걸릴 수 있습니다. 실제로 프로세스는 20분 안에 완료될 수 있습니다.

호스팅에 콘텐츠를 추가하려면 먼저 사이트의 cd 를 만들고 명령줄에서 해당 디렉터리로 이동합니다. 다음으로 Firebase에 로그인하여 프로젝트 디렉토리를 초기화합니다.

 firebase login firebase init

프로젝트와 필요한 클라이언트 서비스를 선택하라는 메시지가 표시됩니다. 서비스는 나중에 언제든지 추가할 수 있으며 이 단계에서 선택하지 않아도 됩니다.

웹사이트 루트 디렉터리와 제외할 파일을 정의하는 firebase.json 이라는 파일을 만듭니다. 버전 제어에서 파일을 제외하려면 .gitignore 파일도 필요합니다.

 { "hosting": { "public": "public", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ] } }

그런 다음 정적 콘텐츠를 공용 디렉터리에 복사합니다. 마지막으로 사이트를 클라우드에 배포합니다.

 firebase deploy

웹 콘텐츠를 변경하려면 콘텐츠 파일을 변경하고 배포 명령을 실행하기만 하면 됩니다. 각 배포는 Firebase 콘솔에 버전으로 표시됩니다. 클릭 한 번으로 이전 버전으로 롤백할 수 있습니다.

Firebase 호스팅은 파일, Cloud Functions, Cloud Run에 대한 URI도 다시 쓸 수 있습니다. 이는 이러한 서비스에 도메인을 할당할 필요가 없기 때문에 작업을 크게 단순화합니다. 재작성은 firebase.json의 호스팅 섹션에 재작성 섹션을 추가하여 정의됩니다. 서비스가 없으면 호스팅 배포가 실패합니다.

 { "hosting": { "public": "public", "rewrites": [ { "source": "/xxx", "destination": "/profile.html" }, { "source": "/yyy", "function": "profile" }, { "source": "/api{,/**}", "run": { "serviceId": "cloud-api", "region": "europe-west1" } } ] } }

데이터 저장고

Firebase는 클라우드 기반 데이터 저장소에 액세스하기 위한 클라이언트 API를 제공합니다. 세 가지 유형의 스토리지가 있습니다.

  • 실시간 데이터베이스
  • 클라우드 파이어스토어
  • 클라우드 스토리지

이를 통해 모바일 및 웹 클라이언트는 서버 없이도 데이터를 저장하고 검색할 수 있습니다.

실시간 데이터베이스

실시간 데이터베이스는 클라우드 호스팅 NoSQL 데이터베이스입니다. 실시간 데이터베이스의 데이터는 연결된 모든 장치에 실시간으로 자동 동기화됩니다. Android, iOS 및 웹에 대한 교차 플랫폼에서 작동합니다. 데이터는 JSON 트리 구조로 저장됩니다. 데이터에 대한 읽기 및 쓰기 액세스를 제어하도록 보안 규칙을 설정할 수 있습니다.

각 장치는 데이터베이스의 로컬 복사본을 유지합니다. 이는 네트워크에 연결되지 않은 상태에서도 데이터를 사용할 수 있음을 의미합니다. 다시 연결하면 데이터의 로컬 및 클라우드 기반 복사본이 동기화됩니다.

리스너를 사용하여 애플리케이션에서 데이터를 읽습니다. 리스너는 JSON 트리의 노드에서 수신 대기합니다. 콘솔이나 다른 사용자에 의해 데이터가 변경될 때마다 새로운 데이터 값으로 리스너 콜백이 호출됩니다. 실시간 데이터베이스는 쿼리도 지원합니다. 각 쿼리는 노드와 모든 하위 노드를 반환합니다.

보안 규칙은 기본적으로 데이터에 대한 액세스를 허용하지 않습니다. 규칙은 전역적으로 또는 JSON 개체의 개별 노드에 추가할 수 있습니다. 보안 규칙은 데이터에 대한 읽기 및 쓰기 액세스를 제어하고 유효성 검사를 수행할 수 있습니다.

실시간 데이터베이스는 깊이 중첩된 데이터 구조가 필요하지 않은 작은 데이터 조각에 가장 적합합니다. 무료 한도는 1GB입니다.

클라우드 파이어스토어

Cloud Firestore는 실시간 데이터베이스를 대체하는 것으로 보입니다. 실시간 데이터베이스의 기능을 확장합니다. 데이터는 JSON 트리가 아니라 문서의 계층적 컬렉션입니다. 각 문서는 일련의 키-값 쌍과 선택적 하위 문서로 구성됩니다. 쿼리는 더 복잡한 필터링 및 정렬을 허용하고 완전한 문서만 반환합니다. 쿼리는 하위 문서를 반환하지 않습니다.

Cloud Firestore는 곧 Cloud Datastore를 대체합니다. Datastore 모드 또는 기본 모드에서 실행할 수 있습니다. 모든 Datastore 애플리케이션은 자동으로 Cloud Firestore로 마이그레이션됩니다.

Cloud Firestore는 비교적 작은 데이터 조각에 가장 적합합니다. 깊이 중첩된 데이터 구조를 가질 수 있습니다. 무료 한도는 1GB입니다.

클라우드 스토리지

Cloud Storage는 이미지, 동영상 등의 파일을 저장하기 위한 것입니다. 모바일 및 웹 클라이언트는 Firebase를 사용하여 백엔드 서버 없이 클라우드에서 직접 파일을 업로드 및 다운로드할 수 있습니다. 무료 한도는 5GB입니다.

클라우드 함수

Cloud Functions는 서버리스 애플리케이션을 만들기 위한 중요한 기술입니다. 클라우드 기능은 JavaScript, TypeScript, Python 또는 Go로 작성할 수 있으며 Google 클라우드에 직접 배포됩니다. 함수는 HTTP 요청 또는 Cloud Storage 쓰기와 같은 클라우드의 이벤트에 의해 트리거됩니다.

Cloud 함수는 한 번에 하나의 요청만 처리할 수 있지만 클라우드는 함수를 복제하여 자동으로 함수를 확장합니다. Python으로 작성된 Cloud 함수는 Flask 라이브러리를 사용하여 HTTP 요청을 처리합니다. 이 함수는 요청 객체를 매개변수로 사용하고 응답 본문을 반환합니다.

간단한 Python Cloud Function에는 작업 디렉터리가 필요하고 진입점은 main.py 파일에 있습니다.

 def simple_cloud_function(request): return "It worked"

종속성은 pip에 의해 관리되며 requirements.txt 라는 파일로 이동합니다.

 Flask==1.0.2

함수는 gcloud 명령줄 도구를 사용하여 배포됩니다. 함수 이름, 언어 및 트리거를 지정합니다.

 gcloud functions deploy simple_cloud_function --runtime python37 \ --trigger-http

함수의 URL은 배포 시 표시되며 describe 명령을 실행하여 찾을 수 있습니다.

 gcloud functions describe simple_cloud_function Url: https://europe-west1-project-id.cloudfunctions.net/simplecloud_function

Cloud Functions는 Google Cloud 및 Firebase API를 호출하여 백엔드 기능을 제공할 수 있습니다. 실행 시작 및 실행 시간에 대한 로깅 정보를 제공합니다. 추가 로깅을 쉽게 추가할 수 있습니다. 로그는 Stackdriver Logging UI와 gcloud 명령줄 도구를 통해 볼 수 있습니다.

 gcloud functions logs read simple_cloud_function

기능은 Google Cloud Console에서 보고 삭제할 수 있습니다.

Google Cloud Console: 기능

Cloud Functions는 비교적 드물게 발생하는 작업에 가장 잘 사용됩니다. 예를 들어 이미지를 Cloud Storage에 업로드할 때 미리보기 이미지를 만들 수 있습니다. 무료 한도는 매월 125,000회 호출입니다.

클라우드 런

Cloud Run은 최근 서버리스 애플리케이션을 크게 촉진하는 기능이 추가되었습니다. 복잡한 인프라 설정을 수행하지 않고도 클라우드에서 Docker 컨테이너를 실행할 수 있습니다. Kubernetes에 구축된 Knative 런타임을 사용하는 관리 모드에서 실행할 수 있습니다. 또한 Kubernetes를 기반으로 구축되었지만 컨테이너를 클라우드와 자체 데이터 센터에서 실행할 수 있는 Anthos에서도 실행할 수 있습니다. Kubernetes 클러스터는 모두 자동으로 수행되므로 설정 및 관리할 필요가 없습니다.

Docker 이미지에 빌드할 수 있는 모든 애플리케이션은 Cloud Run에서 관리할 수 있습니다. 수요에 따라 컨테이너 수를 자동으로 확장합니다. 또한 서비스를 사용하지 않을 때는 0으로 축소됩니다. 사용하지 않은 서비스에는 요금이 부과되지 않습니다.

Docker 컨테이너는 HTTP 요청에 응답하려면 웹 서버를 실행해야 합니다. Python 서비스는 Flask를 사용합니다. 진입점은 app.py 에 있습니다.

 from flask import Flask, request app = Flask(__name__) @app.route('/api/profile') def profile(): page = ''' Page content ''' return page

애플리케이션은 이미지를 생성하기 위해 Dockerfile 이 필요합니다.

 FROM python ENV APP_HOME /app WORKDIR $APP_HOME COPY . . ENV PORT 8080 RUN pip install Flask gunicorn firebase-admin CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 app:app

Cloud Run 컨테이너는 클라우드에 직접 배포됩니다.

 gcloud run deploy --image=image_name --platform=managed \ --region=europe-west1 --allow-unauthenticated

서비스 이름, 플랫폼, 지역 또는 인증되지 않은 허용 여부가 프로젝트 구성에 정의되어 있지 않거나 명령줄에 제공되지 않으면 프롬프트가 표시됩니다. 배포가 완료되면 서비스 URL이 표시됩니다. URL은 gcloud 명령어를 사용하여 얻을 수도 있습니다.

 gcloud run services list SERVICE REGION URL LAST DEPLOYED BY LAST DEPLOYED AT cloud-api europe-west1 https://cloud-api-h42ifbxkyq-ew.a.run.app [email protected] 2020-02-05T10:53:30.006Z

URL에 관리하기 어려운 난수가 포함되어 있습니다. 여기서 Firebase 호스팅 재작성 규칙이 가장 유용합니다.

서비스는 Google Cloud Console에서 보고 삭제할 수 있습니다.

Google Cloud Console: 서비스

Cloud Run은 REST API 호스팅에 이상적입니다. 월간 무료 제한은 180,000 CPU 초, 360,000 GB 메모리, 200만 요청 및 1GB 네트워크 송신입니다. 무료 네트워크 송신 한도는 서비스가 북미 지역에 배포된 경우에만 적용됩니다.

입증

기본적으로 Cloud Functions 및 Cloud Run 컨테이너는 공개되며 인터넷에서 누구나 액세스할 수 있습니다. Cloud Console에서 IAM 규칙을 사용하여 서비스를 프로젝트 구성원, Google 그룹스, 개별 이메일 주소로 제한할 수 있습니다.

제한이 있는 경우 무단 액세스가 금지됩니다. 액세스를 활성화하려면 요청 헤더에 ID 토큰을 추가해야 합니다. ID 토큰은 gcloud 명령어를 사용하거나 Firebase 인증 프로세스 중에 얻을 수 있습니다.

 gcloud auth print-identity-token

인증 헤더가 필요합니다.

 Authorization: Bearer id-token

요약

Google Cloud Platform과 Firebase는 모바일 및 웹 애플리케이션 개발을 크게 촉진하는 다양한 제품을 제공합니다. 클라이언트가 클라우드 기능에 직접 액세스할 수 있도록 하거나 Cloud Functions 또는 Cloud Run을 사용하여 클라우드에 백엔드 코드를 배포함으로써 백엔드 서버의 필요성을 완전히 제거할 수 있습니다.

기존 애플리케이션을 점진적으로 서버리스로 마이그레이션할 수 있습니다. 사실 기술이 발전하는 방식은 기존의 가상 머신 기반 서버 솔루션이 더 이상 필요하지 않다는 것을 의미할 수 있습니다.