앞선 글에서는 업비트 WebSocket을 연결해 실시간 체결 데이터를 수집했다. 이 과정에서 사용한 시세 정보는 누구나 조회할 수 있는 공개 데이터라서 별도의 인증 정보가 필요하지 않았다. 하지만 보유 자산을 조회하거나 주문을 전송하려면 이야기가 달라진다. 내 업비트 계정에 접근하는 요청이라는 사실을 확인하기 위해 API 키가 필요하다.
이번 글에서는 자동매매 프로그램과 업비트 계정을 연결하기 위한 API 키를 발급받고, 프로젝트에 안전하게 보관한 과정을 정리한다. API 키는 계좌와 연결되는 중요한 정보이므로 발급 자체보다 권한과 보관 방법을 제대로 이해하는 것이 더 중요하다.
API 키는 무엇인가
API(Application Programming Interface)는 프로그램끼리 정해진 방식으로 데이터를 주고받는 통로다. API 키는 요청을 보낸 프로그램의 신원과 허용된 기능을 확인하는 인증 정보다.
발급이 완료되면 Access Key와 Secret Key 두 가지가 만들어진다. Access Key는 어떤 사용자의 요청인지 식별하는 값이고, Secret Key는 해당 요청이 실제 사용자가 만든 요청인지 확인하는 비밀 값이다. 비밀번호와 비슷한 역할을 하므로 두 값 모두 외부에 공개하면 안 된다. 특히 Secret Key는 최초 발급 화면에서만 확인할 수 있어 발급 직후 안전한 곳에 보관해야 한다.
업비트에서 API 키 발급하기
API 키는 업비트 PC 웹사이트에서만 발급할 수 있다. 회원가입과 고객 확인, 2채널 인증을 완료한 뒤 마이페이지의 Open API 관리 화면으로 이동한다.
- 업비트 PC 웹사이트에 로그인한다.
- 마이페이지에서 Open API 관리 메뉴로 이동한다.
- 프로그램에 필요한 기능 권한을 선택한다.
- API를 사용할 컴퓨터의 공인 IP 주소를 등록한다.
- 개인정보 수집 및 이용에 동의하고 2채널 인증을 완료한다.
- 발급된 Access Key와 Secret Key를 안전하게 보관한다.

공인 IP는 인터넷에서 내 컴퓨터를 식별하는 외부 주소다. 공유기 내부의 사설 IP가 아니며 검색 사이트에서 ‘내 IP 주소’를 검색해 확인할 수 있다. 유동 IP는 주소가 바뀌어 인증 오류가 날 수 있으므로 고정 IP가 더 안정적이다.
필요한 권한만 선택하기
API 키를 발급할 때는 사용할 기능을 직접 선택한다. 처음부터 모든 권한을 켜지 않고, 계좌 연결 단계에서는 자산조회와 주문조회처럼 읽기 중심의 권한부터 시작했다. 주문하기 권한은 실제 주문 기능을 개발하고 검증할 때 추가하는 편이 안전하다.
자동매매에 출금 권한은 필요하지 않아 입출금 관련 권한은 선택하지 않았다. 필요한 권한만 허용하면 키가 유출됐을 때 피해 범위를 줄일 수 있다.
키를 소스 코드에 적지 않은 이유
키를 파이썬 파일에 직접 적으면 코드 공유나 백업 과정에서 노출될 수 있다. 이를 막기 위해 프로젝트 최상위 폴더에 별도의 환경변수 파일을 만들어 저장했다. 환경변수 파일은 비밀정보를 소스 코드 밖에서 관리하기 위한 파일이다.
UPBIT_ACCESS_KEY=발급받은_Access_Key
UPBIT_SECRET_KEY=발급받은_Secret_Key
UPBIT_TRADING_ENABLED=false
실제 주문 활성화 설정값은 주문 기능을 켜고 끄기 위해 별도로 둔 안전장치다. 기본값을 비활성화 상태로 두면 API 키가 설정되어 있어도 실수로 주문이 실행되는 것을 한 번 더 막을 수 있다.
Git의 제외 목록에도 환경변수 파일을 등록해 저장소에 올라가지 않도록 했다. Git은 코드 변경 기록을 관리하므로 한 번 기록된 키는 파일을 삭제해도 과거 기록에 남을 수 있다. 노출이 의심되면 업비트에서 기존 키를 즉시 삭제하고 새로 발급해야 한다.
다음 단계
이번 단계에서는 API 키를 발급하고 프로젝트가 안전하게 읽을 수 있는 형태로 준비했다. 아직 자동 주문을 실행하지는 않는다. 다음 글에서는 발급받은 키로 인증 요청을 만들고, 가장 먼저 보유 자산과 주문 가능 금액을 조회해 계정 연결이 정상적으로 동작하는지 확인할 예정이다.
업비트의 발급 정책과 화면은 변경될 수 있으므로 실제 작업 전에는 업비트 개발자센터의 API Key 발급 안내를 함께 확인하는 것이 좋다.
개발일지 이어보기
이전 글: 업비트 자동매매 개발일지 #3 – WebSocket으로 실시간 체결 데이터 수집하기
이 글은 개인적인 개발 과정과 경험을 기록한 글이며, 특정 투자 또는 수익을 권유하거나 보장하지 않습니다.
