ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Firebase Functions V2에서 함수가 배포되지 않는 이상한 경험
    프로그래밍 2025. 5. 21. 13:55
    반응형

     

     

     

     

     

     

     

    Firebase Functions를 V2 환경으로 쓰면서, 예상치 못한 문제를 하나 겪었다.

    기존에 배포되어 있던 Cloud Function processAudio는 잘 작동하고 있었고,
    이걸 병렬 처리 방식으로 개선한 processAudioParallel이라는 새로운 함수를 하나 추가했다.

    기대한 건 단순했다.
    index.js에 새로 export만 해주면, Firebase CLI가 이걸 읽고 콘솔에 등록해줄 줄 알았다.

     

    // functions/index.js
    
    exports.processAudioParallel = onCall({ ... }, async (request) => {
      // 기존 함수에서 pLimit 등으로 병렬 처리만 추가
    });

     

    그리고 나서 CLI로 배포했다.

    firebase deploy --only functions:processaudioparallel

     

    결과는… ✔ Deploy complete!라는 초록색 메시지.
    그런데 콘솔에 들어가 보니 함수가 없다?

    심지어 Cloud Functions 리스트에도 없고, firebase functions:list에도 안 뜬다.
    배포 로그에도 따로 실패 메시지는 없고, 조용히 "0개 함수 배포됨"이라니...

     

     

    이게 무슨 상황이지?

    처음엔 함수 이름을 잘못 썼나 싶어서 functions:processAudioParallel이 아니라
    functions:processaudioparallel로 소문자 처리해서도 해보고,
    기존 함수 이름도 함께 넣어보고, 전체 배포도 해봤다. 그래도 안 보였다.

    결론부터 말하면,
    Firebase CLI가 기존 함수와 너무 비슷한 구조의 새로운 함수를 "중복"으로 판단해서 무시했던 게 아닌가 싶다 

     

     

    CLI는 너무 똑똑해서 탈

    Firebase Functions V2(GEN2)는 함수 이름만 보고 새 함수로 판단하지 않는다.
    내부 구조나 핸들러 함수가 유사하면, “같은 함수의 또 다른 export”라고 간주하고 배포에서 조용히 제외한다고 한다 

    CLI는 이런 판단을 해놓고도 개발자에게 경고도 안 띄워준다.
    deploy는 성공했다고 뜨고, 정작 함수는 콘솔에 안 보인다.
    굉장히 헷갈린다.

     

     

     

    해결 방법

    방법은 의외로 간단했다.
    index.js에 기존 함수인 processAudio도 함께 다시 export 해주면 된다.

     

    exports.processAudio = onCall(...);           // 기존 함수
    exports.processAudioParallel = onCall(...);   // 병렬 처리 버전

     

    이렇게 두 개를 나란히 export하고 나서 전체 배포를 해보니,

    firebase deploy --only functions

     

    이번엔 둘 다 정확히 인식되고, Firebase 콘솔에도 processAudioParallel이 떴다.

     

    근본적인 생각

     

    개발자로서 이해는 간다.
    CLI가 중복 함수를 배제해서 불필요한 배포를 줄이려는 의도겠지만,
    “함수 이름이 다르면 일단 배포는 시도해줘야 하는 거 아닌가?” 라는 생각이 강하게 들었다.

    게다가:

    • CLI는 무시된 이유를 설명하지 않고,
    • 함수 목록에서 보여주지도 않으며,
    • functions:list 같은 명령어로도 export된 함수 상태를 확인할 방법이 없다.

    이건 개선의 여지가 충분해 보인다.

     

    만약 Firebase Functions V2에서 새로운 함수를 추가했는데 배포가 안 되고,
    콘솔에도 안 보이고, 로그에 실패 메시지도 없다면
    기존 함수와 구조가 너무 비슷한 건 아닌지 확인해보자.

    그리고 해결은 간단하다.
    기존 함수도 함께 export해주면 CLI가 두 함수를 확실히 구분해서 배포해준다.

    이 글이 같은 문제로 삽질하는 분들에게 도움이 되길.

     

     

     

     

     

    728x90
    반응형
Designed by Tistory.