🚀 들어가며
- 보통 개인 프로젝트에서 properties나 yml 파일을 프로젝트 내부에서 관리한다.
- 이때 로컬 개발기와 개발기 그리고 운영기의 설정파일의 정보가 다르다.
- 그렇다고 개발기 설정파일, 운영기 설정파일을 Github에 올리면 안되기 때문에, 제거를 해줘야한다.
- 이를 위해서 착안하여, 프로젝트 외부의 경로에서 설정파일을 가져오는 방식이다.
- 오픈소스로 Maven Central Repository 등록을 완료하였다.
- 목표는 OS 별로 경로를 설정할 수도 있고, 추후에는 외부 서버에 있는 설정파일을 읽어들이기 위함에 있다.
🔗 Github Repo
https://github.com/rojae/load-prop
GitHub - rojae/load-prop: Spring Boot Load Properties Module
Spring Boot Load Properties Module. Contribute to rojae/load-prop development by creating an account on GitHub.
github.com
📑 사용법
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 |
댓글