시작하기

API 키를 웹사이트 코드에 넣어도 되나요?

작성: Jake Luo · 게시일: 2026년 9월 20일

시크릿 키라면 안 됩니다. 브라우저가 실행하는 모든 것 — HTML, JavaScript, CSS — 은 모든 방문자에게 전송되므로, 페이지에 붙여 넣은 시크릿 키는 게시하는 순간 공개되며, 압축하거나 세 개의 문자열로 쪼개도 달라지지 않습니다. 반면 페이지에 두도록 만들어진 키도 있습니다. 공급자가 공개용 키라고 명시하고, 공개되어도 안전하도록 권한을 제한해 둡니다. 이미 게시된 페이지에 시크릿 키가 있다면 페이지를 손대기 전에 공급자에서 키를 교체하세요. 페이지를 내려도 이미 전송된 것은 되돌릴 수 없습니다.

페이지가 비밀을 지킬 수 없는 이유

브라우저는 실행할 모든 것을 받아야 합니다. 이는 특정 호스팅이나 프레임워크의 결함이 아니라 페이지를 제공한다는 말의 의미 자체입니다. 방문자의 기기는 코드를 받지 않고는 당신의 코드를 실행할 수 없습니다. 그래서 브라우저에 기본으로 들어 있는 개발자 도구만으로 그 안의 내용을 읽을 수 있고, 기술도 별도 설치도 필요하지 않습니다. 압축, base64 인코딩, 조각을 이어 붙여 키를 조립하는 방법은 모두 누군가가 조립된 값을 들여다볼 때까지만 버팁니다. 게다가 그 값은 나가는 요청 안에 담겨 네트워크 탭이 그대로 보여 줍니다.

따라서 중요한 구분은 숨겨졌는지 보이는지가 아닙니다. 두 종류의 자격 증명 사이의 구분이며, 공급자가 그 이름을 알려 줍니다. 공개용 키 또는 클라이언트 키는 페이지에 두도록 설계된 것입니다. 결제사의 공개 가능 키, 애널리틱스 측정 ID, 자기 도메인으로 제한한 지도 키가 그렇습니다. 이들은 설계상 공개되며 공급자 쪽에서 권한이 울타리 안에 있으므로, 프런트엔드 코드에 두는 것이 위험이 아니라 올바른 선택입니다. 시크릿 키는 완전히 다른 것입니다. 보통 계정의 권한을 그대로 갖기 때문에 카드에 청구하고, 고객 기록을 읽고, 당신 이름으로 메일을 보내고, API 예산을 소진할 수 있습니다. 그것을 페이지를 연 누구에게나 넘기는 것이 진짜 실수이며, "이 주소는 아직 아무도 모른다"는 방어가 되지 못합니다. 갓 게시된 사이트와 공개 저장소를 끊임없이 훑으며 바로 이것을 찾는 스캐너가 있기 때문입니다.

이미 게시되었다면, 정리보다 교체를 먼저

그 줄을 지우고 다시 게시하고 싶은 충동이 듭니다. 먼저 해야 할 일은 다른 것입니다. 게시를 내려도 이미 전송된 것은 회수되지 않습니다. 이전 버전은 CDN 엣지 캐시, 검색엔진 캐시, 아카이브 서비스, 방문자의 브라우저에 남을 수 있습니다. 페이지가 저장소에 있다면 키는 커밋 이력에 남고, 이후 커밋에서 줄을 지워도 앞선 커밋은 완벽히 읽히는 상태로 남습니다. 노출을 실제로 끝내는 유일한 조치는 공급자에서 자격 증명을 무효화하는 것입니다. 키를 확인하는 곳은 공급자 한 곳뿐이기 때문입니다.

키 교체가 실제로 뜻하는 것
  • 이전 키를 폐기하거나 갱신해 더는 동작하지 않게 한다 — 옆에 두 번째 키를 만드는 것만으로는 아무것도 달라지지 않습니다.
  • 대체 키를 발급해 페이지가 읽을 수 없는 곳에 둔다. 실무에서는 서버 측 설정을 뜻합니다.
  • 노출 구간 전체에 대해 공급자의 사용 기록이나 감사 로그를 읽고, 자신이 하지 않은 호출을 찾는다.
  • 그 키로 금전을 움직이거나 고객 기록에 닿을 수 있었다면, 알 수 없는 청구가 있는지 확인하고 공급자의 규정과 자신의 의무에 따라 영향을 받은 사람에게 알린다.
  • 그다음에 페이지를 고친다 — 그리고 편집기를 믿지 말고 게시된 페이지를 내려받아 응답 안에서 이전 값을 검색해 확인한다.

키가 대신 있어야 할 곳, 그리고 게시된 페이지에서 발견한 것

제대로 작동하는 형태는 페이지가 비밀을 전혀 갖지 않는 것입니다. 페이지는 당신이 통제하는 무언가를 호출하고, 그쪽이 키를 보관하며 외부 호출을 수행하고, 방문자의 브라우저는 당신과만 통신합니다. 그것을 직접 운영해야 하는 경우는 많지 않습니다. 공급자가 호스팅하는 위젯이나 관리형 백엔드 서비스가 이 용도의 서버 역할을 합니다. 그 이상이 필요한지는 별개의 질문이며, 내 웹사이트에 백엔드가 필요한가가 실제 경계를 다룹니다.

직접 호스팅을 운영하면서 이 점에 대해 직관과 어긋나는 것을 배웠습니다. AgentCeres — agentceres.com의 AI Growth Officer — 는 에이전트가 고객을 위해 만든 페이지를 호스팅하며, 그 모든 페이지는 페이지에서 나가는 어떤 네트워크 요청도 막는 콘텐츠 보안 정책과 함께 제공됩니다. 그런 페이지에 박힌 키는 그 페이지에서 사용조차 할 수 없습니다. 코드는 실행되고 계산하고 이동할 수 있지만, 무엇도 보낼 곳이 없습니다. 이 차단은 방문자를 페이지로부터 보호합니다. 그리고 방문자로부터 키를 숨기는 데는 전혀 도움이 되지 않습니다. 사람들이 공짜로 따라온다고 여기는 쪽이 바로 이 절반입니다.

2026-09-17에 고객이 게시한 페이지들을 살펴보다가, JavaScript가 결제사의 살아 있는 시크릿 키를 변수에 할당한 페이지를 발견했습니다. 같은 파일 아래쪽에는 고객의 신분증 번호가 직접 적힌 조회 함수도 있었습니다. 둘 다 추론이 아니라 게시된 페이지를 내려받아 확인했습니다. 특별한 일은 없었습니다. 소유자가 그 키를 필요로 하는 기능을 요청하면서 채팅에 키를 붙여 넣었고, 그것이 페이지에 쓰였을 뿐입니다. 거기서 나온 규칙이 가져갈 만한 것입니다 — 당신의 페이지를 작성하는 대상에게는, 코딩 도우미를 포함해, 살아 있는 비밀 값을 절대 채팅에 붙여 넣지 마십시오. 그쪽에게 자연스러운 행동은 코드가 있는 자리에서 그 키를 쓰는 것입니다.

같은 점검에서 반대 방향의 유출도 발견했습니다. 거의 아무도 확인하지 않으므로 알아 둘 가치가 있습니다. 생성된 페이지는 누군가 회원 영역을 요청하면 로그인과 가입 양식을 포함합니다. 뒤에서 인증해 줄 서버가 없는 경우에도 그렇고, 그런 페이지의 모든 양식은 양식 수신처로 연결됩니다. 그래서 거기에 비밀번호를 입력한 방문자는 그것이 평문으로 저장되고 전달되었습니다. 2026년 9월의 두 사례에서는 제3자의 실제 이메일과 비밀번호가 포함되어, 소유자의 받은 편지함에 평범한 문의처럼 도착했습니다. 이제는 자격 증명처럼 보이는 필드 이름을 인식해 무엇도 저장·발송·표시되기 전에 그 값을 제거하며, 새로 게시되는 페이지는 애초에 그 필드를 제출할 수 없게 만듭니다. 누가 페이지를 만들었든 일반적인 교훈은 같습니다. 페이지는 양방향으로 새어 나갈 수 있습니다. 당신의 키는 밖으로, 방문자의 비밀번호는 안으로.

자주 묻는 질문

공개용 API 키를 웹사이트에 넣는 것은 안전한가요?
안전합니다 — 그러라고 있는 키이고, 그것을 필요로 하는 프런트엔드 기능에는 다른 선택지가 없습니다. 단지 허용된 정도가 아니라 안전하다고 말할 수 있는 이유는 두 가지입니다. 공급자가 그 키 종류로 할 수 있는 일을 제한하고, 공급자가 제공하는 제한 — 보통 키가 응답할 도메인 목록 — 을 당신이 적용하는 것입니다. 제한을 걸지 않아도 공개용 키가 계정을 위험에 빠뜨리지는 않지만, 남의 사이트에서 사용되고 비용이 당신에게 청구될 수 있습니다.
환경 변수에 넣으면 비밀로 유지할 수 있나요?
그 값을 읽는 코드가 서버에서 실행될 때만 그렇습니다. 이것이 가장 흔한 오해입니다. 프런트엔드 빌드 도구는 공개 접두사가 붙은 환경 변수 — NEXT_PUBLIC_, VITE_, REACT_APP_ 및 그 동등물 — 를 빌드 시점에 번들 안으로 의도적으로 삽입합니다. 변수는 프로젝트 설정 안에서는 비공개이지만 값은 당신이 제공하는 JavaScript에 구워져 들어가므로, 결국 거기에 직접 타이핑한 것과 똑같이 페이지에 들어갑니다.
키가 노출되었지만 공급자에는 예상 밖 사용이 보이지 않습니다. 그래도 교체해야 하나요?
해야 합니다. 조용한 로그가 알려 주는 것은 아직 아무도 쓰지 않았다는 사실이지, 아무도 갖고 있지 않다는 사실이 아닙니다. 자동 스캐너는 무언가에 쓰기 훨씬 전에 키를 수집하는 것이 보통입니다. 교체에는 지금 몇 분이 들고, 대안은 지켜보는 것으로는 닫을 수 없는 기한 없는 위험입니다. 깨끗한 로그는 과거에 대한 좋은 소식으로 받아들이고, 미래에 대한 결정으로 삼지는 마십시오.
관련 질문
웹사이트에 백엔드가 필요할까요?웹사이트를 만들 때 AI를 써야 할까요?왜 구글이 내 React 사이트를 색인하지 않을까바이브 코딩으로 만든 앱을 마케팅하는 가장 좋은 방법은 무엇인가요?

이 일을 대신 맡기고 싶다면?

AgentCeres는 관리형 AI 마케팅 팀입니다. 전문 에이전트가 초안을 작성하고, 무엇을 내보낼지는 직접 승인합니다. 14일 무료 체험, $39/월부터.

무료 체험 시작다른 답변 보기