.
이번 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_functionFirebase Console Cloud Firestore 페이지에서 messages 컬렉션에 3개의 필드를 가진 새로운 문서가 생긴 것을 확인할 수 있습니다.
이상으로 3가지 Cloud Functions을 배포하는 작업을 정리해 보았습니다.
가이드 문서가 있는 기본적인 과정이고, ChatGPT가 이종화 파트너님이 알려 주신 프롬프트를 참고해서 요청한 대로 코드를 잘 짜 주었기 때문에 그리 어렵지는 않았던 것 같습니다.
이 경험을 바탕으로.
get 방식을 post 방식으로 고도화 하기.
보통의 API 처럼 서버에 저장된 정보를 불러 와 보기
여러 가지 정보를 Endpoint URL에 태워서 서버로 전달해 보기
(예를 들어, 크롤링한 정보들…)Flutter 같은 프론트엔드 프레임워크와 연계해 보기
기타 등등..
여러 가지 것들을 시도해 볼 수 있을 거 같기도 한데.. 가능할까 모르겠네요.. ㅎㅎ
일단은 이종화 파트너님이 주기로 하신 미션에 집중하는 걸로!!!
#9기 풀스택