티스토리 뷰

Spring Boot로 애플리케이션을 개발하다보면 데이터베이스 접속정보, AWS accessKey와 secretKey 등 중요한 정보는 application.properties(yml)에 값을 세팅하고 개발하게되는데 이런 정보들이 그대로 노출되면 위험하기 때문에 외부에서 애플리케이션을 실행할 때 넣어주는게 안전하다.

테스트할 코드 작성

해당코드는 application.properties에 secret-key라는 key값에 임의의 값을 세팅하고 Controller에서 @Value 어노테이션으로 해당값을 주입받아서 Get 요청을 보내면 그 값을 리턴한다. 이제 해당 값을 외부에서 주입해보자

Command line arguments

application.properties에 secret-key라는 key값엔 ${secretKey}을 세팅하였다. 여기서 secretKey는 JAVA 애플리케이션 실행 시 전달할 파라미터 이름이다.



JAVA 애플리케이션을 jar로 빌드 후 실행할 때 Command line arguments로 secretKey변수에 KimJongHyun 이라는 값을 세팅하여 실행하였다.



정상적으로 주입된 걸 확인하였다.

동작원리

Spring에는 Environment라는 인터페이스를 제공해주는데 이 인터페이스는 properties파일, yml파일에 정의된 값이나 시스템변수, 환경변수의 값을 조회할 수 있다. 또는 @Value 어노테이션으로도 가져올 수 있는데

만약 똑같은 key값이 여러곳에 정의되어있을 때 어느곳을 더 우선적으로 가져올지 우선순위를 정한다.

 

위에 작성된 테스트코드에서는 application.properties에 정의된 값을 가져왔는데 위 사진에서 9번째 순위에 해당하게 된 것이다.

 

그 다음에는 jar파일을 실행할 때 Command line arguments로 파라미터를 전달하여 실행하였는데 이게 1순위로 가장높다.    

만약 jar파일을 실행 시 Command line arguments로 파라미터가 전달되었을 때 해당 파라미터와 동일한 이름이 정의된 값이 properties 또는 yml에 존재하면 그 값들은 모두 무시된다.

정리

위 JAVA 애플리케이션이 실행될 때 secretKey라는 파라미터가 전달되었고 그 파라미터를 application.properties에서 참조해서 값을 가져오게 된 것이며 application.properties에 안넣고 바로 @Value 어노테이션으로 참조해도 값은 주입된다.

참고

https://docs.spring.io/spring-boot/docs/1.2.3.RELEASE/reference/html/boot-features-external-config.html

728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함