파이썬으로 날씨, 버스, 아파트 실거래가 등 다양한 공공데이터를 척척 수집하다 보면 코딩 실력이 늘었다는 뿌듯함이 밀려옵니다. 이 뿌듯한 마음을 안고 내가 만든 멋진 소스코드를 백업하거나 다른 사람에게 자랑하기 위해 깃허브(GitHub) 같은 오픈 소스 저장소에 무심코 올리는 경우가 많습니다.
하지만 이때 정말 많은 초보 개발자가 일생일대의 대참사를 겪곤 합니다. 바로 코드 맨 윗줄에 텍스트로 고스란히 적어둔 내 '공공데이터 인증키(Service Key)'를 지우지 않고 그대로 업로드하는 실수입니다.
"공공데이터는 무료인데 유출돼도 상관없지 않나?"라고 안일하게 생각할 수 있습니다. 하지만 이는 아주 위험한 착각입니다. 악의적인 매크로 프로그램이 내 인증키를 도용해 수백만 건의 트래픽을 유발하면, 내 인증키는 강제로 차단될 뿐만 아니라 공공기관으로부터 경고 메일을 받게 될 수도 있습니다. 만약 이것이 유료 API나 금융, 클라우드(AWS) API였다면 단 몇 시간 만에 수백만 원의 요금 폭탄을 맞기도 합니다. 오늘은 내 소중한 자산인 API 인증키를 소스코드에서 분리해 컴퓨터 깊숙한 곳에 안전하게 숨기는 비밀 금고인 '.env 환경변수' 활용법을 배워보겠습니다.
코드와 비밀번호를 분리하는 '환경변수(Environment Variable)'의 개념
우리가 지금까지 작성한 코드를 보면 serviceKey = "AIzaSy..." 처럼 코드 내부에 비밀키를 직접 글자로 적어두었습니다. 이를 프로그래밍 용어로 '하드코딩(Hardcoding)'이라고 합니다. 하드코딩은 직관적이어서 테스트할 때는 편하지만, 보안과 유지보수 측면에서는 최악의 방식입니다.
보안을 지키는 가장 완벽한 대원칙은 '코드는 모두에게 공개되더라도, 비밀번호는 내 컴퓨터에만 존재하게 만든다'입니다. 이를 가능하게 해주는 것이 바로 환경변수입니다.
운영체제나 내 컴퓨터 시스템 자체에 MY_API_KEY라는 이름의 금고를 만들어 키를 넣어두고, 파이썬 코드가 실행될 때만 시스템 금고를 열어 값을 잠깐 빌려 쓰도록 만드는 방식입니다. 이렇게 하면 코드를 인터넷에 전체 공개해도 비밀번호 칸은 그저 공백이나 변수명으로만 보이기 때문에 해킹 위협으로부터 완전히 안전해집니다.
파이썬 .env 환경변수 설정 및 사용 3단계
파이썬에서 환경변수를 가장 깔끔하고 프로답게 다루는 방법은 외부 라이브러리인 python-dotenv를 활용하는 것입니다.
1단계: 라이브러리 설치 및 파일 생성 컴퓨터 터미널(콘솔) 창에
pip install python-dotenv를 입력해 라이브러리를 설치합니다. 그 후, 파이썬 소스코드 파일(.py)이 있는 같은 폴더에.으로 시작하는.env라는 이름의 파일을 새로 만듭니다. 이름 자체가 확장자이므로 뒤에.txt같은 것이 붙지 않도록 주의해야 합니다.2단계: .env 파일에 비밀키 저장 메모장이나 코드 에디터로
.env파일을 열고 다음과 같이 비밀번호를 적고 저장합니다. 이때 따옴표(")를 쓰지 않고 순수한 글자만 적는 것이 핵심 규칙입니다.PlaintextPUBLIC_DATA_KEY=여러분의_진짜_오픈_API_인증키_입력3단계: 파이썬 코드에서 안전하게 불러오기 이제 소스코드에서는 하드코딩된 인증키를 과감히 지우고, 시스템 금고에서 키를 소환하는 코드를 작성합니다.
import os
import requests
from dotenv import load_workbook, load_dotenv
# .env 파일에 저장된 환경변수를 파이썬 시스템으로 로드합니다.
load_dotenv()
# os.environ.get() 함수를 이용해 금고 안의 key를 안전하게 매칭합니다.
# 이제 이 코드는 인터넷에 노출되어도 키가 유출되지 않습니다.
api_key = os.environ.get("PUBLIC_DATA_KEY")
# API 호출 테스트
url = "http://apis.data.go.kr/example_service"
params = {
'serviceKey': api_key, # 코드가 실행될 때만 메모리상에서 결합됩니다.
'dataType': 'JSON'
}
try:
# 환경변수가 정상적으로 로드되었는지 검증하는 예외 처리구문 추가
if not api_key:
raise ValueError("❌ 환경변수 로드 실패! .env 파일의 변수명을 확인하세요.")
response = requests.get(url, params=params, timeout=10)
print("API 연결 시도 완료 (인증키 보안 적용됨)")
except Exception as e:
print(f"오류: {e}")
깃허브(GitHub) 업로드 시 필수 체크: .gitignore 설정
.env 파일을 만들어서 보안을 적용했다고 끝난 것이 아닙니다. 많은 초보자가 실수하는 마지막 관문이 있습니다. 내 컴퓨터 안에서 .env 파일을 만들어두고, 신나서 폴더 전체를 깃허브에 올릴 때 .env 파일까지 같이 업로드해 버리는 경우입니다.
이러면 환경변수를 굳이 분리한 의미가 통째로 사라집니다. 이를 막기 위해 깃허브에게 "이 파일은 절대 인터넷에 올리지 말고 무시해줘"라고 명시하는 목록 문서가 필요합니다. 그것이 바로 .gitignore 파일입니다.
.env 파일과 마찬가지로 같은 폴더에 .gitignore라는 텍스트 파일을 만들고, 파일 내부에 단 한 줄 .env 라고 적어두기만 하면 됩니다. 깃(Git) 프로그램은 이 목록을 읽고 .env 파일은 업로드 대상에서 영구히 제외해 줍니다.
프로그램의 기능 개발보다 보안 장치를 먼저 구축하는 습관이 몸에 배어야, 훗날 더 큰 금융 데이터나 유료 API 기반의 자동화 비즈니스를 구축할 때 대형 사고를 예방하는 일류 개발자로 성장할 수 있습니다.
핵심 요약
API 인증키를 소스코드에 글자로 직접 적어두는 하드코딩 방식은 해킹 및 도용의 위험이 매우 높습니다.
python-dotenv라이브러리를 활용해 별도의.env파일에 비밀키를 관리하면 소스코드와 비밀번호를 완전히 분리할 수 있습니다.코드를 외부 저장소(GitHub 등)에 공유할 때는
.gitignore파일에.env를 등록하여 비밀번호 파일이 인터넷에 업로드되는 것을 원천 차단해야 합니다.
0 댓글