구글 Cloud Function 만들고 배포하기

.

이번 9기 부트캠프에서 “AI로 풀스택 개발자 도전하기”를 청강하면서 진행해 봤던 내용을 한번 정리해 보도록 하겠습니다.


이종화 파트너님이 공유해 주신 구글 레퍼런스 문서 중 [Cloud Functions] 시작하기: 첫 번째 함수 작성, 테스트 및 배포를 참고하였습니다.


이 문서의 주요 내용은 2가지 예제 함수(기본 코드 제공)를 가지고 함수를 배포하는 과정에 대한 것인데, 전체 진행 과정과 2가지 예제 함수는 다음과 같습니다.

[전체 과정]

  • Firebase 프로젝트 만들기

  • Firebase Database 만들기

  • Node.js 및 Firebase CLI(Command Line Interface) 설정

  • 프로젝트 초기화

  • 필수 모듈 가져 오기 & App 초기

  • addMessage() 함수 추가

  • makeUppercase() 함수 추가

  • 함수 배포


[2가지 예제 함수]

  • add message 함수 : 텍스트 값이 허용되는 URL을 노출하고, Cloud Firestore에 이 값을 저장
    —> 클라이언트 에서 url을 통해서 정보(텍스트)를 서버로 전달하면 서버 데이터 베이스에 저장


  • make uppercase 함수 : Cloud Firestore 쓰기에서 트리거하고 텍스트를 대문자로 변환.
    —> add message 함수를 통해서 전달된 텍스트가 DB에 저장이 되면, 모두 대문자로 바꿔서 또 저장


@huhsame 님의 [9기 풀스택] firebase 세팅 및 클라우드함수 호출 내용과 연결되는 부분이 있으니,

여기서는 함수를 추가하고, 배포한 다음 어떻게 작동 하는지에 대해서 정리하도록 하겠습니다.


2가지 함수를 친절하게 공식 문서에서 제공을 해 주는데요.


여기서는 ChatGPT에게 요청을 해서 작성한 코드를 사용하고, 허세임님 게시글에도 나오는 “createdAt()” 함수도 함께 추가해 봤습니다.

(프롬프트의 형식은 이종화 파트넘이 알려 주신 것을 토대로 하였습니다.)


myaddMessage() 함수 만들기


ChatGPT에게 다음과 같은 프롬프트를 주고 코드를 만들어 달라고 합니다.



여기서 방식을 일단은 ‘get’으로 했는데요. 이 부분은 다음에 ‘post’로 해서 다시 진행해 보려고 합니다.

ChatGPT가 다음과 같은 코드를 짜 주었습니다.


const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

exports.addmessage = functions.https.onRequest(async (req, res) => {
    // GET 방식으로 데이터 확인
    if (req.method !== 'GET') {
        res.status(400).send('Please send a GET request');
        return;
    }

    try {
        // Step 1: text 변수로 값을 전달받음
        const text = req.query.text;
        if (!text) {
            res.status(400).send('No text provided');
            return;
        }

        // Step 2: "messages" 컬렉션에 "original" 필드로 값을 저장
        const messageRef = admin.firestore().collection('messages').doc();
        await messageRef.set({ original: text });

        // Step 3: 성공 메세지 출력
        res.send('Message added successfully');
    } catch (error) {
        console.error('Error adding message:', error);
        res.status(500).send('Error adding message');
    }
});


mymakeUppercase() 함수 만들기

ChatGPT에게 다음과 같은 프롬프트를 주었고..


작성 코드는 다음과 같습니다.


exports.mymakeUppercase = functions.firestore
    .document('messages/{messageId}')
    .onCreate((snap, context) => {
        // 새 문서의 데이터를 가져옴
        const original = snap.data().original;

        // original 필드의 문자열을 대문자로 변환
        const uppercase = original.toUpperCase();

        // 변환된 데이터를 동일한 문서에 'uppercase' 필드로 저장
        return snap.ref.set({ uppercase }, { merge: true });
    });



addCreatedAt() 함수


// Cloud Function triggered on creation of new document in 'messages' collection
exports.addCreatedAt2 = functions.firestore
    .document('messages/{messageId}')
    .onCreate((snap, context) => {
        // Get the current timestamp
        const currentTime = admin.firestore.FieldValue.serverTimestamp();

        // Update the document with a 'createdAt' field
        return snap.ref.set({ createdAt: currentTime }, { merge: true });
    });


이상의 3개의 함수를 index.js 파일에 추가합니다.


(중간에 배포 전에 Firebase Emulator로 테스트 해 보는 과정이 있으나, 생략합니다~)



터미널에 다음의 명령어를 입력하고 배포를 합니다.



firebase deploy --only functions


여기서 꼭 챙겨야 할 것이 있는데요. Cloud Function을 배포하려면 “Blaze”라는 요금제를 사용해야 합니다.

(Spark 요금제가 기본)

무료 제공량이 상당하기 때문에 연습 하는 과정에는 과금에 대한 부담은 안 가져도 될 듯 합니다.


배포가 완료 되면,

Firebase Console Functions 페이지에서 함수 리스트를 확인할 수 있습니다.


이제 브라우저에 아래의 URL+전달값 정보를 붙여 넣고 입력하고 [Enter]를 치면..

https://us-central1-gpters-test.cloudfunctions.net/myaddmessage?text=gpters_cloud_function


Firebase Console Cloud Firestore 페이지에서 messages 컬렉션에 3개의 필드를 가진 새로운 문서가 생긴 것을 확인할 수 있습니다.


이상으로 3가지 Cloud Functions을 배포하는 작업을 정리해 보았습니다.


가이드 문서가 있는 기본적인 과정이고, ChatGPT가 이종화 파트너님이 알려 주신 프롬프트를 참고해서 요청한 대로 코드를 잘 짜 주었기 때문에 그리 어렵지는 않았던 것 같습니다.


이 경험을 바탕으로.

  1. get 방식을 post 방식으로 고도화 하기.

  2. 보통의 API 처럼 서버에 저장된 정보를 불러 와 보기

  3. 여러 가지 정보를 Endpoint URL에 태워서 서버로 전달해 보기
    (예를 들어, 크롤링한 정보들…)

  4. Flutter 같은 프론트엔드 프레임워크와 연계해 보기

  5. 기타 등등..


여러 가지 것들을 시도해 볼 수 있을 거 같기도 한데.. 가능할까 모르겠네요.. ㅎㅎ


일단은 이종화 파트너님이 주기로 하신 미션에 집중하는 걸로!!!

#9기 풀스택

3
4개의 답글

👉 이 게시글도 읽어보세요