본문 바로가기
백엔드/Spring

[Spring] Springboot Properties 설정파일을 외부에서 가져오자

by RoJae 2022. 8. 11.

🚀 들어가며

  • 보통 개인 프로젝트에서 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에 등록했다.
  • 어떤 식으로 오픈소스가 개발되는지 알게된 좋은 경험이였다 :)

댓글