꿈꾸는 시스템 디자이너

Flutter 강좌 - [Firebase] Cloud Functions 사용법 #3 - 로컬 테스트 | Local Test 본문

Development/Flutter

Flutter 강좌 - [Firebase] Cloud Functions 사용법 #3 - 로컬 테스트 | Local Test

독행소년 2020. 3. 12. 14:14

 

Flutter Code Examples 강좌를 추천합니다.

  • 제 블로그에서 Flutter Code Examples 프로젝트를 시작합니다.
  • Flutter의 다양한 예제를 소스코드와 실행화면으로 제공합니다.
  • 또한 모든 예제는 Flutter Code Examples 앱을 통해 테스트 가능합니다.

Flutter Code Examples 강좌로 메뉴로 이동

Flutter Code Examples 강좌 목록 페이지로 이동

Flutter Code Examples 앱 설치 | Google Play Store로 이동

 

Flutter Code Examples - Google Play 앱

Are you a beginner at Flutter? Check out the various features of Flutter through the demo. Source code for all demos is also provided.

play.google.com


Flutter 강좌 시즌2 목록 : https://here4you.tistory.com/149

 

지난 강좌에서 2회에 걸쳐 Cloud Functions의 사용법을 알아봤다.

2019/11/13 - [Development/Flutter] - Flutter 강좌 - [Firebase] Cloud Functions 사용법 #2

2019/11/12 - [Development/Flutter] - Flutter 강좌 - [Firebase] Cloud Functions 사용법 #1

 

실제로 Cloud Functions을 이용할 때 가장 불편한 점은 함수의 배포(deploy) 시간이 생각보다 오래 걸린다는 것이다. 실제로 1분 이상 걸리기 때문에 함수를 빈번히 수정/배포해가면서 기능을 테스트하기가 굉장히 불편하다. 로컬에서 기능 테스트를 마친 후에 실제 서버에 반영하는 방법이 없을까 하여 알아보니 당연히 있었다.

이번 강좌에서는 Cloud Functions을 로컬에서 테스트 하는 방법에 대해서 알아본다.

 

1. 관리자 인증 정보 설정

로컬에서 테스트할 함수가 Firebase에서 제공하는 여러 서비스를 이용하기를 원한다면 관리자 인증 정보 설정이 필요하다.

구글 클라우드 콘솔에 로그인 한 후 IAM 및 관리자의 서비스 계정 항목으로 이동하자. App Engine default service account 항목의 작업을 클릭해서 키 만들기를 선택한다.

키 유형을 JSON으로 선택하면 비공개 키가 JSON 파일로 다운로드된다. 이 파일을 통해 Firebase의 클라우드 리소스에 액세스 할 수 있게 되는 것이다.

이 파일을 미리 설치했던 로컬의 Firebase 프로젝트로 복사한 후 파일 이름을 key.json으로 변경한다.

* Firebase CLI 설치 방법은 Cloud Functions 사용법 #1을 참고한다.

 

 

2. Firebse 에뮬레이터 실행

key.json 파일의 경로를 파라미터로 해서 GOGGLE_APPLICATION_CREDENTIALS 변수를 설정한다. json 파일의 절대 경로로 입력해야 한다. 윈도우의 경우 set 명령어를 이용하며 UNIX의 경우는 set 대신 export로 설정한다.

D:\workspace\Firebase\sbt
λ set GOOGLE_APPLICATION_CREDENTIALS=D:\workspace\Firebase\sbt\key.json

 

에뮬레이터를 실행하려면 다음과 같은 명령어를 이용한다.

$> firebase emulators:start

 

Cloud Functions만 에뮬레이션하고자 한다면 --only 플래그를 이용한다.

firebase emulators:start --only functions

 

본인의 실행화면은 다음과 같다.

잠깐 살펴보면, 에뮬레이터 허브라는 것이 로컬의 4400 포트에서 실행되었고, Cloud Functions 에뮬레이터는 로컬의 5001 포트에서 실행되고 있다.

한 가지 주목할 점은, 본인은 --only functions란 플래그를 이용해서 오직 Cloud Functions의 에뮬레이터만 실행시켰다. 그런데 본인이 개발한 7개의 함수 중 하위 4개는 Firestore를 참조하고 있는 함수들인데, Firestore 에뮬레이터는 실행하지 않았으므로 이들 함수들이 호출되면 실제 서버의 Firestore에 영향이 미치게 된다는 뜻이다. 각자 테스트 목적에 따라 Firestore도 로컬에서 에뮬레이션 할 필요가 있을 경우 Firestore의 에뮬레이터도 실행해야 서버에 영향 없이 테스트를 할 수 있을 것이다.

그리고 상단의 3개의 함수들은 로컬주소의 5001 포트를 통해 호출될 수 있는데 호출에 사용될 URL들이 출력되고 있다.

 

3. 함수 테스트

자 그럼 functions 폴더의 index.js 파일에 테스트용 함수를 추가해보자.

exports.helloWorld = functions.https.onRequest((request, response) => {
  response.send("Hello from Firebase!");
});

 

함수 추가 후 index.js 파일을 저장하면 에뮬레이터는 파일의 변화를 자동으로 감지하고 해당 함수를 자동으로 초기한다.

functions[helloWorld]: http function initialized (http://localhost:5001/shareble-baby-tracker/us-central1/helloWorld).

 

웹 브라우저에서 해당 URL을 요청해보자.

함수가 정상적으로 호출되는 것을 확인할 수 있다.

 

이번 강좌에서는 Cloud Functions을 로컬에서 테스트하는 방법에 대해서 알아봤다. 이 방법을 이용하면 로컬에서 함수를 개발하면서 바로바로 기능을 테스트할 수 있고, 테스트가 완료된 후에 배포를 할 수 있기 때문에 개발과 기능 테스트를 위해 빈번히 서버를 멈춰가며 배포하는 부담을 배재할 수 있다.

Comments