개인 Spring Boot 프로젝트 중 Github에 yml, properties 파일에 있는 중요한 정보(예, 데이터베이스 계정 정보)와 같은 것들은 어떻게 숨겨야하는지 찾아보았고, 저는 환경변수(.env)를 이용해서 정보를 숨기기로 했습니다.
TMI
왜 이 방법을 선택했냐면, 엄청 중요한 이야기는 아니구요...
찾아보니 가장 많이 사용하시는 방법이 Jasypt를 이용한 방법이었습니다. 제 생각엔 이 방법의 단점이 암호화 키를 갖고 있어야 한다는 점인데, 그 암호화 키는 어디다 저장해서 갖고 있어야 할까요? 🧐 ( 어떤 분들은 Github Secrets 에 보관하시더라구요. ) 그리고 자바에 코드를 또 작성해야하구요. 사실 개인 프로젝트라 정보 털려도 괜찮은데 정보 노출되면 깃헙에서는 보안 알림오니...이렇게 까지하긴 귀찮았습니다 🤦♀️
그래서 환경변수에 담기로 했습니다. 이 방법의 단점은 .env를 갖고 있어야 한다는 점일 것 같아요. 파일을 백업 안해서 잃어버리면 절대 찾을 수 없으니 난리나겠죠👀? 그리고 장점은 설정이 간단한 것도 있지만 docker 같은 곳에 배포 때도 쉽게 .env를 사용 가능하다고 하네요.
⚙️ 환경변수로 정보 숨기기
# 설정 방법
1) env 파일 생성
프로젝트 루트에 ".env" 파일을 만들고, 숨길 정보를 입력했습니다.
// .env
MYSQL_USERNAME=계정
MYSQL_PASSWORD=비밀번호
MYSQL_PORT=포트
2) .gitignore 수정
하단에 .env 파일은 github에 올리지 않겠다고 선언합니다.
### env ###
.env
3) application.yml 수정
.env에 선언한 변수 명에 맞게 ${변수명} 형태로 변경해주면 됩니다.
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:${MYSQL_PORT}/file_drive
username: ${MYSQL_USERNAME}
password: ${MYSQL_PASSWORD}
이제 Github에 전체 소스 코드를 올리셔도 환경변수 정보는 같이 배포되지 않습니다.
# 환경변수로 바꾼 후 IntelliJ에서 실행방법
정보를 환경변수에 선언했기 때문에 평소와 같이 IntelliJ에서 실행하면 스프링이 숨겨진 값을 알 수 없기 때문에 실행이 안됩니다. 실행 설정을 변경해야 합니다.
Run/Debug Configurations를 열고, Modify options를 누른 후 Environment variables를 선택해 줍니다.
Environment variables 입력 창에 .env에 선언했던 정보들을 키=값;키=값 형태로 입력하시거나, 우측 버튼을 눌러 표에서 좀더 편하게 입력이 가능합니다.
이제 실행하시면 됩니다!