오늘 배운 것
- application.properties 분리
appcliation.properties란?
Spring Framework 프로젝트에서 사용되는 설정 파일이다.
이 파일을 통해 애플리케이션의 다양한 설정을 정의할 수 있다.
데이터베이스 연결 정보, 서버 포트, 로깅 설정 등 다양한 환경 설정을 application.properties 파일에서 관리한다.
파일의 내용은 일반적으로 키-값 쌍으로 이루어져 있다.
src/main/resources 디렉토리에 위치한 아래와 같은 파일이 application.properties이다.
# 서버 포트 설정
server.port=8080
# 데이터베이스 URL 설정
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
# 데이터베이스 사용자명
spring.datasource.username=root
# 데이터베이스 비밀번호
spring.datasource.password=secret
분리 이유
이전 프로젝트에서 이메일 인증 구현할 때 application.properties에 이메일 발송에 필요한 앱 비밀번호를 아무 생각 없이 작성한 적이 있다.
다양한 강의, 프로젝트에서 비밀번호 같은 것들을 그냥 application.properties에 작성하여서 문제가 없을 것이라고 생각했다.
그런데 바로 한 통의 메일이 도착한다.
이런 메일이 도착하니 뭔가 큰일이 날 것 같았다.
그래서 황급히 앱 비밀번호를 수정하고 application.properties에 1234 이런 값을 넣어 놨다.
그런데 이제 다른 팀원들이 이메일 인증 테스트를 하거나 어플리케이션을 실행하려면 늘 비밀번호를 알려주고 복사하고 붙여넣고 이런 반복적인 일을 진행해야 했다.
이런 반복적인 일을 피하기 위해 어떻게 해야 하는지 알아 보았다.
바로 application.properties를 분리하는 것이다.
application.properties 분리 방법
1. 기본 application.properties 파일 작성
민감한 정보를 제외한 기본 application.properties를 먼저 작성한다.
# application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
2. 민감한 정보를 포함한 application-(이름).properties 파일 작성
민감한 정보를 담은 application-db.properties 파일을 작성한다.
(이름) 부분에 원하는 것을 작성하면 된다.
저는 db 비밀번호를 담은 파일을 작성해 application.db.properties라고 했다.
# application-db.properties
spring.datasource.password=mysecretpassword
3. application.properties에 민감한 정보 포함한 properties 파일 연결
application.properties에 민감한 정보를 포함한 application-db.properties 파일을 연결해줘야 한다.
spring.profiles.include=(이름)
이 코드를 추가해주면 된다.
# application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
# application-db.properties 연결
spring.profiles.include=db
여러 properties 파일을 연결하려면 아래와 같이 추가하면 된다.
spring.profiles.include=(이름1), (이름2), (이름3)
4. .gitignore 파일 작성
민감한 정보가 들어간 application-db.properties 파일을 github에 올리면 안되기 때문에 .gitignore에 추가해줘야 한다.
그냥 .gitignore 파일에 application-(이름).properties 작성하면 된다.
가장 마지막 줄에 추가했다.
HELP.md
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
out/
!**/src/main/**/out/
!**/src/test/**/out/
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
### VS Code ###
.vscode/
### .properties file ###
application-db.properties
마무리
이렇게하고 팀원들에게 appcliation-db.properties 파일만 전달하면 번거로움 없이 프로젝트를 진행할 수 있다.
이렇게 하면 민감한 정보를 github에 올리지 않고 프로젝트를 진행할 수 있다.
또한 민감한 정보뿐만 아니라 설정들을 각각의 파일에 나눠 놓는다면 추후에 유지보수(각 설정 파일에 추가 및 변경) 할 때에도 용이하다.
꼭 팀 프로젝트를 진행할 때 한번 적용해보길 바란다.
잘 정리된 블로그
[SpringBoot] application.properties에서 DB 정보 등 민감한 내용 분리하기
application.properties의 정보들을 분리하여 관리하는 방법에 대해 설명한 글입니다. application.properties란 spring.jpa.defer-datasource-initialization=true spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.use
hulrud.tistory.com
'TIL' 카테고리의 다른 글
24.08.05 TIL - Java 람다 기초 (0) | 2024.08.06 |
---|---|
24.08.04 TIL - 윈도우 스프링 프로젝트 AWS 초 간단 배포 (0) | 2024.08.05 |
24.08.03 TIL - Effective Java Item 55 (0) | 2024.08.04 |
24.08.01 TIL - 에라토스테네스의 체 (1) | 2024.08.02 |
24.07.31 TIL - @Scheduled 관련 (1) | 2024.07.31 |