환경변수

비밀번호나 열쇠 같은 소중한 값을 코드에 적지 않고, 프로그램 바깥에 따로 보관하는 방법이에요. 코드는 어디든 갈 수 있지만, 비밀은 금고에 남아요.

쉽게 말하면

가게 금고 비밀번호를 전단지 뒷면에 인쇄해서 돌리는 사장님은 없죠. 전단지는 아무나 보는 거니까요. 코드도 전단지 같아요. 외주 개발자에게 보여주고, 인터넷 저장소에 올리고, 백업으로 여기저기 복사돼요. 그래서 비밀은 코드에 적지 않고 환경변수라는 금고에 따로 넣고, 코드에는 "금고에서 꺼내 쓰세요"라고만 적어요.

위험한 방법
결제 연결 = "비밀키 sk-3f8a…" (코드에 그대로 적음)

코드가 가는 모든 곳에 비밀키도 같이 가요. 한 곳에서만 새도 끝이에요.

안전한 방법
결제 연결 = 금고의 PAYMENT_KEY (진짜 값은 금고에만)

코드가 새어도 "금고에서 꺼내 써"라는 글자뿐이에요. 진짜 값은 안 새요.

실제로 보게 될 이름들

환경변수는 이름과 값 한 쌍이에요. 이름은 관례상 대문자와 밑줄로 써요. 사장님이 서비스를 운영하다 보면 이런 이름들을 실제로 만나게 돼요.

이름무엇인가새면 어떻게 되나
DATABASE_URL내 데이터베이스(손님 명단·예약 기록)로 들어가는 주소와 열쇠손님 정보가 통째로 유출돼요. 최악이에요
PAYMENT_SECRET_KEY결제사가 준 비밀키. 결제를 만들고 취소할 수 있는 권한남이 내 가게 결제를 주무를 수 있어요
OPENAI_API_KEY 류AI 서비스 이용 열쇠. 쓰는 만큼 내 계정에 요금이 붙어요남이 내 돈으로 AI를 마음껏 써요. 요금 폭탄
ADMIN_PASSWORD관리자 화면 비밀번호남이 내 가게 관리자가 돼요
NEXT_PUBLIC_…이름에 PUBLIC이 붙으면 공개용이에요. 손님 화면까지 내려가요애초에 비밀을 넣으면 안 되는 칸이에요

마지막 줄이 중요해요. PUBLIC이 붙은 칸에는 비밀을 넣으면 안 돼요. 그 칸은 금고가 아니라 진열장이에요. 손님 브라우저까지 그대로 내려가거든요.

왜 목숨 걸고 지키나

비밀키가 새는 사고는 생각보다 빨리, 자동으로 일어나요. 순서는 늘 비슷해요.

  1. 1코드에 키를 적은 채 인터넷 저장소(깃허브 같은 곳)에 올려요. 실수로요.
  2. 2전 세계에서 도는 자동 수집 프로그램이 몇 분 안에 그 키를 찾아내요. 사람이 아니라 기계가 24시간 뒤지고 있어요.
  3. 3찾아낸 키로 내 계정에서 요금이 나가기 시작해요. AI 키면 남의 작업을 내 돈으로 돌리고, 서버 키면 채굴 같은 걸 돌려요.
  4. 4다음 달 청구서를 보고 알아차려요. 이미 수십만 원에서 수천만 원이에요.

겁주려는 얘기가 아니라, 실제로 세상에서 가장 흔한 보안 사고 중 하나예요. 그래서 개발하는 사람들은 "키를 코드에 적지 마라"를 철칙으로 배워요.

사장님이 실제로 겪는 장면

장면 1 · 외주 개발자가 말했다

이 값들은 환경변수로 빼 드릴게요. env 파일은 따로 보내 드릴 테니 절대 카톡방에 올리지 마세요.

이제 해석돼요. 비밀값을 금고로 옮겼고, 금고 내용물(env 파일)은 코드와 따로 전달하겠다는 뜻이에요. 카톡방에 올리지 말라는 건 단체방 기록에 비밀키가 영구히 남기 때문이고요.

장면 2 · 서비스를 다른 곳으로 옮겼더니 화면이 안 뜬다

코드를 내려받아 다른 호스팅으로 이사했는데 "연결할 수 없습니다"만 떠요.

고장이 아니라 금고를 안 옮긴 거예요. 키는 코드에 없으니 같이 안 따라가요. 새 집에서 환경변수를 다시 넣어 주면 바로 살아나요. 이사 갈 때 금고는 손으로 들고 가는 거예요.

키가 샜다면, 순서대로

  1. 1그 키부터 죽여요. 발급받은 곳(결제사·AI 서비스)에 들어가 그 키를 폐기하고 새로 발급받아요. 자물쇠를 통째로 바꾸는 거예요.
  2. 2요금과 기록을 확인해요. 그 키로 뭐가 됐는지, 청구서에 이상한 게 없는지 봐요. 이미 나간 요금은 고객센터에 사고 신고하면 감면되는 경우가 많아요.
  3. 3새 키는 금고에만 넣어요. 같은 실수를 반복하지 않게, 코드 어디에도 안 적혔는지 확인하고 넣어요.

순서가 중요해요

"어디서 샜지?"를 먼저 찾고 싶겠지만, 조사하는 동안에도 요금은 나가요. 일단 키부터 죽이고 그다음에 조사해요. 불나면 원인 조사보다 소화가 먼저인 것처럼요.

자주 묻는 것

Q. 저도 환경변수를 직접 만들어야 하나요?
바이브캠퍼스 안에서는 거의 없어요. 결제사나 백엔드를 연결할 때 키 넣는 칸이 나오는데, 그 칸이 금고 역할을 해요. 바이브캠퍼스가 대신 보관해요.
Q. env 파일이 뭐예요? 개발자가 자꾸 말하던데
환경변수들을 한 장에 적어 둔 파일이에요. 이름 그대로 금고 내용물 목록이라, 이 파일은 절대 남에게 보내거나 인터넷에 올리면 안 돼요.
Q. 그럼 개발자가 env 파일을 달라고 하면 어떻게 보내요?
이메일이나 단체 카톡방 말고, 1대1 보안 채널로요. 보내고 나서 지우는 것도 방법이에요. 더 좋은 건 개발자가 직접 발급받게 하는 거예요.
Q. 코드를 내려받아 다른 곳으로 옮기면요?
키는 같이 안 따라가요. 옮긴 곳에서 다시 넣어야 해요. 번거로워 보여도 그게 안전장치가 작동하고 있다는 뜻이에요.
Q. 연습할 때랑 실제 장사할 때 설정을 다르게 할 수 있나요?
네, 그게 환경변수의 두 번째 쓸모예요. 같은 코드에 금고 값만 바꿔 끼우면 돼요. 연습 모드에서는 결제사가 주는 테스트 키를 넣어서 가짜 결제로 연습하고, 개업할 때 진짜 키로 갈아 끼워요.
Q. 비밀번호 관리 앱에 키를 적어 두는 건요?
좋은 습관이에요. 단 그건 사람이 보관하는 곳이고, 환경변수는 프로그램이 읽는 곳이에요. 둘 다 쓰는 게 정석이에요.

헷갈리기 쉬운 것

환경변수 = 비밀번호? 아니에요. 환경변수는 보관함이고 비밀번호는 내용물 중 하나예요. 금고에는 비밀키 말고도 "지금은 연습 모드" 같은 일반 설정도 넣어요.

화면에서 바꾸는 설정과 뭐가 달라요? 화면 설정은 서비스가 켜진 뒤 사장님이 바꾸는 것이고, 환경변수는 서비스가 켜지기 전에 건네주는 값이에요. 그래서 환경변수를 바꾸면 보통 서비스를 껐다 켜야 반영돼요. 가게로 치면 개업 전에 정하는 임대계약 같은 거예요.

확인해 보세요

외주 개발자가 "결제키는 환경변수로 뺐어요"라고 했어요. 무슨 뜻일까요?

하나 더

이름에 PUBLIC이 붙은 칸에 결제 비밀키를 넣으면?

직접 해보기

연결 센터에서 금고를 구경해 보세요

결제사·백엔드·내 데이터베이스를 연결하는 곳이에요. 키 넣는 칸이 어떻게 생겼는지 눈으로만 봐도 충분해요. 지금 연결 안 해도 돼요.

연결 센터 열기

더 깊이 (안 읽어도 괜찮아요)

이름 규칙 · 대문자와 밑줄(PAYMENT_KEY)로 쓰는 건 법이 아니라 오랜 관례예요. 소문자로 써도 동작하지만, 다들 대문자로 쓰기 때문에 대문자면 "아, 환경변수구나" 하고 알아봐요.

컴퓨터에도 원래 있어요 · 환경변수는 웹서비스 전용이 아니라 모든 컴퓨터에 있는 오래된 장치예요. 예를 들어 PATH라는 환경변수는 "명령어를 어디서 찾을지"를 컴퓨터에게 알려줘요. 개발자 컴퓨터 설정이 꼬였다는 얘기의 절반은 이 PATH 문제예요.

env 파일의 견본 · 개발자들은 진짜 값을 뺀 견본 파일(이름만 적힌 목록)을 코드와 함께 두는 관례가 있어요. 새로 합류한 사람이 "이 금고엔 이런 칸들이 필요하구나"를 알 수 있게요. 견본에는 값이 없으니 공개돼도 안전해요.

이것만 기억하세요

  • ·비밀키는 코드에 적지 않아요. 금고(환경변수)에 넣어요
  • ·PUBLIC이 붙은 칸은 진열장이에요. 비밀 금지
  • ·env 파일은 금고 목록이에요. 카톡방·이메일에 올리지 않아요
  • ·키가 샜다면 조사보다 폐기가 먼저예요
  • ·서비스를 이사하면 금고는 손으로 다시 채워요
VibeCampus새 빌드