Skip to content

Latest commit

 

History

History
82 lines (56 loc) · 3.12 KB

File metadata and controls

82 lines (56 loc) · 3.12 KB

각 환경 설정 가이드

<- 메인으로 돌아가기

📑 목차

  • [프로덕션 환경](#프로덕션 환경)
  • [개발 환경](#개발 환경)
  • 테스트

공통적으로 필요합니다

프로덕션 환경

  • 모든 경로는 파일 이름을 포함한 최종 경로입니다.
  • GCP Cloud Functions 배포 기준입니다.
  • /FIRESTORE/KEY 경로에 서비스 계정 키 JSON 파일 배치
  • /WEATHER/KEY 경로에 API txt 파일 배치
# 실행
go run main.go
키 파일들이 하나의 경로에 모여있지 않은 이유?

해당 코드의 설계는 GCP Cloud Functions에서 운용되며, 해당 환경에서 컨테이너를 마운트하여 보안 키를 불러오는 방식은 다음과 같은 이유로 복잡하게 설계되었습니다.

  1. 보안 강화:

    • 환경 변수에 직접 키를 저장하는 것보다 파일 시스템을 통해 접근하는 것이 더 안전합니다. 환경 변수는 실수로 노출되거나 로그에 기록될 위험이 있습니다.
    • 컨테이너 내부에 키 파일을 직접 포함하지 않고, 배포 시점에 마운트하는 방식은 소스 코드 저장소에 민감한 정보가 포함되는 것을 방지합니다.
  2. 유연한 키 관리:

    • 키 파일을 별도의 경로에 두면, 키를 변경해야 할 때 코드 수정 없이 파일만 교체하면 됩니다. 이는 CI/CD 파이프라인에서 키 업데이트를 용이하게 합니다.
    • 여러 환경(개발, 스테이징, 프로덕션)에서 다른 키를 사용해야 할 경우, 각 환경에 맞는 키 파일을 마운트하여 쉽게 전환할 수 있습니다.
  3. GCP Secret Manager 연동:

    • 실제 프로덕션 환경에서는 GCP Secret Manager와 같은 서비스에 키를 저장하고, Cloud Functions가 배포될 때 해당 Secret을 파일 시스템으로 마운트하는 방식을 사용합니다. 이 경우, /FIRESTORE/KEY와 같은 특정 경로에 파일이 생성되도록 설정하게 됩니다. 이는 Secret Manager의 보안 이점을 활용하면서 애플리케이션은 파일 경로를 통해 키에 접근할 수 있게 합니다.

개발 환경

현재 개발 환경은 현재 윈도우에서 고려한 환경입니다. 해당 환경에서는 Firebase Emulators를 사용합니다. 사용하기 위해서는 다음과 같은 환경이 필요합니다.

  • Node.js

  • Firebase CLI

  • Java Runtime

  • 모든 경로는 파일 이름을 포함한의 최종 경로입니다.

  • %USERPROFILE%\Documents\keys\weather 경로에 API txt 파일 배치

# Firebase 에뮬레이터 시작
firebase emulators:start --only firestore --project demo-test

# 개발 모드로 실행
go run main.go dev

# 또는 환경변수 설정
export DEV=true
go run main.go

테스트

# 전체 테스트 실행
go test ./...

# 특정 테스트 실행
go test -v -run TestFetchWeatherDataConcurrently

# Firestore 연결 테스트
go test -v -run TestFirestoreInit