API 키는 어디에 저장해야 하나요? 서버·CI·로컬 개발

API 키는 서버 쪽에만 두세요. 프로덕션은 시크릿 매니저로 채우는 환경 변수, 파이프라인은 CI의 시크릿 저장소, 노트북은 git이 무시하는 파일에 둡니다.

읽는 시간 5분Sume
전체 글

API 키는 자신의 코드가 실행되는 곳, 즉 직접 관리하는 머신에만 저장하세요. 프로덕션에서는 시크릿 매니저나 호스팅 플랫폼의 시크릿 설정에서 채워 넣는 환경 변수, CI에서는 파이프라인의 시크릿 저장소, 노트북에서는 환경 변수나 git이 무시하는 .env 파일입니다. 프론트엔드 코드, 모바일 앱, 저장소, 티켓, 스크린샷에는 절대 넣지 마세요. 브라우저나 휴대폰으로 배포되는 것은 무엇이든 그 사용자가 읽을 수 있습니다.

Sume 규칙은 인증, API 키, CLI 보안 문서에서 가져왔고, 도구별 동작은 GitHub Actions, Vite, Git, Node.js, Python 문서에서 인용했습니다. 모두 2026-09-28에 확인했습니다.

API 키를 두어도 안전한 곳은 어디인가요?

Sume의 안전 규칙에 그 위치가 나와 있습니다.

인증과 API 키 기준, 2026-09-28 확인.
위치판단
신뢰할 수 있는 서버의 환경 변수예
안전한 시크릿 매니저예. 새 키는 곧바로 여기에 저장
CI 시크릿 저장소예
로컬 개발 머신예
프론트엔드 JavaScript아니요
모바일 앱아니요
지원 티켓이나 스크린샷아니요
로그나 채팅 기록여기에 남았다면 교체

프로덕션에서는 키를 어떻게 저장하나요?

값은 시크릿 매니저나 호스팅 플랫폼의 시크릿 설정에 두고, 프로세스에는 환경 변수로 넘기세요. Sume 문서는 키를 export SUME_API_KEY="sume_live_..."처럼 서버 쪽 변수로 설정하고, 코드가 런타임에 이 변수를 읽게 합니다.

키는 만드는 즉시 저장하세요. Sume 대시보드는 키를 만들 때만 전체 시크릿을 보여 주며, 이후 API 응답에는 접두사와 스코프 같은 키 메타데이터만 나오고 전체 시크릿은 절대 나오지 않습니다. 키를 잃어버렸다면 새 키를 만드세요.

React 앱에서는 API 키를 어디에 저장하나요?

앱 안에는 어디에도 두지 마세요. 브라우저에서 실행되는 코드는 모든 방문자에게 전달되므로, 그 안에 든 키는 공개된 것과 같습니다. 예를 들어 Vite 문서는 VITE_* 변수의 값이 빌드 시점에 소스 코드에 번들되므로 이 변수에 API 키 같은 민감한 정보를 담으면 안 된다고 말하며, 대신 백엔드 서버나 서버리스 함수를 쓰라고 안내합니다.

Sume 문서도 같은 패턴을 제시합니다. 브라우저와 모바일 클라이언트는 백엔드를 호출하고, 백엔드는 입력을 검증하고 자체 인가를 적용한 뒤 Sume 키를 붙입니다. 이 프록시는 브라우저에서 Sume API 호출 시 CORS 오류: 해결 방법에서 보여 줍니다.

로컬 Python이나 Node 환경에서는 API 키를 어디에 두나요?

환경 변수나 git이 무시하는 .env 파일에 두고, 코드에 붙여 넣는 대신 런타임에 불러오세요.

  • Python은 문자열 매핑인 os.environ으로 프로세스 환경을 읽으므로, os.environ["SUME_API_KEY"]가 키를 반환합니다.
  • Node.js는 환경을 process.env로 노출하며, --env-file=file 옵션으로 .env 파일을 여기에 불러옵니다.
  • 첫 커밋 전에 파일을 무시 목록에 넣으세요. gitignore 파일은 추적되지 않는 파일을 계속 추적되지 않게 할 뿐, git이 이미 추적 중인 파일에는 영향을 주지 않습니다. 그런 파일은 git rm --cached로 추적을 멈추세요. 이미 커밋된 키는 노출된 것으로 보고 교체하세요.
  • Sume CLI를 쓴다면 CLI가 로컬 설정을 ~/.sume-com/config.json에 저장합니다. CLI 문서는 이 파일이나 SUME_API_KEY를 절대 출력하거나 커밋하지 말라고 합니다.

CI에서는 API 키를 어떻게 저장하나요?

CI 시스템의 시크릿 저장소에 저장하세요. GitHub Actions에서 시크릿은 조직, 저장소, 환경 단위로 만드는 변수이며, 스텝에 환경 변수로 전달됩니다. GitHub는 워크플로 로그에 출력된 시크릿을 가리지만 가림 처리가 보장되지는 않는다고 말하므로, 키를 절대 echo하지 마세요. 포크한 저장소에서 워크플로가 트리거되면 GITHUB_TOKEN을 제외한 시크릿은 러너에 전달되지 않습니다.

steps:
  - shell: bash
    env:
      SUME_API_KEY: ${{ secrets.SUME_API_KEY }}
    run: |
      curl https://api.sume.com/v1/me -H "Authorization: Bearer $SUME_API_KEY"

키가 있어서는 안 될 곳에 들어갔다면 어떻게 하나요?

키를 교체하세요. 대체 키를 만들어 서버에 배포하고 GET /v1/me로 확인한 뒤, 대시보드에서 이전 키를 폐기합니다. 뒷정리는 API 키가 노출됐다면?에서 다룹니다. 웹훅 서명 시크릿도 똑같이 다루세요. Sume 문서는 이 시크릿을 API 키와 같은 방식으로 저장하라고 합니다.

출처

관련 글

개발자 카테고리의 다른 글

개발자 글 전체 보기

작성자 Sume