지난 장에서 우리는 개인정보와 보안이 왜 중요한지 살펴보았습니다. 이번 장에서는 바이브 코딩을 하다 보면 자주 마주치는 두 단어를 다룹니다. 바로 API 키와 환경변수입니다.
처음 들으면 갑자기 개발자 세계로 끌려 들어가는 느낌이 들 수 있습니다. 하지만 너무 겁먹을 필요는 없습니다. 핵심만 잡으면 됩니다.
API는 다른 서비스와 연결해주는 통로이고, API 키는 그 통로를 사용할 수 있게 해주는 출입증입니다. 환경변수는 그 출입증을 아무 데나 두지 않고, 금고 안에 따로 보관하는 방식입니다.
이 장의 목표는 API 키를 직접 발급받아 복잡하게 연결하는 개발자가 되는 것이 아닙니다. 적어도 AI 앱 빌더가 "API 키를 입력하세요", "환경변수에 저장하세요"라고 말했을 때, 무엇이 위험하고 무엇을 조심해야 하는지 판단할 수 있게 되는 것입니다.

갑자기 왜 API 키가 나올까
처음 만드는 독서 기록 앱, 할 일 관리 앱, 운동 루틴 기록 앱은 대부분 외부 서비스 없이도 만들 수 있습니다. 입력하고, 저장하고, 목록으로 보여주는 정도라면 앱 안에서 해결할 수 있기 때문입니다.
그런데 앱이 조금 똑똑해지기 시작하면 이야기가 달라집니다.
예를 들어 이런 요청을 했다고 해보겠습니다.
내 독서 기록 앱에 AI 요약 기능을 추가해줘.
책 제목과 메모를 입력하면 AI가 핵심 내용을 3줄로 요약해주면 좋겠어.또는 이런 앱을 만들고 싶을 수도 있습니다.
예약 문의가 들어오면 사장님 이메일로 자동 알림을 보내는 기능을 추가해줘.혹은 소상공인용 예약 앱에 이런 기능을 붙이고 싶을 수도 있습니다.
가게 주소를 입력하면 지도에서 위치를 보여주는 기능을 넣어줘.이 순간부터 앱은 혼자만 일하지 않습니다. 외부의 AI 서비스, 이메일 발송 서비스, 지도 서비스, 결제 서비스 같은 다른 가게와 연결됩니다. 여기서 등장하는 것이 API입니다.
API는 식당 비유로 설명하면, 우리 가게와 다른 가게를 오가며 주문을 전달하는 배달 기사와 비슷합니다. 내 앱이 "이 문장을 요약해줘"라고 요청하면, API가 AI 서비스에 그 요청을 전달합니다. AI 서비스가 결과를 만들면, API가 다시 내 앱으로 가져옵니다.
하지만 아무나 그 배달 기사를 부를 수 있으면 문제가 생깁니다. 누가 요청했는지, 사용 권한이 있는지, 비용은 누구에게 청구해야 하는지 알 수 없기 때문입니다. 그래서 필요한 것이 API 키입니다.
API 키는 서비스 출입증이다
API 키는 외부 서비스를 사용할 수 있게 해주는 비밀 문자열입니다. 보통 영어, 숫자, 특수문자가 길게 섞여 있습니다. 초보자 눈에는 아무 의미 없는 암호처럼 보입니다.
쉽게 말해 API 키는 출입증입니다.
회사 건물에 들어갈 때 출입증을 찍어야 하듯이, 내 앱이 외부 서비스에 요청을 보낼 때는 API 키를 함께 제시해야 합니다. 그러면 외부 서비스는 이렇게 판단합니다.
"아, 이 요청은 등록된 사용자에게서 온 것이구나."
"이 사용자는 이 서비스를 쓸 권한이 있구나."
"사용량은 이 계정에 기록하면 되겠구나."
그래서 API 키는 단순한 글자 조합이 아닙니다. 누군가 내 API 키를 알게 되면, 그 사람이 내 이름표를 달고 서비스를 사용할 수 있습니다. 유료 서비스라면 비용이 내 계정으로 청구될 수도 있고, 사용량 제한이 순식간에 소진될 수도 있습니다.
바이브 코딩에서 중요한 문장은 이것입니다.
API 키는 앱에 필요한 값이지만, 사람들에게 보여주면 안 되는 값입니다.
API 키를 프롬프트에 붙여넣으면 왜 위험할까
초보자가 가장 쉽게 하는 실수는 API 키를 AI에게 그대로 보내는 것입니다.
예를 들어 Google AI Studio에서 키를 발급받았다고 해보겠습니다. 그리고 앱 빌더에게 이렇게 말합니다.
내 API 키는 ABCD-1234-SECRET-KEY야.
이걸 사용해서 AI 요약 기능을 만들어줘.겉으로 보면 편해 보입니다. AI가 알아서 연결해줄 것 같기 때문입니다. 하지만 좋은 습관은 아닙니다.
API 키는 비밀번호처럼 다뤄야 합니다. 프롬프트 창, 공개 GitHub 저장소, 앱 화면, 공유 문서, 스크린샷, 강의 자료에 그대로 들어가면 안 됩니다. 특히 AI 앱 빌더가 만든 코드 안에 키가 직접 적히면, 나중에 배포된 앱 화면이나 파일 안에서 노출될 가능성이 있습니다.
비유하자면 이렇습니다. 가게 운영 매뉴얼을 직원에게 맡기면서 금고 비밀번호를 첫 페이지에 크게 적어두는 것과 같습니다. 처음에는 편할 수 있습니다. 하지만 매뉴얼이 복사되거나, 외부 업체에 전달되거나, 손님이 보는 곳에 놓이면 문제가 커집니다.
API 키가 노출되면 다음과 같은 일이 생길 수 있습니다.
다른 사람이 내 키로 외부 서비스를 사용할 수 있습니다.
유료 서비스의 사용량이나 비용이 내 계정에 쌓일 수 있습니다.
스팸 메일 발송, 무단 AI 호출, 지도 호출 남용처럼 원치 않는 사용이 발생할 수 있습니다.
키를 폐기하고 새로 발급받아 앱 설정을 다시 해야 할 수 있습니다.
그래서 API 키가 필요한 기능을 만들 때는 "키를 어디에 넣을까?"보다 먼저 "이 키가 사용자에게 보이지 않게 관리되고 있는가?"를 물어야 합니다.
환경변수는 금고 비밀번호 보관함이다
이제 환경변수를 설명해보겠습니다.
환경변수는 앱이 실행될 때 참고하는 설정값을 따로 보관하는 방식입니다. 특히 API 키처럼 공개되면 안 되는 값을 코드 안에 직접 쓰지 않고, 별도의 안전한 공간에 저장할 때 자주 사용합니다.
생활 비유로 말하면 환경변수는 금고 비밀번호 보관함입니다.
가게 직원들이 매일 금고를 열어야 한다고 해서, 벽에 금고 비밀번호를 붙여두지는 않습니다. 필요한 사람만 접근할 수 있는 안전한 곳에 따로 보관합니다. 앱도 마찬가지입니다. AI 서비스 API 키, 이메일 발송 서비스 비밀번호, 결제 서비스 비밀키 같은 값은 코드에 직접 적지 않고 환경변수에 넣는 것이 기본입니다.
예를 들어 앱 코드 안에 이렇게 직접 쓰는 것은 좋지 않습니다.
API 키: ABCD-1234-SECRET-KEY대신 앱은 이렇게 말하는 편이 안전합니다.
AI_API_KEY라는 이름의 환경변수에 저장된 값을 사용해줘.여기서 AI_API_KEY는 비밀값 자체가 아닙니다. 비밀값이 들어 있는 서랍의 이름입니다. 앱은 서랍 이름만 알고 있고, 실제 값은 배포 도구나 실행 환경의 설정 공간에 따로 들어 있습니다.
초보자에게 중요한 포인트는 이것입니다.
환경변수는 API 키를 숨기는 마법이 아니라, 코드와 비밀값을 분리해 관리하는 습관입니다.
환경변수에 넣었다고 해서 무조건 안전한 것은 아닙니다. 어디에 저장했는지, 누구에게 접근 권한이 있는지, 앱 화면에 출력하지는 않는지 함께 확인해야 합니다. 하지만 코드나 프롬프트에 직접 붙여넣는 것보다 훨씬 안전한 출발점입니다.
초보자가 알아야 할 세 가지 위치
API 키와 환경변수를 이해할 때는 "이 값이 어디에 있는가?"를 보는 눈이 필요합니다. 복잡한 개발 지식보다 위치 감각이 중요합니다.
첫 번째 위치는 내 계정의 발급 화면입니다. Google AI Studio, 지도 서비스, 이메일 발송 서비스, 결제 서비스 같은 곳에서 API 키를 발급받는 화면입니다. 이곳은 출입증을 만들어주는 곳입니다.
두 번째 위치는 앱 빌더나 배포 도구의 환경변수 설정 화면입니다. Lovable, Replit, Bolt, Vercel, Netlify 같은 도구에서는 프로젝트 설정 안에 비밀값을 넣는 공간이 있을 수 있습니다. 도구마다 이름은 조금씩 다르지만 보통 Environment Variables, Secrets, 환경변수, 비밀값 같은 표현을 씁니다.
세 번째 위치는 앱 코드 또는 프롬프트입니다. 이곳에는 실제 API 키를 직접 넣지 않는 것이 원칙입니다. 대신 "환경변수에서 가져와 사용해줘"라고 요청해야 합니다.
이 관계를 간단히 정리하면 이렇습니다.
외부 서비스에서 API 키 발급
→ 앱 빌더의 환경변수 또는 Secrets에 저장
→ 앱은 환경변수 이름을 통해 키를 사용
→ 화면이나 공개 코드에는 실제 키가 보이지 않게 관리이 흐름만 기억해도 많은 위험을 피할 수 있습니다.
Google AI Studio를 붙일 때의 기본 주의사항
Google AI Studio나 다른 AI 서비스를 앱에 붙이면, 사용자가 입력한 문장을 AI가 처리해 결과를 돌려주는 기능을 만들 수 있습니다. 예를 들어 회의록 요약 앱, 블로그 제목 추천 앱, 강의 후기 요약 앱, 운동 루틴 추천 앱을 만들 수 있습니다.
하지만 AI 기능을 붙이는 순간 주의할 점이 생깁니다.
첫째, API 키를 프롬프트에 그대로 붙여넣지 않는 것이 좋습니다. 앱 빌더에게는 실제 키가 아니라 환경변수 이름을 알려주세요.
Google AI Studio의 API 키를 사용할 예정입니다.
실제 API 키를 코드에 직접 넣지 말고, GOOGLE_AI_API_KEY라는 환경변수에서 읽어오도록 구성해주세요.
사용자가 입력한 텍스트를 AI에 보내고, 결과를 화면에 요약문으로 보여주는 MVP를 만들어주세요.둘째, 사용자가 입력하는 정보가 민감한지 확인해야 합니다. 회의록 요약 앱에 고객 이름, 전화번호, 계약 금액, 내부 전략이 들어간다면 조심해야 합니다. AI 기능은 편리하지만, 모든 정보를 아무 생각 없이 보내도 된다는 뜻은 아닙니다.
셋째, 사용량과 비용을 확인해야 합니다. AI API는 사용량에 따라 제한이 있거나 비용이 발생할 수 있습니다. 초보자 단계에서는 공개 서비스로 크게 열기보다, 테스트용으로 작게 사용해보는 것이 안전합니다.
Google AI Studio 같은 도구를 사용할 때는 "AI가 똑똑하게 답해준다"에만 집중하지 말고, "무엇을 보내고, 어디에 키를 보관하고, 누가 사용할 수 있는가"를 함께 봐야 합니다.
결제 기능은 아직 조심해야 한다
소상공인용 예약 앱이나 강사용 강의 신청 앱을 만들다 보면 결제 기능을 붙이고 싶어질 수 있습니다. 예를 들어 예약금 결제, 강의료 결제, 굿즈 판매, 유료 자료 판매 같은 기능입니다.
결제 기능은 겉으로 보면 버튼 하나처럼 보입니다.
결제하기 버튼을 추가해줘.하지만 실제로는 훨씬 복잡합니다. 결제 서비스와 연결해야 하고, 결제 성공과 실패를 구분해야 하며, 환불, 영수증, 주문 상태, 개인정보, 보안까지 신경 써야 합니다. 결제 API에는 공개해도 되는 키와 절대 공개하면 안 되는 비밀키가 나뉘어 있는 경우도 많습니다.
초보자 단계에서는 결제 기능을 바로 앱 안에 넣기보다, 먼저 외부 결제 링크나 문의 접수 방식으로 시작하는 편이 안전합니다.
예를 들어 첫 버전은 이렇게 만들 수 있습니다.
강의 신청 페이지를 만들어주세요.
첫 버전에서는 앱 안에 결제 기능을 넣지 않습니다.
대신 신청자가 이름, 이메일, 신청 강의를 입력하면 신청 목록에 저장되도록 해주세요.
결제는 별도의 안내 문구로 처리하고, 관리자 확인 후 입금 안내를 보낼 수 있게 해주세요.나중에 실제 결제 API를 붙일 때는 개발자나 해당 결제 서비스의 공식 가이드를 확인하는 것이 좋습니다. 바이브 코딩으로 결제 화면의 초안을 만들 수는 있지만, 돈이 오가는 기능은 "작동한다"만으로 충분하지 않습니다. 안전하게 운영 가능해야 합니다.
지도 기능을 붙일 때의 기본 주의사항
지도 기능은 비교적 익숙해 보입니다. 예약 문의 앱에 가게 위치를 표시하거나, 행사 안내 페이지에 장소를 보여줄 때 유용합니다.
하지만 지도 서비스도 외부 API를 사용하는 경우가 많습니다. 지도 API 키가 필요할 수 있고, 호출량에 따라 제한이나 비용이 생길 수 있습니다. 또한 특정 도메인에서만 키가 작동하도록 제한하는 설정이 있을 수 있습니다.
초보자 단계에서 지도 기능을 넣고 싶다면 처음부터 복잡한 기능을 요구하지 않는 것이 좋습니다. 실시간 길찾기, 주변 매장 검색, 위치 추적까지 한 번에 넣으려 하지 말고, 먼저 주소와 간단한 지도 표시 정도로 시작하세요.
예약 문의 앱에 매장 위치 섹션을 추가해주세요.
첫 버전에서는 사용자의 현재 위치 추적이나 길찾기 기능은 제외합니다.
매장명, 주소, 영업시간을 보여주고, 지도 API 키가 필요한 경우 MAP_API_KEY라는 환경변수에서 읽어오도록 구성해주세요.
API 키가 화면이나 공개 코드에 노출되지 않게 해주세요.지도 기능에서 특히 조심할 부분은 사용자의 위치 정보입니다. 사용자의 현재 위치를 수집하거나 저장하는 앱은 개인정보와 관련될 수 있습니다. 단순히 매장 위치를 보여주는 것과 사용자의 위치를 추적하는 것은 난이도가 완전히 다릅니다.
이메일 발송 기능을 붙일 때의 기본 주의사항
예약 문의 앱, 강의 후기 수집 앱, 고객 상담 앱을 만들다 보면 이메일 알림을 붙이고 싶어집니다.
예를 들어 예약 문의가 들어오면 사장님에게 이메일이 가고, 신청자에게도 접수 완료 메일이 가는 방식입니다. 실제 운영에서는 매우 유용합니다.
하지만 이메일 발송 기능도 외부 서비스와 연결되는 경우가 많습니다. 이메일 발송 API 키, 발신자 주소, 인증 정보가 필요할 수 있습니다. 이 값들이 노출되면 내 계정으로 원치 않는 메일이 발송될 수 있습니다.
처음에는 이메일 자동 발송을 바로 붙이기보다, 관리자 화면에서 문의 목록을 확인하는 MVP부터 만드는 것도 좋은 선택입니다. 자동 발송이 꼭 필요하다면 다음처럼 요청하세요.
예약 문의가 접수되면 관리자에게 이메일 알림을 보내는 기능을 추가해주세요.
이메일 발송 서비스의 API 키는 EMAIL_API_KEY라는 환경변수에서 읽어오도록 해주세요.
발신자 이메일 주소도 환경변수 EMAIL_FROM에 저장된 값을 사용해주세요.
실제 API 키나 비밀번호를 코드에 직접 넣지 말고, 화면에도 표시하지 마세요.
오류가 발생하면 사용자에게는 '문의는 접수되었지만 알림 발송에 실패했습니다'처럼 쉬운 문구를 보여주세요.이 프롬프트에서 중요한 점은 단순히 "이메일 보내줘"라고 하지 않았다는 것입니다. 비밀값의 위치, 화면 노출 방지, 오류 상황의 사용자 문구까지 함께 요청했습니다. 이것이 초보자에게 필요한 보안 감각입니다.
AI 앱 빌더에게 이렇게 요청하자
API 키와 환경변수는 도구마다 설정 방법이 다릅니다. 어떤 도구는 Secrets라고 부르고, 어떤 도구는 Environment Variables라고 부르며, 어떤 도구는 프로젝트 설정 안에 비밀값 입력 칸을 제공합니다.
그래서 특정 버튼 위치를 외우기보다 AI에게 먼저 설명을 요청하는 편이 좋습니다.
이 앱에는 외부 API 키가 필요합니다.
저는 초보자이므로 실제 API 키를 코드나 화면에 노출하고 싶지 않습니다.
이 도구에서 API 키를 환경변수 또는 Secrets로 안전하게 저장하는 방법을 단계별로 안내해주세요.
그리고 앱 코드에서는 실제 키가 아니라 환경변수 이름만 참조하도록 구성해주세요.이미 앱이 만들어진 상태라면 점검 요청을 할 수 있습니다.
현재 앱에서 API 키나 비밀번호 같은 민감한 값이 코드, 화면, 콘솔 로그, 공개 설정에 노출될 가능성이 있는지 점검해주세요.
문제가 있다면 실제 키 값은 보여주지 말고, 어떤 파일이나 설정을 수정해야 하는지 초보자도 이해할 수 있게 설명해주세요.여기서 "실제 키 값은 보여주지 말고"라는 문장이 중요합니다. 보안 점검을 하면서 오히려 비밀값을 다시 화면에 출력하는 일을 막기 위해서입니다.
프롬프트에 API 키를 넣어버렸다면
이미 API 키를 프롬프트에 붙여넣었거나, 코드에 직접 넣은 상태라면 어떻게 해야 할까요? 당황할 필요는 없지만, 가볍게 넘기면 안 됩니다.
먼저 그 키가 어디까지 노출되었는지 확인해야 합니다. 개인 프로젝트 안에서만 사용했는지, 공개 링크나 GitHub에 올라갔는지, 스크린샷으로 공유했는지 살펴봅니다.
그다음 가능한 경우 해당 서비스에서 기존 API 키를 폐기하거나 비활성화하고, 새 키를 발급받는 것이 좋습니다. 비밀번호를 잃어버렸을 때 새로 바꾸는 것과 비슷합니다.
AI 앱 빌더에게는 이렇게 요청할 수 있습니다.
이전에 API 키를 코드에 직접 넣었을 가능성이 있습니다.
보안을 위해 실제 키 값을 코드에서 제거하고, NEW_SERVICE_API_KEY라는 환경변수에서 읽어오도록 수정해주세요.
또한 화면, 로그, 예시 문구에 실제 API 키가 표시되지 않도록 점검해주세요.
제가 해야 할 일도 단계별 체크리스트로 알려주세요.중요한 것은 "숨겨줘"라고만 말하지 않는 것입니다. 코드에서 제거하고, 환경변수로 바꾸고, 화면과 로그까지 점검해달라고 구체적으로 요청해야 합니다.
공개해도 되는 값과 숨겨야 하는 값
초보자가 헷갈리는 부분이 하나 있습니다. 어떤 값은 공개되어도 괜찮고, 어떤 값은 숨겨야 합니다. 모든 설정값이 비밀은 아닙니다.
예를 들어 앱 이름, 회사명, 고객센터 이메일, 공개 지도 주소, 랜딩페이지 문구는 보통 공개되어도 괜찮습니다. 어차피 사용자가 보는 정보이기 때문입니다.
반대로 API 키, 비밀키, 데이터베이스 접속 정보, 이메일 발송 비밀번호, 결제 서비스 시크릿 키는 숨겨야 합니다. 이런 값은 앱이 외부 서비스에 접근할 수 있게 해주는 권한을 담고 있습니다.
헷갈릴 때는 이렇게 질문하면 됩니다.
아래 설정값 목록을 보고, 사용자가 봐도 되는 공개값과 환경변수로 숨겨야 하는 비밀값을 구분해주세요.
각 항목마다 이유를 초보자도 이해할 수 있게 설명해주세요.
목록:
1. 앱 이름
2. 관리자 이메일
3. AI 서비스 API 키
4. 지도에 표시할 매장 주소
5. 이메일 발송 서비스 비밀번호
6. 결제 서비스 secret key
7. 고객센터 전화번호이런 식으로 구분하는 습관을 들이면, 나중에 더 복잡한 앱을 만들 때도 위험한 값을 빠르게 알아차릴 수 있습니다.
API 키가 필요한 기능은 MVP에서 미뤄도 된다
이 책에서 계속 반복한 원칙이 있습니다. 첫 앱은 작을수록 좋습니다. API 키가 필요한 기능도 마찬가지입니다. 처음부터 외부 AI, 지도, 이메일, 결제, 문자 발송을 모두 붙이려고 하면 앱의 난이도가 급격히 올라갑니다.
예를 들어 예약 문의 앱의 첫 버전은 문의 내용을 저장하고 목록으로 보여주기만 해도 충분합니다. 이메일 자동 발송은 두 번째 버전에 붙여도 됩니다. 강의 후기 수집 앱도 처음에는 후기 목록과 별점 통계만 만들고, AI 요약은 나중에 붙이면 됩니다. 운동 루틴 기록 앱도 처음에는 기록과 주간 횟수만 보여주고, AI 코칭 문구는 다음 단계로 미룰 수 있습니다.
API 키가 필요한 기능은 대체로 이런 특징을 가집니다.
외부 서비스 계정이 필요합니다.
사용량 제한이나 비용이 생길 수 있습니다.
비밀값을 안전하게 보관해야 합니다.
오류가 났을 때 원인을 찾기가 조금 더 어렵습니다.
그러니 초보자에게 좋은 판단은 "이 기능이 멋진가?"가 아니라 "첫 버전에 꼭 필요한가?"입니다.
바로 써먹는 프롬프트: API 키 없이 먼저 만들기
외부 기능을 나중으로 미루고 싶다면 이렇게 요청하세요.
이 앱의 첫 버전을 MVP로 만들고 싶습니다.
처음에는 외부 API, API 키, 로그인, 결제, 이메일 자동 발송 기능을 제외해주세요.
대신 사용자가 입력한 내용을 저장하고, 목록으로 보고, 수정하고, 삭제할 수 있는 기본 기능에 집중해주세요.
나중에 API 연동을 추가할 수 있도록 기능 구조는 너무 복잡하지 않게 만들어주세요.이 프롬프트는 특히 첫 앱을 만들 때 유용합니다. "나중에 붙일 수 있게"라는 말은 넣되, 지금 당장 복잡한 연결을 요구하지 않습니다.
바로 써먹는 프롬프트: 환경변수로 바꾸기
이미 API 키를 직접 넣는 방식으로 앱이 만들어졌다면 이렇게 요청하세요.
현재 앱에서 외부 서비스 API 키를 코드에 직접 넣는 방식이 있다면 모두 제거해주세요.
API 키는 SERVICE_API_KEY라는 환경변수에서 읽어오도록 바꿔주세요.
실제 API 키 값은 코드, 화면, 로그, 예시 데이터에 표시하지 마세요.
변경 후 제가 확인해야 할 항목을 체크리스트로 정리해주세요.환경변수 이름은 서비스에 맞게 바꿀 수 있습니다. 예를 들어 Google AI Studio라면 GOOGLE_AI_API_KEY, 이메일 발송이라면 EMAIL_API_KEY, 지도라면 MAP_API_KEY처럼 정하면 이해하기 쉽습니다.
바로 써먹는 프롬프트: 배포 전 비밀값 점검
배포하기 전에는 꼭 한 번 점검하세요.
이 앱을 다른 사람에게 공유하기 전에 보안 점검을 해주세요.
특히 API 키, 환경변수, 비밀번호, 데이터베이스 접속 정보, 결제 관련 secret key가 코드나 화면에 노출되어 있지 않은지 확인해주세요.
초보자인 제가 직접 확인할 수 있도록 '확인 위치', '위험한 상태', '수정 방법'으로 나누어 설명해주세요.이 프롬프트를 사용하면 AI가 막연히 "문제없습니다"라고 답하는 대신, 어디를 봐야 하는지 구조적으로 알려줄 가능성이 높아집니다.
흔한 실수와 고치는 방법
가장 흔한 실수는 API 키를 편하게 쓰려고 프롬프트나 코드에 그대로 붙여넣는 것입니다. 처음에는 앱이 잘 작동하는 것처럼 보이지만, 나중에 공유하거나 배포할 때 위험해질 수 있습니다. 고치는 방법은 실제 키를 제거하고 환경변수로 옮기는 것입니다.
두 번째 실수는 환경변수에 넣기만 하면 끝났다고 생각하는 것입니다. 환경변수에 넣었더라도 앱 화면에 키를 출력하거나, 오류 메시지에 키가 표시되거나, 콘솔 로그에 남기면 여전히 위험합니다. AI에게 화면, 로그, 오류 메시지까지 함께 점검해달라고 요청해야 합니다.
세 번째 실수는 API 키가 필요한 기능을 첫 버전에 너무 많이 넣는 것입니다. AI 요약, 이메일 발송, 지도, 결제, 문자 알림을 한 번에 붙이면 초보자가 문제를 찾기 어렵습니다. 처음에는 핵심 기능만 만들고, 외부 연동은 하나씩 추가하는 편이 좋습니다.
네 번째 실수는 공개용 키와 비밀키를 구분하지 않는 것입니다. 어떤 서비스는 브라우저에서 써도 되는 공개 키와 서버에서만 써야 하는 비밀키를 나눕니다. 이름에 secret, private, server, admin 같은 표현이 들어 있다면 특히 조심해야 합니다. 잘 모르겠다면 AI에게 "이 값이 공개되어도 되는 값인지 판단해줘"라고 먼저 물어보세요.
API 키와 환경변수 체크리스트
외부 서비스를 붙이기 전, 아래 항목을 천천히 확인해보세요.
이 기능이 첫 MVP에 꼭 필요한가?
외부 서비스 계정이 필요한가?
API 키나 secret key가 필요한가?
사용량 제한이나 비용이 발생할 수 있는가?
실제 API 키를 프롬프트에 붙여넣지 않았는가?
API 키를 코드에 직접 적지 않았는가?
API 키를 환경변수나 Secrets에 저장했는가?
앱 화면에 API 키가 표시되지 않는가?
오류 메시지나 로그에 비밀값이 나오지 않는가?
공유 링크나 공개 저장소에 비밀값이 포함되지 않았는가?
필요 없어진 키는 삭제하거나 비활성화할 수 있는가?
결제, 의료, 금융, 민감 개인정보와 관련된 기능은 전문가 검토가 필요한가?
이 체크리스트를 모두 완벽히 이해하지 못해도 괜찮습니다. 중요한 것은 "API 키는 출입증이고, 환경변수는 금고"라는 감각을 갖는 것입니다.
한 장 요약
API는 내 앱과 외부 서비스를 연결해주는 배달 기사와 같습니다. AI 요약, 이메일 발송, 지도 표시, 결제 같은 기능을 붙일 때 자주 등장합니다. API 키는 그 서비스를 사용할 수 있게 해주는 출입증입니다. 그래서 API 키를 프롬프트, 공개 코드, 앱 화면에 그대로 노출하면 위험합니다.
환경변수는 API 키처럼 숨겨야 하는 값을 코드와 분리해 보관하는 방식입니다. 금고 비밀번호를 벽에 붙여두지 않듯이, API 키도 코드 안에 직접 적지 않고 환경변수나 Secrets에 넣어 관리해야 합니다.
Google AI Studio 같은 AI 기능, 결제 기능, 지도 기능, 이메일 발송 기능은 모두 편리하지만 외부 서비스 연결과 비밀값 관리가 필요할 수 있습니다. 초보자 단계에서는 이런 기능을 첫 MVP에서 미루는 것도 좋은 선택입니다.
바이브 코딩은 "AI가 다 알아서 안전하게 해준다"는 뜻이 아닙니다. 내가 원하는 것을 설명하는 능력만큼이나, 무엇을 공개하고 무엇을 숨겨야 하는지 구분하는 감각도 중요합니다. 유명한 도구를 쓰는 것보다 중요한 것은 작은 앱을 안전하게 만들고, 필요한 기능을 하나씩 조심스럽게 붙여가는 태도입니다.
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.
