본문 바로가기
내가 만든 실습🍪 완전 삽질했지

Google Cloud Function으로 간단하게 로그 남기기

by 민휘 2023. 12. 29.

플러터 배운 김에 웹 서비스를 하나 만들어봤습니다.

목표를 선언하고 sns에 공유할 수 있는 Shout out to 2024!

공유만 하고 끝내기는 아쉬우니 언젠가 개발하고 싶었던 데일리 트래커 서비스의 예고 화면을 만들었습니다.

서비스에 관심있는 사람들에게 서비스가 출시되면 연락 남길 이메일을 받으려고 했어요.

그런데 이 이메일을 저장할 공간을 어떻게 마련해야하나 고민이었습니다.

데이터베이스를 두기에는 너무 비싸고, 스토리지 저장소에 이메일을 저장하는 api를 따로 만들기는 좀 귀찮고 서버 비용도 걱정되고..

그러다 그냥 로그에 찍어두고 나중에 파싱해서 쓰면 되겠다는 아이디어가 떠올랐습니다.

비용이 저렴하고 유연하게 가동되는 서버리스를 사용하기로 했고, Google Cloud Function은 초기 200만회까지 요청이 무료길래 이거다 싶었습니다.

그리고 함수를 만들면 콘솔 안에서 api 노출과 로그도 한번에 설정할 수 있어 간편했습니다.

 

Function 구성

 

소스 코드 작성

런타임 : Python 3.9

import functions_framework

@functions_framework.http
def hello_http(request):
    try:
        request_json = request.get_json(silent=True)

        if request_json and 'email' in request_json:
            email = request_json['email']
            print("requested email : " + email)
        else:
            raise ValueError("Invalid or missing 'email' parameter")

        return 'Hello {}!'.format(email)
    except ValueError as ve:
        print(f"Error: {str(ve)}")
        return 'Bad Request: {}'.format(str(ve)), 400
    except Exception as e:
        print(f"Error: {str(e)}")
        return 'Internal Server Error', 500

 

배포를 하고 나면 URL를 확인할 수 있다. 자동 배포됨!

로그도 확인 가능하다 😲

 

배포 후 포스트맨에서 테스트

 

 

로그 탐색기에서 로그를 확인할 수 있다. 이메일이 제대로 찍힌 모습.

 

 

로그 싱크

그런데 로그 탐색기에 여러 내용이 찍혀서 막상 내가 이메일이 찍힌 로그는 확인하기 어렵다. 로그 싱크를 생성해서 조건에 맞는 로그만 따로 저장할 수 있다.

 

 

우선 이메일 로그를 저장할 새로운 로그 버킷을 생성한다.

 

로그 라우터 탭에서 새로운 싱크를 구성한다.

로그를 저장할 버킷을 선택하고, 싱크에 포함할 로그 조건과 제외할 로그 조건을 작성한다.

 

 

로그 조건을 테스트하기 위해 로그 미리보기를 클릭해서 확인해볼 수 있다. 나는 textPayload 필드에 requested email이 포함된 로그만 저장되도록 했다.

 

 

프론트엔드와 연결

아이콘 버튼을 클릭하면 이메일 로깅 함수를 호출한다. 호출하는 동안 아이콘 버튼은 로딩 중으로 바꾸고, 실패하더라도 세번 재시도하도록 코드를 짰다. BuildContext 매개변수로 넘기지 말라고 하는데 일단 돌아가는게 먼저니까 그냥 연결했다. 우하하

프론트 쪽에서 요청을 날렸을 때 로그에 잘 남는다. 끝~