Spring Boot 민감정보 관리GitHub 보안 설정환경변수 설정 Best Practiceapplication.properties 보안 관리gitignore 민감정보 관리

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

KUKJIN LEE
KUKJIN LEE
2025년 3월 27일
576

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으로 관리하지 않게 되어 협업이 불편할 수 있다는 점에 주의해야 합니다.

관련 글

[SQL 입문] 필요한 데이터만 콕 집어 가져올 수 있는 WHERE 절

사용자는 테이블에 있는 모든 데이터를 다 보고 싶어 하지는 않습니다. 오히려 특정 항목에 대한 데이터만 가져오고 싶을 때가 훨씬 많습니다. 예를 들어, 어떤 사용자의 이메일이나 ID는 알고 있는데, 그 사람이 언제 우리 앱에 가입했는지 확인하고 싶다고 가정해 봅시다...

2026년 1월 27일10

SQL에서 SELECT란 무엇인가?

데이터베이스를 거대한 서류 보관함이라고 생각하면 됩니다. 보관함 안에는 수많은 데이터가 차곡차곡 쌓입니다. SELECT는 이 보관함에서 "내가 원하는 정보를 찾아줘!"라고 요청하는 명령어입니다. 이 과정을 전문 용어로 '쿼리(Query)'라고 부릅니다. &nbs...

2026년 1월 26일10

[SQL 기초] "언제 하나씩 다 넣어?" 데이터 한 번에 넣기

개발을 하다 보면 데이터베이스(DB)에 샘플 데이터를 대량으로 넣어야 할 때가 있습니다. 메뉴 100개를 추가해야 하는데 INSERT 문을 100번 쓰고 있다면? 너무 비효율적이죠! 오늘은 SQL에서 여러 데이터를 한 번에 넣는 '다중 삽입(Multiple Inse...

2026년 1월 21일13

SQL 데이터 삽입하기

데이터가 없는 데이터베이스는 연료 없는 로켓과 같습니다. 이제 'Missions' 테이블에 새로운 행(row)을 추가하는 방법을 알아보겠습니다. "삽입(Inserting)"은 '데이터 추가'를 의미합니다. 기존 Missions 테이블 ...

2026년 1월 20일12