-
[Spring] Springboot Properties 설정파일을 외부에서 가져오자백엔드/Spring 2022. 8. 11. 02:49
🚀 들어가며
- 보통 개인 프로젝트에서 properties나 yml 파일을 프로젝트 내부에서 관리한다.
- 이때 로컬 개발기와 개발기 그리고 운영기의 설정파일의 정보가 다르다.
- 그렇다고 개발기 설정파일, 운영기 설정파일을 Github에 올리면 안되기 때문에, 제거를 해줘야한다.
- 이를 위해서 착안하여, 프로젝트 외부의 경로에서 설정파일을 가져오는 방식이다.
- 오픈소스로 Maven Central Repository 등록을 완료하였다.
- 목표는 OS 별로 경로를 설정할 수도 있고, 추후에는 외부 서버에 있는 설정파일을 읽어들이기 위함에 있다.
🔗 Github Repo
https://github.com/rojae/load-prop
📑 사용법
1. pom.xml 추가
사용법은 Maven Repository에 등록했기 때문에 pom.xml을 수정하여 사용이 가능하다.
(+ 위 Github 소스를 jar packing해서 maven central repository를 거치지 않을 수도 있다)
<dependency> <groupId>io.github.rojae</groupId> <artifactId>load-prop</artifactId> <version>0.1.0</version> </dependency>
2. application.properties 추가
서버에서 아래 설정을 추가만 해주면 된다.
이때 설정파일 경로에 위치한 모든 설정 파일들을 로딩한다.
만일 디렉토리 내부에 디렉토리가 있다면, 내부에 있는 하위 디렉토리를 탐색한다.
# Properties Loader prop.load.active=enable | disable # 외부 설정파일 로딩 - 활성화, 비활성화 prop.load.console=enable | disable # 콘솔 로그 - 활성화, 비활성화 prop.load.path={resource absolute path} # 외부 설정파일 로딩 - 절대경로
3. 서버 기동 그리고 테스트
절대경로로 입력한 설정파일이 기동될때 읽어진다.
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.7.2) 2022-08-10 01:54:57.302 INFO 36215 --- [ main] com.example.demo.DemoApplication : Starting DemoApplication using Java 11.0.9.1 on rojaeui-MacBookPro.local with PID 36215 (/Users/rojae/Documents/workbook/test2/target/classes started by rojae in /Users/rojae/Documents/workbook/test2) 2022-08-10 01:54:57.306 INFO 36215 --- [ main] com.example.demo.DemoApplication : No active profile set, falling back to 1 default profile: "default" 2022-08-10 01:54:58.040 INFO 36215 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2022-08-10 01:54:58.048 INFO 36215 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2022-08-10 01:54:58.048 INFO 36215 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.65] 2022-08-10 01:54:58.116 INFO 36215 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2022-08-10 01:54:58.116 INFO 36215 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 755 ms [2022-08-10 01:54:58] [정보 ] ---------------------------------------------------------- [2022-08-10 01:54:58] [정보 ] Properties File = /Users/rojae/Desktop/prop/config.properties [2022-08-10 01:54:58] [정보 ] ---------------------------------------------------------- [2022-08-10 01:54:58] [정보 ] config.password=password [2022-08-10 01:54:58] [정보 ] config.url=localhost [2022-08-10 01:54:58] [정보 ] config.user=rojae [2022-08-10 01:54:58] [정보 ] ---------------------------------------------------------- [2022-08-10 01:54:58] [정보 ] Properties File = /Users/rojae/Desktop/prop/api/api.properties [2022-08-10 01:54:58] [정보 ] ---------------------------------------------------------- [2022-08-10 01:54:58] [정보 ] api.delete=https://jsonplaceholder.typicode.com/posts/1 [2022-08-10 01:54:58] [정보 ] api.put=https://jsonplaceholder.typicode.com/posts/1 [2022-08-10 01:54:58] [정보 ] api.post=https://jsonplaceholder.typicode.com/posts [2022-08-10 01:54:58] [정보 ] api.get2=https://jsonplaceholder.typicode.com/comments [2022-08-10 01:54:58] [정보 ] api.get1=https://jsonplaceholder.typicode.com/posts [2022-08-10 01:54:58] [정보 ] api.patch=https://jsonplaceholder.typicode.com/posts/1 2022-08-10 01:54:58.405 INFO 36215 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2022-08-10 01:54:58.421 INFO 36215 --- [ main] com.example.demo.DemoApplication
🙋🏻♂️ 마치면서
- 프로젝트 외부에서 properties 설정파일을 불러오는 기능을 개발하였다. (아직까지는 초라한거 같다)
- 나중에는 SSH로 접속하여 설정파일을 읽는 기능을 추가할 것이다.
- 이런 방식을 진행하게 되면, 설정파일이 외부에 존재하게 되어 형상관리서버 (Github)에 올리지 않는다.
- 즉 잘못 올릴 문제도 없고, 절대경로로 서버에서 가지고 있기 때문에 문제가 생길 가능성도 적다는 것이다.
- Maven Central Repository에 등록했다.
- 어떤 식으로 오픈소스가 개발되는지 알게된 좋은 경험이였다 :)
반응형'백엔드 > Spring' 카테고리의 다른 글
[Spring] Validation 체크를 커스텀 개발해보자 (ConstraintValidator, 초기화에 대한 궁금증) (0) 2022.11.07 [Java] Bean Validation에 대해서 알아보자 (JSR-303, JSR-380, 파라미터 유효성 체크) (0) 2022.11.06 JPA Entity 생성시 Table Character set - UTF8 미설정 이슈 (0) 2022.08.11 [Spring] RestTemplate을 편리하게 사용하자 (샘플 포함) (2) 2022.06.12