순간을 성실히, 화려함보단 꾸준함을

jvm 시스템 파라미터를 사용하여 배포환경에 따른 active 구분 본문

나의 개발 메모장

jvm 시스템 파라미터를 사용하여 배포환경에 따른 active 구분

폭발토끼 2023. 5. 6. 18:17

안녕하세요!!
글또 6번째 글을 써보도록 합시다아아아!!!!!!!!!!!!!!!!!!!!!!!!

 

오늘의 글의 주제는!!!! application.yml 파일에서 profile 을 적용하여 배포환경을 구분지어 주는 방법을 포스팅해보려고 합니다.


물론 우리가 실무에서는 보통 개발서버와 운영서버가 구분되어 있고 당연히 개발서버에서는 개발DB, 운영서버에는 운영DB 정보가 활성화되어야겠죠?

그러나 한 서버에 port 로 구분하여 같은 서비스를 개발,운영 환경으로 구별해야 할때는 어떻게 해야될까요?

 

지금까지 저는 매번 개발, 운영 config 파일을 각각 주석처리하면서 사용해 왔습니다.
그러나 너무 귀찮고 개발에 배포해야되는데 운영config 파일을 활성화 시키는 실수를 유발하더라구요.

그래서 방법이 분명히 있을 거라고 생각되어 서치를 해보았고 profile 에 따른 jar 파일 활성화 할 수 있는 방법이 있었습니다.


-Dspring.profile.active 옵션을 통해 config 파일을 활성화 시킬 수 있었습니다.

 

이를 jvm system argument(parameter) 라고 하더라구요.

(계정정보와 ip 는 가려놨습니다)

 

이렇게 yaml 파일의 문법 중 하나인 구분자('---') 를 이용하여 개발과 운영 환경변수들을 구분하여 정의해놓았습니다.

이 프로젝트를 .jar 파일로 생성한 뒤에 실행만 시켜주면 됩니다.

 

각각 명령어는 아래와 같습니다.

 

개발 : java -jar -Dspring.profile.active=develop jar파일명.jar
운영 : java -jar -Dspring.profile.active=product jar파일명.jar

기존에는 개발.jar, 운영.jar 이렇게 2개를 서버에 배포하였지만 이제는 그럴필요가 없어졌습니다.
(박수!!!!!)

 

추가로 jvm argument 가 무엇일까요???

 

jvm argument 는 자바 프로그램의 성능, 동작 방식, 메모리 사용 등을 조절하는 데 사용되는 옵션입니다.
일반적으로 -D-X 와 같은 문자로 시작하는데 -D 는 시스템 프로퍼티를 설정, -X 는 jvm 동작방식과 관련된 옵션을 설정할때 사용됩니다.

 

예를 들어 -Djipdol2=jipdol2은 jipdol2 라는 system property 값을 정의하는 것이 되고, -Xmx 는 jvm 내에 사용되는 최대 Heap 메모리 크기를 설정하는 옵션입니다.

인텔리제이에서 (Run) - (edit Configurations) 를 선택하면 위와 같은 창이 뜰겁니다.


여기서 (Modify options) 를 선택하여 (Add Jvm options) 를 선택하면 프로퍼티값을 추가할 수 있습니다.

-Djipdol2=jipdol2 라고 정의하여 jipdol2 라는 프로퍼티를 정의하였습니다.

System.getProperty() 메소드를 사용하여 프로퍼티값을 추출할 수 있습니다.

추가적인 내용은 https://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html#BABDJJFI 이 링크에 들어가시면 확인하실 수 있습니다.


사실 기본적인 스프링 부트를 공부하면 당연히 알고 있어야 하는 내용이어야 될 것 같습니다.
그러나 최근에 정말 많은 생각이 드는 것이 공부를 위한 공부가 아니라 필요한 공부를 하기 위한 학습을 해야되는게 올바른 태도가 아닌가 하는 싶습니다.

 

무슨 뜻이냐면 단순히 스프링을 잘 알기 위한 학습이 아니라 내가 어떤 문제를 직면했을때 해결하기 위해 스프링을 공부하는 자세가 요구되어지는게 맞지 않나 하는 생각입니다.

 

물론 지극히 개인적인 생각이지만 최근에 일을하고 스터디를 진행하면서 내가 왜 개발일을 하려고 마음을 먹었는지 고민이 정말 많이 되더라구요. 단순히 기술적으로만 뛰어나면 성장하는 개발자가 되는 줄 알았지만 그렇지 않다는걸 깨달았고 필요한 개발을 하는 것이 더 중요하더라구요 ㅎㅎ

 

그렇다고 학습을 게을리 하지 않겠다는 이야기는 아닙니다.


다만 이것저것 찍먹하는 방식이 아니라 일을 하기 위한 필요한 기술을 진득하게 공부하도록 노력해야겠습니다.

감사합니다!!!!