본문 바로가기

개발 노트/개발 삽질

makefile에서 .env 사용 시 특수문자 처리하기

728x90
반응형

개요

“.env”와 같은 파일에는 외부 접속 정보나 노출되지 않아야하는 변수들을 정의하곤 한다. 그러나 데이터베이스의 비밀번호를 다루는 경우 특수문자들이 들어가곤하는데 이 정보를 읽어들여 사용할 때 문제가 발생한다.

 

무엇이 문제인가 ?

필자는 주로 파이썬과 관련된 백엔드 프레임워크를 다루면서 makefile을 애용하곤한다. makefile을 통해 프로젝트에서 자주 사용하는 명령어를 등록해서 활용하는 방식이다. 그렇다보니 미리 정의된 환경변수 파일(”.env”)를 읽어들이는 과정이 필요하다.

 

물론 makefile 안에 직접 환경변수를 미리 선언하는 방식으로도 활용할 수 있지만 번거로운 방식이다. makefile에서 “.env” 파일을 사용하는 코드는 다음과 같다.

# makefile
include .env
export $(shell sed 's/=.*//' .env)

위 구문을 makefile 상단에 넣어두면 .env에 정의된 환경변수를 다음과 같은 방식으로 makefile에서 사용할 수 있다.

run.local:
	python manage.py runserver $(LOCAL_IP):$(LOCAL_PORT) --settings=$(LOCAL)

그러나 다음과 같이 .env 에 특수문자가 들어간 경우 makefile에서 이를 환경변수에 로드할 때는 문제가된다.

DB_PASS=abcd$1234!

“$”와 같은 특수문자는 환경변수 로딩 시 Shell에서 해당 문자를 처리하기 떄문에 특수문자를 환경변수에 활용할 경우 의도한 바대로 동작하지 않는 경우가 생길 수 있다.

 

어떻게 해결할 수 있나 ?

“$”에 경우에는 다음과 같은 방식으로 해결할 수 있다. “$”앞에 “$”를 한번더 붙여주는 형식이다.

DB_PASS=abcd$$1234!

“#”의 경우에는 특수문자 앞에 BackSlash를 추가해서 해결할 수 있다.

TEST=e\\#e

어떤 특수문자가 적용되지 않는다면 위와 방법 중 하나를 택해서 사용해보자.

 

마치며

만약 Python 프로젝트에서 dotenv와 같은 라이브러리를 사용 중이라면 다음 글도 읽어보길 권한다.

728x90
반응형