Java/Spring Boot에서 민감한 정보를 안전하게 관리하는 방법

KUKJIN LEE • 6일 전 작성
Java의 Spring Boot 프로젝트에서 DB 암호, AWS 액세스 키, API 키 등 민감한 정보를 포함하는 설정 파일(application.properties
또는 application.yml
)을 그대로 GitHub와 같은 공개 저장소에 업로드하는 것은 매우 위험합니다. 민감한 정보가 노출되면 보안 사고의 위험이 매우 커지기 때문입니다.
📌 민감한 정보 관리를 위한 권장 방법(Best Practices)
다음과 같은 방법들이 가장 많이 활용되고 있습니다.
✅ 1. 환경변수(Environment Variable)를 사용
가장 널리 권장되는 방법으로, 민감한 정보는 코드가 아닌 서버 환경변수로 설정합니다. 이렇게 하면 코드에 민감 정보가 절대 노출되지 않아 보안상 매우 유리합니다.
예시
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}
서버 환경에서는 환경 변수를 별도로 설정하여 사용합니다.
장점
-
민감한 정보를 코드에 절대 노출하지 않고 안전하게 관리 가능
-
개발환경, 운영 환경 등 환경에 따라 다른 값을 쉽게 주입 가능
📌 .gitignore
를 활용한 별도의 설정파일 관리
민감한 정보만 별도의 설정파일로 관리한 후, .gitignore
에 추가하여 GitHub에 업로드되지 않도록 하는 방식입니다.
예시 프로젝트 구조
src/main/resources
├── application.properties # 일반 설정 (GitHub 업로드 가능)
└── application-secret.properties # 민감한 정보만 보관 (.gitignore)
.gitignore
설정
application-secret.properties
📌 별도의 application-secret.properties를 사용하지 않는 경우
만약 별도의 비밀 설정 파일(application-secret.properties
)을 사용하지 않고, 모든 민감한 정보를 기본 설정 파일(application.properties
)에 저장한다면, 이 파일 전체를 .gitignore
에 반드시 추가하여 관리합니다.
소규모 프로젝트나 개인 프로젝트에서 간단히 관리하기 편리하지만, 설정 파일 전체를 Git으로 관리하지 않게 되어 협업이 불편할 수 있다는 점에 주의해야 합니다.