moonstruck 개발일지: api 통신 로직을 서버리스로 분리

그른손·2024년 12월 16일
0

오늘 한 거

클라이언트에서 api로 직접 요청을 보내고 결과를 받아오는 기존의 방식에서 탈피해서, 이전에 만들었던 서버리스를 활용해 '서버리스를 경유한 api 통신' 로직을 구현했음

왜 기존에는 그따구로 했나요?

기존에는 api 엔드포인트를 클라이언트에서 직접 접근하는 방식을 사용했음. google vertex AI에 접근하려면 gcloud 인증 토큰이 필요한데, (당연하게도) 클라이언트에서는 직접 Gcloud 인증 토큰을 발급받을 방법이 아예 없기 때문에 완전 무식하게 '터미널에서 gcloud print 명령어로 토큰을 발급받고, 이걸 환경변수로 넣어서 돌린다'는 방법을 채택하고 있었음. 관련 스크립트도 만들어서 명령어 딸깍으로 인증토큰 발급-환경변수 업데이트하고 테스트하는 방식으로 사용했음.
왜 이따구로 했냐면

  • 일단 api에 접근이 가능한지부터 알고 싶어서 (제일 재밌는 거부터 하고 싶어하는 약간 안좋은 버릇)
  • 서버리스 만들 줄 몰랐으니까!!!

왜 바꾸기로 결정했나요?

애초에 바꿀 예정은 있었음. 왜냐면 이런 무식한 방법으로는 로컬에서야 테스트삼아 이용이 가능하지만 배포가 절대 불가능하기 때문. 지난번에 로그인 기능을 만들면서 어느정도 서버리스 환경에 익숙해진 김에 지금 하기로 했음.

어떻게 바꿨나요?

(대충 기존의 프롬프트 로직과 함께 callVertexApi함수로 만들어둔 api 통신 로직을 서버리스로 옮겨 vertex-claude 엔드포인트를 만들고 서비스 어카운트 키를 구글 시크릿으로 만들어서 인증 문제까지 해결하면서 통신 로직을 서버리스로 이전한 것에 대한 장황한 설명)

만들면서 있었던 문제들은?

  • Service Account Key가 적절한 접근 권한이 없다는 문제가 있었음. 확인해봤는데, 내가 firebase functions를 관리하는 구글 계정(thewronghand777)과 Vertex AI API를 사용하는 프로젝트를 소유하고있는 구글 계정(the2ndstring95)이 따로따로인데 thewronghand777의 서비스 어카운트 키로 the2ndstring95의 프로젝트에 접근하려고 하고 있었음. 휴먼 찐빠임.
  • (늘 그렇듯) 로컬 환경에서는 잘 되는데 배포 환경에서는 안 되는 문제: 새로 만든 비밀(VERTEX_AI_SERVICE_ACCOUNT_KEY)에 접근하는 게 로컬에서는 잘 됐는데, 배포한 후에 테스트해보니 PERMISSION_DENIED오류가 뜨는 문제가 있었음. 구글링해서 확인해보니 배포 환경의 서비스 계정에 구글 시크릿 접근자 권한이 부여되어있지 않아서 발생하는 문제라고 함. 그래서 늘 발생하는 "로컬에서는되는데배포하니까안돼요"문제가 일어난 것임. 간단하게 구글 IAM 설정에서 해당 서비스 계정(Default compute service account)에다가 보안 비밀 관리자-보안 비밀 접근자 권한을 부여하고 테스트하니 정상적으로 접근이 가능한 것을 확인했음.


이제 클라이언트를 배포하면 MVP는 했다고 볼 수 있겠다...물론 카카오톡 로그인 기능과 질문-답변 기능만 있을뿐 답변 저장 기능/크레딧 차감 및 충전 기능/입력 글자수 제한/타로 뽑기 UI/타로 카드 UI같은 것들은 아무것도 없지만 일단 뼈대는 있음
아무튼 배포 성공했잖아 그럼 됐지
저녁먹어야겠다

profile
프론트엔드 개발자

0개의 댓글