팀 프로젝트를 진행하게 되면 Github, Bitbucket과 같은 형상 관리 툴을 사용해야한다.
이때 프로젝트에 사용된 DB 주소나 Password, API Key 등의 민감 정보가 업로드 되지않도록 주의해야한다.
아래와 같이 민감 정보를 감추는 다양한 방법들이 존재하는데, 이번 포스팅에서는 환경 변수를 사용하는 방법에 대해 살펴보겠다.
- 환경 변수 사용
- .gitignore를 이용해 민감 정보가 담긴 파일 따로 관리
- Jasypt를 이용한 설정 파일 속성 값 암호화
- Vault, spring cloud config와 같은 중앙화된 민감 정보 저장소 활용
application.yml 파일에 환경 변수 적용하는 방법
달러 기호와 중괄호를 이용해서 환경 변수를 적용할 수 있으며, spring 파일에서는 @Value를 통해서 env 값을 가져올 수 있다.
spring:
datasource:
url: ${DATABASE_URL}
@Component
public class DatabaseConfig {
@Value("${DB_URL}")
private String dbUrl;
}
빌드 시 환경 변수 적용
빌드 툴에 상관 없이 -D 옵션으로 환경 변수명과 '='을 통해 값을 넣어주면 된다.
이렇게 해서 생성된 파일은 "java -jar example.jar" 로 실행하면 된다. 이때 빌드를 그냥하고 jar 실행 시 환경 변수를 전달해도 무관하다.
하지만 build 시 환경 변수가 없으면 테스트 코드에서 실패할 수 있기 때문에 build 타임에 주는 것이 좋다.
./gradlew build -DDatabase_URL=실제 데이터베이스 주소
CICD에서 환경 변수 적용
Jenkins에서는 직접 Jenkins 서버에 들어가서 환경 변수를 적용할 수 있고, Github actions에서는 github에서 제공하는 secrets에 환경 변수를 저장할 수 있다.
jenkins에서는 이전과 마찬가지로 ${}를 사용하지만 Github actions에서는 "${{ secrets.환경변수 }}"와 같이 사용할 수 있다.
env 파일로 환경 변수 적용
env.properties 파일을 생성해서 아래와 같이 작성한 후 propertySource로 env 파일 경로를 지정해서 적용할 수 있다.
env 파일은 ignore 처리해서 공유되지 않도록 해야한다.
application.spring.datasource.url=jdbc:mysql://localhost:3306/noilab?serverTimezone=Asia/Seoul
application.spring.datasource.username=root
application.spring.datasource.password=비밀번호
@Configuration
@PropertySources({
@PropertySource("classpath:env.properties")
})
public class PropertyConfig {
}
AWS EC2에서 환경 변수 설정 방법
- nano .bashrc 명령어 입력
- 오픈된 파일의 제일 하단에 "export 환경변수_이름=값" 입력
- (ctrl + x) + y + Enter를 눌러서 저장
- source .bashrc 명령어를 통해 변경 사항 적용
- echo $환경변수 명령으로 적용됐는지 확인
인텔리제이에서 환경 변수를 적용하는 방법
실제 윈도우나 Mac 환경에서 환경 변수를 설정해도 되지만, 특정 프로젝트에 종속적인 변수를 전역으로 선언할 필요는 없다.
따라서 실행하는 IDE에서 할당해서 사용하는 것이 더 나을 수 있다. 🔗 인텔리제이에서 환경 변수 설정 방법
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!