api_key숨기기
개인적인 회고
정글의 발표가 연기되면서, 나는 그 기간동안 이 불안한 마음들을 어디에 두어야할지 고민이 컸다.
코틀린 아키텍처 등을 공부하며 남들보다 이론 공부가 느리다는 것을 깨달았기에 책을 미리 사두었지만 도무지 잡히지 않았다.
대신 한 줄이라도 코드를 한줄이라도 더 적고 실전에 도움이 되고자(합격하고 마음이 편해지면 다시 이론이 눈에 들어오겠지) 익숙한 메이플api로 작업을 시도하면서 여러가지 실전 연습들을 해보는 중이다.
api 키 숨기기
이전에는 .gitignore
을 통해 단순히 깃에 올리면 안되는 파일들을 추가하는 방식을 주로 사용하였다.
하지만 gpt_api스크랩 사건 이후 api키를 하드코딩하는 것은 굉장히 위험하다는 것을 알게되었고, 그래서 이번에는 api키를 어떻게 관리해야할지에 대해 고민해보기 시작하였다.
통상적인 방법(간단한 방법)
일단 내가 위에서 설명한 방법이 위험하긴 하지만, 단순히 깃허브에 api키가 노출되지만 않으면 되는 정도의 보안이 필요한 프로젝트(학생들의 개인프로젝트나 연습용도)에서는 유용할 것이다.
js에서는 const를 통한 상수 정의로 api키과 내용물을 연결한 뒤 본인의 html파일과 연결을 시켜주는 방법이 있다.
여기에서 유의할 점은 저 const가 정의된 상수 파일은 내가 위에서 언급했다시피 .gitignore
에 꼭 넣어야하며, html파일과 연결한 뒤 api키를 사용행하는 파일에도 상수로 불러와서 사용하는 방식을 써야한다는 것이다.
env사용하기(1번 방법보다는 복잡)
자바 스크립트에도 이러한 기능이 있는지 정확하게 알지는 못하지만, 나의 경우 flask를 사용하였기 때문에 이 방법도 생각해두었다.
.env
에 대해서 설명하자면, 환경변수 파일이라는 것인데 우리가 cmd에서 java
를 치면 내 컴퓨터에 설치된 java라는 환경 변수에 대해서 실행할 수 있는 여러 정보가 나오는 것과 유사하게 작동할 수 있도록 해주는 것이다.
즉 .env
파일은 우리가 만든 웹 애플리케이션이 실행될 때 넘기고 싶은 어떤 중요한 변수들과 그에 대한 정보를 넘겨주는 역할을 해주는 파일이다.
유의사항
설명을 돕기 위하여 시스템 환경 변수인 java
의 예시를 들었으나, env파일은 코드 내에서의 설정 정보가 범위이다.
즉 운영체제 전체가 범위인 시스템 환경 변수와는 차이가 있다.
평소 내가 사용하던 방법
나는 평소 kotlin에서는 sql을 통해 db를 생성하고 그곳에 api키를 넣은 뒤 읽어오는 방식을 주로 사용하였다.
하지만 이번에 내가 개인적으로 하는 프로젝트의 경우 다양한 종류의 api가 쓰인 것이 아니라서, 넥슨의 api키 하나만 필요하였기 때문에 위 방법은 처음부터 배제해두었다.
채택한 방법 및 사용법
나의 경우 위에서도 언급하였듯 하나의 api키가 필요했기 때문에 .git igonre
방식과 함께 .env
를 함께 사용하기로 했다.
미리 말하자면, env
를 사용할 때에는 몇가지 주의 사항이 있기 때문에 사용법을 순차적으로 정석과 같이 하지 않는다면 나처럼 왜 나만 안되지 싶을 수 있다.
설치하기
우선 파이썬에서 .env
파일을 제대로 사용하기 위해서는 pip install
로 env파일을 사용 가능하게 해주는 라이브러리를 설치해주어야한다.
pip install python-dotenv
중요 파일 넣기
이때에도 유의사항이 있는데 바로 최상위 폴더에
.env
파일이 정의되어야 이후에 웹 애플리케이션이 실행되었을 때 제대로 환경변수를 불러올 수 있다는 것이다.
flask의 경우app.py
파일이 있는 곳이 최상위 폴더이니 거기에.env
도 넣으면 된다.env파일 작성하기
이 부분은 꽤 간단한데 그냥
내가 사용할 환경 변수명=내용물
이렇게 작업하면 된다.
굳이 유의점이라고 한다면, 나중에 이 변수명을 불러올 일이 있으니까 필요한 환경변수가 많을 때에는 각각의 환경변수가 어떤 일을 하는지 명확하게 알 수 있도록 이름을 지어주는 것 정도가 있겠다.모듈 import하기
나의 경우
app.py
파일에서 이 키가 필요했기 때문에 그 파일의 import부분에 다음과 같은 내용을 추가해주었다. from dotenv import load_dotenv
import os최상단에서 내용 불러오기
import를 한 파일의 최상단에 env파일을 불러오기 위한 코드인
load_dotenv()
를 추가해준다.
이후에는 os.environ.get(‘환경변수명’)으로 내용을 불러오면 매우 간단하게 사용 가능하다.
댓글남기기